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

Side by Side Diff: net/nqe/network_quality_estimator_unittest.cc

Issue 2491703003: NQE: Notify observer as soon as it is added (Closed)
Patch Set: ryansturm comments Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/nqe/network_quality_estimator.h" 5 #include "net/nqe/network_quality_estimator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <limits> 10 #include <limits>
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 estimator.AddThroughputObserver(&throughput_observer); 344 estimator.AddThroughputObserver(&throughput_observer);
345 345
346 estimator.SimulateNetworkChange( 346 estimator.SimulateNetworkChange(
347 NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test"); 347 NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test");
348 histogram_tester.ExpectBucketCount("NQE.CachedNetworkQualityAvailable", true, 348 histogram_tester.ExpectBucketCount("NQE.CachedNetworkQualityAvailable", true,
349 1); 349 1);
350 histogram_tester.ExpectTotalCount("NQE.CachedNetworkQualityAvailable", 2); 350 histogram_tester.ExpectTotalCount("NQE.CachedNetworkQualityAvailable", 2);
351 base::RunLoop().RunUntilIdle(); 351 base::RunLoop().RunUntilIdle();
352 352
353 // Verify that the cached network quality was read, and observers were 353 // Verify that the cached network quality was read, and observers were
354 // notified. 354 // notified. |observer| must be notified once right after it was added, and
355 EXPECT_EQ(1U, observer.effective_connection_types().size()); 355 // once again after the cached network quality was read.
356 EXPECT_EQ(2U, observer.effective_connection_types().size());
356 EXPECT_EQ(1U, rtt_observer.observations().size()); 357 EXPECT_EQ(1U, rtt_observer.observations().size());
357 EXPECT_EQ(1U, throughput_observer.observations().size()); 358 EXPECT_EQ(1U, throughput_observer.observations().size());
358 } 359 }
359 360
360 TEST(NetworkQualityEstimatorTest, StoreObservations) { 361 TEST(NetworkQualityEstimatorTest, StoreObservations) {
361 std::map<std::string, std::string> variation_params; 362 std::map<std::string, std::string> variation_params;
362 TestNetworkQualityEstimator estimator(variation_params); 363 TestNetworkQualityEstimator estimator(variation_params);
363 364
364 base::TimeDelta rtt; 365 base::TimeDelta rtt;
365 int32_t kbps; 366 int32_t kbps;
(...skipping 1061 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 estimator.SimulateNetworkChange(NetworkChangeNotifier::CONNECTION_WIFI, 1428 estimator.SimulateNetworkChange(NetworkChangeNotifier::CONNECTION_WIFI,
1428 "test"); 1429 "test");
1429 EXPECT_EQ(2U, observer.effective_connection_types().size()); 1430 EXPECT_EQ(2U, observer.effective_connection_types().size());
1430 1431
1431 // A change in effective connection type does not trigger notification to the 1432 // A change in effective connection type does not trigger notification to the
1432 // observers, since it is not accompanied by any new observation or a network 1433 // observers, since it is not accompanied by any new observation or a network
1433 // change event. 1434 // change event.
1434 estimator.set_start_time_null_http_rtt( 1435 estimator.set_start_time_null_http_rtt(
1435 base::TimeDelta::FromMilliseconds(100)); 1436 base::TimeDelta::FromMilliseconds(100));
1436 EXPECT_EQ(2U, observer.effective_connection_types().size()); 1437 EXPECT_EQ(2U, observer.effective_connection_types().size());
1438
1439 TestEffectiveConnectionTypeObserver observer_2;
1440 estimator.AddEffectiveConnectionTypeObserver(&observer_2);
1441 EXPECT_EQ(0U, observer_2.effective_connection_types().size());
1442 base::RunLoop().RunUntilIdle();
1443 // |observer_2| must be notified as soon as it is added.
1444 EXPECT_EQ(1U, observer_2.effective_connection_types().size());
1437 } 1445 }
1438 1446
1439 // Tests that the network quality is computed at the specified interval, and 1447 // Tests that the network quality is computed at the specified interval, and
1440 // that the network quality observers are notified of any change. 1448 // that the network quality observers are notified of any change.
1441 TEST(NetworkQualityEstimatorTest, TestRTTAndThroughputEstimatesObserver) { 1449 TEST(NetworkQualityEstimatorTest, TestRTTAndThroughputEstimatesObserver) {
1442 base::HistogramTester histogram_tester; 1450 base::HistogramTester histogram_tester;
1443 std::unique_ptr<base::SimpleTestTickClock> tick_clock( 1451 std::unique_ptr<base::SimpleTestTickClock> tick_clock(
1444 new base::SimpleTestTickClock()); 1452 new base::SimpleTestTickClock());
1445 base::SimpleTestTickClock* tick_clock_ptr = tick_clock.get(); 1453 base::SimpleTestTickClock* tick_clock_ptr = tick_clock.get();
1446 1454
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1500 EXPECT_LE(1, observer.notifications_received() - notifications_received); 1508 EXPECT_LE(1, observer.notifications_received() - notifications_received);
1501 notifications_received = observer.notifications_received(); 1509 notifications_received = observer.notifications_received();
1502 1510
1503 // A change in effective connection type does not trigger notification to the 1511 // A change in effective connection type does not trigger notification to the
1504 // observers, since it is not accompanied by any new observation or a network 1512 // observers, since it is not accompanied by any new observation or a network
1505 // change event. 1513 // change event.
1506 estimator.set_start_time_null_http_rtt( 1514 estimator.set_start_time_null_http_rtt(
1507 base::TimeDelta::FromMilliseconds(10000)); 1515 base::TimeDelta::FromMilliseconds(10000));
1508 estimator.set_start_time_null_http_rtt(base::TimeDelta::FromMilliseconds(1)); 1516 estimator.set_start_time_null_http_rtt(base::TimeDelta::FromMilliseconds(1));
1509 EXPECT_EQ(0, observer.notifications_received() - notifications_received); 1517 EXPECT_EQ(0, observer.notifications_received() - notifications_received);
1518
1519 TestRTTAndThroughputEstimatesObserver observer_2;
1520 estimator.AddRTTAndThroughputEstimatesObserver(&observer_2);
1521 EXPECT_EQ(nqe::internal::InvalidRTT(), observer_2.http_rtt());
1522 EXPECT_EQ(nqe::internal::InvalidRTT(), observer_2.transport_rtt());
1523 EXPECT_EQ(nqe::internal::kInvalidThroughput,
1524 observer_2.downstream_throughput_kbps());
1525 base::RunLoop().RunUntilIdle();
1526 EXPECT_NE(nqe::internal::InvalidRTT(), observer_2.http_rtt());
1527 EXPECT_NE(nqe::internal::InvalidRTT(), observer_2.transport_rtt());
1528 EXPECT_NE(nqe::internal::kInvalidThroughput,
1529 observer_2.downstream_throughput_kbps());
1510 } 1530 }
1511 1531
1512 // Tests that the effective connection type is computed on every RTT 1532 // Tests that the effective connection type is computed on every RTT
1513 // observation if the last computed effective connection type was unknown. 1533 // observation if the last computed effective connection type was unknown.
1514 TEST(NetworkQualityEstimatorTest, UnknownEffectiveConnectionType) { 1534 TEST(NetworkQualityEstimatorTest, UnknownEffectiveConnectionType) {
1515 std::unique_ptr<base::SimpleTestTickClock> tick_clock( 1535 std::unique_ptr<base::SimpleTestTickClock> tick_clock(
1516 new base::SimpleTestTickClock()); 1536 new base::SimpleTestTickClock());
1517 base::SimpleTestTickClock* tick_clock_ptr = tick_clock.get(); 1537 base::SimpleTestTickClock* tick_clock_ptr = tick_clock.get();
1518 1538
1519 TestEffectiveConnectionTypeObserver observer; 1539 TestEffectiveConnectionTypeObserver observer;
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after
2320 if (expected_count == 1) { 2340 if (expected_count == 1) {
2321 EffectiveConnectionType last_notified_type = 2341 EffectiveConnectionType last_notified_type =
2322 observer.effective_connection_types().at( 2342 observer.effective_connection_types().at(
2323 observer.effective_connection_types().size() - 1); 2343 observer.effective_connection_types().size() - 1);
2324 EXPECT_EQ(i, last_notified_type); 2344 EXPECT_EQ(i, last_notified_type);
2325 } 2345 }
2326 } 2346 }
2327 } 2347 }
2328 2348
2329 } // namespace net 2349 } // namespace net
OLDNEW
« net/nqe/network_quality_estimator.cc ('K') | « net/nqe/network_quality_estimator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698