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

Side by Side Diff: components/ntp_snippets/ntp_snippets_fetcher_unittest.cc

Issue 2227973002: Add request throttler to thumbnail fetching for articles on mobile NTP (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Build issue Created 4 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "components/ntp_snippets/ntp_snippets_fetcher.h" 5 #include "components/ntp_snippets/ntp_snippets_fetcher.h"
6 6
7 #include <map> 7 #include <map>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 " \"corpusId\" : \"http://localhost/foobar\"," 372 " \"corpusId\" : \"http://localhost/foobar\","
373 " \"publisherData\": { \"sourceName\" : \"Foo News\" }" 373 " \"publisherData\": { \"sourceName\" : \"Foo News\" }"
374 " }]" 374 " }]"
375 " }" 375 " }"
376 "}]}"; 376 "}]}";
377 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 377 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
378 net::URLRequestStatus::SUCCESS); 378 net::URLRequestStatus::SUCCESS);
379 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar"))); 379 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar")));
380 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 380 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
381 /*count=*/1, 381 /*count=*/1,
382 /*force_request=*/true); 382 /*interactive_request=*/true);
383 FastForwardUntilNoTasksRemain(); 383 FastForwardUntilNoTasksRemain();
384 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 384 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
385 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 385 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
386 EXPECT_THAT(histogram_tester().GetAllSamples( 386 EXPECT_THAT(histogram_tester().GetAllSamples(
387 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 387 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
388 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 388 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
389 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 389 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
390 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 390 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
391 /*count=*/1))); 391 /*count=*/1)));
392 } 392 }
(...skipping 14 matching lines...) Expand all
407 " \"imageUrl\" : \"http://localhost/foobar.jpg\"," 407 " \"imageUrl\" : \"http://localhost/foobar.jpg\","
408 " \"ampUrl\" : \"http://localhost/amp\"," 408 " \"ampUrl\" : \"http://localhost/amp\","
409 " \"faviconUrl\" : \"http://localhost/favicon.ico\" " 409 " \"faviconUrl\" : \"http://localhost/favicon.ico\" "
410 " }]" 410 " }]"
411 "}]}"; 411 "}]}";
412 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 412 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
413 net::URLRequestStatus::SUCCESS); 413 net::URLRequestStatus::SUCCESS);
414 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar"))); 414 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar")));
415 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 415 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
416 /*count=*/1, 416 /*count=*/1,
417 /*force_request=*/true); 417 /*interactive_request=*/true);
418 FastForwardUntilNoTasksRemain(); 418 FastForwardUntilNoTasksRemain();
419 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 419 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
420 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 420 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
421 EXPECT_THAT(histogram_tester().GetAllSamples( 421 EXPECT_THAT(histogram_tester().GetAllSamples(
422 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 422 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
423 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 423 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
424 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 424 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
425 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 425 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
426 /*count=*/1))); 426 /*count=*/1)));
427 } 427 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 /*count=*/1))); 499 /*count=*/1)));
500 } 500 }
501 501
502 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfullyEmptyList) { 502 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfullyEmptyList) {
503 const std::string kJsonStr = "{\"recos\": []}"; 503 const std::string kJsonStr = "{\"recos\": []}";
504 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 504 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
505 net::URLRequestStatus::SUCCESS); 505 net::URLRequestStatus::SUCCESS);
506 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 506 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
507 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 507 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
508 /*count=*/1, 508 /*count=*/1,
509 /*force_request=*/true); 509 /*interactive_request=*/true);
510 FastForwardUntilNoTasksRemain(); 510 FastForwardUntilNoTasksRemain();
511 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 511 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
512 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 512 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
513 EXPECT_THAT( 513 EXPECT_THAT(
514 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 514 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
515 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1))); 515 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1)));
516 EXPECT_THAT(histogram_tester().GetAllSamples( 516 EXPECT_THAT(histogram_tester().GetAllSamples(
517 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 517 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
518 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 518 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
519 } 519 }
520 520
521 TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldReportEmptyHostsError) { 521 TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldReportEmptyHostsError) {
522 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 522 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
523 snippets_fetcher().FetchSnippetsFromHosts(/*hosts=*/std::set<std::string>(), 523 snippets_fetcher().FetchSnippetsFromHosts(/*hosts=*/std::set<std::string>(),
524 /*language_code=*/"en-US", 524 /*language_code=*/"en-US",
525 /*count=*/1, 525 /*count=*/1,
526 /*force_request=*/true); 526 /*interactive_request=*/true);
527 FastForwardUntilNoTasksRemain(); 527 FastForwardUntilNoTasksRemain();
528 EXPECT_THAT(snippets_fetcher().last_status(), 528 EXPECT_THAT(snippets_fetcher().last_status(),
529 Eq("Cannot fetch for empty hosts list.")); 529 Eq("Cannot fetch for empty hosts list."));
530 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 530 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
531 EXPECT_THAT( 531 EXPECT_THAT(
532 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 532 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
533 ElementsAre(base::Bucket(/*min=*/1, /*count=*/1))); 533 ElementsAre(base::Bucket(/*min=*/1, /*count=*/1)));
534 // This particular error gets triggered prior to fetching, so no fetch time 534 // This particular error gets triggered prior to fetching, so no fetch time
535 // or response should get recorded. 535 // or response should get recorded.
536 EXPECT_THAT(histogram_tester().GetAllSamples( 536 EXPECT_THAT(histogram_tester().GetAllSamples(
537 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 537 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
538 IsEmpty()); 538 IsEmpty());
539 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 539 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
540 IsEmpty()); 540 IsEmpty());
541 } 541 }
542 542
543 TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldRestrictToHosts) { 543 TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldRestrictToHosts) {
544 net::TestURLFetcherFactory test_url_fetcher_factory; 544 net::TestURLFetcherFactory test_url_fetcher_factory;
545 snippets_fetcher().FetchSnippetsFromHosts( 545 snippets_fetcher().FetchSnippetsFromHosts(
546 {"www.somehost1.com", "www.somehost2.com"}, test_lang(), /*count=*/17, 546 {"www.somehost1.com", "www.somehost2.com"}, test_lang(), /*count=*/17,
547 /*force_request=*/true); 547 /*interactive_request=*/true);
548 net::TestURLFetcher* fetcher = test_url_fetcher_factory.GetFetcherByID(0); 548 net::TestURLFetcher* fetcher = test_url_fetcher_factory.GetFetcherByID(0);
549 ASSERT_THAT(fetcher, NotNull()); 549 ASSERT_THAT(fetcher, NotNull());
550 std::unique_ptr<base::Value> value = 550 std::unique_ptr<base::Value> value =
551 base::JSONReader::Read(fetcher->upload_data()); 551 base::JSONReader::Read(fetcher->upload_data());
552 ASSERT_TRUE(value) << " failed to parse JSON: " 552 ASSERT_TRUE(value) << " failed to parse JSON: "
553 << PrintToString(fetcher->upload_data()); 553 << PrintToString(fetcher->upload_data());
554 const base::DictionaryValue* dict = nullptr; 554 const base::DictionaryValue* dict = nullptr;
555 ASSERT_TRUE(value->GetAsDictionary(&dict)); 555 ASSERT_TRUE(value->GetAsDictionary(&dict));
556 const base::DictionaryValue* local_scoring_params = nullptr; 556 const base::DictionaryValue* local_scoring_params = nullptr;
557 ASSERT_TRUE(dict->GetDictionary("advanced_options.local_scoring_params", 557 ASSERT_TRUE(dict->GetDictionary("advanced_options.local_scoring_params",
(...skipping 11 matching lines...) Expand all
569 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value)); 569 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value));
570 EXPECT_THAT(content_selector_value, Eq("www.somehost2.com")); 570 EXPECT_THAT(content_selector_value, Eq("www.somehost2.com"));
571 } 571 }
572 572
573 TEST_F(NTPSnippetsFetcherTest, ShouldReportUrlStatusError) { 573 TEST_F(NTPSnippetsFetcherTest, ShouldReportUrlStatusError) {
574 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND, 574 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND,
575 net::URLRequestStatus::FAILED); 575 net::URLRequestStatus::FAILED);
576 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 576 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
577 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 577 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
578 /*count=*/1, 578 /*count=*/1,
579 /*force_request=*/true); 579 /*interactive_request=*/true);
580 FastForwardUntilNoTasksRemain(); 580 FastForwardUntilNoTasksRemain();
581 EXPECT_THAT(snippets_fetcher().last_status(), 581 EXPECT_THAT(snippets_fetcher().last_status(),
582 Eq("URLRequestStatus error -2")); 582 Eq("URLRequestStatus error -2"));
583 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 583 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
584 EXPECT_THAT( 584 EXPECT_THAT(
585 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 585 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
586 ElementsAre(base::Bucket(/*min=*/2, /*count=*/1))); 586 ElementsAre(base::Bucket(/*min=*/2, /*count=*/1)));
587 EXPECT_THAT(histogram_tester().GetAllSamples( 587 EXPECT_THAT(histogram_tester().GetAllSamples(
588 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 588 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
589 ElementsAre(base::Bucket(/*min=*/-2, /*count=*/1))); 589 ElementsAre(base::Bucket(/*min=*/-2, /*count=*/1)));
590 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 590 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
591 Not(IsEmpty())); 591 Not(IsEmpty()));
592 } 592 }
593 593
594 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpError) { 594 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpError) {
595 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND, 595 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND,
596 net::URLRequestStatus::SUCCESS); 596 net::URLRequestStatus::SUCCESS);
597 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 597 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
598 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 598 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
599 /*count=*/1, 599 /*count=*/1,
600 /*force_request=*/true); 600 /*interactive_request=*/true);
601 FastForwardUntilNoTasksRemain(); 601 FastForwardUntilNoTasksRemain();
602 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 602 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
603 EXPECT_THAT( 603 EXPECT_THAT(
604 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 604 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
605 ElementsAre(base::Bucket(/*min=*/3, /*count=*/1))); 605 ElementsAre(base::Bucket(/*min=*/3, /*count=*/1)));
606 EXPECT_THAT(histogram_tester().GetAllSamples( 606 EXPECT_THAT(histogram_tester().GetAllSamples(
607 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 607 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
608 ElementsAre(base::Bucket(/*min=*/404, /*count=*/1))); 608 ElementsAre(base::Bucket(/*min=*/404, /*count=*/1)));
609 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 609 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
610 Not(IsEmpty())); 610 Not(IsEmpty()));
611 } 611 }
612 612
613 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonError) { 613 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonError) {
614 const std::string kInvalidJsonStr = "{ \"recos\": []"; 614 const std::string kInvalidJsonStr = "{ \"recos\": []";
615 SetFakeResponse(/*data=*/kInvalidJsonStr, net::HTTP_OK, 615 SetFakeResponse(/*data=*/kInvalidJsonStr, net::HTTP_OK,
616 net::URLRequestStatus::SUCCESS); 616 net::URLRequestStatus::SUCCESS);
617 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 617 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
618 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 618 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
619 /*count=*/1, 619 /*count=*/1,
620 /*force_request=*/true); 620 /*interactive_request=*/true);
621 FastForwardUntilNoTasksRemain(); 621 FastForwardUntilNoTasksRemain();
622 EXPECT_THAT(snippets_fetcher().last_status(), 622 EXPECT_THAT(snippets_fetcher().last_status(),
623 StartsWith("Received invalid JSON (error ")); 623 StartsWith("Received invalid JSON (error "));
624 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kInvalidJsonStr)); 624 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kInvalidJsonStr));
625 EXPECT_THAT( 625 EXPECT_THAT(
626 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 626 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
627 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1))); 627 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1)));
628 EXPECT_THAT(histogram_tester().GetAllSamples( 628 EXPECT_THAT(histogram_tester().GetAllSamples(
629 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 629 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
630 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 630 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
631 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 631 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
632 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 632 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
633 /*count=*/1))); 633 /*count=*/1)));
634 } 634 }
635 635
636 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonErrorForEmptyResponse) { 636 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonErrorForEmptyResponse) {
637 SetFakeResponse(/*data=*/std::string(), net::HTTP_OK, 637 SetFakeResponse(/*data=*/std::string(), net::HTTP_OK,
638 net::URLRequestStatus::SUCCESS); 638 net::URLRequestStatus::SUCCESS);
639 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 639 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
640 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 640 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
641 /*count=*/1, 641 /*count=*/1,
642 /*force_request=*/true); 642 /*interactive_request=*/true);
643 FastForwardUntilNoTasksRemain(); 643 FastForwardUntilNoTasksRemain();
644 EXPECT_THAT(snippets_fetcher().last_json(), std::string()); 644 EXPECT_THAT(snippets_fetcher().last_json(), std::string());
645 EXPECT_THAT( 645 EXPECT_THAT(
646 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 646 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
647 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1))); 647 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1)));
648 EXPECT_THAT(histogram_tester().GetAllSamples( 648 EXPECT_THAT(histogram_tester().GetAllSamples(
649 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 649 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
650 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 650 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
651 } 651 }
652 652
653 TEST_F(NTPSnippetsFetcherTest, ShouldReportInvalidListError) { 653 TEST_F(NTPSnippetsFetcherTest, ShouldReportInvalidListError) {
654 const std::string kJsonStr = 654 const std::string kJsonStr =
655 "{\"recos\": [{ \"contentInfo\": { \"foo\" : \"bar\" }}]}"; 655 "{\"recos\": [{ \"contentInfo\": { \"foo\" : \"bar\" }}]}";
656 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 656 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
657 net::URLRequestStatus::SUCCESS); 657 net::URLRequestStatus::SUCCESS);
658 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 658 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
659 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 659 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
660 /*count=*/1, 660 /*count=*/1,
661 /*force_request=*/true); 661 /*interactive_request=*/true);
662 FastForwardUntilNoTasksRemain(); 662 FastForwardUntilNoTasksRemain();
663 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 663 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
664 EXPECT_THAT( 664 EXPECT_THAT(
665 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 665 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
666 ElementsAre(base::Bucket(/*min=*/5, /*count=*/1))); 666 ElementsAre(base::Bucket(/*min=*/5, /*count=*/1)));
667 EXPECT_THAT(histogram_tester().GetAllSamples( 667 EXPECT_THAT(histogram_tester().GetAllSamples(
668 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 668 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
669 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 669 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
670 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 670 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
671 Not(IsEmpty())); 671 Not(IsEmpty()));
672 } 672 }
673 673
674 // This test actually verifies that the test setup itself is sane, to prevent 674 // This test actually verifies that the test setup itself is sane, to prevent
675 // hard-to-reproduce test failures. 675 // hard-to-reproduce test failures.
676 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpErrorForMissingBakedResponse) { 676 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpErrorForMissingBakedResponse) {
677 InitFakeURLFetcherFactory(); 677 InitFakeURLFetcherFactory();
678 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 678 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
679 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 679 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
680 /*count=*/1, 680 /*count=*/1,
681 /*force_request=*/true); 681 /*interactive_request=*/true);
682 FastForwardUntilNoTasksRemain(); 682 FastForwardUntilNoTasksRemain();
683 } 683 }
684 684
685 TEST_F(NTPSnippetsFetcherTest, ShouldCancelOngoingFetch) { 685 TEST_F(NTPSnippetsFetcherTest, ShouldCancelOngoingFetch) {
686 const std::string kJsonStr = "{ \"recos\": [] }"; 686 const std::string kJsonStr = "{ \"recos\": [] }";
687 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 687 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
688 net::URLRequestStatus::SUCCESS); 688 net::URLRequestStatus::SUCCESS);
689 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 689 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
690 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 690 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
691 /*count=*/1, 691 /*count=*/1,
692 /*force_request=*/true); 692 /*interactive_request=*/true);
693 // Second call to FetchSnippetsFromHosts() overrides/cancels the previous. 693 // Second call to FetchSnippetsFromHosts() overrides/cancels the previous.
694 // Callback is expected to be called once. 694 // Callback is expected to be called once.
695 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 695 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
696 /*count=*/1, 696 /*count=*/1,
697 /*force_request=*/true); 697 /*interactive_request=*/true);
698 FastForwardUntilNoTasksRemain(); 698 FastForwardUntilNoTasksRemain();
699 EXPECT_THAT( 699 EXPECT_THAT(
700 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 700 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
701 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1))); 701 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1)));
702 EXPECT_THAT(histogram_tester().GetAllSamples( 702 EXPECT_THAT(histogram_tester().GetAllSamples(
703 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 703 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
704 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 704 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
705 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 705 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
706 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 706 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
707 /*count=*/1))); 707 /*count=*/1)));
708 } 708 }
709 709
710 ::std::ostream& operator<<( 710 ::std::ostream& operator<<(
711 ::std::ostream& os, 711 ::std::ostream& os,
712 const NTPSnippetsFetcher::OptionalSnippets& snippets) { 712 const NTPSnippetsFetcher::OptionalSnippets& snippets) {
713 if (snippets) { 713 if (snippets) {
714 // Matchers above aren't any more precise than this, so this is sufficient 714 // Matchers above aren't any more precise than this, so this is sufficient
715 // for test-failure diagnostics. 715 // for test-failure diagnostics.
716 return os << "list with " << snippets->size() << " elements"; 716 return os << "list with " << snippets->size() << " elements";
717 } else { 717 } else {
718 return os << "null"; 718 return os << "null";
719 } 719 }
720 } 720 }
721 721
722 } // namespace ntp_snippets 722 } // namespace ntp_snippets
OLDNEW
« no previous file with comments | « components/ntp_snippets/ntp_snippets_fetcher.cc ('k') | components/ntp_snippets/ntp_snippets_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698