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

Side by Side Diff: net/http/broken_alternative_services_unittest.cc

Issue 2917913002: Add getters and setters for BrokenAlternativeService's list of broken and recently-broken alt svcs (Closed)
Patch Set: Fixed entry override logic in SetBrokenAndRecentlyBrokenAlternativeServices() 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
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 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/http/broken_alternative_services.h" 5 #include "net/http/broken_alternative_services.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/test/test_mock_time_task_runner.h" 10 #include "base/test/test_mock_time_task_runner.h"
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 323
324 EXPECT_FALSE( 324 EXPECT_FALSE(
325 broken_services_.IsAlternativeServiceBroken(alternative_service1)); 325 broken_services_.IsAlternativeServiceBroken(alternative_service1));
326 EXPECT_FALSE( 326 EXPECT_FALSE(
327 broken_services_.IsAlternativeServiceBroken(alternative_service2)); 327 broken_services_.IsAlternativeServiceBroken(alternative_service2));
328 EXPECT_EQ(2u, expired_alt_svcs_.size()); 328 EXPECT_EQ(2u, expired_alt_svcs_.size());
329 EXPECT_EQ(alternative_service2, expired_alt_svcs_[0]); 329 EXPECT_EQ(alternative_service2, expired_alt_svcs_[0]);
330 EXPECT_EQ(alternative_service1, expired_alt_svcs_[1]); 330 EXPECT_EQ(alternative_service1, expired_alt_svcs_[1]);
331 } 331 }
332 332
333 TEST_F(BrokenAlternativeServicesTest, SetBrokenAlternativeServices) {
334 AlternativeService alternative_service1(kProtoQUIC, "foo1", 443);
335 AlternativeService alternative_service2(kProtoQUIC, "foo2", 443);
336
337 base::TimeDelta delay1 = base::TimeDelta::FromMinutes(1);
338
339 std::unique_ptr<BrokenAlternativeServiceList> broken_list =
340 base::MakeUnique<BrokenAlternativeServiceList>();
341 broken_list->push_back(
342 {alternative_service1, broken_services_clock_->NowTicks() + delay1});
343
344 std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map =
345 base::MakeUnique<RecentlyBrokenAlternativeServices>(
346 RecentlyBrokenAlternativeServices::NO_AUTO_EVICT);
347 recently_broken_map->Put(alternative_service1, 1);
348 recently_broken_map->Put(alternative_service2, 2);
349
350 broken_services_.SetBrokenAndRecentlyBrokenAlternativeServices(
351 std::move(broken_list), std::move(recently_broken_map));
352
353 EXPECT_TRUE(
354 broken_services_.IsAlternativeServiceBroken(alternative_service1));
355 EXPECT_FALSE(
356 broken_services_.IsAlternativeServiceBroken(alternative_service2));
357
358 EXPECT_TRUE(broken_services_.WasAlternativeServiceRecentlyBroken(
359 alternative_service1));
360 EXPECT_TRUE(broken_services_.WasAlternativeServiceRecentlyBroken(
361 alternative_service2));
362
363 // Make sure |alternative_service1| expires after the delay in |broken_list|.
364 test_task_runner_->FastForwardBy(delay1 -
365 base::TimeDelta::FromInternalValue(1));
366 EXPECT_TRUE(
367 broken_services_.IsAlternativeServiceBroken(alternative_service1));
368
369 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
370 EXPECT_FALSE(
371 broken_services_.IsAlternativeServiceBroken(alternative_service1));
372
373 // Make sure the broken counts in |recently_broken_map| translate to the
374 // correct expiration delays if the alternative services are marked broken.
375 broken_services_.MarkAlternativeServiceBroken(alternative_service2);
376 broken_services_.MarkAlternativeServiceBroken(alternative_service1);
377
378 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(10) -
379 base::TimeDelta::FromInternalValue(1));
380 EXPECT_TRUE(
381 broken_services_.IsAlternativeServiceBroken(alternative_service1));
382 EXPECT_TRUE(
383 broken_services_.IsAlternativeServiceBroken(alternative_service2));
384
385 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
386 EXPECT_FALSE(
387 broken_services_.IsAlternativeServiceBroken(alternative_service1));
388 EXPECT_TRUE(
389 broken_services_.IsAlternativeServiceBroken(alternative_service2));
390
391 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(20) -
392 base::TimeDelta::FromMinutes(10) -
393 base::TimeDelta::FromInternalValue(1));
394 EXPECT_FALSE(
395 broken_services_.IsAlternativeServiceBroken(alternative_service1));
396 EXPECT_TRUE(
397 broken_services_.IsAlternativeServiceBroken(alternative_service2));
398
399 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
400 EXPECT_FALSE(
401 broken_services_.IsAlternativeServiceBroken(alternative_service1));
402 EXPECT_FALSE(
403 broken_services_.IsAlternativeServiceBroken(alternative_service2));
404 }
405
406 TEST_F(BrokenAlternativeServicesTest,
407 SetBrokenAlternativeServicesWithExisting) {
408 AlternativeService alternative_service1(kProtoQUIC, "foo1", 443);
409 AlternativeService alternative_service2(kProtoQUIC, "foo2", 443);
410 AlternativeService alternative_service3(kProtoQUIC, "foo3", 443);
411
412 std::unique_ptr<BrokenAlternativeServiceList> broken_list =
413 base::MakeUnique<BrokenAlternativeServiceList>();
414 broken_list->push_back(
415 {alternative_service3,
416 broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(1)});
417 broken_list->push_back(
418 {alternative_service1,
419 broken_services_clock_->NowTicks() + base::TimeDelta::FromMinutes(3)});
420
421 std::unique_ptr<RecentlyBrokenAlternativeServices> recently_broken_map =
422 base::MakeUnique<RecentlyBrokenAlternativeServices>(
423 RecentlyBrokenAlternativeServices::NO_AUTO_EVICT);
424 recently_broken_map->Put(alternative_service1, 1);
425 recently_broken_map->Put(alternative_service3, 1);
426
427 broken_services_.MarkAlternativeServiceBroken(alternative_service1);
428 broken_services_.MarkAlternativeServiceBroken(alternative_service2);
429
430 // At this point, |alternative_service1| and |alternative_service2| are marked
431 // broken and should expire in 5 minutes.
432 // Adding |broken_list| should overwrite |alternative_service1|'s expiration
433 // time to 3 minutes, and additionally mark |alternative_service3|
434 // broken with an expiration time of 1 minute.
435 broken_services_.SetBrokenAndRecentlyBrokenAlternativeServices(
436 std::move(broken_list), std::move(recently_broken_map));
437
438 EXPECT_TRUE(
439 broken_services_.IsAlternativeServiceBroken(alternative_service1));
440 EXPECT_TRUE(
441 broken_services_.IsAlternativeServiceBroken(alternative_service2));
442 EXPECT_TRUE(
443 broken_services_.IsAlternativeServiceBroken(alternative_service3));
444
445 // Make sure |alternative_service3|'s brokenness expires in 1 minute.
446 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(1) -
447 base::TimeDelta::FromInternalValue(1));
448 EXPECT_TRUE(
449 broken_services_.IsAlternativeServiceBroken(alternative_service1));
450 EXPECT_TRUE(
451 broken_services_.IsAlternativeServiceBroken(alternative_service2));
452 EXPECT_TRUE(
453 broken_services_.IsAlternativeServiceBroken(alternative_service3));
454
455 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
456 EXPECT_TRUE(
457 broken_services_.IsAlternativeServiceBroken(alternative_service1));
458 EXPECT_TRUE(
459 broken_services_.IsAlternativeServiceBroken(alternative_service2));
460 EXPECT_FALSE(
461 broken_services_.IsAlternativeServiceBroken(alternative_service3));
462
463 // Make sure |alternative_service1|'s brokenness expires in 2 more minutes.
464 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(2) -
465 base::TimeDelta::FromInternalValue(1));
466 EXPECT_TRUE(
467 broken_services_.IsAlternativeServiceBroken(alternative_service1));
468 EXPECT_TRUE(
469 broken_services_.IsAlternativeServiceBroken(alternative_service2));
470 EXPECT_FALSE(
471 broken_services_.IsAlternativeServiceBroken(alternative_service3));
472
473 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
474 EXPECT_FALSE(
475 broken_services_.IsAlternativeServiceBroken(alternative_service1));
476 EXPECT_TRUE(
477 broken_services_.IsAlternativeServiceBroken(alternative_service2));
478 EXPECT_FALSE(
479 broken_services_.IsAlternativeServiceBroken(alternative_service3));
480
481 // Make sure |alternative_service2|'s brokenness expires in 2 more minutes.
482 test_task_runner_->FastForwardBy(base::TimeDelta::FromMinutes(2) -
483 base::TimeDelta::FromInternalValue(1));
484 EXPECT_FALSE(
485 broken_services_.IsAlternativeServiceBroken(alternative_service1));
486 EXPECT_TRUE(
487 broken_services_.IsAlternativeServiceBroken(alternative_service2));
488 EXPECT_FALSE(
489 broken_services_.IsAlternativeServiceBroken(alternative_service3));
490
491 test_task_runner_->FastForwardBy(base::TimeDelta::FromInternalValue(1));
492 EXPECT_FALSE(
493 broken_services_.IsAlternativeServiceBroken(alternative_service1));
494 EXPECT_FALSE(
495 broken_services_.IsAlternativeServiceBroken(alternative_service2));
496 EXPECT_FALSE(
497 broken_services_.IsAlternativeServiceBroken(alternative_service3));
498
499 // Make sure recently broken alternative services are in most-recently-used
500 // order. SetBrokenAndRecentlyBrokenAlternativeServices() will add
501 // entries in |recently_broken_map| (that aren't already marked recently
502 // broken in |broken_services_|) to the back of |broken_services_|'s
503 // recency list; in this case, only |alternative_service3| is added as
504 // recently broken.
505 auto it = broken_services_.recently_broken_alternative_services().begin();
506 EXPECT_EQ(alternative_service2, it->first);
507 ++it;
508 EXPECT_EQ(alternative_service1, it->first);
509 ++it;
510 EXPECT_EQ(alternative_service3, it->first);
511 }
512
333 TEST_F(BrokenAlternativeServicesTest, ScheduleExpireTaskAfterExpire) { 513 TEST_F(BrokenAlternativeServicesTest, ScheduleExpireTaskAfterExpire) {
334 // This test will check that when a broken alt svc expires, an expiration task 514 // This test will check that when a broken alt svc expires, an expiration task
335 // is scheduled for the next broken alt svc in the expiration queue. 515 // is scheduled for the next broken alt svc in the expiration queue.
336 516
337 AlternativeService alternative_service1(kProtoQUIC, "foo", 443); 517 AlternativeService alternative_service1(kProtoQUIC, "foo", 443);
338 AlternativeService alternative_service2(kProtoQUIC, "bar", 443); 518 AlternativeService alternative_service2(kProtoQUIC, "bar", 443);
339 519
340 // Mark |alternative_service1| broken and let brokenness expire. This will 520 // Mark |alternative_service1| broken and let brokenness expire. This will
341 // increase its expiration delay the next time it's marked broken. 521 // increase its expiration delay the next time it's marked broken.
342 broken_services_.MarkAlternativeServiceBroken(alternative_service1); 522 broken_services_.MarkAlternativeServiceBroken(alternative_service1);
(...skipping 14 matching lines...) Expand all
357 broken_services_.IsAlternativeServiceBroken(alternative_service1)); 537 broken_services_.IsAlternativeServiceBroken(alternative_service1));
358 538
359 // Make sure an expiration task has been scheduled for expiring the brokenness 539 // Make sure an expiration task has been scheduled for expiring the brokenness
360 // of |alternative_service1|. 540 // of |alternative_service1|.
361 EXPECT_TRUE(test_task_runner_->HasPendingTask()); 541 EXPECT_TRUE(test_task_runner_->HasPendingTask());
362 } 542 }
363 543
364 } // namespace 544 } // namespace
365 545
366 } // namespace net 546 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698