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

Side by Side Diff: chrome/browser/chromeos/file_system_provider/queue_unittest.cc

Issue 971303003: Simplify file_system_provider::Queue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/file_system_provider/queue.h" 5 #include "chrome/browser/chromeos/file_system_provider/queue.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/files/file.h" 9 #include "base/files/file.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 int second_abort_counter = 0; 63 int second_abort_counter = 0;
64 queue.Enqueue(second_token, 64 queue.Enqueue(second_token,
65 base::Bind(&OnRun, &second_counter, &second_abort_counter)); 65 base::Bind(&OnRun, &second_counter, &second_abort_counter));
66 66
67 base::RunLoop().RunUntilIdle(); 67 base::RunLoop().RunUntilIdle();
68 EXPECT_EQ(1, first_counter); 68 EXPECT_EQ(1, first_counter);
69 EXPECT_EQ(0, first_abort_counter); 69 EXPECT_EQ(0, first_abort_counter);
70 EXPECT_EQ(0, second_counter); 70 EXPECT_EQ(0, second_counter);
71 EXPECT_EQ(0, second_abort_counter); 71 EXPECT_EQ(0, second_abort_counter);
72 72
73 // Complete the first task, which should not run the second one, yet. 73 // Complete the first task from the queue should run the second task.
74 queue.Complete(first_token); 74 queue.Complete(first_token);
75 base::RunLoop().RunUntilIdle(); 75 base::RunLoop().RunUntilIdle();
76 EXPECT_EQ(1, first_counter); 76 EXPECT_EQ(1, first_counter);
77 EXPECT_EQ(0, first_abort_counter); 77 EXPECT_EQ(0, first_abort_counter);
78 EXPECT_EQ(0, second_counter);
79 EXPECT_EQ(0, second_abort_counter);
80
81 // Removing the first task from the queue should run the second task.
82 queue.Remove(first_token);
83 base::RunLoop().RunUntilIdle();
84 EXPECT_EQ(1, first_counter);
85 EXPECT_EQ(0, first_abort_counter);
86 EXPECT_EQ(1, second_counter); 78 EXPECT_EQ(1, second_counter);
87 EXPECT_EQ(0, second_abort_counter); 79 EXPECT_EQ(0, second_abort_counter);
88 80
89 const size_t third_token = queue.NewToken(); 81 const size_t third_token = queue.NewToken();
90 int third_counter = 0; 82 int third_counter = 0;
91 int third_abort_counter = 0; 83 int third_abort_counter = 0;
92 queue.Enqueue(third_token, 84 queue.Enqueue(third_token,
93 base::Bind(&OnRun, &third_counter, &third_abort_counter)); 85 base::Bind(&OnRun, &third_counter, &third_abort_counter));
94 86
95 // The second task is still running, so the third one is blocked. 87 // The second task is still running, so the third one is blocked.
96 base::RunLoop().RunUntilIdle(); 88 base::RunLoop().RunUntilIdle();
97 EXPECT_EQ(1, first_counter); 89 EXPECT_EQ(1, first_counter);
98 EXPECT_EQ(0, first_abort_counter); 90 EXPECT_EQ(0, first_abort_counter);
99 EXPECT_EQ(1, second_counter); 91 EXPECT_EQ(1, second_counter);
100 EXPECT_EQ(0, second_abort_counter); 92 EXPECT_EQ(0, second_abort_counter);
101 EXPECT_EQ(0, third_counter); 93 EXPECT_EQ(0, third_counter);
102 EXPECT_EQ(0, third_abort_counter); 94 EXPECT_EQ(0, third_abort_counter);
103 95
104 // After aborting the second task, the third should run. 96 // After aborting the second task, the third should run.
105 queue.Abort(second_token); 97 queue.Abort(second_token);
106 queue.Remove(second_token); 98 queue.Complete(second_token);
107 base::RunLoop().RunUntilIdle(); 99 base::RunLoop().RunUntilIdle();
108 EXPECT_EQ(1, first_counter); 100 EXPECT_EQ(1, first_counter);
109 EXPECT_EQ(0, first_abort_counter); 101 EXPECT_EQ(0, first_abort_counter);
110 EXPECT_EQ(1, second_counter); 102 EXPECT_EQ(1, second_counter);
111 EXPECT_EQ(1, second_abort_counter); 103 EXPECT_EQ(1, second_abort_counter);
112 EXPECT_EQ(1, third_counter); 104 EXPECT_EQ(1, third_counter);
113 EXPECT_EQ(0, third_abort_counter); 105 EXPECT_EQ(0, third_abort_counter);
114 } 106 }
115 107
116 TEST_F(FileSystemProviderQueueTest, Enqueue_WhilePreviousNotRemoved) {
117 Queue queue(1);
118 const size_t first_token = queue.NewToken();
119 int first_counter = 0;
120 int first_abort_counter = 0;
121 queue.Enqueue(first_token,
122 base::Bind(&OnRun, &first_counter, &first_abort_counter));
123
124 base::RunLoop().RunUntilIdle();
125 queue.Complete(first_token);
126
127 // Enqueuing a new task must not start it, once the queue is filled with a
128 // completed task.
129 const size_t second_token = queue.NewToken();
130 int second_counter = 0;
131 int second_abort_counter = 0;
132 queue.Enqueue(second_token,
133 base::Bind(&OnRun, &second_counter, &second_abort_counter));
134
135 base::RunLoop().RunUntilIdle();
136 EXPECT_EQ(0, second_counter);
137 EXPECT_EQ(0, second_abort_counter);
138 }
139
140 TEST_F(FileSystemProviderQueueTest, Enqueue_MultipleAtOnce) { 108 TEST_F(FileSystemProviderQueueTest, Enqueue_MultipleAtOnce) {
141 Queue queue(2); 109 Queue queue(2);
142 const size_t first_token = queue.NewToken(); 110 const size_t first_token = queue.NewToken();
143 int first_counter = 0; 111 int first_counter = 0;
144 int first_abort_counter = 0; 112 int first_abort_counter = 0;
145 queue.Enqueue(first_token, 113 queue.Enqueue(first_token,
146 base::Bind(&OnRun, &first_counter, &first_abort_counter)); 114 base::Bind(&OnRun, &first_counter, &first_abort_counter));
147 115
148 const size_t second_token = queue.NewToken(); 116 const size_t second_token = queue.NewToken();
149 int second_counter = 0; 117 int second_counter = 0;
(...skipping 10 matching lines...) Expand all
160 base::RunLoop().RunUntilIdle(); 128 base::RunLoop().RunUntilIdle();
161 EXPECT_EQ(1, first_counter); 129 EXPECT_EQ(1, first_counter);
162 EXPECT_EQ(0, first_abort_counter); 130 EXPECT_EQ(0, first_abort_counter);
163 EXPECT_EQ(1, second_counter); 131 EXPECT_EQ(1, second_counter);
164 EXPECT_EQ(0, second_abort_counter); 132 EXPECT_EQ(0, second_abort_counter);
165 EXPECT_EQ(0, third_counter); 133 EXPECT_EQ(0, third_counter);
166 EXPECT_EQ(0, third_abort_counter); 134 EXPECT_EQ(0, third_abort_counter);
167 135
168 // Completing and removing the second task, should start the last one. 136 // Completing and removing the second task, should start the last one.
169 queue.Complete(second_token); 137 queue.Complete(second_token);
170 queue.Remove(second_token);
171 base::RunLoop().RunUntilIdle(); 138 base::RunLoop().RunUntilIdle();
172 EXPECT_EQ(1, first_counter); 139 EXPECT_EQ(1, first_counter);
173 EXPECT_EQ(0, first_abort_counter); 140 EXPECT_EQ(0, first_abort_counter);
174 EXPECT_EQ(1, second_counter); 141 EXPECT_EQ(1, second_counter);
175 EXPECT_EQ(0, second_abort_counter); 142 EXPECT_EQ(0, second_abort_counter);
176 EXPECT_EQ(1, third_counter); 143 EXPECT_EQ(1, third_counter);
177 EXPECT_EQ(0, third_abort_counter); 144 EXPECT_EQ(0, third_abort_counter);
178 } 145 }
179 146
180 #if !defined(NDEBUG) && defined(GTEST_HAS_DEATH_TEST) 147 #if !defined(NDEBUG) && defined(GTEST_HAS_DEATH_TEST)
(...skipping 18 matching lines...) Expand all
199 Queue queue(1); 166 Queue queue(1);
200 const size_t first_token = queue.NewToken(); 167 const size_t first_token = queue.NewToken();
201 int first_counter = 0; 168 int first_counter = 0;
202 int first_abort_counter = 0; 169 int first_abort_counter = 0;
203 queue.Enqueue(first_token, 170 queue.Enqueue(first_token,
204 base::Bind(&OnRun, &first_counter, &first_abort_counter)); 171 base::Bind(&OnRun, &first_counter, &first_abort_counter));
205 172
206 // Completing and removing the first task, which however hasn't started. 173 // Completing and removing the first task, which however hasn't started.
207 // That should not invoke the second task. 174 // That should not invoke the second task.
208 EXPECT_DEATH(queue.Complete(first_token), ""); 175 EXPECT_DEATH(queue.Complete(first_token), "");
209 EXPECT_DEATH(queue.Remove(first_token), "");
210 } 176 }
211 177
212 TEST_F(FileSystemProviderQueueTest, InvalidUsage_RemoveNotCompletedNorAborted) { 178 TEST_F(FileSystemProviderQueueTest,
179 InvalidUsage_CompleteAfterAbortingNonExecutedTask) {
213 Queue queue(1); 180 Queue queue(1);
214 const size_t first_token = queue.NewToken(); 181 const size_t first_token = queue.NewToken();
215 int first_counter = 0; 182 int first_counter = 0;
216 int first_abort_counter = 0;
217 queue.Enqueue(first_token,
218 base::Bind(&OnRun, &first_counter, &first_abort_counter));
219
220 base::RunLoop().RunUntilIdle();
221
222 // Remove before completing.
223 EXPECT_DEATH(queue.Remove(first_token), "");
224 }
225
226 TEST_F(FileSystemProviderQueueTest, InvalidUsage_CompleteAfterAborting) {
227 Queue queue(1);
228 const size_t first_token = queue.NewToken();
229 int first_counter = 0;
230 int first_abort_counter = 0; 183 int first_abort_counter = 0;
231 queue.Enqueue(first_token, 184 queue.Enqueue(first_token,
232 base::Bind(&OnRun, &first_counter, &first_abort_counter)); 185 base::Bind(&OnRun, &first_counter, &first_abort_counter));
233 186
234 base::RunLoop().RunUntilIdle();
235
236 // Run, then abort.
237 std::vector<base::File::Error> first_abort_callback_log; 187 std::vector<base::File::Error> first_abort_callback_log;
238 queue.Abort(first_token); 188 queue.Abort(first_token);
239 189
240 EXPECT_DEATH(queue.Complete(first_token), ""); 190 EXPECT_DEATH(queue.Complete(first_token), "");
241 } 191 }
242 192
243 TEST_F(FileSystemProviderQueueTest, InvalidUsage_AbortAfterCompleting) { 193 TEST_F(FileSystemProviderQueueTest, InvalidUsage_AbortAfterCompleting) {
244 Queue queue(1); 194 Queue queue(1);
245 const size_t first_token = queue.NewToken(); 195 const size_t first_token = queue.NewToken();
246 int first_counter = 0; 196 int first_counter = 0;
(...skipping 28 matching lines...) Expand all
275 int first_abort_counter = 0; 225 int first_abort_counter = 0;
276 queue.Enqueue(first_token, 226 queue.Enqueue(first_token,
277 base::Bind(&OnRun, &first_counter, &first_abort_counter)); 227 base::Bind(&OnRun, &first_counter, &first_abort_counter));
278 228
279 base::RunLoop().RunUntilIdle(); 229 base::RunLoop().RunUntilIdle();
280 230
281 queue.Abort(first_token); 231 queue.Abort(first_token);
282 EXPECT_DEATH(queue.Abort(first_token), ""); 232 EXPECT_DEATH(queue.Abort(first_token), "");
283 } 233 }
284 234
285 TEST_F(FileSystemProviderQueueTest, InvalidUsage_IsAbortedWhileNotInQueue) {
286 Queue queue(1);
287 EXPECT_DEATH(queue.IsAborted(1234), "");
288 }
289
290 TEST_F(FileSystemProviderQueueTest, InvalidUsage_IsAbortedAfterRemoved) {
291 Queue queue(1);
292 const size_t first_token = queue.NewToken();
293 int first_counter = 0;
294 int first_abort_counter = 0;
295 queue.Enqueue(first_token,
296 base::Bind(&OnRun, &first_counter, &first_abort_counter));
297
298 base::RunLoop().RunUntilIdle();
299
300 queue.Abort(first_token);
301 queue.Remove(first_token);
302 EXPECT_DEATH(queue.IsAborted(first_token), "");
303 }
304
305 TEST_F(FileSystemProviderQueueTest, InvalidUsage_RemoveTwice) {
306 Queue queue(1);
307 const size_t first_token = queue.NewToken();
308 int first_counter = 0;
309 int first_abort_counter = 0;
310 queue.Enqueue(first_token,
311 base::Bind(&OnRun, &first_counter, &first_abort_counter));
312
313 base::RunLoop().RunUntilIdle();
314
315 queue.Complete(first_token);
316 queue.Remove(first_token);
317 EXPECT_DEATH(queue.Complete(first_token), "");
318 }
319
320 TEST_F(FileSystemProviderQueueTest, InvalidUsage_AbortAfterRemoving) {
321 Queue queue(1);
322 const size_t first_token = queue.NewToken();
323 int first_counter = 0;
324 int first_abort_counter = 0;
325 queue.Enqueue(first_token,
326 base::Bind(&OnRun, &first_counter, &first_abort_counter));
327
328 base::RunLoop().RunUntilIdle();
329
330 queue.Complete(first_token);
331 queue.Remove(first_token);
332 EXPECT_DEATH(queue.Abort(first_token), "");
333 }
334
335 TEST_F(FileSystemProviderQueueTest, InvalidUsage_CompleteAfterRemoving) {
336 Queue queue(1);
337 const size_t first_token = queue.NewToken();
338 int first_counter = 0;
339 int first_abort_counter = 0;
340 queue.Enqueue(first_token,
341 base::Bind(&OnRun, &first_counter, &first_abort_counter));
342
343 base::RunLoop().RunUntilIdle();
344
345 queue.Complete(first_token);
346 queue.Remove(first_token);
347 EXPECT_DEATH(queue.Complete(first_token), "");
348 }
349
350 TEST_F(FileSystemProviderQueueTest, InvalidUsage_AbortNonAbortable) { 235 TEST_F(FileSystemProviderQueueTest, InvalidUsage_AbortNonAbortable) {
351 Queue queue(1); 236 Queue queue(1);
352 const size_t first_token = queue.NewToken(); 237 const size_t first_token = queue.NewToken();
353 int first_counter = 0; 238 int first_counter = 0;
354 int first_abort_counter = 0; 239 int first_abort_counter = 0;
355 queue.Enqueue(first_token, base::Bind(&OnRunNonAbortable, &first_counter, 240 queue.Enqueue(first_token, base::Bind(&OnRunNonAbortable, &first_counter,
356 &first_abort_counter)); 241 &first_abort_counter));
357 242
358 base::RunLoop().RunUntilIdle(); 243 base::RunLoop().RunUntilIdle();
359 244
(...skipping 16 matching lines...) Expand all
376 queue.Enqueue(second_token, 261 queue.Enqueue(second_token,
377 base::Bind(&OnRun, &second_counter, &second_abort_counter)); 262 base::Bind(&OnRun, &second_counter, &second_abort_counter));
378 263
379 base::RunLoop().RunUntilIdle(); 264 base::RunLoop().RunUntilIdle();
380 EXPECT_EQ(1, first_counter); 265 EXPECT_EQ(1, first_counter);
381 EXPECT_EQ(0, first_abort_counter); 266 EXPECT_EQ(0, first_abort_counter);
382 EXPECT_EQ(0, second_counter); 267 EXPECT_EQ(0, second_counter);
383 EXPECT_EQ(0, second_abort_counter); 268 EXPECT_EQ(0, second_abort_counter);
384 269
385 // Abort the first task while it's being executed. 270 // Abort the first task while it's being executed.
386 EXPECT_FALSE(queue.IsAborted(first_token));
387 queue.Abort(first_token); 271 queue.Abort(first_token);
388 EXPECT_TRUE(queue.IsAborted(first_token)); 272 queue.Complete(first_token);
389 queue.Remove(first_token);
390 273
391 // Abort the second task, before it's started. 274 // Abort the second task, before it's started.
392 EXPECT_EQ(0, second_counter); 275 EXPECT_EQ(0, second_counter);
393 EXPECT_FALSE(queue.IsAborted(second_token));
394 queue.Abort(second_token); 276 queue.Abort(second_token);
395 EXPECT_TRUE(queue.IsAborted(second_token));
396 queue.Remove(second_token);
397 277
398 base::RunLoop().RunUntilIdle(); 278 base::RunLoop().RunUntilIdle();
399 EXPECT_EQ(1, first_counter); 279 EXPECT_EQ(1, first_counter);
400 EXPECT_EQ(1, first_abort_counter); 280 EXPECT_EQ(1, first_abort_counter);
401 EXPECT_EQ(0, second_counter); 281 EXPECT_EQ(0, second_counter);
402 EXPECT_EQ(0, second_abort_counter); 282 EXPECT_EQ(0, second_abort_counter);
403 } 283 }
404 284
405 } // namespace file_system_provider 285 } // namespace file_system_provider
406 } // namespace chromeos 286 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698