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

Side by Side Diff: net/proxy/dhcp_proxy_script_fetcher_win_unittest.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 "net/proxy/dhcp_proxy_script_fetcher_win.h" 5 #include "net/proxy/dhcp_proxy_script_fetcher_win.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 // Helper for RealFetch* tests below. 47 // Helper for RealFetch* tests below.
48 class RealFetchTester { 48 class RealFetchTester {
49 public: 49 public:
50 RealFetchTester() 50 RealFetchTester()
51 : context_(new TestURLRequestContext), 51 : context_(new TestURLRequestContext),
52 fetcher_(new DhcpProxyScriptFetcherWin(context_.get())), 52 fetcher_(new DhcpProxyScriptFetcherWin(context_.get())),
53 finished_(false), 53 finished_(false),
54 on_completion_is_error_(false) { 54 on_completion_is_error_(false) {
55 // Make sure the test ends. 55 // Make sure the test ends.
56 timeout_.Start(FROM_HERE, 56 timeout_.Start(FROM_HERE,
57 base::TimeDelta::FromSeconds(5), this, &RealFetchTester::OnTimeout); 57 base::TimeDelta::FromSeconds(5),
58 this,
59 &RealFetchTester::OnTimeout);
58 } 60 }
59 61
60 void RunTest() { 62 void RunTest() {
61 int result = fetcher_->Fetch( 63 int result = fetcher_->Fetch(
62 &pac_text_, 64 &pac_text_,
63 base::Bind(&RealFetchTester::OnCompletion, base::Unretained(this))); 65 base::Bind(&RealFetchTester::OnCompletion, base::Unretained(this)));
64 if (result != ERR_IO_PENDING) 66 if (result != ERR_IO_PENDING)
65 finished_ = true; 67 finished_ = true;
66 } 68 }
67 69
68 void RunTestWithCancel() { 70 void RunTestWithCancel() {
69 RunTest(); 71 RunTest();
70 fetcher_->Cancel(); 72 fetcher_->Cancel();
71 } 73 }
72 74
73 void RunTestWithDeferredCancel() { 75 void RunTestWithDeferredCancel() {
74 // Put the cancellation into the queue before even running the 76 // Put the cancellation into the queue before even running the
75 // test to avoid the chance of one of the adapter fetcher worker 77 // test to avoid the chance of one of the adapter fetcher worker
76 // threads completing before cancellation. See http://crbug.com/86756. 78 // threads completing before cancellation. See http://crbug.com/86756.
77 cancel_timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(0), 79 cancel_timer_.Start(FROM_HERE,
78 this, &RealFetchTester::OnCancelTimer); 80 base::TimeDelta::FromMilliseconds(0),
81 this,
82 &RealFetchTester::OnCancelTimer);
79 RunTest(); 83 RunTest();
80 } 84 }
81 85
82 void OnCompletion(int result) { 86 void OnCompletion(int result) {
83 if (on_completion_is_error_) { 87 if (on_completion_is_error_) {
84 FAIL() << "Received completion for test in which this is error."; 88 FAIL() << "Received completion for test in which this is error.";
85 } 89 }
86 finished_ = true; 90 finished_ = true;
87 printf("Result code %d PAC data length %d\n", result, pac_text_.size()); 91 printf("Result code %d PAC data length %d\n", result, pac_text_.size());
88 } 92 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 // 132 //
129 // We don't make assumptions about the environment this unit test is 133 // We don't make assumptions about the environment this unit test is
130 // running in, so it just exercises the code to make sure there 134 // running in, so it just exercises the code to make sure there
131 // is no crash and no unexpected error returned, but does not assert on 135 // is no crash and no unexpected error returned, but does not assert on
132 // results beyond that. 136 // results beyond that.
133 RealFetchTester fetcher; 137 RealFetchTester fetcher;
134 fetcher.RunTest(); 138 fetcher.RunTest();
135 139
136 fetcher.WaitUntilDone(); 140 fetcher.WaitUntilDone();
137 printf("PAC URL was %s\n", 141 printf("PAC URL was %s\n",
138 fetcher.fetcher_->GetPacURL().possibly_invalid_spec().c_str()); 142 fetcher.fetcher_->GetPacURL().possibly_invalid_spec().c_str());
139 143
140 fetcher.FinishTestAllowCleanup(); 144 fetcher.FinishTestAllowCleanup();
141 } 145 }
142 146
143 TEST(DhcpProxyScriptFetcherWin, RealFetchWithCancel) { 147 TEST(DhcpProxyScriptFetcherWin, RealFetchWithCancel) {
144 // Does a Fetch() with an immediate cancel. As before, just 148 // Does a Fetch() with an immediate cancel. As before, just
145 // exercises the code without stubbing out dependencies. 149 // exercises the code without stubbing out dependencies.
146 RealFetchTester fetcher; 150 RealFetchTester fetcher;
147 fetcher.RunTestWithCancel(); 151 fetcher.RunTestWithCancel();
148 base::MessageLoop::current()->RunUntilIdle(); 152 base::MessageLoop::current()->RunUntilIdle();
149 153
150 // Attempt to avoid Valgrind leak reports in case worker thread is 154 // Attempt to avoid Valgrind leak reports in case worker thread is
151 // still running. 155 // still running.
152 fetcher.FinishTestAllowCleanup(); 156 fetcher.FinishTestAllowCleanup();
153 } 157 }
154 158
155 // For RealFetchWithDeferredCancel, below. 159 // For RealFetchWithDeferredCancel, below.
156 class DelayingDhcpProxyScriptAdapterFetcher 160 class DelayingDhcpProxyScriptAdapterFetcher
157 : public DhcpProxyScriptAdapterFetcher { 161 : public DhcpProxyScriptAdapterFetcher {
158 public: 162 public:
159 DelayingDhcpProxyScriptAdapterFetcher( 163 DelayingDhcpProxyScriptAdapterFetcher(
160 URLRequestContext* url_request_context, 164 URLRequestContext* url_request_context,
161 scoped_refptr<base::TaskRunner> task_runner) 165 scoped_refptr<base::TaskRunner> task_runner)
162 : DhcpProxyScriptAdapterFetcher(url_request_context, task_runner) { 166 : DhcpProxyScriptAdapterFetcher(url_request_context, task_runner) {}
163 }
164 167
165 class DelayingDhcpQuery : public DhcpQuery { 168 class DelayingDhcpQuery : public DhcpQuery {
166 public: 169 public:
167 explicit DelayingDhcpQuery() 170 explicit DelayingDhcpQuery() : DhcpQuery() {}
168 : DhcpQuery() {
169 }
170 171
171 std::string ImplGetPacURLFromDhcp( 172 std::string ImplGetPacURLFromDhcp(
172 const std::string& adapter_name) OVERRIDE { 173 const std::string& adapter_name) OVERRIDE {
173 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(20)); 174 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(20));
174 return DhcpQuery::ImplGetPacURLFromDhcp(adapter_name); 175 return DhcpQuery::ImplGetPacURLFromDhcp(adapter_name);
175 } 176 }
176 }; 177 };
177 178
178 DhcpQuery* ImplCreateDhcpQuery() OVERRIDE { 179 DhcpQuery* ImplCreateDhcpQuery() OVERRIDE { return new DelayingDhcpQuery(); }
179 return new DelayingDhcpQuery();
180 }
181 }; 180 };
182 181
183 // For RealFetchWithDeferredCancel, below. 182 // For RealFetchWithDeferredCancel, below.
184 class DelayingDhcpProxyScriptFetcherWin 183 class DelayingDhcpProxyScriptFetcherWin : public DhcpProxyScriptFetcherWin {
185 : public DhcpProxyScriptFetcherWin {
186 public: 184 public:
187 explicit DelayingDhcpProxyScriptFetcherWin( 185 explicit DelayingDhcpProxyScriptFetcherWin(URLRequestContext* context)
188 URLRequestContext* context) 186 : DhcpProxyScriptFetcherWin(context) {}
189 : DhcpProxyScriptFetcherWin(context) {
190 }
191 187
192 DhcpProxyScriptAdapterFetcher* ImplCreateAdapterFetcher() OVERRIDE { 188 DhcpProxyScriptAdapterFetcher* ImplCreateAdapterFetcher() OVERRIDE {
193 return new DelayingDhcpProxyScriptAdapterFetcher(url_request_context(), 189 return new DelayingDhcpProxyScriptAdapterFetcher(url_request_context(),
194 GetTaskRunner()); 190 GetTaskRunner());
195 } 191 }
196 }; 192 };
197 193
198 TEST(DhcpProxyScriptFetcherWin, RealFetchWithDeferredCancel) { 194 TEST(DhcpProxyScriptFetcherWin, RealFetchWithDeferredCancel) {
199 // Does a Fetch() with a slightly delayed cancel. As before, just 195 // Does a Fetch() with a slightly delayed cancel. As before, just
200 // exercises the code without stubbing out dependencies, but 196 // exercises the code without stubbing out dependencies, but
(...skipping 12 matching lines...) Expand all
213 209
214 class DummyDhcpProxyScriptAdapterFetcher 210 class DummyDhcpProxyScriptAdapterFetcher
215 : public DhcpProxyScriptAdapterFetcher { 211 : public DhcpProxyScriptAdapterFetcher {
216 public: 212 public:
217 DummyDhcpProxyScriptAdapterFetcher(URLRequestContext* context, 213 DummyDhcpProxyScriptAdapterFetcher(URLRequestContext* context,
218 scoped_refptr<base::TaskRunner> runner) 214 scoped_refptr<base::TaskRunner> runner)
219 : DhcpProxyScriptAdapterFetcher(context, runner), 215 : DhcpProxyScriptAdapterFetcher(context, runner),
220 did_finish_(false), 216 did_finish_(false),
221 result_(OK), 217 result_(OK),
222 pac_script_(L"bingo"), 218 pac_script_(L"bingo"),
223 fetch_delay_ms_(1) { 219 fetch_delay_ms_(1) {}
224 }
225 220
226 void Fetch(const std::string& adapter_name, 221 void Fetch(const std::string& adapter_name,
227 const CompletionCallback& callback) OVERRIDE { 222 const CompletionCallback& callback) OVERRIDE {
228 callback_ = callback; 223 callback_ = callback;
229 timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(fetch_delay_ms_), 224 timer_.Start(FROM_HERE,
230 this, &DummyDhcpProxyScriptAdapterFetcher::OnTimer); 225 base::TimeDelta::FromMilliseconds(fetch_delay_ms_),
226 this,
227 &DummyDhcpProxyScriptAdapterFetcher::OnTimer);
231 } 228 }
232 229
233 void Cancel() OVERRIDE { 230 void Cancel() OVERRIDE { timer_.Stop(); }
234 timer_.Stop();
235 }
236 231
237 bool DidFinish() const OVERRIDE { 232 bool DidFinish() const OVERRIDE { return did_finish_; }
238 return did_finish_;
239 }
240 233
241 int GetResult() const OVERRIDE { 234 int GetResult() const OVERRIDE { return result_; }
242 return result_;
243 }
244 235
245 base::string16 GetPacScript() const OVERRIDE { 236 base::string16 GetPacScript() const OVERRIDE { return pac_script_; }
246 return pac_script_;
247 }
248 237
249 void OnTimer() { 238 void OnTimer() { callback_.Run(result_); }
250 callback_.Run(result_);
251 }
252 239
253 void Configure(bool did_finish, 240 void Configure(bool did_finish,
254 int result, 241 int result,
255 base::string16 pac_script, 242 base::string16 pac_script,
256 int fetch_delay_ms) { 243 int fetch_delay_ms) {
257 did_finish_ = did_finish; 244 did_finish_ = did_finish;
258 result_ = result; 245 result_ = result;
259 pac_script_ = pac_script; 246 pac_script_ = pac_script;
260 fetch_delay_ms_ = fetch_delay_ms; 247 fetch_delay_ms_ = fetch_delay_ms;
261 } 248 }
262 249
263 private: 250 private:
264 bool did_finish_; 251 bool did_finish_;
265 int result_; 252 int result_;
266 base::string16 pac_script_; 253 base::string16 pac_script_;
267 int fetch_delay_ms_; 254 int fetch_delay_ms_;
268 CompletionCallback callback_; 255 CompletionCallback callback_;
269 base::OneShotTimer<DummyDhcpProxyScriptAdapterFetcher> timer_; 256 base::OneShotTimer<DummyDhcpProxyScriptAdapterFetcher> timer_;
270 }; 257 };
271 258
272 class MockDhcpProxyScriptFetcherWin : public DhcpProxyScriptFetcherWin { 259 class MockDhcpProxyScriptFetcherWin : public DhcpProxyScriptFetcherWin {
273 public: 260 public:
274 class MockAdapterQuery : public AdapterQuery { 261 class MockAdapterQuery : public AdapterQuery {
275 public: 262 public:
276 MockAdapterQuery() { 263 MockAdapterQuery() {}
277 }
278 264
279 virtual ~MockAdapterQuery() { 265 virtual ~MockAdapterQuery() {}
280 }
281 266
282 virtual bool ImplGetCandidateAdapterNames( 267 virtual bool ImplGetCandidateAdapterNames(
283 std::set<std::string>* adapter_names) OVERRIDE { 268 std::set<std::string>* adapter_names) OVERRIDE {
284 adapter_names->insert( 269 adapter_names->insert(mock_adapter_names_.begin(),
285 mock_adapter_names_.begin(), mock_adapter_names_.end()); 270 mock_adapter_names_.end());
286 return true; 271 return true;
287 } 272 }
288 273
289 std::vector<std::string> mock_adapter_names_; 274 std::vector<std::string> mock_adapter_names_;
290 }; 275 };
291 276
292 MockDhcpProxyScriptFetcherWin(URLRequestContext* context) 277 MockDhcpProxyScriptFetcherWin(URLRequestContext* context)
293 : DhcpProxyScriptFetcherWin(context), 278 : DhcpProxyScriptFetcherWin(context),
294 num_fetchers_created_(0), 279 num_fetchers_created_(0),
295 worker_finished_event_(true, false) { 280 worker_finished_event_(true, false) {
296 ResetTestState(); 281 ResetTestState();
297 } 282 }
298 283
299 virtual ~MockDhcpProxyScriptFetcherWin() { 284 virtual ~MockDhcpProxyScriptFetcherWin() { ResetTestState(); }
300 ResetTestState();
301 }
302 285
303 using DhcpProxyScriptFetcherWin::GetTaskRunner; 286 using DhcpProxyScriptFetcherWin::GetTaskRunner;
304 287
305 // Adds a fetcher object to the queue of fetchers used by 288 // Adds a fetcher object to the queue of fetchers used by
306 // |ImplCreateAdapterFetcher()|, and its name to the list of adapters 289 // |ImplCreateAdapterFetcher()|, and its name to the list of adapters
307 // returned by ImplGetCandidateAdapterNames. 290 // returned by ImplGetCandidateAdapterNames.
308 void PushBackAdapter(const std::string& adapter_name, 291 void PushBackAdapter(const std::string& adapter_name,
309 DhcpProxyScriptAdapterFetcher* fetcher) { 292 DhcpProxyScriptAdapterFetcher* fetcher) {
310 adapter_query_->mock_adapter_names_.push_back(adapter_name); 293 adapter_query_->mock_adapter_names_.push_back(adapter_name);
311 adapter_fetchers_.push_back(fetcher); 294 adapter_fetchers_.push_back(fetcher);
(...skipping 15 matching lines...) Expand all
327 DhcpProxyScriptAdapterFetcher* ImplCreateAdapterFetcher() OVERRIDE { 310 DhcpProxyScriptAdapterFetcher* ImplCreateAdapterFetcher() OVERRIDE {
328 ++num_fetchers_created_; 311 ++num_fetchers_created_;
329 return adapter_fetchers_[next_adapter_fetcher_index_++]; 312 return adapter_fetchers_[next_adapter_fetcher_index_++];
330 } 313 }
331 314
332 virtual AdapterQuery* ImplCreateAdapterQuery() OVERRIDE { 315 virtual AdapterQuery* ImplCreateAdapterQuery() OVERRIDE {
333 DCHECK(adapter_query_); 316 DCHECK(adapter_query_);
334 return adapter_query_.get(); 317 return adapter_query_.get();
335 } 318 }
336 319
337 base::TimeDelta ImplGetMaxWait() OVERRIDE { 320 base::TimeDelta ImplGetMaxWait() OVERRIDE { return max_wait_; }
338 return max_wait_;
339 }
340 321
341 void ImplOnGetCandidateAdapterNamesDone() OVERRIDE { 322 void ImplOnGetCandidateAdapterNamesDone() OVERRIDE {
342 worker_finished_event_.Signal(); 323 worker_finished_event_.Signal();
343 } 324 }
344 325
345 void ResetTestState() { 326 void ResetTestState() {
346 // Delete any adapter fetcher objects we didn't hand out. 327 // Delete any adapter fetcher objects we didn't hand out.
347 std::vector<DhcpProxyScriptAdapterFetcher*>::const_iterator it 328 std::vector<DhcpProxyScriptAdapterFetcher*>::const_iterator it =
348 = adapter_fetchers_.begin(); 329 adapter_fetchers_.begin();
349 for (; it != adapter_fetchers_.end(); ++it) { 330 for (; it != adapter_fetchers_.end(); ++it) {
350 if (num_fetchers_created_-- <= 0) { 331 if (num_fetchers_created_-- <= 0) {
351 delete (*it); 332 delete (*it);
352 } 333 }
353 } 334 }
354 335
355 next_adapter_fetcher_index_ = 0; 336 next_adapter_fetcher_index_ = 0;
356 num_fetchers_created_ = 0; 337 num_fetchers_created_ = 0;
357 adapter_fetchers_.clear(); 338 adapter_fetchers_.clear();
358 adapter_query_ = new MockAdapterQuery(); 339 adapter_query_ = new MockAdapterQuery();
359 max_wait_ = TestTimeouts::tiny_timeout(); 340 max_wait_ = TestTimeouts::tiny_timeout();
360 } 341 }
361 342
362 bool HasPendingFetchers() { 343 bool HasPendingFetchers() { return num_pending_fetchers() > 0; }
363 return num_pending_fetchers() > 0;
364 }
365 344
366 int next_adapter_fetcher_index_; 345 int next_adapter_fetcher_index_;
367 346
368 // Ownership gets transferred to the implementation class via 347 // Ownership gets transferred to the implementation class via
369 // ImplCreateAdapterFetcher, but any objects not handed out are 348 // ImplCreateAdapterFetcher, but any objects not handed out are
370 // deleted on destruction. 349 // deleted on destruction.
371 std::vector<DhcpProxyScriptAdapterFetcher*> adapter_fetchers_; 350 std::vector<DhcpProxyScriptAdapterFetcher*> adapter_fetchers_;
372 351
373 scoped_refptr<MockAdapterQuery> adapter_query_; 352 scoped_refptr<MockAdapterQuery> adapter_query_;
374 353
375 base::TimeDelta max_wait_; 354 base::TimeDelta max_wait_;
376 int num_fetchers_created_; 355 int num_fetchers_created_;
377 base::WaitableEvent worker_finished_event_; 356 base::WaitableEvent worker_finished_event_;
378 }; 357 };
379 358
380 class FetcherClient { 359 class FetcherClient {
381 public: 360 public:
382 FetcherClient() 361 FetcherClient()
383 : context_(new TestURLRequestContext), 362 : context_(new TestURLRequestContext),
384 fetcher_(context_.get()), 363 fetcher_(context_.get()),
385 finished_(false), 364 finished_(false),
386 result_(ERR_UNEXPECTED) { 365 result_(ERR_UNEXPECTED) {}
387 }
388 366
389 void RunTest() { 367 void RunTest() {
390 int result = fetcher_.Fetch( 368 int result = fetcher_.Fetch(
391 &pac_text_, 369 &pac_text_,
392 base::Bind(&FetcherClient::OnCompletion, base::Unretained(this))); 370 base::Bind(&FetcherClient::OnCompletion, base::Unretained(this)));
393 ASSERT_EQ(ERR_IO_PENDING, result); 371 ASSERT_EQ(ERR_IO_PENDING, result);
394 } 372 }
395 373
396 void RunMessageLoopUntilComplete() { 374 void RunMessageLoopUntilComplete() {
397 while (!finished_) { 375 while (!finished_) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 ASSERT_EQ(L"bingo", client->pac_text_); 424 ASSERT_EQ(L"bingo", client->pac_text_);
447 } 425 }
448 426
449 TEST(DhcpProxyScriptFetcherWin, NormalCaseURLConfiguredOneAdapter) { 427 TEST(DhcpProxyScriptFetcherWin, NormalCaseURLConfiguredOneAdapter) {
450 FetcherClient client; 428 FetcherClient client;
451 TestNormalCaseURLConfiguredOneAdapter(&client); 429 TestNormalCaseURLConfiguredOneAdapter(&client);
452 } 430 }
453 431
454 void TestNormalCaseURLConfiguredMultipleAdapters(FetcherClient* client) { 432 void TestNormalCaseURLConfiguredMultipleAdapters(FetcherClient* client) {
455 client->fetcher_.ConfigureAndPushBackAdapter( 433 client->fetcher_.ConfigureAndPushBackAdapter(
456 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"", 434 "most_preferred",
435 true,
436 ERR_PAC_NOT_IN_DHCP,
437 L"",
457 base::TimeDelta::FromMilliseconds(1)); 438 base::TimeDelta::FromMilliseconds(1));
458 client->fetcher_.ConfigureAndPushBackAdapter( 439 client->fetcher_.ConfigureAndPushBackAdapter(
459 "second", true, OK, L"bingo", base::TimeDelta::FromMilliseconds(50)); 440 "second", true, OK, L"bingo", base::TimeDelta::FromMilliseconds(50));
460 client->fetcher_.ConfigureAndPushBackAdapter( 441 client->fetcher_.ConfigureAndPushBackAdapter(
461 "third", true, OK, L"rocko", base::TimeDelta::FromMilliseconds(1)); 442 "third", true, OK, L"rocko", base::TimeDelta::FromMilliseconds(1));
462 client->RunTest(); 443 client->RunTest();
463 client->RunMessageLoopUntilComplete(); 444 client->RunMessageLoopUntilComplete();
464 ASSERT_EQ(OK, client->result_); 445 ASSERT_EQ(OK, client->result_);
465 ASSERT_EQ(L"bingo", client->pac_text_); 446 ASSERT_EQ(L"bingo", client->pac_text_);
466 } 447 }
467 448
468 TEST(DhcpProxyScriptFetcherWin, NormalCaseURLConfiguredMultipleAdapters) { 449 TEST(DhcpProxyScriptFetcherWin, NormalCaseURLConfiguredMultipleAdapters) {
469 FetcherClient client; 450 FetcherClient client;
470 TestNormalCaseURLConfiguredMultipleAdapters(&client); 451 TestNormalCaseURLConfiguredMultipleAdapters(&client);
471 } 452 }
472 453
473 void TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout( 454 void TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout(
474 FetcherClient* client) { 455 FetcherClient* client) {
475 client->fetcher_.ConfigureAndPushBackAdapter( 456 client->fetcher_.ConfigureAndPushBackAdapter(
476 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"", 457 "most_preferred",
458 true,
459 ERR_PAC_NOT_IN_DHCP,
460 L"",
477 base::TimeDelta::FromMilliseconds(1)); 461 base::TimeDelta::FromMilliseconds(1));
478 // This will time out. 462 // This will time out.
479 client->fetcher_.ConfigureAndPushBackAdapter( 463 client->fetcher_.ConfigureAndPushBackAdapter("second",
480 "second", false, ERR_IO_PENDING, L"bingo", 464 false,
481 TestTimeouts::action_timeout()); 465 ERR_IO_PENDING,
466 L"bingo",
467 TestTimeouts::action_timeout());
482 client->fetcher_.ConfigureAndPushBackAdapter( 468 client->fetcher_.ConfigureAndPushBackAdapter(
483 "third", true, OK, L"rocko", base::TimeDelta::FromMilliseconds(1)); 469 "third", true, OK, L"rocko", base::TimeDelta::FromMilliseconds(1));
484 client->RunTest(); 470 client->RunTest();
485 client->RunMessageLoopUntilComplete(); 471 client->RunMessageLoopUntilComplete();
486 ASSERT_EQ(OK, client->result_); 472 ASSERT_EQ(OK, client->result_);
487 ASSERT_EQ(L"rocko", client->pac_text_); 473 ASSERT_EQ(L"rocko", client->pac_text_);
488 } 474 }
489 475
490 TEST(DhcpProxyScriptFetcherWin, 476 TEST(DhcpProxyScriptFetcherWin,
491 NormalCaseURLConfiguredMultipleAdaptersWithTimeout) { 477 NormalCaseURLConfiguredMultipleAdaptersWithTimeout) {
492 FetcherClient client; 478 FetcherClient client;
493 TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout(&client); 479 TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout(&client);
494 } 480 }
495 481
496 void TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout( 482 void TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout(
497 FetcherClient* client) { 483 FetcherClient* client) {
498 client->fetcher_.ConfigureAndPushBackAdapter( 484 client->fetcher_.ConfigureAndPushBackAdapter(
499 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"", 485 "most_preferred",
486 true,
487 ERR_PAC_NOT_IN_DHCP,
488 L"",
500 base::TimeDelta::FromMilliseconds(1)); 489 base::TimeDelta::FromMilliseconds(1));
501 // This will time out. 490 // This will time out.
502 client->fetcher_.ConfigureAndPushBackAdapter( 491 client->fetcher_.ConfigureAndPushBackAdapter("second",
503 "second", false, ERR_IO_PENDING, L"bingo", 492 false,
504 TestTimeouts::action_timeout()); 493 ERR_IO_PENDING,
494 L"bingo",
495 TestTimeouts::action_timeout());
505 // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such 496 // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such
506 // should be chosen. 497 // should be chosen.
507 client->fetcher_.ConfigureAndPushBackAdapter( 498 client->fetcher_.ConfigureAndPushBackAdapter(
508 "third", true, ERR_PAC_STATUS_NOT_OK, L"", 499 "third",
500 true,
501 ERR_PAC_STATUS_NOT_OK,
502 L"",
509 base::TimeDelta::FromMilliseconds(1)); 503 base::TimeDelta::FromMilliseconds(1));
510 client->fetcher_.ConfigureAndPushBackAdapter( 504 client->fetcher_.ConfigureAndPushBackAdapter(
511 "fourth", true, ERR_NOT_IMPLEMENTED, L"", 505 "fourth",
506 true,
507 ERR_NOT_IMPLEMENTED,
508 L"",
512 base::TimeDelta::FromMilliseconds(1)); 509 base::TimeDelta::FromMilliseconds(1));
513 client->RunTest(); 510 client->RunTest();
514 client->RunMessageLoopUntilComplete(); 511 client->RunMessageLoopUntilComplete();
515 ASSERT_EQ(ERR_PAC_STATUS_NOT_OK, client->result_); 512 ASSERT_EQ(ERR_PAC_STATUS_NOT_OK, client->result_);
516 ASSERT_EQ(L"", client->pac_text_); 513 ASSERT_EQ(L"", client->pac_text_);
517 } 514 }
518 515
519 TEST(DhcpProxyScriptFetcherWin, 516 TEST(DhcpProxyScriptFetcherWin,
520 FailureCaseURLConfiguredMultipleAdaptersWithTimeout) { 517 FailureCaseURLConfiguredMultipleAdaptersWithTimeout) {
521 FetcherClient client; 518 FetcherClient client;
522 TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout(&client); 519 TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout(&client);
523 } 520 }
524 521
525 void TestFailureCaseNoURLConfigured(FetcherClient* client) { 522 void TestFailureCaseNoURLConfigured(FetcherClient* client) {
526 client->fetcher_.ConfigureAndPushBackAdapter( 523 client->fetcher_.ConfigureAndPushBackAdapter(
527 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"", 524 "most_preferred",
525 true,
526 ERR_PAC_NOT_IN_DHCP,
527 L"",
528 base::TimeDelta::FromMilliseconds(1)); 528 base::TimeDelta::FromMilliseconds(1));
529 // This will time out. 529 // This will time out.
530 client->fetcher_.ConfigureAndPushBackAdapter( 530 client->fetcher_.ConfigureAndPushBackAdapter("second",
531 "second", false, ERR_IO_PENDING, L"bingo", 531 false,
532 TestTimeouts::action_timeout()); 532 ERR_IO_PENDING,
533 L"bingo",
534 TestTimeouts::action_timeout());
533 // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such 535 // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such
534 // should be chosen. 536 // should be chosen.
535 client->fetcher_.ConfigureAndPushBackAdapter( 537 client->fetcher_.ConfigureAndPushBackAdapter(
536 "third", true, ERR_PAC_NOT_IN_DHCP, L"", 538 "third",
539 true,
540 ERR_PAC_NOT_IN_DHCP,
541 L"",
537 base::TimeDelta::FromMilliseconds(1)); 542 base::TimeDelta::FromMilliseconds(1));
538 client->RunTest(); 543 client->RunTest();
539 client->RunMessageLoopUntilComplete(); 544 client->RunMessageLoopUntilComplete();
540 ASSERT_EQ(ERR_PAC_NOT_IN_DHCP, client->result_); 545 ASSERT_EQ(ERR_PAC_NOT_IN_DHCP, client->result_);
541 ASSERT_EQ(L"", client->pac_text_); 546 ASSERT_EQ(L"", client->pac_text_);
542 } 547 }
543 548
544 TEST(DhcpProxyScriptFetcherWin, FailureCaseNoURLConfigured) { 549 TEST(DhcpProxyScriptFetcherWin, FailureCaseNoURLConfigured) {
545 FetcherClient client; 550 FetcherClient client;
546 TestFailureCaseNoURLConfigured(&client); 551 TestFailureCaseNoURLConfigured(&client);
(...skipping 11 matching lines...) Expand all
558 FetcherClient client; 563 FetcherClient client;
559 TestFailureCaseNoDhcpAdapters(&client); 564 TestFailureCaseNoDhcpAdapters(&client);
560 } 565 }
561 566
562 void TestShortCircuitLessPreferredAdapters(FetcherClient* client) { 567 void TestShortCircuitLessPreferredAdapters(FetcherClient* client) {
563 // Here we have a bunch of adapters; the first reports no PAC in DHCP, 568 // Here we have a bunch of adapters; the first reports no PAC in DHCP,
564 // the second responds quickly with a PAC file, the rest take a long 569 // the second responds quickly with a PAC file, the rest take a long
565 // time. Verify that we complete quickly and do not wait for the slow 570 // time. Verify that we complete quickly and do not wait for the slow
566 // adapters, i.e. we finish before timeout. 571 // adapters, i.e. we finish before timeout.
567 client->fetcher_.ConfigureAndPushBackAdapter( 572 client->fetcher_.ConfigureAndPushBackAdapter(
568 "1", true, ERR_PAC_NOT_IN_DHCP, L"", 573 "1",
574 true,
575 ERR_PAC_NOT_IN_DHCP,
576 L"",
569 base::TimeDelta::FromMilliseconds(1)); 577 base::TimeDelta::FromMilliseconds(1));
570 client->fetcher_.ConfigureAndPushBackAdapter( 578 client->fetcher_.ConfigureAndPushBackAdapter(
571 "2", true, OK, L"bingo", 579 "2", true, OK, L"bingo", base::TimeDelta::FromMilliseconds(1));
572 base::TimeDelta::FromMilliseconds(1));
573 client->fetcher_.ConfigureAndPushBackAdapter( 580 client->fetcher_.ConfigureAndPushBackAdapter(
574 "3", true, OK, L"wrongo", TestTimeouts::action_max_timeout()); 581 "3", true, OK, L"wrongo", TestTimeouts::action_max_timeout());
575 582
576 // Increase the timeout to ensure the short circuit mechanism has 583 // Increase the timeout to ensure the short circuit mechanism has
577 // time to kick in before the timeout waiting for more adapters kicks in. 584 // time to kick in before the timeout waiting for more adapters kicks in.
578 client->fetcher_.max_wait_ = TestTimeouts::action_timeout(); 585 client->fetcher_.max_wait_ = TestTimeouts::action_timeout();
579 586
580 base::ElapsedTimer timer; 587 base::ElapsedTimer timer;
581 client->RunTest(); 588 client->RunTest();
582 client->RunMessageLoopUntilComplete(); 589 client->RunMessageLoopUntilComplete();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 test_functions.push_back(TestNormalCaseURLConfiguredMultipleAdapters); 636 test_functions.push_back(TestNormalCaseURLConfiguredMultipleAdapters);
630 test_functions.push_back( 637 test_functions.push_back(
631 TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout); 638 TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout);
632 test_functions.push_back( 639 test_functions.push_back(
633 TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout); 640 TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout);
634 test_functions.push_back(TestFailureCaseNoURLConfigured); 641 test_functions.push_back(TestFailureCaseNoURLConfigured);
635 test_functions.push_back(TestFailureCaseNoDhcpAdapters); 642 test_functions.push_back(TestFailureCaseNoDhcpAdapters);
636 test_functions.push_back(TestShortCircuitLessPreferredAdapters); 643 test_functions.push_back(TestShortCircuitLessPreferredAdapters);
637 test_functions.push_back(TestImmediateCancel); 644 test_functions.push_back(TestImmediateCancel);
638 645
639 std::random_shuffle(test_functions.begin(), 646 std::random_shuffle(
640 test_functions.end(), 647 test_functions.begin(), test_functions.end(), base::RandGenerator);
641 base::RandGenerator);
642 for (TestVector::const_iterator it = test_functions.begin(); 648 for (TestVector::const_iterator it = test_functions.begin();
643 it != test_functions.end(); 649 it != test_functions.end();
644 ++it) { 650 ++it) {
645 (*it)(&client); 651 (*it)(&client);
646 client.ResetTestState(); 652 client.ResetTestState();
647 } 653 }
648 654
649 // Re-do the first test to make sure the last test that was run did 655 // Re-do the first test to make sure the last test that was run did
650 // not leave things in a bad state. 656 // not leave things in a bad state.
651 (*test_functions.begin())(&client); 657 (*test_functions.begin())(&client);
652 } 658 }
653 659
654 } // namespace 660 } // namespace
655 661
656 } // namespace net 662 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698