| Index: chrome/browser/safe_browsing/certificate_reporting_service_unittest.cc
|
| diff --git a/chrome/browser/safe_browsing/certificate_reporting_service_unittest.cc b/chrome/browser/safe_browsing/certificate_reporting_service_unittest.cc
|
| index 724edb52dd9a4a0ff9d368c7d8758276222edfad..d224a65a98b8b85b60cb5008a90503fc43e3a846 100644
|
| --- a/chrome/browser/safe_browsing/certificate_reporting_service_unittest.cc
|
| +++ b/chrome/browser/safe_browsing/certificate_reporting_service_unittest.cc
|
| @@ -36,6 +36,7 @@
|
|
|
| using certificate_reporting_test_utils::CertificateReportingServiceTestHelper;
|
| using certificate_reporting_test_utils::CertificateReportingServiceObserver;
|
| +using certificate_reporting_test_utils::EventHistogramTester;
|
| using certificate_reporting_test_utils::ReportExpectation;
|
| using certificate_reporting_test_utils::RetryStatus;
|
|
|
| @@ -119,6 +120,8 @@ class ReportHistogramTestHelper {
|
| } // namespace
|
|
|
| TEST(CertificateReportingServiceReportListTest, BoundedReportList) {
|
| + EventHistogramTester event_histogram_tester;
|
| +
|
| // Create a report list with maximum of 2 items.
|
| CertificateReportingService::BoundedReportList list(2 /* max_size */);
|
| EXPECT_EQ(0u, list.items().size());
|
| @@ -154,6 +157,9 @@ TEST(CertificateReportingServiceReportListTest, BoundedReportList) {
|
| EXPECT_EQ(2u, list.items().size());
|
| EXPECT_EQ("report3_zero_minutes_old", list.items()[0].serialized_report);
|
| EXPECT_EQ("report2_five_minutes_old", list.items()[1].serialized_report);
|
| +
|
| + event_histogram_tester.SetExpectedValues(0 /* submitted */, 0 /* failed */,
|
| + 0 /* successful */, 2 /* dropped */);
|
| }
|
|
|
| class CertificateReportingServiceReporterOnIOThreadTest
|
| @@ -167,13 +173,16 @@ class CertificateReportingServiceReporterOnIOThreadTest
|
| new net::TestURLRequestContextGetter(message_loop_->task_runner());
|
| net::URLRequestFailedJob::AddUrlHandler();
|
| net::URLRequestMockDataJob::AddUrlHandler();
|
| +
|
| + event_histogram_tester_.reset(new EventHistogramTester());
|
| }
|
|
|
| void TearDown() override {
|
| ClearURLHandlers();
|
| - // Check the histogram as the last thing. This makes sure no in-flight
|
| - // report is missed.
|
| + // Check histograms as the last thing. This makes sure no in-flight report
|
| + // is missed.
|
| histogram_test_helper_.CheckHistogram();
|
| + event_histogram_tester_.reset();
|
| }
|
|
|
| protected:
|
| @@ -185,12 +194,21 @@ class CertificateReportingServiceReporterOnIOThreadTest
|
| histogram_test_helper_.SetExpectedFailedReportCount(count);
|
| }
|
|
|
| + EventHistogramTester* event_histogram_tester() {
|
| + return event_histogram_tester_.get();
|
| + }
|
| +
|
| private:
|
| std::unique_ptr<base::MessageLoopForIO> message_loop_;
|
| std::unique_ptr<content::TestBrowserThread> io_thread_;
|
|
|
| scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
|
| ReportHistogramTestHelper histogram_test_helper_;
|
| + // Histogram tester for reporting events. This is a member instead of a local
|
| + // so that we can check the histogram after the test teardown. At that point
|
| + // all in flight reports should be completed or deleted because
|
| + // of CleanUpOnIOThread().
|
| + std::unique_ptr<EventHistogramTester> event_histogram_tester_;
|
| };
|
|
|
| TEST_F(CertificateReportingServiceReporterOnIOThreadTest,
|
| @@ -280,6 +298,12 @@ TEST_F(CertificateReportingServiceReporterOnIOThreadTest,
|
| EXPECT_EQ(1u, reporter.inflight_report_count_for_testing());
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(0u, list->items().size());
|
| +
|
| + // report1 was submitted once, failed once, dropped once.
|
| + // report2 was submitted twice, failed twice, dropped once.
|
| + // report3 was submitted four times, failed thrice, succeeded once.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 7 /* submitted */, 6 /* failed */, 1 /* successful */, 2 /* dropped */);
|
| }
|
|
|
| // Same as above, but retries are disabled.
|
| @@ -329,6 +353,10 @@ TEST_F(CertificateReportingServiceReporterOnIOThreadTest,
|
| reporter.SendPending();
|
| base::RunLoop().RunUntilIdle();
|
| ASSERT_EQ(0u, list->items().size());
|
| +
|
| + // report1 and report2 were both submitted once, failed once.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 2 /* submitted */, 2 /* failed */, 0 /* successful */, 0 /* dropped */);
|
| }
|
|
|
| class CertificateReportingServiceTest : public ::testing::Test {
|
| @@ -364,6 +392,8 @@ class CertificateReportingServiceTest : public ::testing::Test {
|
| base::Bind(&CertificateReportingServiceObserver::OnServiceReset,
|
| base::Unretained(&service_observer_))));
|
| service_observer_.WaitForReset();
|
| +
|
| + event_histogram_tester_.reset(new EventHistogramTester());
|
| }
|
|
|
| void TearDown() override {
|
| @@ -383,6 +413,7 @@ class CertificateReportingServiceTest : public ::testing::Test {
|
| WaitForIOThread();
|
|
|
| histogram_test_helper_.CheckHistogram();
|
| + event_histogram_tester_.reset();
|
| }
|
|
|
| protected:
|
| @@ -425,6 +456,10 @@ class CertificateReportingServiceTest : public ::testing::Test {
|
|
|
| CertificateReportingServiceTestHelper* test_helper() { return &test_helper_; }
|
|
|
| + EventHistogramTester* event_histogram_tester() {
|
| + return event_histogram_tester_.get();
|
| + }
|
| +
|
| private:
|
| void SetUpURLRequestContextOnIOThread() {
|
| std::unique_ptr<net::TestURLRequestContext> url_request_context(
|
| @@ -453,6 +488,8 @@ class CertificateReportingServiceTest : public ::testing::Test {
|
| CertificateReportingServiceTestHelper test_helper_;
|
| ReportHistogramTestHelper histogram_test_helper_;
|
| CertificateReportingServiceObserver service_observer_;
|
| +
|
| + std::unique_ptr<EventHistogramTester> event_histogram_tester_;
|
| };
|
|
|
| TEST_F(CertificateReportingServiceTest, SendSuccessful) {
|
| @@ -467,6 +504,10 @@ TEST_F(CertificateReportingServiceTest, SendSuccessful) {
|
| test_helper()->WaitForRequestsDestroyed(
|
| ReportExpectation::Successful({{"report0", RetryStatus::NOT_RETRIED},
|
| {"report1", RetryStatus::NOT_RETRIED}}));
|
| +
|
| + // report0 and report1 were both submitted once, succeeded once.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 2 /* submitted */, 0 /* failed */, 2 /* successful */, 0 /* dropped */);
|
| }
|
|
|
| TEST_F(CertificateReportingServiceTest, SendFailure) {
|
| @@ -502,6 +543,11 @@ TEST_F(CertificateReportingServiceTest, SendFailure) {
|
| service()->SendPending();
|
| test_helper()->WaitForRequestsDestroyed(ReportExpectation::Successful(
|
| {{"report0", RetryStatus::RETRIED}, {"report1", RetryStatus::RETRIED}}));
|
| +
|
| + // report0 and report1 were both submitted thrice, failed twice, succeeded
|
| + // once. report2 was submitted once, succeeded once.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 7 /* submitted */, 4 /* failed */, 3 /* successful */, 0 /* dropped */);
|
| }
|
|
|
| TEST_F(CertificateReportingServiceTest, Disabled_ShouldNotSend) {
|
| @@ -524,6 +570,10 @@ TEST_F(CertificateReportingServiceTest, Disabled_ShouldNotSend) {
|
| service()->Send(MakeReport("report1"));
|
| test_helper()->WaitForRequestsDestroyed(
|
| ReportExpectation::Successful({{"report1", RetryStatus::NOT_RETRIED}}));
|
| +
|
| + // report0 was never sent. report1 was submitted once, succeeded once.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 1 /* submitted */, 0 /* failed */, 1 /* successful */, 0 /* dropped */);
|
| }
|
|
|
| TEST_F(CertificateReportingServiceTest, Disabled_ShouldClearPendingReports) {
|
| @@ -549,6 +599,10 @@ TEST_F(CertificateReportingServiceTest, Disabled_ShouldClearPendingReports) {
|
|
|
| // Sending with empty queue has no effect.
|
| service()->SendPending();
|
| +
|
| + // report0 was submitted once, failed once.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 1 /* submitted */, 1 /* failed */, 0 /* successful */, 0 /* dropped */);
|
| }
|
|
|
| TEST_F(CertificateReportingServiceTest, DontSendOldReports) {
|
| @@ -596,6 +650,13 @@ TEST_F(CertificateReportingServiceTest, DontSendOldReports) {
|
| // Send pending reports. report2 should be discarded since it's too old. No
|
| // other reports remain.
|
| service()->SendPending();
|
| +
|
| + // report0 was submitted once, failed once, dropped once.
|
| + // report1 was submitted twice, failed twice, dropped once.
|
| + // report2 was submitted twice, failed twice, dropped once.
|
| + // Need to wait for SendPending() to complete.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 5 /* submitted */, 5 /* failed */, 0 /* successful */, 3 /* dropped */);
|
| }
|
|
|
| TEST_F(CertificateReportingServiceTest, DiscardOldReports) {
|
| @@ -654,6 +715,13 @@ TEST_F(CertificateReportingServiceTest, DiscardOldReports) {
|
|
|
| // Do a final send. No reports should be sent.
|
| service()->SendPending();
|
| +
|
| + // report0 was submitted once, failed once, dropped once.
|
| + // report1 was submitted twice, failed twice, dropped once.
|
| + // report2 was submitted thrice, failed twice, succeeded once.
|
| + // report3 was submitted thrice, failed twice, succeeded once.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 9 /* submitted */, 7 /* failed */, 2 /* successful */, 2 /* dropped */);
|
| }
|
|
|
| // A delayed report should successfully upload when it's resumed.
|
| @@ -672,6 +740,10 @@ TEST_F(CertificateReportingServiceTest, Delayed_Resumed) {
|
| test_helper()->ResumeDelayedRequest();
|
| test_helper()->WaitForRequestsDestroyed(
|
| ReportExpectation::Delayed({{"report0", RetryStatus::NOT_RETRIED}}));
|
| +
|
| + // report0 was submitted once, succeeded once.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 1 /* submitted */, 0 /* failed */, 1 /* successful */, 0 /* dropped */);
|
| }
|
|
|
| // Delayed reports should cleaned when the service is reset.
|
| @@ -707,4 +779,9 @@ TEST_F(CertificateReportingServiceTest, Delayed_Reset) {
|
| test_helper()->WaitForRequestsDestroyed(
|
| ReportExpectation::Delayed({{"report0", RetryStatus::NOT_RETRIED},
|
| {"report1", RetryStatus::NOT_RETRIED}}));
|
| +
|
| + // report0 was submitted once, but neither failed nor succeeded because the
|
| + // report queue was cleared. report1 was submitted once, succeeded once.
|
| + event_histogram_tester()->SetExpectedValues(
|
| + 2 /* submitted */, 0 /* failed */, 1 /* successful */, 0 /* dropped */);
|
| }
|
|
|