Index: net/base/network_quality_estimator_unittest.cc |
diff --git a/net/base/network_quality_estimator_unittest.cc b/net/base/network_quality_estimator_unittest.cc |
index b1ffdebaeb58e378ad6806ba6c2028f26ae2a33a..c6634a18ffd29b925b21dd22d95b1af06e674897 100644 |
--- a/net/base/network_quality_estimator_unittest.cc |
+++ b/net/base/network_quality_estimator_unittest.cc |
@@ -32,12 +32,19 @@ namespace { |
class TestNetworkQualityEstimator : public net::NetworkQualityEstimator { |
public: |
TestNetworkQualityEstimator( |
- const std::map<std::string, std::string>& variation_params) |
- : NetworkQualityEstimator(scoped_ptr<net::ExternalEstimateProvider>(), |
+ const std::map<std::string, std::string>& variation_params, |
+ scoped_ptr<net::ExternalEstimateProvider> external_estimate_provider) |
+ : NetworkQualityEstimator(external_estimate_provider.Pass(), |
variation_params, |
true, |
true) {} |
+ explicit TestNetworkQualityEstimator( |
+ const std::map<std::string, std::string>& variation_params) |
+ : TestNetworkQualityEstimator( |
+ variation_params, |
+ scoped_ptr<net::ExternalEstimateProvider>()) {} |
+ |
~TestNetworkQualityEstimator() override {} |
// Overrides the current network type and id. |
@@ -62,6 +69,8 @@ class TestNetworkQualityEstimator : public net::NetworkQualityEstimator { |
net::NetworkChangeNotifier::ConnectionType current_network_type_; |
std::string current_network_id_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestNetworkQualityEstimator); |
}; |
} // namespace |
@@ -654,4 +663,194 @@ TEST(NetworkQualityEstimatorTest, TestGetMedianRTTSince) { |
EXPECT_EQ(100, downstream_throughput_kbps); |
} |
+class TestExternalEstimateProvider : public ExternalEstimateProvider { |
+ public: |
+ TestExternalEstimateProvider() |
+ : time_since_last_update_(base::TimeDelta::FromSeconds(1)), |
+ time_since_last_update_count_(0), |
+ rtt_count_(0), |
+ downstream_throughput_kbps_count_(0), |
+ update_count_(0) {} |
+ ~TestExternalEstimateProvider() override {} |
+ |
+ // ExternalEstimateProvider implementation: |
+ bool GetRTT(base::TimeDelta* rtt) const override { |
+ *rtt = base::TimeDelta::FromMilliseconds(1); |
+ rtt_count_++; |
+ return true; |
+ } |
+ |
+ // ExternalEstimateProvider implementation: |
+ bool GetDownstreamThroughputKbps( |
+ int32_t* downstream_throughput_kbps) const override { |
+ *downstream_throughput_kbps = 100; |
+ downstream_throughput_kbps_count_++; |
+ return true; |
mmenke
2015/09/15 20:09:09
Maybe also have another test with an ExternalEstim
tbansal1
2015/09/15 22:33:07
Done.
|
+ } |
+ |
+ // ExternalEstimateProvider implementation: |
+ bool GetUpstreamThroughputKbps( |
+ int32_t* upstream_throughput_kbps) const override { |
+ // NetworkQualityEstimator does not support upstream throughput. |
+ ADD_FAILURE(); |
+ return false; |
+ } |
+ |
+ // ExternalEstimateProvider implementation: |
+ bool GetTimeSinceLastUpdate( |
+ base::TimeDelta* time_since_last_update) const override { |
+ *time_since_last_update = time_since_last_update_; |
+ time_since_last_update_count_++; |
+ return true; |
+ } |
+ |
+ // ExternalEstimateProvider implementation: |
+ void SetUpdatedEstimateDelegate(UpdatedEstimateDelegate* delegate) override {} |
+ |
+ // ExternalEstimateProvider implementation: |
+ void Update() const override { update_count_++; } |
+ |
+ void set_time_since_last_update(base::TimeDelta time_since_last_update) { |
+ time_since_last_update_ = time_since_last_update; |
+ } |
+ |
+ size_t get_time_since_last_update_count() const { |
mmenke
2015/09/15 20:09:09
-get. The get in get_rtt_count is because it's th
tbansal1
2015/09/15 22:33:08
I am confused.
This returns the number of times *G
|
+ return time_since_last_update_count_; |
+ } |
+ size_t get_rtt_count() const { return rtt_count_; } |
mmenke
2015/09/15 20:09:09
nit: Rename rtt_count_, too.
tbansal1
2015/09/15 22:33:07
Done.
|
+ size_t get_downstream_throughput_kbps_count() const { |
mmenke
2015/09/15 20:09:09
-get
tbansal1
2015/09/15 22:33:07
same here. this is counting number of times GetDow
|
+ return downstream_throughput_kbps_count_; |
+ } |
+ size_t update_count() const { return update_count_; } |
+ |
+ private: |
+ base::TimeDelta time_since_last_update_; |
+ |
+ mutable size_t time_since_last_update_count_; |
+ mutable size_t rtt_count_; |
+ mutable size_t downstream_throughput_kbps_count_; |
+ mutable size_t update_count_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestExternalEstimateProvider); |
+}; |
+ |
+// Tests if the external estimate provider is called in the constructor and |
+// on network change notification. |
+TEST(NetworkQualityEstimatorTest, TestExternalEstimateProvider) { |
+ TestExternalEstimateProvider* test_external_estimate_provider = |
+ new TestExternalEstimateProvider(); |
+ scoped_ptr<ExternalEstimateProvider> external_estimate_provider( |
+ test_external_estimate_provider); |
+ std::map<std::string, std::string> variation_params; |
+ TestNetworkQualityEstimator estimator(variation_params, |
+ external_estimate_provider.Pass()); |
+ |
+ base::TimeDelta rtt; |
+ int32_t kbps; |
+ EXPECT_TRUE(estimator.GetRTTEstimate(&rtt)); |
+ EXPECT_TRUE(estimator.GetDownlinkThroughputKbpsEstimate(&kbps)); |
+ |
+ EXPECT_EQ( |
+ 1U, test_external_estimate_provider->get_time_since_last_update_count()); |
+ EXPECT_EQ(1U, test_external_estimate_provider->get_rtt_count()); |
+ EXPECT_EQ( |
+ 1U, |
+ test_external_estimate_provider->get_downstream_throughput_kbps_count()); |
+ |
+ // Change network type to WiFi. Number of queries to External estimate |
+ // provider must increment. |
+ estimator.SimulateNetworkChangeTo( |
+ NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI, "test-1"); |
+ EXPECT_TRUE(estimator.GetRTTEstimate(&rtt)); |
+ EXPECT_TRUE(estimator.GetDownlinkThroughputKbpsEstimate(&kbps)); |
+ EXPECT_EQ( |
+ 2U, test_external_estimate_provider->get_time_since_last_update_count()); |
+ EXPECT_EQ(2U, test_external_estimate_provider->get_rtt_count()); |
+ EXPECT_EQ( |
+ 2U, |
+ test_external_estimate_provider->get_downstream_throughput_kbps_count()); |
+ |
+ // Change network type to 2G. Number of queries to External estimate provider |
+ // must increment. |
+ estimator.SimulateNetworkChangeTo( |
+ NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test-1"); |
+ EXPECT_EQ( |
+ 3U, test_external_estimate_provider->get_time_since_last_update_count()); |
+ EXPECT_EQ(3U, test_external_estimate_provider->get_rtt_count()); |
+ EXPECT_EQ( |
+ 3U, |
+ test_external_estimate_provider->get_downstream_throughput_kbps_count()); |
+ |
+ // Set the external estimate as old. Network Quality estimator should request |
+ // an update on connection type change. |
+ EXPECT_EQ(0U, test_external_estimate_provider->update_count()); |
+ test_external_estimate_provider->set_time_since_last_update( |
+ base::TimeDelta::Max()); |
+ |
+ estimator.SimulateNetworkChangeTo( |
+ NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test-2"); |
+ EXPECT_EQ( |
+ 4U, test_external_estimate_provider->get_time_since_last_update_count()); |
+ EXPECT_EQ(3U, test_external_estimate_provider->get_rtt_count()); |
+ EXPECT_EQ( |
+ 3U, |
+ test_external_estimate_provider->get_downstream_throughput_kbps_count()); |
+ EXPECT_EQ(1U, test_external_estimate_provider->update_count()); |
+ |
+ // Estimates are unavailable because external estimate provider never |
+ // notifies network quality estimator of the updated estimates. |
+ EXPECT_FALSE(estimator.GetRTTEstimate(&rtt)); |
+ EXPECT_FALSE(estimator.GetDownlinkThroughputKbpsEstimate(&kbps)); |
+} |
+ |
+// Tests if the estimate from the external estimate provider is merged with the |
+// observations collected from the HTTP requests. |
+TEST(NetworkQualityEstimatorTest, TestExternalEstimateProviderMergeEstimates) { |
+ TestExternalEstimateProvider* test_external_estimate_provider = |
+ new TestExternalEstimateProvider(); |
+ scoped_ptr<ExternalEstimateProvider> external_estimate_provider( |
+ test_external_estimate_provider); |
+ std::map<std::string, std::string> variation_params; |
+ TestNetworkQualityEstimator estimator(variation_params, |
+ external_estimate_provider.Pass()); |
+ |
+ base::TimeDelta rtt; |
+ int32_t kbps; |
+ // Estimate provided by network quality estimator should match the estimate |
+ // provided by external estimate provider. |
+ EXPECT_TRUE(estimator.GetRTTEstimate(&rtt)); |
+ base::TimeDelta external_estimate_provider_rtt; |
mmenke
2015/09/15 20:09:09
Think it's much cleaner to make this a constant (1
tbansal1
2015/09/15 22:33:08
Done.
|
+ EXPECT_TRUE( |
+ test_external_estimate_provider->GetRTT(&external_estimate_provider_rtt)); |
+ EXPECT_EQ(external_estimate_provider_rtt, rtt); |
+ |
+ EXPECT_TRUE(estimator.GetDownlinkThroughputKbpsEstimate(&kbps)); |
+ int32_t external_estimate_provider_downstream_throughput; |
+ EXPECT_TRUE(test_external_estimate_provider->GetDownstreamThroughputKbps( |
+ &external_estimate_provider_downstream_throughput)); |
+ EXPECT_EQ(external_estimate_provider_downstream_throughput, kbps); |
mmenke
2015/09/15 20:09:09
As above, should be comparing these with constants
tbansal1
2015/09/15 22:33:08
Done.
|
+ EXPECT_EQ(1U, estimator.downstream_throughput_kbps_observations_.Size()); |
+ |
+ // Send a HTTP request. |
+ net::test_server::EmbeddedTestServer embedded_test_server; |
+ embedded_test_server.ServeFilesFromDirectory( |
+ base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest"))); |
mmenke
2015/09/15 20:09:09
include FilePath header.
tbansal1
2015/09/15 22:33:08
Done.
|
+ ASSERT_TRUE(embedded_test_server.InitializeAndWaitUntilReady()); |
+ |
+ TestDelegate test_delegate; |
+ TestURLRequestContext context(false); |
+ |
+ scoped_ptr<URLRequest> request( |
+ context.CreateRequest(embedded_test_server.GetURL("/echo.html"), |
+ DEFAULT_PRIORITY, &test_delegate)); |
+ request->SetLoadFlags(request->load_flags() | LOAD_MAIN_FRAME); |
mmenke
2015/09/15 20:09:09
I don't think we care about the load flags? Can j
tbansal1
2015/09/15 22:33:08
Done.
|
+ request->Start(); |
+ base::RunLoop().Run(); |
+ |
+ // Both RTT and downstream throughput should be updated. |
+ estimator.NotifyHeadersReceived(*request); |
+ estimator.NotifyRequestCompleted(*request); |
mmenke
2015/09/15 20:09:09
Why are we doing this manually? Can't we just set
tbansal1
2015/09/15 22:33:08
Done. That's what I was doing in URLRequestTestHTT
|
+ EXPECT_EQ(2U, estimator.downstream_throughput_kbps_observations_.Size()); |
+} |
+ |
} // namespace net |