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

Unified Diff: chrome/browser/feedback/feedback_uploader_unittest.cc

Issue 116863002: Add feedback uploader to upload reports in a sequenced manner with retries. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/feedback/feedback_uploader_unittest.cc
diff --git a/chrome/browser/feedback/feedback_uploader_unittest.cc b/chrome/browser/feedback/feedback_uploader_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..336346671a4fb63dfa7c9d997884cf3d69525e48
--- /dev/null
+++ b/chrome/browser/feedback/feedback_uploader_unittest.cc
@@ -0,0 +1,118 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/feedback/feedback_uploader.h"
+
+#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "chrome/browser/feedback/feedback_uploader_factory.h"
+#include "content/public/test/test_browser_context.h"
+#include "content/public/test/test_browser_thread.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+const char kReportOne[] = "one";
+const char kReportTwo[] = "two";
+const char kReportThree[] = "three";
+const char kReportFour[] = "four";
+const char kReportFive[] = "five";
+
+const base::TimeDelta kRetryDelayForTest =
+ base::TimeDelta::FromMilliseconds(100);
+
+} // namespace
+
+namespace feedback {
+
+class FeedbackUploaderTest : public testing::Test {
+ protected:
+ FeedbackUploaderTest()
+ : ui_thread_(content::BrowserThread::UI, &message_loop_),
+ expected_reports_(0) {
+ uploader_ = FeedbackUploaderFactory::GetForBrowserContext(&context_);
+ uploader_->setup_for_test(
+ base::Bind(&FeedbackUploaderTest::MockDispatchReport,
+ base::Unretained(this)),
+ kRetryDelayForTest);
+ }
+
+ virtual ~FeedbackUploaderTest() {}
+
+ void QueueReport(const std::string& data) {
+ uploader_->QueueReport(make_scoped_ptr(new std::string(data)));
+ }
+
+ void ReportFailure(const std::string& data) {
+ uploader_->RetryReport(make_scoped_ptr(new std::string(data)));
+ }
+
+ void MockDispatchReport(scoped_ptr<std::string> report_data) {
+ dispatched_reports_.push_back(*report_data.get());
+
+ // Dispatch will always update the timer, whether successful or not,
+ // simulate the same behavior.
+ uploader_->UpdateUploadTimer();
+
+ if (dispatched_reports_.size() >= expected_reports_) {
+ if (run_loop_.get())
+ run_loop_->Quit();
+ }
+ }
+
+ void RunMessageLoop() {
+ run_loop_.reset(new base::RunLoop());
+ run_loop_->Run();
+ }
+
+ base::MessageLoop message_loop_;
+ scoped_ptr<base::RunLoop> run_loop_;
+ content::TestBrowserContext context_;
+ FeedbackUploader* uploader_;
+ content::TestBrowserThread ui_thread_;
+
+ std::vector<std::string> dispatched_reports_;
+ uint expected_reports_;
+};
+
+TEST_F(FeedbackUploaderTest, QueueMultiple) {
+ dispatched_reports_.clear();
+ QueueReport(kReportOne);
+ QueueReport(kReportTwo);
+ QueueReport(kReportThree);
+ QueueReport(kReportFour);
+
+ EXPECT_EQ(dispatched_reports_.size(), 4u);
+ EXPECT_EQ(dispatched_reports_[0], kReportOne);
+ EXPECT_EQ(dispatched_reports_[1], kReportTwo);
+ EXPECT_EQ(dispatched_reports_[2], kReportThree);
+ EXPECT_EQ(dispatched_reports_[3], kReportFour);
+}
+
+TEST_F(FeedbackUploaderTest, QueueMultipleWithFailures) {
+ dispatched_reports_.clear();
+ QueueReport(kReportOne);
+ QueueReport(kReportTwo);
+ QueueReport(kReportThree);
+ QueueReport(kReportFour);
+
+ ReportFailure(kReportThree);
+ ReportFailure(kReportTwo);
+ QueueReport(kReportFive);
+
+ expected_reports_ = 7;
+ RunMessageLoop();
+
+ EXPECT_EQ(dispatched_reports_.size(), 7u);
+ EXPECT_EQ(dispatched_reports_[0], kReportOne);
+ EXPECT_EQ(dispatched_reports_[1], kReportTwo);
+ EXPECT_EQ(dispatched_reports_[2], kReportThree);
+ EXPECT_EQ(dispatched_reports_[3], kReportFour);
+ EXPECT_EQ(dispatched_reports_[4], kReportFive);
+ EXPECT_EQ(dispatched_reports_[5], kReportThree);
+ EXPECT_EQ(dispatched_reports_[6], kReportTwo);
+}
+
+} // namespace feedback

Powered by Google App Engine
This is Rietveld 408576698