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

Side by Side Diff: chrome/browser/extensions/api/feedback_private/log_source_access_manager_unittest.cc

Issue 2840103002: Add new API function: feedbackPrivate.readLogSource (Closed)
Patch Set: Rebased; updated histogram enum Created 3 years, 6 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 2017 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 "chrome/browser/extensions/api/feedback_private/log_source_access_manag er.h"
6
7 #include <string>
8 #include <utility>
9
10 #include "base/macros.h"
11 #include "base/test/simple_test_tick_clock.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace extensions {
15
16 namespace {
17
18 using extensions::api::feedback_private::LOG_SOURCE_MESSAGES;
19 using extensions::api::feedback_private::LOG_SOURCE_UI_LATEST;
20 using SourceAndExtension = LogSourceAccessManager::SourceAndExtension;
21
22 } // namespace
23
24 TEST(LogSourceAccessManagerTest, Empty) {
25 LogSourceAccessManager manager;
26
27 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
28 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
29 EXPECT_TRUE(manager
30 .GetLastExtensionAccessTime(
31 SourceAndExtension(LOG_SOURCE_UI_LATEST, ""))
32 .is_null());
33 }
34
35 TEST(LogSourceAccessManagerTest, OneSourceOneExtension) {
36 LogSourceAccessManager manager;
37
38 const SourceAndExtension key(LOG_SOURCE_MESSAGES, "aaaa");
39
40 EXPECT_TRUE(manager.AddExtension(key));
41 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
42 EXPECT_FALSE(manager.AddExtension(key));
43 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
44
45 EXPECT_TRUE(manager.RemoveExtension(key));
46 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
47 EXPECT_FALSE(manager.RemoveExtension(key));
48 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
49 }
50
51 TEST(LogSourceAccessManagerTest, OneSourceMultipleExtensions) {
52 LogSourceAccessManager manager;
53
54 const SourceAndExtension key_a(LOG_SOURCE_MESSAGES, "aaaa");
55 const SourceAndExtension key_b(LOG_SOURCE_MESSAGES, "bbbb");
56 const SourceAndExtension key_c(LOG_SOURCE_MESSAGES, "cccc");
57 const SourceAndExtension key_d(LOG_SOURCE_MESSAGES, "dddd");
58
59 // Add extensions "aaaa", "bbbb", and "cccc".
60 EXPECT_TRUE(manager.AddExtension(key_a));
61 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
62 EXPECT_FALSE(manager.AddExtension(key_a));
63 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
64
65 EXPECT_TRUE(manager.AddExtension(key_b));
66 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
67 EXPECT_FALSE(manager.AddExtension(key_b));
68 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
69
70 EXPECT_TRUE(manager.AddExtension(key_c));
71 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
72 EXPECT_FALSE(manager.AddExtension(key_c));
73 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
74
75 // Remove extensions "bbbb" and "aaaa".
76 EXPECT_TRUE(manager.RemoveExtension(key_b));
77 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
78 EXPECT_FALSE(manager.RemoveExtension(key_b));
79 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
80
81 EXPECT_TRUE(manager.RemoveExtension(key_a));
82 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
83 EXPECT_FALSE(manager.RemoveExtension(key_a));
84 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
85
86 // Add extension "dddd".
87 EXPECT_TRUE(manager.AddExtension(key_d));
88 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
89 EXPECT_FALSE(manager.AddExtension(key_d));
90 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
91
92 // Remove extensions "cccc" and "dddd".
93 EXPECT_TRUE(manager.RemoveExtension(key_c));
94 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
95 EXPECT_FALSE(manager.RemoveExtension(key_c));
96 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
97
98 EXPECT_TRUE(manager.RemoveExtension(key_d));
99 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
100 EXPECT_FALSE(manager.RemoveExtension(key_d));
101 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
102 }
103
104 TEST(LogSourceAccessManagerTest, MultipleSourcesMultipleExtensions) {
105 LogSourceAccessManager manager;
106
107 const SourceAndExtension key_a0(LOG_SOURCE_MESSAGES, "aaaa");
108 const SourceAndExtension key_a1(LOG_SOURCE_UI_LATEST, "aaaa");
109 const SourceAndExtension key_b0(LOG_SOURCE_MESSAGES, "bbbb");
110 const SourceAndExtension key_b1(LOG_SOURCE_UI_LATEST, "bbbb");
111 const SourceAndExtension key_c0(LOG_SOURCE_MESSAGES, "cccc");
112 const SourceAndExtension key_c1(LOG_SOURCE_UI_LATEST, "cccc");
113
114 // Add the above entries.
115 EXPECT_TRUE(manager.AddExtension(key_a0));
116 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
117 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
118 EXPECT_TRUE(manager.AddExtension(key_a1));
119 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
120 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
121 EXPECT_FALSE(manager.AddExtension(key_a0));
122 EXPECT_FALSE(manager.AddExtension(key_a1));
123 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
124 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
125
126 EXPECT_TRUE(manager.AddExtension(key_b0));
127 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
128 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
129 EXPECT_TRUE(manager.AddExtension(key_b1));
130 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
131 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
132 EXPECT_FALSE(manager.AddExtension(key_b0));
133 EXPECT_FALSE(manager.AddExtension(key_b1));
134 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
135 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
136
137 EXPECT_TRUE(manager.AddExtension(key_c1));
138 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
139 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
140 EXPECT_FALSE(manager.AddExtension(key_c1));
141 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
142 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
143 EXPECT_TRUE(manager.AddExtension(key_c0));
144 EXPECT_FALSE(manager.AddExtension(key_c0));
145 EXPECT_FALSE(manager.AddExtension(key_c1));
146 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
147 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
148
149 // Remove all the entries.
150 EXPECT_TRUE(manager.RemoveExtension(key_a0));
151 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
152 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
153 EXPECT_FALSE(manager.RemoveExtension(key_a0));
154 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
155 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
156
157 EXPECT_TRUE(manager.RemoveExtension(key_b0));
158 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
159 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
160 EXPECT_FALSE(manager.RemoveExtension(key_b0));
161 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
162 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
163
164 EXPECT_TRUE(manager.RemoveExtension(key_c0));
165 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
166 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
167 EXPECT_FALSE(manager.RemoveExtension(key_c0));
168 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
169 EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
170
171 EXPECT_TRUE(manager.RemoveExtension(key_c1));
172 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
173 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
174 EXPECT_FALSE(manager.RemoveExtension(key_c1));
175 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
176 EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
177
178 EXPECT_TRUE(manager.RemoveExtension(key_b1));
179 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
180 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
181 EXPECT_FALSE(manager.RemoveExtension(key_b1));
182 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
183 EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
184
185 EXPECT_TRUE(manager.RemoveExtension(key_a1));
186 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
187 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
188 EXPECT_FALSE(manager.RemoveExtension(key_a1));
189 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
190 EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
191 }
192
193 TEST(LogSourceAccessManagerTest, LastAccessTime) {
194 auto MakeTimeInterval = &base::TimeDelta::FromInternalValue;
195 const base::TimeDelta rate_limiting_interval = MakeTimeInterval(100);
196 LogSourceAccessManager::SetRateLimitingTimeoutForTesting(
197 &rate_limiting_interval);
198
199 LogSourceAccessManager manager;
200
201 // Override the default clock for testing. Initialize it to a non-zero
202 // internal value.
203 std::unique_ptr<base::SimpleTestTickClock> test_clock(
204 new base::SimpleTestTickClock);
205 test_clock->Advance(MakeTimeInterval(100));
206
207 // Pass ownership to |manager|, but keep a pointer to it so that the clock can
208 // be updated.
209 base::SimpleTestTickClock* test_clock_ptr = test_clock.get();
210 manager.set_tick_clock(
211 std::unique_ptr<base::TickClock>(test_clock.release()));
212
213 const SourceAndExtension key_a0(LOG_SOURCE_MESSAGES, "aaaa");
214 const SourceAndExtension key_a1(LOG_SOURCE_UI_LATEST, "aaaa");
215 const SourceAndExtension key_b0(LOG_SOURCE_MESSAGES, "bbbb");
216 const SourceAndExtension key_b1(LOG_SOURCE_UI_LATEST, "bbbb");
217 const SourceAndExtension key_c0(LOG_SOURCE_MESSAGES, "cccc");
218 const SourceAndExtension key_c1(LOG_SOURCE_UI_LATEST, "cccc");
219
220 // No timestamps present for any of the keys.
221 EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
222 EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
223 EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
224 EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
225 EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
226 EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
227
228 // Access each key for the first time.
229 EXPECT_TRUE(manager.AccessSourceFromExtension(key_a0));
230 EXPECT_TRUE(manager.AccessSourceFromExtension(key_b0));
231 EXPECT_TRUE(manager.AccessSourceFromExtension(key_c0));
232 // Add a time gap in between.
233 test_clock_ptr->Advance(MakeTimeInterval(20));
234 EXPECT_TRUE(manager.AccessSourceFromExtension(key_a1));
235 EXPECT_TRUE(manager.AccessSourceFromExtension(key_b1));
236 EXPECT_TRUE(manager.AccessSourceFromExtension(key_c1));
237
238 // Each key should now have a last access timestamp.
239 EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
240 EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
241 EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
242 EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
243 EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
244 EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
245
246 // Cannot access them again for now.
247 EXPECT_FALSE(manager.AccessSourceFromExtension(key_a0));
248 EXPECT_FALSE(manager.AccessSourceFromExtension(key_b0));
249 EXPECT_FALSE(manager.AccessSourceFromExtension(key_c0));
250 EXPECT_FALSE(manager.AccessSourceFromExtension(key_a1));
251 EXPECT_FALSE(manager.AccessSourceFromExtension(key_b1));
252 EXPECT_FALSE(manager.AccessSourceFromExtension(key_c1));
253
254 // Make sure existing timestamps are unchanged.
255 EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
256 EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
257 EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
258 EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
259 EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
260 EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
261
262 // Advance by enough to access some of the sources. 120 + 90 = 210.
263 test_clock_ptr->Advance(MakeTimeInterval(90));
264
265 EXPECT_TRUE(manager.AccessSourceFromExtension(key_a0));
266 EXPECT_TRUE(manager.AccessSourceFromExtension(key_b0));
267 EXPECT_TRUE(manager.AccessSourceFromExtension(key_c0));
268 // Not enough time has passed for these to be accessible.
269 EXPECT_FALSE(manager.AccessSourceFromExtension(key_a1));
270 EXPECT_FALSE(manager.AccessSourceFromExtension(key_b1));
271 EXPECT_FALSE(manager.AccessSourceFromExtension(key_c1));
272
273 // Check for both updated and unchanged timestamps
274 EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
275 EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
276 EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
277 EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
278 EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
279 EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
280
281 // Now move forward in time far enough to update the previously unchanged
282 // timestamps, but far enough to update the ones that were just updated.
283 // 210 + 90 = 300.
284 test_clock_ptr->Advance(MakeTimeInterval(90));
285
286 EXPECT_FALSE(manager.AccessSourceFromExtension(key_a0));
287 EXPECT_FALSE(manager.AccessSourceFromExtension(key_b0));
288 EXPECT_FALSE(manager.AccessSourceFromExtension(key_c0));
289 EXPECT_TRUE(manager.AccessSourceFromExtension(key_a1));
290 EXPECT_TRUE(manager.AccessSourceFromExtension(key_b1));
291 EXPECT_TRUE(manager.AccessSourceFromExtension(key_c1));
292
293 // Check timestamps.
294 EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
295 EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
296 EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
297 EXPECT_EQ(300U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
298 EXPECT_EQ(300U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
299 EXPECT_EQ(300U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
300 }
301
302 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698