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

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

Issue 2128793003: Factor out NetworkID and caching mechanism from n_q_e.{h,cc} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed bengr comments Created 4 years, 5 months 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
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/network_qualities_manager.h"
6
7 #include "base/strings/string_number_conversions.h"
8 #include "base/test/simple_test_tick_clock.h"
9 #include "base/time/time.h"
10 #include "net/base/network_change_notifier.h"
11 #include "net/nqe/cached_network_quality.h"
12 #include "net/nqe/network_id.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace net {
16
17 namespace {
18
19 TEST(NetworkQualitiesManagerTest, TestCaching) {
20 nqe::internal::NetworkQualitiesManager network_qualities_manager;
21 base::SimpleTestTickClock tick_clock;
22
23 // Cached network quality for network with NetworkID (2G, "test1").
24 const nqe::internal::CachedNetworkQuality cached_network_quality_2g_test1(
25 tick_clock.NowTicks(),
26 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(1),
27 base::TimeDelta::FromSeconds(1), 1));
28
29 {
30 // Entry will be added for (2G, "test1").
31 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
32 "test1");
33 nqe::internal::CachedNetworkQuality read_network_quality(
34 tick_clock.NowTicks(),
35 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
36 base::TimeDelta::FromSeconds(0), 0));
37 network_qualities_manager.CacheNetworkQualityEstimate(
38 network_id, cached_network_quality_2g_test1);
39 EXPECT_TRUE(network_qualities_manager.GetCachedNetworkQualityEstimate(
40 network_id, &read_network_quality));
41 EXPECT_EQ(cached_network_quality_2g_test1.network_quality(),
42 read_network_quality.network_quality());
43 }
44
45 {
46 // Entry will be added for (2G, "test2").
47 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
48 "test2");
49 nqe::internal::CachedNetworkQuality read_network_quality(
50 tick_clock.NowTicks(),
51 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
52 base::TimeDelta::FromSeconds(0), 0));
53 nqe::internal::CachedNetworkQuality cached_network_quality(
54 tick_clock.NowTicks(),
55 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(2),
56 base::TimeDelta::FromSeconds(2), 2));
57 network_qualities_manager.CacheNetworkQualityEstimate(
58 network_id, cached_network_quality);
59 EXPECT_TRUE(network_qualities_manager.GetCachedNetworkQualityEstimate(
60 network_id, &read_network_quality));
61 EXPECT_EQ(read_network_quality.network_quality(),
62 cached_network_quality.network_quality());
63 }
64
65 {
66 // Entry will be added for (3G, "test3").
67 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_3G,
68 "test3");
69 nqe::internal::CachedNetworkQuality read_network_quality(
70 tick_clock.NowTicks(),
71 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
72 base::TimeDelta::FromSeconds(0), 0));
73 nqe::internal::CachedNetworkQuality cached_network_quality(
74 tick_clock.NowTicks(),
75 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(3),
76 base::TimeDelta::FromSeconds(3), 3));
77 network_qualities_manager.CacheNetworkQualityEstimate(
78 network_id, cached_network_quality);
79 EXPECT_TRUE(network_qualities_manager.GetCachedNetworkQualityEstimate(
80 network_id, &read_network_quality));
81 EXPECT_EQ(read_network_quality.network_quality(),
82 cached_network_quality.network_quality());
83 }
84
85 {
86 // Entry will not be added for (Unknown, "").
87 nqe::internal::NetworkID network_id(
88 NetworkChangeNotifier::CONNECTION_UNKNOWN, "");
89 nqe::internal::CachedNetworkQuality read_network_quality(
90 tick_clock.NowTicks(),
91 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
92 base::TimeDelta::FromSeconds(0), 0));
93 nqe::internal::CachedNetworkQuality set_network_quality(
94 tick_clock.NowTicks(),
95 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(4),
96 base::TimeDelta::FromSeconds(4), 4));
97 network_qualities_manager.CacheNetworkQualityEstimate(network_id,
98 set_network_quality);
99 EXPECT_FALSE(network_qualities_manager.GetCachedNetworkQualityEstimate(
100 network_id, &read_network_quality));
101 }
102
103 {
104 // Existing entry will be read for (2G, "test1").
105 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
106 "test1");
107 nqe::internal::CachedNetworkQuality read_network_quality(
108 tick_clock.NowTicks(),
109 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
110 base::TimeDelta::FromSeconds(0), 0));
111 EXPECT_TRUE(network_qualities_manager.GetCachedNetworkQualityEstimate(
112 network_id, &read_network_quality));
113 EXPECT_EQ(cached_network_quality_2g_test1.network_quality(),
114 read_network_quality.network_quality());
115 }
116
117 {
118 // Existing entry will be overwritten for (2G, "test1").
119 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
120 "test1");
121 nqe::internal::CachedNetworkQuality read_network_quality(
122 tick_clock.NowTicks(),
123 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
124 base::TimeDelta::FromSeconds(0), 0));
125 const nqe::internal::CachedNetworkQuality cached_network_quality(
126 tick_clock.NowTicks(),
127 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(5),
128 base::TimeDelta::FromSeconds(5), 5));
129 network_qualities_manager.CacheNetworkQualityEstimate(
130 network_id, cached_network_quality);
131 EXPECT_TRUE(network_qualities_manager.GetCachedNetworkQualityEstimate(
132 network_id, &read_network_quality));
133 EXPECT_EQ(cached_network_quality.network_quality(),
134 read_network_quality.network_quality());
135 }
136
137 {
138 // No entry should exist for (2G, "test4").
139 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
140 "test4");
141 nqe::internal::CachedNetworkQuality read_network_quality(
142 tick_clock.NowTicks(),
143 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
144 base::TimeDelta::FromSeconds(0), 0));
145 EXPECT_FALSE(network_qualities_manager.GetCachedNetworkQualityEstimate(
146 network_id, &read_network_quality));
147 }
148 }
149
150 // Tests if the cache size remains bounded. Also, ensure that the cache is
151 // LRU.
152 TEST(NetworkQualitiesManagerTest, TestLRUCacheMaximumSize) {
153 nqe::internal::NetworkQualitiesManager network_qualities_manager;
154 base::SimpleTestTickClock tick_clock;
155
156 // Add more networks than the maximum size of the cache.
157 const size_t network_count = 11;
158
159 nqe::internal::CachedNetworkQuality read_network_quality(
160 tick_clock.NowTicks(),
161 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
162 base::TimeDelta::FromSeconds(0), 0));
163
164 for (size_t i = 0; i < network_count; ++i) {
165 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
166 "test" + base::IntToString(i));
167
168 const nqe::internal::CachedNetworkQuality network_quality(
169 tick_clock.NowTicks(),
170 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(1),
171 base::TimeDelta::FromSeconds(1), 1));
172 network_qualities_manager.CacheNetworkQualityEstimate(network_id,
173 network_quality);
174 tick_clock.Advance(base::TimeDelta::FromSeconds(1));
175 }
176
177 base::TimeTicks earliest_last_update_time = tick_clock.NowTicks();
178 size_t cache_match_count = 0;
179 for (size_t i = 0; i < network_count; ++i) {
180 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
181 "test" + base::IntToString(i));
182
183 nqe::internal::CachedNetworkQuality read_network_quality(
184 tick_clock.NowTicks(),
185 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
186 base::TimeDelta::FromSeconds(0), 0));
187 if (network_qualities_manager.GetCachedNetworkQualityEstimate(
188 network_id, &read_network_quality)) {
189 cache_match_count++;
190 earliest_last_update_time = std::min(
191 earliest_last_update_time, read_network_quality.last_update_time());
192 }
193 }
194
195 // Ensure that the number of entries in cache are fewer than |network_count|.
196 EXPECT_LT(cache_match_count, network_count);
197 EXPECT_GT(cache_match_count, 0u);
198
199 // Ensure that only LRU entries are cached by comparing the
200 // |earliest_last_update_time|.
201 EXPECT_EQ(
202 tick_clock.NowTicks() - base::TimeDelta::FromSeconds(cache_match_count),
203 earliest_last_update_time);
204 }
205
206 } // namespace
207
208 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698