blob: 6c90f32340e9c452d9fd9cd1137182e465ba7bc9 [file] [log] [blame]
Avi Drissman64595482022-09-14 20:52:291// Copyright 2017 The Chromium Authors
tbansalf38471f2017-03-04 01:07:042// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/nqe/event_creator.h"
6
tbansalf38471f2017-03-04 01:07:047#include "base/time/time.h"
8#include "net/log/net_log_with_source.h"
9#include "net/log/test_net_log.h"
tbansalf38471f2017-03-04 01:07:0410#include "net/nqe/effective_connection_type.h"
11#include "net/nqe/network_quality.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
Tsuyoshi Horo4f516be2022-06-14 11:53:1314namespace net::nqe::internal {
tbansalf38471f2017-03-04 01:07:0415
16namespace {
17
18// Returns the number of entries in |net_log| that have type set to
19// |NetLogEventType::NETWORK_QUALITY_CHANGED|.
Matt Reichhoff0049a0b72021-10-20 20:44:2620int GetNetworkQualityChangedEntriesCount(RecordingNetLogObserver* net_log) {
Eric Roman79cc7552019-07-19 02:17:5421 return net_log->GetEntriesWithType(NetLogEventType::NETWORK_QUALITY_CHANGED)
22 .size();
tbansalf38471f2017-03-04 01:07:0423}
24
25// Verify that the net log events are recorded correctly.
26TEST(NetworkQualityEstimatorEventCreatorTest, Notified) {
Matt Reichhoff0049a0b72021-10-20 20:44:2627 RecordingNetLogObserver net_log_observer;
tbansalf38471f2017-03-04 01:07:0428
Matt Reichhoff0049a0b72021-10-20 20:44:2629 EventCreator event_creator(NetLogWithSource::Make(NetLogSourceType::NONE));
tbansalf38471f2017-03-04 01:07:0430
Peter Kastinge5a38ed2021-10-02 03:06:3531 NetworkQuality network_quality_100(base::Milliseconds(100),
32 base::Milliseconds(100), 100);
tbansalf38471f2017-03-04 01:07:0433
34 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
35 EFFECTIVE_CONNECTION_TYPE_2G, network_quality_100);
Matt Reichhoff0049a0b72021-10-20 20:44:2636 EXPECT_EQ(1, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0437
38 // No new entry should be created since the network quality has not changed.
39 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
40 EFFECTIVE_CONNECTION_TYPE_2G, network_quality_100);
Matt Reichhoff0049a0b72021-10-20 20:44:2641 EXPECT_EQ(1, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0442
43 // A new entry should be created since effective connection type has changed.
44 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
45 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_100);
Matt Reichhoff0049a0b72021-10-20 20:44:2646 EXPECT_EQ(2, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0447
48 // A new entry should not be created since HTTP RTT has not changed
49 // meaningfully.
Peter Kastinge5a38ed2021-10-02 03:06:3550 NetworkQuality network_quality_http_rtt_110(base::Milliseconds(110),
51 base::Milliseconds(100), 100);
tbansalf38471f2017-03-04 01:07:0452 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
53 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_http_rtt_110);
Matt Reichhoff0049a0b72021-10-20 20:44:2654 EXPECT_EQ(2, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0455
56 // A new entry should be created since HTTP RTT has changed meaningfully.
Peter Kastinge5a38ed2021-10-02 03:06:3557 NetworkQuality network_quality_http_rtt_300(base::Milliseconds(300),
58 base::Milliseconds(100), 100);
tbansalf38471f2017-03-04 01:07:0459 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
60 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_http_rtt_300);
Matt Reichhoff0049a0b72021-10-20 20:44:2661 EXPECT_EQ(3, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0462
63 // A new entry should be created since transport RTT has changed meaningfully.
64 NetworkQuality network_quality_transport_rtt_300(
Peter Kastinge5a38ed2021-10-02 03:06:3565 base::Milliseconds(300), base::Milliseconds(300), 100);
tbansalf38471f2017-03-04 01:07:0466 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
67 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_transport_rtt_300);
Matt Reichhoff0049a0b72021-10-20 20:44:2668 EXPECT_EQ(4, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0469
70 // A new entry should be created since bandwidth has changed meaningfully.
Peter Kastinge5a38ed2021-10-02 03:06:3571 NetworkQuality network_quality_kbps_300(base::Milliseconds(300),
72 base::Milliseconds(300), 300);
tbansalf38471f2017-03-04 01:07:0473 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
74 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_kbps_300);
Matt Reichhoff0049a0b72021-10-20 20:44:2675 EXPECT_EQ(5, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0476
77 // A new entry should not be created since network quality has not changed
78 // meaningfully.
79 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
80 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_kbps_300);
Matt Reichhoff0049a0b72021-10-20 20:44:2681 EXPECT_EQ(5, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0482
83 // A new entry should be created since bandwidth has changed meaningfully.
Peter Kastinge5a38ed2021-10-02 03:06:3584 NetworkQuality network_quality_kbps_2000(base::Milliseconds(300),
85 base::Milliseconds(300), 2000);
tbansalf38471f2017-03-04 01:07:0486 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
87 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_kbps_2000);
Matt Reichhoff0049a0b72021-10-20 20:44:2688 EXPECT_EQ(6, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0489
90 // A new entry should not be created since bandwidth has not changed by more
91 // than 20%.
Peter Kastinge5a38ed2021-10-02 03:06:3592 NetworkQuality network_quality_kbps_2200(base::Milliseconds(300),
93 base::Milliseconds(300), 2200);
tbansalf38471f2017-03-04 01:07:0494 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
95 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_kbps_2200);
Matt Reichhoff0049a0b72021-10-20 20:44:2696 EXPECT_EQ(6, GetNetworkQualityChangedEntriesCount(&net_log_observer));
tbansalf38471f2017-03-04 01:07:0497}
98
99} // namespace
100
Tsuyoshi Horo4f516be2022-06-14 11:53:13101} // namespace net::nqe::internal