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

Unified Diff: chrome/browser/chromeos/policy/system_log_upload_job_unittest.cc

Issue 1216643002: Added unittests for SystemLogUploader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed comments. Created 5 years, 5 months 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/chromeos/policy/system_log_upload_job_unittest.cc
diff --git a/chrome/browser/chromeos/policy/system_log_upload_job_unittest.cc b/chrome/browser/chromeos/policy/system_log_upload_job_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2a5b866e1759bf869f6862efb0833c5734cdff58
--- /dev/null
+++ b/chrome/browser/chromeos/policy/system_log_upload_job_unittest.cc
@@ -0,0 +1,202 @@
+// Copyright 2015 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 "base/run_loop.h"
+#include "base/strings/stringprintf.h"
+#include "base/test/test_mock_time_task_runner.h"
+#include "base/thread_task_runner_handle.h"
+#include "base/time/time.h"
+#include "chrome/browser/chromeos/policy/system_log_upload_job.h"
+#include "chrome/browser/chromeos/policy/upload_job.h"
+#include "content/public/test/test_browser_thread.h"
+#include "net/http/http_request_headers.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace policy {
+
+namespace {
+
+// The list of tested system log file names.
+const char* const kTestSystemLogFileNames[] = {"my_system_log_file.txt"};
+
+// Number of the system log files to upload in the list.
+const int kMaxNumTestSystemLogFileNames = 1;
+
+class MockUploadJob : public policy::UploadJob {
+ public:
+ // If |error_code| is a null pointer OnSuccess() will be invoked when the
+ // Start() method is called, otherwise OnFailure() will be invoked with the
+ // respective |error_code|.
+ MockUploadJob(const GURL& upload_url,
+ UploadJob::Delegate* delegate,
+ scoped_ptr<UploadJob::ErrorCode> error_code);
+ ~MockUploadJob() override;
+
+ // policy::UploadJob:
+ void AddDataSegment(const std::string& name,
+ const std::string& filename,
+ const std::map<std::string, std::string>& header_entries,
+ scoped_ptr<std::string> data) override;
+ void Start() override;
+
+ protected:
+ UploadJob::Delegate* delegate_;
+ scoped_ptr<UploadJob::ErrorCode> error_code_;
+ int file_index_;
+};
+
+MockUploadJob::MockUploadJob(const GURL& upload_url,
+ UploadJob::Delegate* delegate,
+ scoped_ptr<UploadJob::ErrorCode> error_code)
+ : delegate_(delegate), error_code_(error_code.Pass()), file_index_(0) {
+}
+
+MockUploadJob::~MockUploadJob() {
+}
+
+void MockUploadJob::AddDataSegment(
+ const std::string& name,
+ const std::string& filename,
+ const std::map<std::string, std::string>& header_entries,
+ scoped_ptr<std::string> data) {
+ // Test all fields to upload.
+ EXPECT_LT(file_index_, kMaxNumTestSystemLogFileNames);
+ EXPECT_GE(file_index_, 0);
+
+ EXPECT_EQ(base::StringPrintf(SystemLogUploadJob::kNameFieldTemplate,
+ file_index_ + 1),
+ name);
+
+ EXPECT_EQ(kTestSystemLogFileNames[file_index_], filename);
+
+ EXPECT_EQ(2U, header_entries.size());
+ EXPECT_EQ(
+ SystemLogUploadJob::kFileTypeLogFile,
+ header_entries.find(SystemLogUploadJob::kFileTypeHeaderName)->second);
+ EXPECT_EQ(SystemLogUploadJob::kContentTypePlainText,
+ header_entries.find(net::HttpRequestHeaders::kContentType)->second);
+
+ EXPECT_EQ(kTestSystemLogFileNames[file_index_], *data);
+
+ file_index_++;
+}
+
+void MockUploadJob::Start() {
+ DCHECK(delegate_);
+ if (error_code_) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(&UploadJob::Delegate::OnFailure,
+ base::Unretained(delegate_), *error_code_));
+ } else {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(&UploadJob::Delegate::OnSuccess,
+ base::Unretained(delegate_)));
+ }
+}
+
+// Generate the fake system log files.
+scoped_ptr<SystemLogUploadJob::SystemLogs> GenerateTestSystemLogFiles() {
+ scoped_ptr<SystemLogUploadJob::SystemLogs> system_logs(
+ new SystemLogUploadJob::SystemLogs());
+ for (auto const file_path : kTestSystemLogFileNames) {
+ system_logs->push_back(std::make_pair(file_path, file_path));
+ }
+ return system_logs;
+}
+
+class MockSystemLogDelegate : public SystemLogUploadJob::Delegate {
+ public:
+ explicit MockSystemLogDelegate(
+ scoped_ptr<UploadJob::ErrorCode> upload_job_error_code);
+ ~MockSystemLogDelegate() override;
+
+ void LoadSystemLogs(const LogUploadCallback& upload_callback) override;
+ scoped_ptr<UploadJob> CreateUploadJob(const GURL&,
+ UploadJob::Delegate*) override;
+
+ private:
+ scoped_ptr<UploadJob::ErrorCode> upload_job_error_code_;
+};
+
+MockSystemLogDelegate::MockSystemLogDelegate(
+ scoped_ptr<UploadJob::ErrorCode> upload_job_error_code)
+ : upload_job_error_code_(upload_job_error_code.Pass()) {
+}
+
+MockSystemLogDelegate::~MockSystemLogDelegate() {
+}
+
+void MockSystemLogDelegate::LoadSystemLogs(
+ const LogUploadCallback& upload_callback) {
+ scoped_ptr<SystemLogUploadJob::SystemLogs> test_files =
+ GenerateTestSystemLogFiles();
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+ base::Bind(upload_callback, base::Owned(test_files.release())));
+}
+
+scoped_ptr<UploadJob> MockSystemLogDelegate::CreateUploadJob(
+ const GURL& upload_url,
+ UploadJob::Delegate* delegate) {
+ return make_scoped_ptr(
+ new MockUploadJob(upload_url, delegate, upload_job_error_code_.Pass()));
+}
+
+} // namespace
+
+class SystemLogUploadTest : public testing::Test {
+ public:
+ // If |error_code| is a null pointer, the VerifyResult expects the success
+ // callback is invoked, otherwise - the failure callback with the respective
+ // |error_code|.
+ void RunTest(scoped_ptr<UploadJob::ErrorCode> error_code);
+
+ protected:
+ SystemLogUploadTest()
+ : ui_thread_(content::BrowserThread::UI, &run_loop_),
+ task_runner_(new base::TestMockTimeTaskRunner()),
+ weak_factory_(this) {}
+
+ ~SystemLogUploadTest() override {}
+
+ void VerifyResults(bool expected_call) {
+ EXPECT_TRUE(expected_call);
+ run_loop_.Quit();
+ }
+
+ base::MessageLoopForUI run_loop_;
+ content::TestBrowserThread ui_thread_;
+
+ private:
+ scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
+
+ base::WeakPtrFactory<SystemLogUploadTest> weak_factory_;
+ DISALLOW_COPY_AND_ASSIGN(SystemLogUploadTest);
+};
+
+void SystemLogUploadTest::RunTest(scoped_ptr<UploadJob::ErrorCode> error_code) {
+ bool success = !error_code;
+
+ scoped_ptr<SystemLogUploadJob> job(new SystemLogUploadJob(
+ make_scoped_ptr(new MockSystemLogDelegate(error_code.Pass())),
+ base::Bind(&SystemLogUploadTest::VerifyResults,
+ weak_factory_.GetWeakPtr(), success),
+ base::Bind(&SystemLogUploadTest::VerifyResults,
+ weak_factory_.GetWeakPtr(), !success)));
+
+ job->Run();
+ run_loop_.Run();
+}
+
+TEST_F(SystemLogUploadTest, Success) {
+ RunTest(nullptr);
+}
+
+TEST_F(SystemLogUploadTest, Failure) {
+ scoped_ptr<UploadJob::ErrorCode> error_code(
+ new UploadJob::ErrorCode(UploadJob::AUTHENTICATION_ERROR));
+ RunTest(error_code.Pass());
+}
+
+} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698