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

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

Powered by Google App Engine
This is Rietveld 408576698