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

Unified Diff: net/quic/quic_network_transaction_unittest.cc

Issue 1305293004: Notfiy NQE of QUIC RTT (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed sleevi comments Created 5 years, 3 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
Index: net/quic/quic_network_transaction_unittest.cc
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index b0b5de27f0abd90d32b3e42686ec88748e2aa5e0..df7ce99d42739e8884c05fddda71a7c77dbdc88b 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -8,6 +8,8 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/stl_util.h"
+#include "net/base/network_quality_estimator.h"
+#include "net/base/socket_performance_watcher.h"
#include "net/base/test_completion_callback.h"
#include "net/base/test_data_directory.h"
#include "net/cert/mock_cert_verifier.h"
@@ -139,6 +141,61 @@ class ProxyHeadersHandler {
bool was_called_;
};
+class TestSocketPerformanceWatcher : public SocketPerformanceWatcher {
+ public:
+ TestSocketPerformanceWatcher()
+ : received_updated_rtt_available_notification_(false) {}
+
+ ~TestSocketPerformanceWatcher() override {}
+
+ void OnUpdatedRTTAvailable(const base::TimeDelta& rtt) override {
+ received_updated_rtt_available_notification_ = true;
+ }
+
+ bool received_updated_rtt_available_notification() const {
+ return received_updated_rtt_available_notification_;
+ }
+
+ private:
+ bool received_updated_rtt_available_notification_;
+ DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcher);
+};
+
+class TestNetworkQualityEstimator : public NetworkQualityEstimator {
+ public:
+ TestNetworkQualityEstimator()
+ : NetworkQualityEstimator(scoped_ptr<net::ExternalEstimateProvider>(),
+ std::map<std::string, std::string>()) {}
+
+ ~TestNetworkQualityEstimator() override {}
+
+ scoped_ptr<SocketPerformanceWatcher> CreateUDPSocketPerformanceWatcher()
+ const override {
+ TestSocketPerformanceWatcher* watcher = new TestSocketPerformanceWatcher();
+ watchers_.push_back(watcher);
+ return scoped_ptr<TestSocketPerformanceWatcher>(watcher);
+ }
+
+ scoped_ptr<SocketPerformanceWatcher> CreateTCPSocketPerformanceWatcher()
+ const override {
+ NOTIMPLEMENTED();
+ return nullptr;
+ }
+
+ bool IsRTTAvailableNotificationReceived() const {
+ for (const auto& watcher : watchers_)
+ if (watcher->received_updated_rtt_available_notification())
+ return true;
+ return false;
+ }
+
+ size_t GetWatchersCreated() const { return watchers_.size(); }
+
+ private:
+ mutable std::vector<TestSocketPerformanceWatcher*> watchers_;
+ DISALLOW_COPY_AND_ASSIGN(TestNetworkQualityEstimator);
+};
+
class QuicNetworkTransactionTest
: public PlatformTest,
public ::testing::WithParamInterface<QuicVersion> {
@@ -146,6 +203,7 @@ class QuicNetworkTransactionTest
QuicNetworkTransactionTest()
: clock_(new MockClock),
maker_(GetParam(), 0, clock_, kDefaultServerHostName),
+ test_network_quality_estimator_(new TestNetworkQualityEstimator()),
ssl_config_service_(new SSLConfigServiceDefaults),
proxy_service_(ProxyService::CreateDirect()),
auth_handler_factory_(
@@ -248,6 +306,8 @@ class QuicNetworkTransactionTest
params_.host_resolver = &host_resolver_;
params_.cert_verifier = &cert_verifier_;
params_.transport_security_state = &transport_security_state_;
+ params_.socket_performance_watcher_factory =
+ test_network_quality_estimator_.get();
params_.proxy_service = proxy_service_.get();
params_.ssl_config_service = ssl_config_service_.get();
params_.http_auth_handler_factory = auth_handler_factory_.get();
@@ -372,6 +432,7 @@ class QuicNetworkTransactionTest
MockHostResolver host_resolver_;
MockCertVerifier cert_verifier_;
TransportSecurityState transport_security_state_;
+ scoped_ptr<TestNetworkQualityEstimator> test_network_quality_estimator_;
scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_;
scoped_ptr<ProxyService> proxy_service_;
scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_;
@@ -430,7 +491,11 @@ TEST_P(QuicNetworkTransactionTest, ForceQuic) {
CreateSession();
+ EXPECT_FALSE(
+ test_network_quality_estimator_->IsRTTAvailableNotificationReceived());
SendRequestAndExpectQuicResponse("hello!");
+ EXPECT_TRUE(
+ test_network_quality_estimator_->IsRTTAvailableNotificationReceived());
// Check that the NetLog was filled reasonably.
TestNetLogEntry::List entries;
@@ -491,12 +556,16 @@ TEST_P(QuicNetworkTransactionTest, QuicProxy) {
mock_quic_data.AddSocketDataToFactory(&socket_factory_);
+ EXPECT_FALSE(
+ test_network_quality_estimator_->IsRTTAvailableNotificationReceived());
// There is no need to set up an alternate protocol job, because
// no attempt will be made to speak to the proxy over TCP.
CreateSession();
SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
+ EXPECT_TRUE(
+ test_network_quality_estimator_->IsRTTAvailableNotificationReceived());
}
// Regression test for https://crbug.com/492458. Test that for an HTTP
@@ -548,19 +617,27 @@ TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) {
params_.origin_to_force_quic_on =
HostPortPair::FromString("www.google.com:80");
- MockQuicData mock_quic_data;
- mock_quic_data.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
+ MockQuicData mock_quic_data1;
+ mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
- mock_quic_data.AddSocketDataToFactory(&socket_factory_);
+ MockQuicData mock_quic_data2;
+ mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
+
+ mock_quic_data1.AddSocketDataToFactory(&socket_factory_);
+ mock_quic_data2.AddSocketDataToFactory(&socket_factory_);
CreateSession();
- scoped_ptr<HttpNetworkTransaction> trans(
- new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
- TestCompletionCallback callback;
- int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
- EXPECT_EQ(ERR_IO_PENDING, rv);
- EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
+ EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated());
+ for (size_t i = 0; i < 2; ++i) {
+ scoped_ptr<HttpNetworkTransaction> trans(
+ new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
+ TestCompletionCallback callback;
+ int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
+ EXPECT_EQ(1 + i, test_network_quality_estimator_->GetWatchersCreated());
+ }
}
TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) {
@@ -583,6 +660,7 @@ TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) {
CreateSession();
SendRequestAndExpectHttpResponse("hello world");
+ EXPECT_EQ(0U, test_network_quality_estimator_->GetWatchersCreated());
}
TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) {
@@ -1459,6 +1537,8 @@ TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) {
TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) {
params_.enable_insecure_quic = true;
+ EXPECT_FALSE(
+ test_network_quality_estimator_->IsRTTAvailableNotificationReceived());
// Alternate-protocol job
scoped_ptr<QuicEncryptedPacket> close(ConstructConnectionClosePacket(1));
MockRead quic_reads[] = {
@@ -1486,6 +1566,8 @@ TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) {
AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START);
SendRequestAndExpectHttpResponse("hello from http");
ExpectBrokenAlternateProtocolMapping();
+ EXPECT_TRUE(
+ test_network_quality_estimator_->IsRTTAvailableNotificationReceived());
}
TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolReadError) {
@@ -1721,6 +1803,8 @@ TEST_P(QuicNetworkTransactionTest, SecureResourceOverInsecureQuic) {
TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) {
params_.enable_insecure_quic = true;
maker_.set_hostname("www.example.org");
+ EXPECT_FALSE(
+ test_network_quality_estimator_->IsRTTAvailableNotificationReceived());
MockQuicData mock_quic_data;
mock_quic_data.AddWrite(
ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
@@ -1748,6 +1832,8 @@ TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) {
CreateSessionWithNextProtos();
AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
SendRequestAndExpectQuicResponse("hello!");
+ EXPECT_TRUE(
+ test_network_quality_estimator_->IsRTTAvailableNotificationReceived());
}
} // namespace test

Powered by Google App Engine
This is Rietveld 408576698