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

Side by Side Diff: net/base/prioritized_dispatcher_unittest.cc

Issue 1510513002: Remove ScopedVector from prioritized_dispatcher_unittest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move job owning to testcases Created 5 years 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <ctype.h> 5 #include <ctype.h>
6 #include <string> 6 #include <string>
Deprecated (see juliatuttle) 2015/12/16 20:28:24 This is no longer needed, since you're not storing
7 #include <vector>
7 8
8 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
9 #include "base/logging.h" 10 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/scoped_vector.h"
12 #include "net/base/prioritized_dispatcher.h" 12 #include "net/base/prioritized_dispatcher.h"
13 #include "net/base/request_priority.h" 13 #include "net/base/request_priority.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 namespace net { 16 namespace net {
17 17
18 namespace { 18 namespace {
19 19
20 // We rely on the priority enum values being sequential having starting at 0, 20 // We rely on the priority enum values being sequential having starting at 0,
21 // and increasing for higher priorities. 21 // and increasing for higher priorities.
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 bool running_; 132 bool running_;
133 133
134 std::string* log_; 134 std::string* log_;
135 }; 135 };
136 136
137 protected: 137 protected:
138 void Prepare(const PrioritizedDispatcher::Limits& limits) { 138 void Prepare(const PrioritizedDispatcher::Limits& limits) {
139 dispatcher_.reset(new PrioritizedDispatcher(limits)); 139 dispatcher_.reset(new PrioritizedDispatcher(limits));
140 } 140 }
141 141
142 TestJob* AddJob(char data, Priority priority) { 142 scoped_ptr<TestJob> AddJob(char data, Priority priority) {
143 TestJob* job = new TestJob(dispatcher_.get(), data, priority, &log_); 143 scoped_ptr<TestJob> job(
144 jobs_.push_back(job); 144 make_scoped_ptr(new TestJob(dispatcher_.get(), data, priority, &log_)));
Deprecated (see juliatuttle) 2015/12/16 20:28:24 You don't need make_scoped_ptr here; scoped_ptr ha
145 job->Add(false); 145 job->Add(false);
146 return job; 146 return job;
147 } 147 }
148 148
149 TestJob* AddJobAtHead(char data, Priority priority) { 149 scoped_ptr<TestJob> AddJobAtHead(char data, Priority priority) {
150 TestJob* job = new TestJob(dispatcher_.get(), data, priority, &log_); 150 scoped_ptr<TestJob> job(
151 jobs_.push_back(job); 151 make_scoped_ptr(new TestJob(dispatcher_.get(), data, priority, &log_)));
Deprecated (see juliatuttle) 2015/12/16 20:28:24 Ditto.
152 job->Add(true); 152 job->Add(true);
153 return job; 153 return job;
154 } 154 }
155 155
156 void Expect(const std::string& log) { 156 void Expect(const std::string& log) {
157 EXPECT_EQ(0u, dispatcher_->num_queued_jobs()); 157 EXPECT_EQ(0u, dispatcher_->num_queued_jobs());
158 EXPECT_EQ(0u, dispatcher_->num_running_jobs()); 158 EXPECT_EQ(0u, dispatcher_->num_running_jobs());
159 EXPECT_EQ(log, log_); 159 EXPECT_EQ(log, log_);
160 log_.clear(); 160 log_.clear();
161 } 161 }
162 162
163 std::string log_; 163 std::string log_;
164 scoped_ptr<PrioritizedDispatcher> dispatcher_; 164 scoped_ptr<PrioritizedDispatcher> dispatcher_;
165 ScopedVector<TestJob> jobs_;
166 }; 165 };
167 166
168 TEST_F(PrioritizedDispatcherTest, GetLimits) { 167 TEST_F(PrioritizedDispatcherTest, GetLimits) {
169 // Set non-trivial initial limits. 168 // Set non-trivial initial limits.
170 PrioritizedDispatcher::Limits original_limits(NUM_PRIORITIES, 5); 169 PrioritizedDispatcher::Limits original_limits(NUM_PRIORITIES, 5);
171 original_limits.reserved_slots[HIGHEST] = 1; 170 original_limits.reserved_slots[HIGHEST] = 1;
172 original_limits.reserved_slots[LOW] = 2; 171 original_limits.reserved_slots[LOW] = 2;
173 Prepare(original_limits); 172 Prepare(original_limits);
174 173
175 // Get current limits, make sure the original limits are returned. 174 // Get current limits, make sure the original limits are returned.
(...skipping 21 matching lines...) Expand all
197 EXPECT_EQ(new_limits.reserved_slots[priority], 196 EXPECT_EQ(new_limits.reserved_slots[priority],
198 retrieved_limits.reserved_slots[priority]); 197 retrieved_limits.reserved_slots[priority]);
199 } 198 }
200 } 199 }
201 200
202 TEST_F(PrioritizedDispatcherTest, AddAFIFO) { 201 TEST_F(PrioritizedDispatcherTest, AddAFIFO) {
203 // Allow only one running job. 202 // Allow only one running job.
204 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1); 203 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
205 Prepare(limits); 204 Prepare(limits);
206 205
207 TestJob* job_a = AddJob('a', IDLE); 206 scoped_ptr<TestJob> job_a = AddJob('a', IDLE);
208 TestJob* job_b = AddJob('b', IDLE); 207 scoped_ptr<TestJob> job_b = AddJob('b', IDLE);
209 TestJob* job_c = AddJob('c', IDLE); 208 scoped_ptr<TestJob> job_c = AddJob('c', IDLE);
210 TestJob* job_d = AddJob('d', IDLE); 209 scoped_ptr<TestJob> job_d = AddJob('d', IDLE);
211 210
212 ASSERT_TRUE(job_a->running()); 211 ASSERT_TRUE(job_a->running());
213 job_a->Finish(); 212 job_a->Finish();
214 ASSERT_TRUE(job_b->running()); 213 ASSERT_TRUE(job_b->running());
215 job_b->Finish(); 214 job_b->Finish();
216 ASSERT_TRUE(job_c->running()); 215 ASSERT_TRUE(job_c->running());
217 job_c->Finish(); 216 job_c->Finish();
218 ASSERT_TRUE(job_d->running()); 217 ASSERT_TRUE(job_d->running());
219 job_d->Finish(); 218 job_d->Finish();
220 219
221 Expect("a.b.c.d."); 220 Expect("a.b.c.d.");
222 } 221 }
223 222
224 TEST_F(PrioritizedDispatcherTest, AddPriority) { 223 TEST_F(PrioritizedDispatcherTest, AddPriority) {
225 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1); 224 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
226 Prepare(limits); 225 Prepare(limits);
227 226
228 TestJob* job_a = AddJob('a', IDLE); 227 scoped_ptr<TestJob> job_a = AddJob('a', IDLE);
229 TestJob* job_b = AddJob('b', MEDIUM); 228 scoped_ptr<TestJob> job_b = AddJob('b', MEDIUM);
230 TestJob* job_c = AddJob('c', HIGHEST); 229 scoped_ptr<TestJob> job_c = AddJob('c', HIGHEST);
231 TestJob* job_d = AddJob('d', HIGHEST); 230 scoped_ptr<TestJob> job_d = AddJob('d', HIGHEST);
232 TestJob* job_e = AddJob('e', MEDIUM); 231 scoped_ptr<TestJob> job_e = AddJob('e', MEDIUM);
233 232
234 ASSERT_TRUE(job_a->running()); 233 ASSERT_TRUE(job_a->running());
235 job_a->Finish(); 234 job_a->Finish();
236 ASSERT_TRUE(job_c->running()); 235 ASSERT_TRUE(job_c->running());
237 job_c->Finish(); 236 job_c->Finish();
238 ASSERT_TRUE(job_d->running()); 237 ASSERT_TRUE(job_d->running());
239 job_d->Finish(); 238 job_d->Finish();
240 ASSERT_TRUE(job_b->running()); 239 ASSERT_TRUE(job_b->running());
241 job_b->Finish(); 240 job_b->Finish();
242 ASSERT_TRUE(job_e->running()); 241 ASSERT_TRUE(job_e->running());
243 job_e->Finish(); 242 job_e->Finish();
244 243
245 Expect("a.c.d.b.e."); 244 Expect("a.c.d.b.e.");
246 } 245 }
247 246
248 TEST_F(PrioritizedDispatcherTest, AddAtHead) { 247 TEST_F(PrioritizedDispatcherTest, AddAtHead) {
249 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1); 248 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
250 Prepare(limits); 249 Prepare(limits);
251 250
252 TestJob* job_a = AddJob('a', MEDIUM); 251 scoped_ptr<TestJob> job_a = AddJob('a', MEDIUM);
253 TestJob* job_b = AddJobAtHead('b', MEDIUM); 252 scoped_ptr<TestJob> job_b = AddJobAtHead('b', MEDIUM);
254 TestJob* job_c = AddJobAtHead('c', HIGHEST); 253 scoped_ptr<TestJob> job_c = AddJobAtHead('c', HIGHEST);
255 TestJob* job_d = AddJobAtHead('d', HIGHEST); 254 scoped_ptr<TestJob> job_d = AddJobAtHead('d', HIGHEST);
256 TestJob* job_e = AddJobAtHead('e', MEDIUM); 255 scoped_ptr<TestJob> job_e = AddJobAtHead('e', MEDIUM);
257 TestJob* job_f = AddJob('f', MEDIUM); 256 scoped_ptr<TestJob> job_f = AddJob('f', MEDIUM);
258 257
259 ASSERT_TRUE(job_a->running()); 258 ASSERT_TRUE(job_a->running());
260 job_a->Finish(); 259 job_a->Finish();
261 ASSERT_TRUE(job_d->running()); 260 ASSERT_TRUE(job_d->running());
262 job_d->Finish(); 261 job_d->Finish();
263 ASSERT_TRUE(job_c->running()); 262 ASSERT_TRUE(job_c->running());
264 job_c->Finish(); 263 job_c->Finish();
265 ASSERT_TRUE(job_e->running()); 264 ASSERT_TRUE(job_e->running());
266 job_e->Finish(); 265 job_e->Finish();
267 ASSERT_TRUE(job_b->running()); 266 ASSERT_TRUE(job_b->running());
268 job_b->Finish(); 267 job_b->Finish();
269 ASSERT_TRUE(job_f->running()); 268 ASSERT_TRUE(job_f->running());
270 job_f->Finish(); 269 job_f->Finish();
271 270
272 Expect("a.d.c.e.b.f."); 271 Expect("a.d.c.e.b.f.");
273 } 272 }
274 273
275 TEST_F(PrioritizedDispatcherTest, EnforceLimits) { 274 TEST_F(PrioritizedDispatcherTest, EnforceLimits) {
276 // Reserve 2 for HIGHEST and 1 for LOW or higher. 275 // Reserve 2 for HIGHEST and 1 for LOW or higher.
277 // This leaves 2 for LOWEST or lower. 276 // This leaves 2 for LOWEST or lower.
278 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 5); 277 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 5);
279 limits.reserved_slots[HIGHEST] = 2; 278 limits.reserved_slots[HIGHEST] = 2;
280 limits.reserved_slots[LOW] = 1; 279 limits.reserved_slots[LOW] = 1;
281 Prepare(limits); 280 Prepare(limits);
282 281
283 TestJob* job_a = AddJob('a', IDLE); // Uses unreserved slot. 282 scoped_ptr<TestJob> job_a = AddJob('a', IDLE); // Uses unreserved slot.
284 TestJob* job_b = AddJob('b', IDLE); // Uses unreserved slot. 283 scoped_ptr<TestJob> job_b = AddJob('b', IDLE); // Uses unreserved slot.
285 TestJob* job_c = AddJob('c', LOWEST); // Must wait. 284 scoped_ptr<TestJob> job_c = AddJob('c', LOWEST); // Must wait.
286 TestJob* job_d = AddJob('d', LOW); // Uses reserved slot. 285 scoped_ptr<TestJob> job_d = AddJob('d', LOW); // Uses reserved slot.
287 TestJob* job_e = AddJob('e', MEDIUM); // Must wait. 286 scoped_ptr<TestJob> job_e = AddJob('e', MEDIUM); // Must wait.
288 TestJob* job_f = AddJob('f', HIGHEST); // Uses reserved slot. 287 scoped_ptr<TestJob> job_f = AddJob('f', HIGHEST); // Uses reserved slot.
289 TestJob* job_g = AddJob('g', HIGHEST); // Uses reserved slot. 288 scoped_ptr<TestJob> job_g = AddJob('g', HIGHEST); // Uses reserved slot.
290 TestJob* job_h = AddJob('h', HIGHEST); // Must wait. 289 scoped_ptr<TestJob> job_h = AddJob('h', HIGHEST); // Must wait.
291 290
292 EXPECT_EQ(5u, dispatcher_->num_running_jobs()); 291 EXPECT_EQ(5u, dispatcher_->num_running_jobs());
293 EXPECT_EQ(3u, dispatcher_->num_queued_jobs()); 292 EXPECT_EQ(3u, dispatcher_->num_queued_jobs());
294 293
295 ASSERT_TRUE(job_a->running()); 294 ASSERT_TRUE(job_a->running());
296 ASSERT_TRUE(job_b->running()); 295 ASSERT_TRUE(job_b->running());
297 ASSERT_TRUE(job_d->running()); 296 ASSERT_TRUE(job_d->running());
298 ASSERT_TRUE(job_f->running()); 297 ASSERT_TRUE(job_f->running());
299 ASSERT_TRUE(job_g->running()); 298 ASSERT_TRUE(job_g->running());
300 // a, b, d, f, g are running. Finish them in any order. 299 // a, b, d, f, g are running. Finish them in any order.
(...skipping 12 matching lines...) Expand all
313 312
314 Expect("abdfg.h...e..c.."); 313 Expect("abdfg.h...e..c..");
315 } 314 }
316 315
317 TEST_F(PrioritizedDispatcherTest, ChangePriority) { 316 TEST_F(PrioritizedDispatcherTest, ChangePriority) {
318 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 2); 317 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 2);
319 // Reserve one slot only for HIGHEST priority requests. 318 // Reserve one slot only for HIGHEST priority requests.
320 limits.reserved_slots[HIGHEST] = 1; 319 limits.reserved_slots[HIGHEST] = 1;
321 Prepare(limits); 320 Prepare(limits);
322 321
323 TestJob* job_a = AddJob('a', IDLE); 322 scoped_ptr<TestJob> job_a = AddJob('a', IDLE);
324 TestJob* job_b = AddJob('b', LOW); 323 scoped_ptr<TestJob> job_b = AddJob('b', LOW);
325 TestJob* job_c = AddJob('c', MEDIUM); 324 scoped_ptr<TestJob> job_c = AddJob('c', MEDIUM);
326 TestJob* job_d = AddJob('d', MEDIUM); 325 scoped_ptr<TestJob> job_d = AddJob('d', MEDIUM);
327 TestJob* job_e = AddJob('e', IDLE); 326 scoped_ptr<TestJob> job_e = AddJob('e', IDLE);
328 327
329 ASSERT_FALSE(job_b->running()); 328 ASSERT_FALSE(job_b->running());
330 ASSERT_FALSE(job_c->running()); 329 ASSERT_FALSE(job_c->running());
331 job_b->ChangePriority(MEDIUM); 330 job_b->ChangePriority(MEDIUM);
332 job_c->ChangePriority(LOW); 331 job_c->ChangePriority(LOW);
333 332
334 ASSERT_TRUE(job_a->running()); 333 ASSERT_TRUE(job_a->running());
335 job_a->Finish(); 334 job_a->Finish();
336 ASSERT_TRUE(job_d->running()); 335 ASSERT_TRUE(job_d->running());
337 job_d->Finish(); 336 job_d->Finish();
(...skipping 10 matching lines...) Expand all
348 ASSERT_TRUE(job_c->running()); 347 ASSERT_TRUE(job_c->running());
349 job_c->Finish(); 348 job_c->Finish();
350 349
351 Expect("a.d.be..c."); 350 Expect("a.d.be..c.");
352 } 351 }
353 352
354 TEST_F(PrioritizedDispatcherTest, Cancel) { 353 TEST_F(PrioritizedDispatcherTest, Cancel) {
355 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1); 354 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
356 Prepare(limits); 355 Prepare(limits);
357 356
358 TestJob* job_a = AddJob('a', IDLE); 357 scoped_ptr<TestJob> job_a = AddJob('a', IDLE);
359 TestJob* job_b = AddJob('b', IDLE); 358 scoped_ptr<TestJob> job_b = AddJob('b', IDLE);
360 TestJob* job_c = AddJob('c', IDLE); 359 scoped_ptr<TestJob> job_c = AddJob('c', IDLE);
361 TestJob* job_d = AddJob('d', IDLE); 360 scoped_ptr<TestJob> job_d = AddJob('d', IDLE);
362 TestJob* job_e = AddJob('e', IDLE); 361 scoped_ptr<TestJob> job_e = AddJob('e', IDLE);
363 362
364 ASSERT_FALSE(job_b->running()); 363 ASSERT_FALSE(job_b->running());
365 ASSERT_FALSE(job_d->running()); 364 ASSERT_FALSE(job_d->running());
366 job_b->Cancel(); 365 job_b->Cancel();
367 job_d->Cancel(); 366 job_d->Cancel();
368 367
369 ASSERT_TRUE(job_a->running()); 368 ASSERT_TRUE(job_a->running());
370 job_a->Finish(); 369 job_a->Finish();
371 ASSERT_TRUE(job_c->running()); 370 ASSERT_TRUE(job_c->running());
372 job_c->Finish(); 371 job_c->Finish();
373 ASSERT_TRUE(job_e->running()); 372 ASSERT_TRUE(job_e->running());
374 job_e->Finish(); 373 job_e->Finish();
375 374
376 Expect("a.c.e."); 375 Expect("a.c.e.");
377 } 376 }
378 377
379 TEST_F(PrioritizedDispatcherTest, Evict) { 378 TEST_F(PrioritizedDispatcherTest, Evict) {
380 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1); 379 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
381 Prepare(limits); 380 Prepare(limits);
382 381
383 TestJob* job_a = AddJob('a', IDLE); 382 scoped_ptr<TestJob> job_a = AddJob('a', IDLE);
384 TestJob* job_b = AddJob('b', LOW); 383 scoped_ptr<TestJob> job_b = AddJob('b', LOW);
385 TestJob* job_c = AddJob('c', HIGHEST); 384 scoped_ptr<TestJob> job_c = AddJob('c', HIGHEST);
386 TestJob* job_d = AddJob('d', LOW); 385 scoped_ptr<TestJob> job_d = AddJob('d', LOW);
387 TestJob* job_e = AddJob('e', HIGHEST); 386 scoped_ptr<TestJob> job_e = AddJob('e', HIGHEST);
388 387
389 EXPECT_EQ(job_b, dispatcher_->EvictOldestLowest()); 388 EXPECT_EQ(job_b.get(), dispatcher_->EvictOldestLowest());
390 EXPECT_EQ(job_d, dispatcher_->EvictOldestLowest()); 389 EXPECT_EQ(job_d.get(), dispatcher_->EvictOldestLowest());
391 390
392 ASSERT_TRUE(job_a->running()); 391 ASSERT_TRUE(job_a->running());
393 job_a->Finish(); 392 job_a->Finish();
394 ASSERT_TRUE(job_c->running()); 393 ASSERT_TRUE(job_c->running());
395 job_c->Finish(); 394 job_c->Finish();
396 ASSERT_TRUE(job_e->running()); 395 ASSERT_TRUE(job_e->running());
397 job_e->Finish(); 396 job_e->Finish();
398 397
399 Expect("a.c.e."); 398 Expect("a.c.e.");
400 } 399 }
401 400
402 TEST_F(PrioritizedDispatcherTest, EvictFromEmpty) { 401 TEST_F(PrioritizedDispatcherTest, EvictFromEmpty) {
403 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1); 402 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
404 Prepare(limits); 403 Prepare(limits);
405 EXPECT_TRUE(dispatcher_->EvictOldestLowest() == NULL); 404 EXPECT_TRUE(dispatcher_->EvictOldestLowest() == NULL);
406 } 405 }
407 406
408 TEST_F(PrioritizedDispatcherTest, AddWhileZeroLimits) { 407 TEST_F(PrioritizedDispatcherTest, AddWhileZeroLimits) {
409 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 2); 408 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 2);
410 Prepare(limits); 409 Prepare(limits);
411 410
412 dispatcher_->SetLimitsToZero(); 411 dispatcher_->SetLimitsToZero();
413 TestJob* job_a = AddJob('a', LOW); 412 scoped_ptr<TestJob> job_a = AddJob('a', LOW);
414 TestJob* job_b = AddJob('b', MEDIUM); 413 scoped_ptr<TestJob> job_b = AddJob('b', MEDIUM);
415 TestJob* job_c = AddJobAtHead('c', MEDIUM); 414 scoped_ptr<TestJob> job_c = AddJobAtHead('c', MEDIUM);
416 415
417 EXPECT_EQ(0u, dispatcher_->num_running_jobs()); 416 EXPECT_EQ(0u, dispatcher_->num_running_jobs());
418 EXPECT_EQ(3u, dispatcher_->num_queued_jobs()); 417 EXPECT_EQ(3u, dispatcher_->num_queued_jobs());
419 418
420 dispatcher_->SetLimits(limits); 419 dispatcher_->SetLimits(limits);
421 EXPECT_EQ(2u, dispatcher_->num_running_jobs()); 420 EXPECT_EQ(2u, dispatcher_->num_running_jobs());
422 EXPECT_EQ(1u, dispatcher_->num_queued_jobs()); 421 EXPECT_EQ(1u, dispatcher_->num_queued_jobs());
423 422
424 ASSERT_TRUE(job_b->running()); 423 ASSERT_TRUE(job_b->running());
425 job_b->Finish(); 424 job_b->Finish();
426 425
427 ASSERT_TRUE(job_c->running()); 426 ASSERT_TRUE(job_c->running());
428 job_c->Finish(); 427 job_c->Finish();
429 428
430 ASSERT_TRUE(job_a->running()); 429 ASSERT_TRUE(job_a->running());
431 job_a->Finish(); 430 job_a->Finish();
432 431
433 Expect("cb.a.."); 432 Expect("cb.a..");
434 } 433 }
435 434
436 TEST_F(PrioritizedDispatcherTest, ReduceLimitsWhileJobQueued) { 435 TEST_F(PrioritizedDispatcherTest, ReduceLimitsWhileJobQueued) {
437 PrioritizedDispatcher::Limits initial_limits(NUM_PRIORITIES, 2); 436 PrioritizedDispatcher::Limits initial_limits(NUM_PRIORITIES, 2);
438 Prepare(initial_limits); 437 Prepare(initial_limits);
439 438
440 TestJob* job_a = AddJob('a', MEDIUM); 439 scoped_ptr<TestJob> job_a = AddJob('a', MEDIUM);
441 TestJob* job_b = AddJob('b', MEDIUM); 440 scoped_ptr<TestJob> job_b = AddJob('b', MEDIUM);
442 TestJob* job_c = AddJob('c', MEDIUM); 441 scoped_ptr<TestJob> job_c = AddJob('c', MEDIUM);
443 TestJob* job_d = AddJob('d', MEDIUM); 442 scoped_ptr<TestJob> job_d = AddJob('d', MEDIUM);
444 TestJob* job_e = AddJob('e', MEDIUM); 443 scoped_ptr<TestJob> job_e = AddJob('e', MEDIUM);
445 444
446 EXPECT_EQ(2u, dispatcher_->num_running_jobs()); 445 EXPECT_EQ(2u, dispatcher_->num_running_jobs());
447 EXPECT_EQ(3u, dispatcher_->num_queued_jobs()); 446 EXPECT_EQ(3u, dispatcher_->num_queued_jobs());
448 447
449 // Reduce limits to just allow one job at a time. Running jobs should not 448 // Reduce limits to just allow one job at a time. Running jobs should not
450 // be affected. 449 // be affected.
451 dispatcher_->SetLimits(PrioritizedDispatcher::Limits(NUM_PRIORITIES, 1)); 450 dispatcher_->SetLimits(PrioritizedDispatcher::Limits(NUM_PRIORITIES, 1));
452 451
453 EXPECT_EQ(2u, dispatcher_->num_running_jobs()); 452 EXPECT_EQ(2u, dispatcher_->num_running_jobs());
454 EXPECT_EQ(3u, dispatcher_->num_queued_jobs()); 453 EXPECT_EQ(3u, dispatcher_->num_queued_jobs());
(...skipping 19 matching lines...) Expand all
474 ASSERT_TRUE(job_e->running()); 473 ASSERT_TRUE(job_e->running());
475 job_e->Finish(); 474 job_e->Finish();
476 475
477 Expect("ab..cd.e.."); 476 Expect("ab..cd.e..");
478 } 477 }
479 478
480 TEST_F(PrioritizedDispatcherTest, ZeroLimitsThenCancel) { 479 TEST_F(PrioritizedDispatcherTest, ZeroLimitsThenCancel) {
481 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1); 480 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
482 Prepare(limits); 481 Prepare(limits);
483 482
484 TestJob* job_a = AddJob('a', IDLE); 483 scoped_ptr<TestJob> job_a = AddJob('a', IDLE);
485 TestJob* job_b = AddJob('b', IDLE); 484 scoped_ptr<TestJob> job_b = AddJob('b', IDLE);
486 TestJob* job_c = AddJob('c', IDLE); 485 scoped_ptr<TestJob> job_c = AddJob('c', IDLE);
487 dispatcher_->SetLimitsToZero(); 486 dispatcher_->SetLimitsToZero();
488 487
489 ASSERT_TRUE(job_a->running()); 488 ASSERT_TRUE(job_a->running());
490 EXPECT_FALSE(job_b->running()); 489 EXPECT_FALSE(job_b->running());
491 EXPECT_FALSE(job_c->running()); 490 EXPECT_FALSE(job_c->running());
492 job_a->Finish(); 491 job_a->Finish();
493 492
494 EXPECT_FALSE(job_b->running()); 493 EXPECT_FALSE(job_b->running());
495 EXPECT_FALSE(job_c->running()); 494 EXPECT_FALSE(job_c->running());
496 495
497 // Cancelling b shouldn't start job c. 496 // Cancelling b shouldn't start job c.
498 job_b->Cancel(); 497 job_b->Cancel();
499 EXPECT_FALSE(job_c->running()); 498 EXPECT_FALSE(job_c->running());
500 499
501 // Restoring the limits should start c. 500 // Restoring the limits should start c.
502 dispatcher_->SetLimits(limits); 501 dispatcher_->SetLimits(limits);
503 ASSERT_TRUE(job_c->running()); 502 ASSERT_TRUE(job_c->running());
504 job_c->Finish(); 503 job_c->Finish();
505 504
506 Expect("a.c."); 505 Expect("a.c.");
507 } 506 }
508 507
509 TEST_F(PrioritizedDispatcherTest, ZeroLimitsThenIncreasePriority) { 508 TEST_F(PrioritizedDispatcherTest, ZeroLimitsThenIncreasePriority) {
510 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 2); 509 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 2);
511 limits.reserved_slots[HIGHEST] = 1; 510 limits.reserved_slots[HIGHEST] = 1;
512 Prepare(limits); 511 Prepare(limits);
513 512
514 TestJob* job_a = AddJob('a', IDLE); 513 scoped_ptr<TestJob> job_a = AddJob('a', IDLE);
515 TestJob* job_b = AddJob('b', IDLE); 514 scoped_ptr<TestJob> job_b = AddJob('b', IDLE);
516 EXPECT_TRUE(job_a->running()); 515 EXPECT_TRUE(job_a->running());
517 EXPECT_FALSE(job_b->running()); 516 EXPECT_FALSE(job_b->running());
518 dispatcher_->SetLimitsToZero(); 517 dispatcher_->SetLimitsToZero();
519 518
520 job_b->ChangePriority(HIGHEST); 519 job_b->ChangePriority(HIGHEST);
521 EXPECT_FALSE(job_b->running()); 520 EXPECT_FALSE(job_b->running());
522 job_a->Finish(); 521 job_a->Finish();
523 EXPECT_FALSE(job_b->running()); 522 EXPECT_FALSE(job_b->running());
524 523
525 job_b->Cancel(); 524 job_b->Cancel();
526 Expect("a."); 525 Expect("a.");
527 } 526 }
528 527
529 #if GTEST_HAS_DEATH_TEST && !defined(NDEBUG) 528 #if GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
530 TEST_F(PrioritizedDispatcherTest, CancelNull) { 529 TEST_F(PrioritizedDispatcherTest, CancelNull) {
531 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1); 530 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
532 Prepare(limits); 531 Prepare(limits);
533 EXPECT_DEBUG_DEATH(dispatcher_->Cancel(PrioritizedDispatcher::Handle()), ""); 532 EXPECT_DEBUG_DEATH(dispatcher_->Cancel(PrioritizedDispatcher::Handle()), "");
534 } 533 }
535 534
536 TEST_F(PrioritizedDispatcherTest, CancelMissing) { 535 TEST_F(PrioritizedDispatcherTest, CancelMissing) {
537 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1); 536 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
538 Prepare(limits); 537 Prepare(limits);
539 AddJob('a', IDLE); 538 AddJob('a', IDLE);
540 TestJob* job_b = AddJob('b', IDLE); 539 scoped_ptr<TestJob> job_b = AddJob('b', IDLE);
541 PrioritizedDispatcher::Handle handle = job_b->handle(); 540 PrioritizedDispatcher::Handle handle = job_b->handle();
542 ASSERT_FALSE(handle.is_null()); 541 ASSERT_FALSE(handle.is_null());
543 dispatcher_->Cancel(handle); 542 dispatcher_->Cancel(handle);
544 EXPECT_DEBUG_DEATH(dispatcher_->Cancel(handle), ""); 543 EXPECT_DEBUG_DEATH(dispatcher_->Cancel(handle), "");
545 } 544 }
546 #endif // GTEST_HAS_DEATH_TEST && !defined(NDEBUG) 545 #endif // GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
547 546
548 } // namespace 547 } // namespace
549 548
550 } // namespace net 549 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698