| 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
|
|
|