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

Unified Diff: net/nqe/network_quality_estimator_unittest.cc

Issue 2261813002: Add a network quality cache observer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: PS Created 4 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
Index: net/nqe/network_quality_estimator_unittest.cc
diff --git a/net/nqe/network_quality_estimator_unittest.cc b/net/nqe/network_quality_estimator_unittest.cc
index d8bbbe7f7836185d4eaac4e608d34a67d99c77ab..5b10bc129c5c06d26b2ec5c28bcfd5d0415dbebe 100644
--- a/net/nqe/network_quality_estimator_unittest.cc
+++ b/net/nqe/network_quality_estimator_unittest.cc
@@ -116,6 +116,19 @@ class TestNetworkQualityEstimator : public NetworkQualityEstimator {
return std::move(http_response);
}
+ // Runs one URL request to completion.
+ void RunOneRequest() {
+ TestDelegate test_delegate;
+ TestURLRequestContext context(true);
+ context.set_network_quality_estimator(this);
+ context.Init();
+ std::unique_ptr<URLRequest> request(
+ context.CreateRequest(GetEchoURL(), DEFAULT_PRIORITY, &test_delegate));
+ request->SetLoadFlags(request->load_flags() | LOAD_MAIN_FRAME);
+ request->Start();
+ base::RunLoop().Run();
+ }
+
// Returns a GURL hosted at embedded test server.
const GURL GetEchoURL() const {
return embedded_test_server_.GetURL("/echo.html");
@@ -271,6 +284,7 @@ class TestNetworkQualityEstimator : public NetworkQualityEstimator {
using NetworkQualityEstimator::SetTickClockForTesting;
using NetworkQualityEstimator::OnConnectionTypeChanged;
+ using NetworkQualityEstimator::NetworkQualityStoreForTesting;
private:
// NetworkQualityEstimator implementation that returns the overridden
@@ -2217,4 +2231,84 @@ TEST(NetworkQualityEstimatorTest, CorrelationHistogram) {
}
}
+class TestNetworkQualitiesCacheObserver
+ : public nqe::internal::NetworkQualityStore::NetworkQualitiesCacheObserver {
+ public:
+ TestNetworkQualitiesCacheObserver()
+ : network_id_(net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
+ std::string()),
+ notification_received_(0) {}
+ ~TestNetworkQualitiesCacheObserver() override {}
+
+ void OnChangeInCachedNetworkQuality(
+ const nqe::internal::NetworkID& network_id,
+ const nqe::internal::CachedNetworkQuality& cached_network_quality)
+ override {
+ network_id_ = network_id;
+ notification_received_++;
+ }
+
+ size_t get_notification_received_and_reset() {
+ size_t notification_received = notification_received_;
+ notification_received_ = 0;
+ return notification_received;
+ }
+
+ nqe::internal::NetworkID network_id() const { return network_id_; }
+
+ private:
+ nqe::internal::NetworkID network_id_;
+ size_t notification_received_;
+ DISALLOW_COPY_AND_ASSIGN(TestNetworkQualitiesCacheObserver);
+};
+
+TEST(NetworkQualityEstimatorTest, CacheObserver) {
+ TestNetworkQualitiesCacheObserver observer;
+ std::map<std::string, std::string> variation_params;
+ TestNetworkQualityEstimator estimator(variation_params);
+
+ // Add |observer| as a persistent caching observer.
+ estimator.NetworkQualityStoreForTesting()->AddNetworkQualitiesCacheObserver(
+ &observer);
+
+ estimator.set_effective_connection_type(EFFECTIVE_CONNECTION_TYPE_3G);
+ estimator.SimulateNetworkChangeTo(
+ NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, "test3g");
+ estimator.RunOneRequest();
+ EXPECT_EQ(1u, observer.get_notification_received_and_reset());
+ EXPECT_EQ("test3g", observer.network_id().id);
+
+ estimator.set_effective_connection_type(EFFECTIVE_CONNECTION_TYPE_2G);
+ estimator.SimulateNetworkChangeTo(
+ NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test2g");
+ // One notification should be received for the previous network
+ // ("test3g") right before the connection change event. Second notification
+ // should be received for the second network ("test2g").
+ EXPECT_EQ(2u, observer.get_notification_received_and_reset());
+ estimator.RunOneRequest();
+ EXPECT_EQ("test2g", observer.network_id().id);
+
+ estimator.set_effective_connection_type(EFFECTIVE_CONNECTION_TYPE_4G);
+ // Start multiple requests, but there should be only one notification
+ // received, since the effective connection type does not change.
+ estimator.RunOneRequest();
+ estimator.RunOneRequest();
+ estimator.RunOneRequest();
+ EXPECT_EQ(1u, observer.get_notification_received_and_reset());
+
+ estimator.set_effective_connection_type(EFFECTIVE_CONNECTION_TYPE_2G);
+ estimator.RunOneRequest();
+ EXPECT_EQ(1u, observer.get_notification_received_and_reset());
+
+ // Remove |observer|, and it should not receive any notifications.
+ estimator.NetworkQualityStoreForTesting()
+ ->RemoveNetworkQualitiesCacheObserver(&observer);
+ estimator.set_effective_connection_type(EFFECTIVE_CONNECTION_TYPE_3G);
+ estimator.SimulateNetworkChangeTo(
+ NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test2g");
+ EXPECT_EQ(0u, observer.get_notification_received_and_reset());
+ estimator.RunOneRequest();
+ EXPECT_EQ(0u, observer.get_notification_received_and_reset());
+}
+
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698