summaryrefslogtreecommitdiff
path: root/chromium/components/feedback/feedback_uploader_unittest.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-08-24 12:15:48 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-08-28 13:30:04 +0000
commitb014812705fc80bff0a5c120dfcef88f349816dc (patch)
tree25a2e2d9fa285f1add86aa333389a839f81a39ae /chromium/components/feedback/feedback_uploader_unittest.cc
parent9f4560b1027ae06fdb497023cdcaf91b8511fa74 (diff)
downloadqtwebengine-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.cc53
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