Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(455)

Unified Diff: net/tools/quic/quic_server_session_test.cc

Issue 490263003: When talking >=QUIC_VERSION_22, regularly send updated bandwidth (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/tools/quic/quic_server_session.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/tools/quic/quic_server_session_test.cc
diff --git a/net/tools/quic/quic_server_session_test.cc b/net/tools/quic/quic_server_session_test.cc
index 4c75ded8b7f147c542571b83e9ad28701ba58083..6be0e55377c7a5310b243f76ec7c760e85311fa1 100644
--- a/net/tools/quic/quic_server_session_test.cc
+++ b/net/tools/quic/quic_server_session_test.cc
@@ -6,13 +6,17 @@
#include "net/quic/crypto/quic_crypto_server_config.h"
#include "net/quic/crypto/quic_random.h"
+#include "net/quic/crypto/source_address_token.h"
#include "net/quic/quic_connection.h"
+#include "net/quic/quic_crypto_server_stream.h"
#include "net/quic/quic_flags.h"
#include "net/quic/quic_utils.h"
#include "net/quic/test_tools/quic_config_peer.h"
#include "net/quic/test_tools/quic_connection_peer.h"
#include "net/quic/test_tools/quic_data_stream_peer.h"
+#include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
#include "net/quic/test_tools/quic_session_peer.h"
+#include "net/quic/test_tools/quic_sustained_bandwidth_recorder_peer.h"
#include "net/quic/test_tools/quic_test_utils.h"
#include "net/tools/quic/quic_spdy_server_stream.h"
#include "net/tools/quic/test_tools/quic_test_utils.h"
@@ -24,7 +28,9 @@ using net::test::MockConnection;
using net::test::QuicConfigPeer;
using net::test::QuicConnectionPeer;
using net::test::QuicDataStreamPeer;
+using net::test::QuicSentPacketManagerPeer;
using net::test::QuicSessionPeer;
+using net::test::QuicSustainedBandwidthRecorderPeer;
using net::test::SupportedVersions;
using net::test::ValueRestore;
using net::test::kClientDataStreamId1;
@@ -47,6 +53,10 @@ class QuicServerSessionPeer {
static QuicDataStream* GetDataStream(QuicServerSession* s, QuicStreamId id) {
return s->GetDataStream(id);
}
+ static void SetCryptoStream(QuicServerSession* s,
+ QuicCryptoServerStream* crypto_stream) {
+ s->crypto_stream_.reset(crypto_stream);
+ }
};
namespace {
@@ -68,6 +78,10 @@ class QuicServerSessionTest : public ::testing::TestWithParam<QuicVersion> {
connection_ =
new StrictMock<MockConnection>(true, SupportedVersions(GetParam()));
session_.reset(new QuicServerSession(config_, connection_, &owner_));
+ MockClock clock;
+ handshake_message_.reset(crypto_config_.AddDefaultConfig(
+ QuicRandom::GetInstance(), &clock,
+ QuicCryptoServerConfig::ConfigOptions()));
session_->InitializeSession(crypto_config_);
visitor_ = QuicConnectionPeer::GetVisitor(connection_);
}
@@ -79,9 +93,26 @@ class QuicServerSessionTest : public ::testing::TestWithParam<QuicVersion> {
QuicConfig config_;
QuicCryptoServerConfig crypto_config_;
scoped_ptr<QuicServerSession> session_;
+ scoped_ptr<CryptoHandshakeMessage> handshake_message_;
QuicConnectionVisitorInterface* visitor_;
};
+// Compares CachedNetworkParameters.
+MATCHER_P(EqualsProto, network_params, "") {
ramant (doing other things) 2014/08/21 17:02:31 Hi Ryan, Implemented EqualsProto to compare ever
Ryan Hamilton 2014/08/21 22:11:36 As discussed offline, this SGTM.
+ CachedNetworkParameters reference(network_params);
+ return (arg->bandwidth_estimate_bytes_per_second() ==
+ reference.bandwidth_estimate_bytes_per_second() &&
+ arg->bandwidth_estimate_bytes_per_second() ==
+ reference.bandwidth_estimate_bytes_per_second() &&
+ arg->max_bandwidth_estimate_bytes_per_second() ==
+ reference.max_bandwidth_estimate_bytes_per_second() &&
+ arg->max_bandwidth_timestamp_seconds() ==
+ reference.max_bandwidth_timestamp_seconds() &&
+ arg->min_rtt_ms() == reference.min_rtt_ms() &&
+ arg->previous_connection_state() ==
+ reference.previous_connection_state());
+}
+
INSTANTIATE_TEST_CASE_P(Tests, QuicServerSessionTest,
::testing::ValuesIn(QuicSupportedVersions()));
@@ -207,6 +238,86 @@ TEST_P(QuicServerSessionTest, SetFecProtectionFromConfig) {
EXPECT_EQ(FEC_PROTECT_OPTIONAL, stream->fec_policy());
}
+class MockQuicCryptoServerStream : public QuicCryptoServerStream {
+ public:
+ explicit MockQuicCryptoServerStream(
+ const QuicCryptoServerConfig& crypto_config, QuicSession* session)
+ : QuicCryptoServerStream(crypto_config, session) {}
+ virtual ~MockQuicCryptoServerStream() {}
+
+ MOCK_METHOD1(SendServerConfigUpdate,
+ void(const CachedNetworkParameters* cached_network_parameters));
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MockQuicCryptoServerStream);
+};
+
+TEST_P(QuicServerSessionTest, BandwidthEstimates) {
+ if (version() <= QUIC_VERSION_21) {
+ return;
+ }
+ // Test that bandwidth estimate updates are sent to the client, only after the
+ // bandwidth estimate has changes sufficiently, and enough time has passed.
+
+ int32 bandwidth_estimate_kbytes_per_second = 123;
+ int32 max_bandwidth_estimate_kbytes_per_second = 134;
+ int32 max_bandwidth_estimate_timestamp = 1122334455;
+ const string serving_region = "not a real region";
+ session_->set_serving_region(serving_region);
+
+ MockQuicCryptoServerStream* crypto_stream =
+ new MockQuicCryptoServerStream(crypto_config_, session_.get());
+ QuicServerSessionPeer::SetCryptoStream(session_.get(), crypto_stream);
+
+ // Set some initial bandwidth values.
+ QuicSentPacketManager* sent_packet_manager =
+ QuicConnectionPeer::GetSentPacketManager(session_->connection());
+ QuicSustainedBandwidthRecorder& bandwidth_recorder =
+ QuicSentPacketManagerPeer::GetBandwidthRecorder(sent_packet_manager);
+ QuicSustainedBandwidthRecorderPeer::SetBandwidthEstimate(
+ &bandwidth_recorder, bandwidth_estimate_kbytes_per_second);
+ QuicSustainedBandwidthRecorderPeer::SetMaxBandwidthEstimate(
+ &bandwidth_recorder, max_bandwidth_estimate_kbytes_per_second,
+ max_bandwidth_estimate_timestamp);
+
+ // There will be no update sent yet - not enough time has passed.
+ QuicTime now = QuicTime::Zero();
+ session_->OnCongestionWindowChange(now);
+
+ // Bandwidth estimate has now changed sufficiently but not enough time has
+ // passed to send a Server Config Update.
+ bandwidth_estimate_kbytes_per_second =
+ bandwidth_estimate_kbytes_per_second * 1.6;
+ session_->OnCongestionWindowChange(now);
+
+ // Bandwidth estimate has now changed sufficiently and enough time has passed.
+ int64 srtt_ms =
+ sent_packet_manager->GetRttStats()->SmoothedRtt().ToMilliseconds();
+ now = now.Add(QuicTime::Delta::FromMilliseconds(
+ kMinIntervalBetweenServerConfigUpdatesRTTs * srtt_ms));
+
+ // Verify that the proto has exactly the values we expect.
+ CachedNetworkParameters expected_network_params;
+ expected_network_params.set_bandwidth_estimate_bytes_per_second(
+ bandwidth_recorder.BandwidthEstimate().ToBytesPerSecond());
+ expected_network_params.set_max_bandwidth_estimate_bytes_per_second(
+ bandwidth_recorder.MaxBandwidthEstimate().ToBytesPerSecond());
+ expected_network_params.set_max_bandwidth_timestamp_seconds(
+ bandwidth_recorder.MaxBandwidthTimestamp());
+ expected_network_params.set_min_rtt_ms(session_->connection()
+ ->sent_packet_manager()
+ .GetRttStats()
+ ->min_rtt()
+ .ToMilliseconds());
+ expected_network_params.set_previous_connection_state(
+ CachedNetworkParameters::CONGESTION_AVOIDANCE);
+ expected_network_params.set_serving_region(serving_region);
+
+ EXPECT_CALL(*crypto_stream,
+ SendServerConfigUpdate(EqualsProto(expected_network_params)))
+ .Times(1);
+ session_->OnCongestionWindowChange(now);
+}
+
} // namespace
} // namespace test
} // namespace tools
« no previous file with comments | « net/tools/quic/quic_server_session.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698