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

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

Issue 2481373004: NQE: Add default RTT and throughput observations (Closed)
Patch Set: PS Created 4 years 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 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 444
445 // RTT percentiles are in increasing order. 445 // RTT percentiles are in increasing order.
446 EXPECT_GE(estimator.GetRTTEstimateInternal(disallowed_observation_sources, 446 EXPECT_GE(estimator.GetRTTEstimateInternal(disallowed_observation_sources,
447 base::TimeTicks(), i), 447 base::TimeTicks(), i),
448 estimator.GetRTTEstimateInternal(disallowed_observation_sources, 448 estimator.GetRTTEstimateInternal(disallowed_observation_sources,
449 base::TimeTicks(), i - 1)); 449 base::TimeTicks(), i - 1));
450 } 450 }
451 } 451 }
452 } 452 }
453 453
454 TEST(NetworkQualityEstimatorTest, ObtainOperatingParams) { 454 // Verifies that the default observations are added to the set of observations.
455 // If default observations are overridden using field trial parameters, verify
456 // that the overriding values are used.
457 TEST(NetworkQualityEstimatorTest, DefaultObservationsOverridden) {
455 std::map<std::string, std::string> variation_params; 458 std::map<std::string, std::string> variation_params;
456 variation_params["Unknown.DefaultMedianKbps"] = "100"; 459 variation_params["Unknown.DefaultMedianKbps"] = "100";
457 variation_params["WiFi.DefaultMedianKbps"] = "200"; 460 variation_params["WiFi.DefaultMedianKbps"] = "200";
458 variation_params["2G.DefaultMedianKbps"] = "300"; 461 variation_params["2G.DefaultMedianKbps"] = "300";
459 462
460 variation_params["Unknown.DefaultMedianRTTMsec"] = "1000"; 463 variation_params["Unknown.DefaultMedianRTTMsec"] = "1000";
461 variation_params["WiFi.DefaultMedianRTTMsec"] = "2000"; 464 variation_params["WiFi.DefaultMedianRTTMsec"] = "2000";
462 // Negative variation value should not be used. 465 // Negative variation value should not be used.
463 variation_params["2G.DefaultMedianRTTMsec"] = "-5"; 466 variation_params["2G.DefaultMedianRTTMsec"] = "-5";
464 467
465 TestNetworkQualityEstimator estimator(variation_params); 468 variation_params["Unknown.DefaultMedianTransportRTTMsec"] = "500";
469 variation_params["WiFi.DefaultMedianTransportRTTMsec"] = "1000";
470 // Negative variation value should not be used.
471 variation_params["2G.DefaultMedianTransportRTTMsec"] = "-5";
472
473 TestNetworkQualityEstimator estimator(nullptr, variation_params, false, false,
474 true /* use_default_platform_values */);
466 475
467 base::TimeDelta rtt; 476 base::TimeDelta rtt;
477 int32_t kbps;
478
468 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); 479 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt));
469 int32_t kbps; 480 EXPECT_EQ(base::TimeDelta::FromMilliseconds(1000), rtt);
481 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt));
482 EXPECT_EQ(base::TimeDelta::FromMilliseconds(500), rtt);
470 EXPECT_TRUE( 483 EXPECT_TRUE(
471 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); 484 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps));
472
473 EXPECT_EQ(100, kbps); 485 EXPECT_EQ(100, kbps);
474 EXPECT_EQ(base::TimeDelta::FromMilliseconds(1000), rtt);
475
476 EXPECT_FALSE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt));
477 486
478 // Simulate network change to Wi-Fi. 487 // Simulate network change to Wi-Fi.
479 estimator.SimulateNetworkChange( 488 estimator.SimulateNetworkChange(
480 NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI, "test-1"); 489 NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI, "test-1");
481
482 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); 490 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt));
491 EXPECT_EQ(base::TimeDelta::FromMilliseconds(2000), rtt);
492 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt));
493 EXPECT_EQ(base::TimeDelta::FromMilliseconds(1000), rtt);
483 EXPECT_TRUE( 494 EXPECT_TRUE(
484 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); 495 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps));
485 EXPECT_EQ(200, kbps); 496 EXPECT_EQ(200, kbps);
486 EXPECT_EQ(base::TimeDelta::FromMilliseconds(2000), rtt);
487 EXPECT_FALSE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt));
488 497
489 // Peak network quality should not be affected by the network quality 498 // Peak network quality should not be affected by the network quality
490 // estimator field trial. 499 // estimator field trial.
491 EXPECT_EQ(nqe::internal::InvalidRTT(), 500 EXPECT_EQ(nqe::internal::InvalidRTT(),
492 estimator.peak_network_quality_.http_rtt()); 501 estimator.peak_network_quality_.http_rtt());
493 EXPECT_EQ(nqe::internal::kInvalidThroughput, 502 EXPECT_EQ(nqe::internal::kInvalidThroughput,
494 estimator.peak_network_quality_.downstream_throughput_kbps()); 503 estimator.peak_network_quality_.downstream_throughput_kbps());
495 504
496 // Simulate network change to 2G. Only the Kbps default estimate should be 505 // Simulate network change to 2G. Only the Kbps default estimate should be
497 // available. 506 // available.
498 estimator.SimulateNetworkChange( 507 estimator.SimulateNetworkChange(
499 NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test-2"); 508 NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test-2");
500 509 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt));
501 EXPECT_FALSE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); 510 // Taken from network_quality_estimator_params.cc.
511 EXPECT_EQ(base::TimeDelta::FromMilliseconds(1726), rtt);
512 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt));
513 // Taken from network_quality_estimator_params.cc.
514 EXPECT_EQ(base::TimeDelta::FromMilliseconds(1531), rtt);
502 EXPECT_TRUE( 515 EXPECT_TRUE(
503 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); 516 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps));
504 EXPECT_EQ(300, kbps); 517 EXPECT_EQ(300, kbps);
505 518
506 // Simulate network change to 3G. Default estimates should be unavailable. 519 // Simulate network change to 3G. Default estimates should be available.
507 estimator.SimulateNetworkChange( 520 estimator.SimulateNetworkChange(
508 NetworkChangeNotifier::ConnectionType::CONNECTION_3G, "test-3"); 521 NetworkChangeNotifier::ConnectionType::CONNECTION_3G, "test-3");
522 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt));
523 // Taken from network_quality_estimator_params.cc.
524 EXPECT_EQ(base::TimeDelta::FromMilliseconds(272), rtt);
525 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt));
526 // Taken from network_quality_estimator_params.cc.
527 EXPECT_EQ(base::TimeDelta::FromMilliseconds(209), rtt);
528 EXPECT_TRUE(
529 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps));
530 // Taken from network_quality_estimator_params.cc.
531 EXPECT_EQ(749, kbps);
532 }
509 533
510 EXPECT_FALSE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); 534 // Verify that the observers receive the notifications when default estimates
511 EXPECT_FALSE( 535 // are added to the observations.
536 TEST(NetworkQualityEstimatorTest, DefaultObservations) {
RyanSturm 2016/11/28 21:10:03 nit: Can you switch the order of these tests? It m
tbansal1 2016/11/28 22:50:57 Done.
537 TestEffectiveConnectionTypeObserver effective_connection_type_observer;
538 TestRTTAndThroughputEstimatesObserver rtt_throughput_estimates_observer;
539 TestRTTObserver rtt_observer;
540 TestThroughputObserver throughput_observer;
541 std::map<std::string, std::string> variation_params;
542 TestNetworkQualityEstimator estimator(nullptr, variation_params, false, false,
543 true /* use_default_platform_values */);
544 base::TimeDelta rtt;
545 int32_t kbps;
546
547 // Default estimates should be available.
548 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt));
549 EXPECT_EQ(base::TimeDelta::FromMilliseconds(115), rtt);
550 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt));
551 EXPECT_EQ(base::TimeDelta::FromMilliseconds(55), rtt);
552 EXPECT_TRUE(
512 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); 553 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps));
554 EXPECT_EQ(1961, kbps);
555
556 estimator.AddEffectiveConnectionTypeObserver(
557 &effective_connection_type_observer);
558 estimator.AddRTTAndThroughputEstimatesObserver(
559 &rtt_throughput_estimates_observer);
560 estimator.AddRTTObserver(&rtt_observer);
561 estimator.AddThroughputObserver(&throughput_observer);
562
563 // Simulate network change to 3G. Default estimates should be available.
564 estimator.SimulateNetworkChange(
565 NetworkChangeNotifier::ConnectionType::CONNECTION_3G, "test-3");
566 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt));
567 // Taken from network_quality_estimator_params.cc.
568 EXPECT_EQ(base::TimeDelta::FromMilliseconds(272), rtt);
569 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt));
570 // Taken from network_quality_estimator_params.cc.
571 EXPECT_EQ(base::TimeDelta::FromMilliseconds(209), rtt);
572 EXPECT_TRUE(
573 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps));
574 // Taken from network_quality_estimator_params.cc.
575 EXPECT_EQ(749, kbps);
576
577 EXPECT_NE(EFFECTIVE_CONNECTION_TYPE_UNKNOWN,
578 estimator.GetEffectiveConnectionType());
579 EXPECT_EQ(
580 1U,
581 effective_connection_type_observer.effective_connection_types().size());
582 EXPECT_NE(
583 EFFECTIVE_CONNECTION_TYPE_UNKNOWN,
584 effective_connection_type_observer.effective_connection_types().front());
585
586 EXPECT_EQ(3, rtt_throughput_estimates_observer.notifications_received());
587 EXPECT_EQ(base::TimeDelta::FromMilliseconds(272),
588 rtt_throughput_estimates_observer.http_rtt());
589 EXPECT_EQ(base::TimeDelta::FromMilliseconds(209),
590 rtt_throughput_estimates_observer.transport_rtt());
591 EXPECT_EQ(749,
592 rtt_throughput_estimates_observer.downstream_throughput_kbps());
593
594 EXPECT_EQ(2U, rtt_observer.observations().size());
595 EXPECT_EQ(272, rtt_observer.observations().at(0).rtt_ms);
596 EXPECT_EQ(NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_HTTP_FROM_PLATFORM,
597 rtt_observer.observations().at(0).source);
598 EXPECT_EQ(209, rtt_observer.observations().at(1).rtt_ms);
599 EXPECT_EQ(NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_TRANSPORT_FROM_PLATFORM,
600 rtt_observer.observations().at(1).source);
601
602 EXPECT_EQ(1U, throughput_observer.observations().size());
603 EXPECT_EQ(749, throughput_observer.observations().at(0).throughput_kbps);
604 EXPECT_EQ(NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_HTTP_FROM_PLATFORM,
605 throughput_observer.observations().at(0).source);
513 } 606 }
514 607
515 TEST(NetworkQualityEstimatorTest, ObtainAlgorithmToUseFromParams) { 608 TEST(NetworkQualityEstimatorTest, ObtainAlgorithmToUseFromParams) {
516 const struct { 609 const struct {
517 bool set_variation_param; 610 bool set_variation_param;
518 std::string algorithm; 611 std::string algorithm;
519 NetworkQualityEstimator::EffectiveConnectionTypeAlgorithm 612 NetworkQualityEstimator::EffectiveConnectionTypeAlgorithm
520 expected_algorithm; 613 expected_algorithm;
521 } tests[] = { 614 } tests[] = {
522 {false, "", NetworkQualityEstimator::EffectiveConnectionTypeAlgorithm:: 615 {false, "", NetworkQualityEstimator::EffectiveConnectionTypeAlgorithm::
(...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 }, 1425 },
1333 { 1426 {
1334 true, 1427 true,
1335 }, 1428 },
1336 }; 1429 };
1337 1430
1338 for (const auto& test : tests) { 1431 for (const auto& test : tests) {
1339 TestNetworkQualityEstimator estimator( 1432 TestNetworkQualityEstimator estimator(
1340 std::unique_ptr<net::ExternalEstimateProvider>(), variation_params, 1433 std::unique_ptr<net::ExternalEstimateProvider>(), variation_params,
1341 test.allow_small_localhost_requests, 1434 test.allow_small_localhost_requests,
1342 test.allow_small_localhost_requests); 1435 test.allow_small_localhost_requests, false);
1343 1436
1344 base::TimeDelta rtt; 1437 base::TimeDelta rtt;
1345 EXPECT_FALSE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); 1438 EXPECT_FALSE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt));
1346 int32_t kbps; 1439 int32_t kbps;
1347 EXPECT_FALSE( 1440 EXPECT_FALSE(
1348 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); 1441 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps));
1349 1442
1350 TestDelegate test_delegate; 1443 TestDelegate test_delegate;
1351 TestURLRequestContext context(true); 1444 TestURLRequestContext context(true);
1352 context.set_network_quality_estimator(&estimator); 1445 context.set_network_quality_estimator(&estimator);
(...skipping 1113 matching lines...) Expand 10 before | Expand all | Expand 10 after
2466 request->Start(); 2559 request->Start();
2467 base::RunLoop().Run(); 2560 base::RunLoop().Run();
2468 2561
2469 EXPECT_EQ(effective_connection_type, 2562 EXPECT_EQ(effective_connection_type,
2470 estimator.GetEffectiveConnectionType()); 2563 estimator.GetEffectiveConnectionType());
2471 } 2564 }
2472 } 2565 }
2473 } 2566 }
2474 2567
2475 } // namespace net 2568 } // namespace net
OLDNEW
« net/nqe/network_quality_estimator.cc ('K') | « net/nqe/network_quality_estimator_test_util.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698