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

Side by Side Diff: net/nqe/network_quality_store_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 asvitkine comments Created 4 years, 4 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
« no previous file with comments | « net/nqe/network_quality_store.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_quality_store.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(NetworkQualityStoreTest, TestCaching) {
20 nqe::internal::NetworkQualityStore network_quality_store;
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_quality_store.Add(network_id, cached_network_quality_2g_test1);
38 EXPECT_TRUE(
39 network_quality_store.GetById(network_id, &read_network_quality));
40 EXPECT_EQ(cached_network_quality_2g_test1.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_quality_store.Add(network_id, cached_network_quality);
57 EXPECT_TRUE(
58 network_quality_store.GetById(network_id, &read_network_quality));
59 EXPECT_EQ(read_network_quality.network_quality(),
60 cached_network_quality.network_quality());
61 }
62
63 {
64 // Entry will be added for (3G, "test3").
65 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_3G,
66 "test3");
67 nqe::internal::CachedNetworkQuality read_network_quality(
68 tick_clock.NowTicks(),
69 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
70 base::TimeDelta::FromSeconds(0), 0));
71 nqe::internal::CachedNetworkQuality cached_network_quality(
72 tick_clock.NowTicks(),
73 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(3),
74 base::TimeDelta::FromSeconds(3), 3));
75 network_quality_store.Add(network_id, cached_network_quality);
76 EXPECT_TRUE(
77 network_quality_store.GetById(network_id, &read_network_quality));
78 EXPECT_EQ(read_network_quality.network_quality(),
79 cached_network_quality.network_quality());
80 }
81
82 {
83 // Entry will not be added for (Unknown, "").
84 nqe::internal::NetworkID network_id(
85 NetworkChangeNotifier::CONNECTION_UNKNOWN, "");
86 nqe::internal::CachedNetworkQuality read_network_quality(
87 tick_clock.NowTicks(),
88 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
89 base::TimeDelta::FromSeconds(0), 0));
90 nqe::internal::CachedNetworkQuality set_network_quality(
91 tick_clock.NowTicks(),
92 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(4),
93 base::TimeDelta::FromSeconds(4), 4));
94 network_quality_store.Add(network_id, set_network_quality);
95 EXPECT_FALSE(
96 network_quality_store.GetById(network_id, &read_network_quality));
97 }
98
99 {
100 // Existing entry will be read for (2G, "test1").
101 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
102 "test1");
103 nqe::internal::CachedNetworkQuality read_network_quality(
104 tick_clock.NowTicks(),
105 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
106 base::TimeDelta::FromSeconds(0), 0));
107 EXPECT_TRUE(
108 network_quality_store.GetById(network_id, &read_network_quality));
109 EXPECT_EQ(cached_network_quality_2g_test1.network_quality(),
110 read_network_quality.network_quality());
111 }
112
113 {
114 // Existing entry will be overwritten for (2G, "test1").
115 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
116 "test1");
117 nqe::internal::CachedNetworkQuality read_network_quality(
118 tick_clock.NowTicks(),
119 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
120 base::TimeDelta::FromSeconds(0), 0));
121 const nqe::internal::CachedNetworkQuality cached_network_quality(
122 tick_clock.NowTicks(),
123 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(5),
124 base::TimeDelta::FromSeconds(5), 5));
125 network_quality_store.Add(network_id, cached_network_quality);
126 EXPECT_TRUE(
127 network_quality_store.GetById(network_id, &read_network_quality));
128 EXPECT_EQ(cached_network_quality.network_quality(),
129 read_network_quality.network_quality());
130 }
131
132 {
133 // No entry should exist for (2G, "test4").
134 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
135 "test4");
136 nqe::internal::CachedNetworkQuality read_network_quality(
137 tick_clock.NowTicks(),
138 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
139 base::TimeDelta::FromSeconds(0), 0));
140 EXPECT_FALSE(
141 network_quality_store.GetById(network_id, &read_network_quality));
142 }
143 }
144
145 // Tests if the cache size remains bounded. Also, ensure that the cache is
146 // LRU.
147 TEST(NetworkQualityStoreTest, TestLRUCacheMaximumSize) {
148 nqe::internal::NetworkQualityStore network_quality_store;
149 base::SimpleTestTickClock tick_clock;
150
151 // Add more networks than the maximum size of the cache.
152 const size_t network_count = 11;
153
154 nqe::internal::CachedNetworkQuality read_network_quality(
155 tick_clock.NowTicks(),
156 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
157 base::TimeDelta::FromSeconds(0), 0));
158
159 for (size_t i = 0; i < network_count; ++i) {
160 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
161 "test" + base::IntToString(i));
162
163 const nqe::internal::CachedNetworkQuality network_quality(
164 tick_clock.NowTicks(),
165 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(1),
166 base::TimeDelta::FromSeconds(1), 1));
167 network_quality_store.Add(network_id, network_quality);
168 tick_clock.Advance(base::TimeDelta::FromSeconds(1));
169 }
170
171 base::TimeTicks earliest_last_update_time = tick_clock.NowTicks();
172 size_t cache_match_count = 0;
173 for (size_t i = 0; i < network_count; ++i) {
174 nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
175 "test" + base::IntToString(i));
176
177 nqe::internal::CachedNetworkQuality read_network_quality(
178 tick_clock.NowTicks(),
179 nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
180 base::TimeDelta::FromSeconds(0), 0));
181 if (network_quality_store.GetById(network_id, &read_network_quality)) {
182 cache_match_count++;
183 earliest_last_update_time = std::min(
184 earliest_last_update_time, read_network_quality.last_update_time());
185 }
186 }
187
188 // Ensure that the number of entries in cache are fewer than |network_count|.
189 EXPECT_LT(cache_match_count, network_count);
190 EXPECT_GT(cache_match_count, 0u);
191
192 // Ensure that only LRU entries are cached by comparing the
193 // |earliest_last_update_time|.
194 EXPECT_EQ(
195 tick_clock.NowTicks() - base::TimeDelta::FromSeconds(cache_match_count),
196 earliest_last_update_time);
197 }
198
199 } // namespace
200
201 } // namespace net
OLDNEW
« no previous file with comments | « net/nqe/network_quality_store.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698