1 // Copyright 2017 The Chromium Authors
2 // 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
7 #include "base/time/time.h"
8 #include "net/log/net_log_with_source.h"
9 #include "net/log/test_net_log.h"
10 #include "net/nqe/effective_connection_type.h"
11 #include "net/nqe/network_quality.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace net::nqe::internal {
15
16 namespace {
17
18 // Returns the number of entries in |net_log| that have type set to
19 // |NetLogEventType::NETWORK_QUALITY_CHANGED|.
GetNetworkQualityChangedEntriesCount(RecordingNetLogObserver * net_log)20 int GetNetworkQualityChangedEntriesCount(RecordingNetLogObserver* net_log) {
21 return net_log->GetEntriesWithType(NetLogEventType::NETWORK_QUALITY_CHANGED)
22 .size();
23 }
24
25 // Verify that the net log events are recorded correctly.
TEST(NetworkQualityEstimatorEventCreatorTest,Notified)26 TEST(NetworkQualityEstimatorEventCreatorTest, Notified) {
27 RecordingNetLogObserver net_log_observer;
28
29 EventCreator event_creator(NetLogWithSource::Make(NetLogSourceType::NONE));
30
31 NetworkQuality network_quality_100(base::Milliseconds(100),
32 base::Milliseconds(100), 100);
33
34 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
35 EFFECTIVE_CONNECTION_TYPE_2G, network_quality_100);
36 EXPECT_EQ(1, GetNetworkQualityChangedEntriesCount(&net_log_observer));
37
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);
41 EXPECT_EQ(1, GetNetworkQualityChangedEntriesCount(&net_log_observer));
42
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);
46 EXPECT_EQ(2, GetNetworkQualityChangedEntriesCount(&net_log_observer));
47
48 // A new entry should not be created since HTTP RTT has not changed
49 // meaningfully.
50 NetworkQuality network_quality_http_rtt_110(base::Milliseconds(110),
51 base::Milliseconds(100), 100);
52 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
53 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_http_rtt_110);
54 EXPECT_EQ(2, GetNetworkQualityChangedEntriesCount(&net_log_observer));
55
56 // A new entry should be created since HTTP RTT has changed meaningfully.
57 NetworkQuality network_quality_http_rtt_300(base::Milliseconds(300),
58 base::Milliseconds(100), 100);
59 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
60 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_http_rtt_300);
61 EXPECT_EQ(3, GetNetworkQualityChangedEntriesCount(&net_log_observer));
62
63 // A new entry should be created since transport RTT has changed meaningfully.
64 NetworkQuality network_quality_transport_rtt_300(
65 base::Milliseconds(300), base::Milliseconds(300), 100);
66 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
67 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_transport_rtt_300);
68 EXPECT_EQ(4, GetNetworkQualityChangedEntriesCount(&net_log_observer));
69
70 // A new entry should be created since bandwidth has changed meaningfully.
71 NetworkQuality network_quality_kbps_300(base::Milliseconds(300),
72 base::Milliseconds(300), 300);
73 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
74 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_kbps_300);
75 EXPECT_EQ(5, GetNetworkQualityChangedEntriesCount(&net_log_observer));
76
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);
81 EXPECT_EQ(5, GetNetworkQualityChangedEntriesCount(&net_log_observer));
82
83 // A new entry should be created since bandwidth has changed meaningfully.
84 NetworkQuality network_quality_kbps_2000(base::Milliseconds(300),
85 base::Milliseconds(300), 2000);
86 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
87 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_kbps_2000);
88 EXPECT_EQ(6, GetNetworkQualityChangedEntriesCount(&net_log_observer));
89
90 // A new entry should not be created since bandwidth has not changed by more
91 // than 20%.
92 NetworkQuality network_quality_kbps_2200(base::Milliseconds(300),
93 base::Milliseconds(300), 2200);
94 event_creator.MaybeAddNetworkQualityChangedEventToNetLog(
95 EFFECTIVE_CONNECTION_TYPE_3G, network_quality_kbps_2200);
96 EXPECT_EQ(6, GetNetworkQualityChangedEntriesCount(&net_log_observer));
97 }
98
99 } // namespace
100
101 } // namespace net::nqe::internal
102