Chromium Code Reviews| 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 88863583f95bb84c30e726b54de653158d18666a..ec0e07e89fdad368c4a207d053df7923b5ee19e1 100644 |
| --- a/net/nqe/network_quality_estimator_unittest.cc |
| +++ b/net/nqe/network_quality_estimator_unittest.cc |
| @@ -44,6 +44,26 @@ |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "url/gurl.h" |
| +namespace { |
| + |
| +// Verifies that the number of samples in the bucket with minimum value |
| +// |bucket_min| in |histogram| are at least |expected_min_count_samples|. |
| +void VerifyBucketCountAtLeast(base::HistogramTester* histogram_tester, |
|
RyanSturm
2017/01/31 19:57:57
I feel like this could be generalized in the Histo
tbansal1
2017/02/02 02:35:36
Done.
|
| + const std::string& histogram, |
| + int32_t bucket_min, |
| + int32_t expected_min_count_samples) { |
| + std::vector<base::Bucket> buckets = |
| + histogram_tester->GetAllSamples(histogram); |
| + int actual_count_samples = 0; |
| + for (const auto& bucket : buckets) { |
| + if (bucket.min == bucket_min) |
| + actual_count_samples += bucket.count; |
| + } |
| + EXPECT_LE(expected_min_count_samples, actual_count_samples); |
| +} |
| + |
| +} // namespace |
| + |
| namespace net { |
| namespace { |
| @@ -228,6 +248,10 @@ TEST(NetworkQualityEstimatorTest, TestKbpsRTTUpdates) { |
| "NQE.EstimateAvailable.MainFrame.TransportRTT", 0, 1); |
| histogram_tester.ExpectUniqueSample("NQE.EstimateAvailable.MainFrame.Kbps", 0, |
| 1); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.RTT.ObservationSource", NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP, 1); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.Kbps.ObservationSource", NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP, 1); |
| std::unique_ptr<URLRequest> request2(context.CreateRequest( |
| estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate)); |
| @@ -378,6 +402,12 @@ TEST(NetworkQualityEstimatorTest, Caching) { |
| estimator.SimulateNetworkChange( |
| NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test"); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.RTT.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE, 1); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.Kbps.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE, 1); |
| // Verify the contents of the net log. |
| EXPECT_LE( |
| @@ -411,6 +441,21 @@ TEST(NetworkQualityEstimatorTest, Caching) { |
| EXPECT_EQ(1U, throughput_observer.observations().size()); |
| } |
| +TEST(NetworkQualityEstimatorTest, QuicObservations) { |
| + base::HistogramTester histogram_tester; |
| + TestNetworkQualityEstimator estimator; |
| + estimator.OnUpdatedRTTAvailable(SocketPerformanceWatcherFactory::PROTOCOL_TCP, |
| + base::TimeDelta::FromMilliseconds(10)); |
| + estimator.OnUpdatedRTTAvailable( |
| + SocketPerformanceWatcherFactory::PROTOCOL_QUIC, |
| + base::TimeDelta::FromMilliseconds(10)); |
| + histogram_tester.ExpectBucketCount("NQE.RTT.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_TCP, 1); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.RTT.ObservationSource", NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC, 1); |
| + histogram_tester.ExpectTotalCount("NQE.RTT.ObservationSource", 2); |
| +} |
| + |
| TEST(NetworkQualityEstimatorTest, StoreObservations) { |
| TestNetworkQualityEstimator estimator; |
| @@ -505,6 +550,8 @@ TEST(NetworkQualityEstimatorTest, ComputedPercentiles) { |
| // Verifies that the observers receive the notifications when default estimates |
| // are added to the observations. |
| TEST(NetworkQualityEstimatorTest, DefaultObservations) { |
| + base::HistogramTester histogram_tester; |
| + |
| TestEffectiveConnectionTypeObserver effective_connection_type_observer; |
| TestRTTAndThroughputEstimatesObserver rtt_throughput_estimates_observer; |
| TestRTTObserver rtt_observer; |
| @@ -514,6 +561,19 @@ TEST(NetworkQualityEstimatorTest, DefaultObservations) { |
| nullptr, variation_params, false, false, |
| true /* add_default_platform_observations */, |
| base::MakeUnique<BoundTestNetLog>()); |
| + |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.RTT.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_HTTP_FROM_PLATFORM, 1); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.RTT.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_TRANSPORT_FROM_PLATFORM, 1); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.Kbps.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_HTTP_FROM_PLATFORM, 1); |
| + histogram_tester.ExpectTotalCount("NQE.RTT.ObservationSource", 2); |
| + histogram_tester.ExpectTotalCount("NQE.Kbps.ObservationSource", 1); |
| + |
| base::TimeDelta rtt; |
| int32_t kbps; |
| @@ -1408,6 +1468,12 @@ TEST(NetworkQualityEstimatorTest, TestExternalEstimateProvider) { |
| histogram_tester.ExpectUniqueSample("NQE.ExternalEstimateProvider.RTT", 1, 1); |
| histogram_tester.ExpectUniqueSample( |
| "NQE.ExternalEstimateProvider.DownlinkBandwidth", 100, 1); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.RTT.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE, 1); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.Kbps.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE, 1); |
| EXPECT_EQ(1U, test_external_estimate_provider->update_count()); |
| @@ -1466,10 +1532,15 @@ TEST(NetworkQualityEstimatorTest, TestExternalEstimateProviderMergeEstimates) { |
| context.set_network_quality_estimator(&estimator); |
| context.Init(); |
| - std::unique_ptr<URLRequest> request(context.CreateRequest( |
| - estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate)); |
| - request->Start(); |
| - base::RunLoop().Run(); |
| + for (size_t i = 0; i < 2; ++i) { |
| + // Start 2 requests to ensure that the RTT estimate computed by the network |
| + // quality estimator takes into account the RTT observations from the |
| + // external estimate provider as well as organic observations. |
| + std::unique_ptr<URLRequest> request(context.CreateRequest( |
| + estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate)); |
| + request->Start(); |
| + base::RunLoop().Run(); |
| + } |
| EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); |
| EXPECT_NE(external_estimate_provider_rtt, rtt); |
| @@ -1958,6 +2029,9 @@ TEST(NetworkQualityEstimatorTest, MAYBE_TestTCPSocketRTT) { |
| base::HistogramTester histogram_tester; |
| TestRTTObserver rtt_observer; |
| TestNetworkQualityEstimator estimator; |
| + estimator.SimulateNetworkChange( |
| + NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test"); |
| + |
| estimator.AddRTTObserver(&rtt_observer); |
| TestDelegate test_delegate; |
| @@ -2009,14 +2083,13 @@ TEST(NetworkQualityEstimatorTest, MAYBE_TestTCPSocketRTT) { |
| estimator.SimulateNetworkChange( |
| NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI, "test-1"); |
| - histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile50.Unknown", 1); |
| - histogram_tester.ExpectBucketCount("NQE.TransportRTT.Percentile50.Unknown", |
| + histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile50.2G", 1); |
| + histogram_tester.ExpectBucketCount("NQE.TransportRTT.Percentile50.2G", |
| rtt.InMilliseconds(), 1); |
| - histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile10.Unknown", 1); |
| - histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile50.Unknown", 1); |
| - histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile90.Unknown", 1); |
| - histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile100.Unknown", |
| - 1); |
| + histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile10.2G", 1); |
| + histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile50.2G", 1); |
| + histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile90.2G", 1); |
| + histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile100.2G", 1); |
| // Verify that metrics are logged correctly on main-frame requests. |
| histogram_tester.ExpectTotalCount("NQE.MainFrame.TransportRTT.Percentile50", |
| @@ -2033,14 +2106,26 @@ TEST(NetworkQualityEstimatorTest, MAYBE_TestTCPSocketRTT) { |
| num_requests - 1); |
| histogram_tester.ExpectTotalCount( |
| - "NQE.MainFrame.TransportRTT.Percentile50.Unknown", num_requests); |
| + "NQE.MainFrame.TransportRTT.Percentile50.2G", num_requests); |
| histogram_tester.ExpectTotalCount("NQE.MainFrame.EffectiveConnectionType", |
| num_requests); |
| - histogram_tester.ExpectTotalCount( |
| - "NQE.MainFrame.EffectiveConnectionType.Unknown", num_requests); |
| + histogram_tester.ExpectTotalCount("NQE.MainFrame.EffectiveConnectionType.2G", |
| + num_requests); |
| + histogram_tester.ExpectBucketCount("NQE.MainFrame.EffectiveConnectionType.2G", |
| + EFFECTIVE_CONNECTION_TYPE_UNKNOWN, 1); |
| + VerifyBucketCountAtLeast(&histogram_tester, "NQE.RTT.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_TCP, 1); |
| + VerifyBucketCountAtLeast(&histogram_tester, "NQE.Kbps.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP, 1); |
| histogram_tester.ExpectBucketCount( |
| - "NQE.MainFrame.EffectiveConnectionType.Unknown", |
| - EFFECTIVE_CONNECTION_TYPE_UNKNOWN, 1); |
| + "NQE.Kbps.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE, 0); |
| + |
| + estimator.SimulateNetworkChange( |
| + NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test"); |
| + histogram_tester.ExpectBucketCount( |
| + "NQE.RTT.ObservationSource", |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE, 1); |
| } |
| #if defined(OS_IOS) |