diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-24 12:15:48 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-28 13:30:04 +0000 |
commit | b014812705fc80bff0a5c120dfcef88f349816dc (patch) | |
tree | 25a2e2d9fa285f1add86aa333389a839f81a39ae /chromium/components/feedback/feedback_uploader_unittest.cc | |
parent | 9f4560b1027ae06fdb497023cdcaf91b8511fa74 (diff) | |
download | qtwebengine-chromium-b014812705fc80bff0a5c120dfcef88f349816dc.tar.gz |
BASELINE: Update Chromium to 68.0.3440.125
Change-Id: I23f19369e01f688e496f5bf179abb521ad73874f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/feedback/feedback_uploader_unittest.cc')
-rw-r--r-- | chromium/components/feedback/feedback_uploader_unittest.cc | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/chromium/components/feedback/feedback_uploader_unittest.cc b/chromium/components/feedback/feedback_uploader_unittest.cc index 7abe3aea312..d9bf658d3c2 100644 --- a/chromium/components/feedback/feedback_uploader_unittest.cc +++ b/chromium/components/feedback/feedback_uploader_unittest.cc @@ -13,6 +13,7 @@ #include "base/stl_util.h" #include "base/task_scheduler/post_task.h" #include "base/task_scheduler/task_traits.h" +#include "base/threading/sequenced_task_runner_handle.h" #include "components/feedback/feedback_report.h" #include "components/feedback/feedback_uploader_factory.h" #include "content/public/test/test_browser_context.h" @@ -46,6 +47,15 @@ class MockFeedbackUploader : public FeedbackUploader { run_loop_->Run(); } + void SimulateLoadingOfflineReports() { + task_runner()->PostTask( + FROM_HERE, + base::BindOnce( + &FeedbackReport::LoadReportsAndQueue, feedback_reports_path(), + base::Bind(&MockFeedbackUploader::QueueSingleReport, + base::SequencedTaskRunnerHandle::Get(), this))); + } + const std::map<std::string, unsigned int>& dispatched_reports() const { return dispatched_reports_; } @@ -53,6 +63,15 @@ class MockFeedbackUploader : public FeedbackUploader { void set_simulate_failure(bool value) { simulate_failure_ = value; } private: + static void QueueSingleReport( + scoped_refptr<base::SequencedTaskRunner> main_task_runner, + MockFeedbackUploader* uploader, + const std::string& data) { + main_task_runner->PostTask( + FROM_HERE, base::BindOnce(&MockFeedbackUploader::QueueReport, + uploader->AsWeakPtr(), data)); + } + // FeedbackUploaderChrome: void StartDispatchingReport() override { if (base::ContainsKey(dispatched_reports_, @@ -93,11 +112,15 @@ class FeedbackUploaderTest : public testing::Test { public: FeedbackUploaderTest() { FeedbackUploader::SetMinimumRetryDelayForTesting(kRetryDelayForTest); - uploader_ = std::make_unique<MockFeedbackUploader>(&context_); + RecreateUploader(); } ~FeedbackUploaderTest() override = default; + void RecreateUploader() { + uploader_ = std::make_unique<MockFeedbackUploader>(&context_); + } + void QueueReport(const std::string& data) { uploader_->QueueReport(data); } @@ -156,4 +179,32 @@ TEST_F(FeedbackUploaderTest, QueueMultipleWithFailures) { EXPECT_EQ(uploader()->dispatched_reports().at(kReportFive), 1u); } +TEST_F(FeedbackUploaderTest, SimulateOfflineReports) { + // Simulate offline reports by failing to upload three reports. + uploader()->set_simulate_failure(true); + QueueReport(kReportOne); + QueueReport(kReportTwo); + QueueReport(kReportThree); + + // All three reports will be attempted to be uploaded, but the uploader queue + // will remain having three reports since they all failed. + uploader()->set_expected_reports(3); + uploader()->RunMessageLoop(); + EXPECT_EQ(uploader()->dispatched_reports().size(), 3u); + EXPECT_FALSE(uploader()->QueueEmpty()); + + // Simulate a sign out / resign in by recreating the uploader. This should not + // clear any pending feedback report files on disk, and hence they can be + // reloaded. + RecreateUploader(); + uploader()->SimulateLoadingOfflineReports(); + uploader()->set_expected_reports(3); + uploader()->RunMessageLoop(); + + // The three reports were loaded, successfully uploaded, and the uploader + // queue is now empty. + EXPECT_EQ(uploader()->dispatched_reports().size(), 3u); + EXPECT_TRUE(uploader()->QueueEmpty()); +} + } // namespace feedback |