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

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

Issue 19498003: [net/dns] Perform A/AAAA queries for AF_UNSPEC resolutions in parallel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Add at front, more unit tests Created 7 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 | Annotate | Revision Log
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>
7 7
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 log_(log) {} 45 log_(log) {}
46 46
47 bool running() const { 47 bool running() const {
48 return running_; 48 return running_;
49 } 49 }
50 50
51 const PrioritizedDispatcher::Handle handle() const { 51 const PrioritizedDispatcher::Handle handle() const {
52 return handle_; 52 return handle_;
53 } 53 }
54 54
55 void Add() { 55 void Add(bool at_head) {
56 CHECK(handle_.is_null()); 56 CHECK(handle_.is_null());
57 CHECK(!running_); 57 CHECK(!running_);
58 size_t num_queued = dispatcher_->num_queued_jobs(); 58 size_t num_queued = dispatcher_->num_queued_jobs();
59 size_t num_running = dispatcher_->num_running_jobs(); 59 size_t num_running = dispatcher_->num_running_jobs();
60 60
61 handle_ = dispatcher_->Add(this, priority_); 61 if (!at_head) {
62 handle_ = dispatcher_->Add(this, priority_);
63 } else {
64 handle_ = dispatcher_->AddAtHead(this, priority_);
65 }
62 66
63 if (handle_.is_null()) { 67 if (handle_.is_null()) {
64 EXPECT_EQ(num_queued, dispatcher_->num_queued_jobs()); 68 EXPECT_EQ(num_queued, dispatcher_->num_queued_jobs());
65 EXPECT_TRUE(running_); 69 EXPECT_TRUE(running_);
66 EXPECT_EQ(num_running + 1, dispatcher_->num_running_jobs()); 70 EXPECT_EQ(num_running + 1, dispatcher_->num_running_jobs());
67 } else { 71 } else {
68 EXPECT_FALSE(running_); 72 EXPECT_FALSE(running_);
69 EXPECT_EQ(priority_, handle_.priority()); 73 EXPECT_EQ(priority_, handle_.priority());
70 EXPECT_EQ(tag_, reinterpret_cast<TestJob*>(handle_.value())->tag_); 74 EXPECT_EQ(tag_, reinterpret_cast<TestJob*>(handle_.value())->tag_);
71 EXPECT_EQ(num_running, dispatcher_->num_running_jobs()); 75 EXPECT_EQ(num_running, dispatcher_->num_running_jobs());
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 }; 137 };
134 138
135 protected: 139 protected:
136 void Prepare(const PrioritizedDispatcher::Limits& limits) { 140 void Prepare(const PrioritizedDispatcher::Limits& limits) {
137 dispatcher_.reset(new PrioritizedDispatcher(limits)); 141 dispatcher_.reset(new PrioritizedDispatcher(limits));
138 } 142 }
139 143
140 TestJob* AddJob(char data, Priority priority) { 144 TestJob* AddJob(char data, Priority priority) {
141 TestJob* job = new TestJob(dispatcher_.get(), data, priority, &log_); 145 TestJob* job = new TestJob(dispatcher_.get(), data, priority, &log_);
142 jobs_.push_back(job); 146 jobs_.push_back(job);
143 job->Add(); 147 job->Add(false);
148 return job;
149 }
150
151 TestJob* AddJobAtHead(char data, Priority priority) {
152 TestJob* job = new TestJob(dispatcher_.get(), data, priority, &log_);
153 jobs_.push_back(job);
154 job->Add(true);
144 return job; 155 return job;
145 } 156 }
146 157
147 void Expect(std::string log) { 158 void Expect(std::string log) {
148 EXPECT_EQ(0u, dispatcher_->num_queued_jobs()); 159 EXPECT_EQ(0u, dispatcher_->num_queued_jobs());
149 EXPECT_EQ(0u, dispatcher_->num_running_jobs()); 160 EXPECT_EQ(0u, dispatcher_->num_running_jobs());
150 EXPECT_EQ(log, log_); 161 EXPECT_EQ(log, log_);
151 log_.clear(); 162 log_.clear();
152 } 163 }
153 164
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 ASSERT_TRUE(job_d->running()); 206 ASSERT_TRUE(job_d->running());
196 job_d->Finish(); 207 job_d->Finish();
197 ASSERT_TRUE(job_b->running()); 208 ASSERT_TRUE(job_b->running());
198 job_b->Finish(); 209 job_b->Finish();
199 ASSERT_TRUE(job_e->running()); 210 ASSERT_TRUE(job_e->running());
200 job_e->Finish(); 211 job_e->Finish();
201 212
202 Expect("a.c.d.b.e."); 213 Expect("a.c.d.b.e.");
203 } 214 }
204 215
216 TEST_F(PrioritizedDispatcherTest, AddAtHead) {
217 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
218 Prepare(limits);
219
220 TestJob* job_a = AddJob('a', MEDIUM);
221 TestJob* job_b = AddJobAtHead('b', MEDIUM);
222 TestJob* job_c = AddJobAtHead('c', HIGHEST);
223 TestJob* job_d = AddJobAtHead('d', HIGHEST);
224 TestJob* job_e = AddJobAtHead('e', MEDIUM);
225 TestJob* job_f = AddJob('f', MEDIUM);
226
227 ASSERT_TRUE(job_a->running());
228 job_a->Finish();
229 ASSERT_TRUE(job_d->running());
230 job_d->Finish();
231 ASSERT_TRUE(job_c->running());
232 job_c->Finish();
233 ASSERT_TRUE(job_e->running());
234 job_e->Finish();
235 ASSERT_TRUE(job_b->running());
236 job_b->Finish();
237 ASSERT_TRUE(job_f->running());
238 job_f->Finish();
239
240 Expect("a.d.c.e.b.f.");
241 }
242
205 TEST_F(PrioritizedDispatcherTest, EnforceLimits) { 243 TEST_F(PrioritizedDispatcherTest, EnforceLimits) {
206 // Reserve 2 for HIGHEST and 1 for LOW or higher. 244 // Reserve 2 for HIGHEST and 1 for LOW or higher.
207 // This leaves 2 for LOWEST or lower. 245 // This leaves 2 for LOWEST or lower.
208 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 5); 246 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 5);
209 limits.reserved_slots[HIGHEST] = 2; 247 limits.reserved_slots[HIGHEST] = 2;
210 limits.reserved_slots[LOW] = 1; 248 limits.reserved_slots[LOW] = 1;
211 Prepare(limits); 249 Prepare(limits);
212 250
213 TestJob* job_a = AddJob('a', IDLE); // Uses unreserved slot. 251 TestJob* job_a = AddJob('a', IDLE); // Uses unreserved slot.
214 TestJob* job_b = AddJob('b', IDLE); // Uses unreserved slot. 252 TestJob* job_b = AddJob('b', IDLE); // Uses unreserved slot.
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 Prepare(limits); 394 Prepare(limits);
357 AddJob('a', IDLE); 395 AddJob('a', IDLE);
358 AddJob('b', IDLE); 396 AddJob('b', IDLE);
359 EXPECT_DEBUG_DEATH(dispatcher_->Cancel(handle), ""); 397 EXPECT_DEBUG_DEATH(dispatcher_->Cancel(handle), "");
360 } 398 }
361 #endif // GTEST_HAS_DEATH_TEST && !defined(NDEBUG) 399 #endif // GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
362 400
363 } // namespace 401 } // namespace
364 402
365 } // namespace net 403 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698