Chromium Code Reviews| Index: chrome/browser/chromeos/policy/system_log_uploader_unittest.cc |
| diff --git a/chrome/browser/chromeos/policy/system_log_uploader_unittest.cc b/chrome/browser/chromeos/policy/system_log_uploader_unittest.cc |
| index a1e16e7b76d817fac13fac6d8c75bc02eee4eb8a..756f722dfd235b2eea0585ac966e2a5ce53f1a98 100644 |
| --- a/chrome/browser/chromeos/policy/system_log_uploader_unittest.cc |
| +++ b/chrome/browser/chromeos/policy/system_log_uploader_unittest.cc |
| @@ -6,6 +6,9 @@ |
| #include "base/test/test_simple_task_runner.h" |
| #include "base/time/time.h" |
| #include "chrome/browser/chromeos/policy/system_log_uploader.h" |
| +#include "chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h" |
| +#include "content/public/test/test_browser_thread_bundle.h" |
| +#include "content/public/test/test_utils.h" |
| #include "net/http/http_request_headers.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| @@ -110,6 +113,7 @@ class MockSystemLogDelegate : public SystemLogUploader::Delegate { |
| ~MockSystemLogDelegate() override {} |
| void LoadSystemLogs(const LogUploadCallback& upload_callback) override { |
| + EXPECT_TRUE(is_upload_allowed_); |
| upload_callback.Run( |
| make_scoped_ptr(new SystemLogUploader::SystemLogs(system_logs_))); |
| } |
| @@ -121,7 +125,12 @@ class MockSystemLogDelegate : public SystemLogUploader::Delegate { |
| system_logs_.size())); |
| } |
| + void set_upload_allowed(bool is_upload_allowed) { |
| + is_upload_allowed_ = is_upload_allowed; |
| + } |
| + |
| private: |
| + bool is_upload_allowed_; |
| bool is_upload_error_; |
| SystemLogUploader::SystemLogs system_logs_; |
| }; |
| @@ -132,20 +141,20 @@ class SystemLogUploaderTest : public testing::Test { |
| public: |
| SystemLogUploaderTest() : task_runner_(new base::TestSimpleTaskRunner()) {} |
| + void TearDown() override { content::RunAllBlockingPoolTasksUntilIdle(); } |
| + |
| // Given a pending task to upload system logs. |
| - void RunPendingUploadTaskAndCheckNext(const SystemLogUploader& uploader, |
| - base::TimeDelta expected_delay) { |
| + void RunPendingUploadTaskAndCheckNext(base::TimeDelta expected_delay) { |
| EXPECT_FALSE(task_runner_->GetPendingTasks().empty()); |
| task_runner_->RunPendingTasks(); |
| // The previous task should have uploaded another log upload task. |
| EXPECT_EQ(1U, task_runner_->GetPendingTasks().size()); |
| - CheckPendingTaskDelay(uploader, expected_delay); |
| + CheckPendingTaskDelay(expected_delay); |
| } |
| - void CheckPendingTaskDelay(const SystemLogUploader& uploader, |
| - base::TimeDelta expected_delay) { |
| + void CheckPendingTaskDelay(base::TimeDelta expected_delay) { |
| // The next task should be scheduled sometime between |
| // |last_upload_attempt| + |expected_delay| and |
| // |now| + |expected_delay|. |
| @@ -153,49 +162,81 @@ class SystemLogUploaderTest : public testing::Test { |
| base::Time next_task = now + task_runner_->NextPendingTaskDelay(); |
| EXPECT_LE(next_task, now + expected_delay); |
| - EXPECT_GE(next_task, uploader.last_upload_attempt() + expected_delay); |
| + EXPECT_GE(next_task, uploader_->last_upload_attempt() + expected_delay); |
| } |
| + void InitTestCase(scoped_ptr<MockSystemLogDelegate> delegate) { |
| + // Replace settings provider must be after observer creation in the system |
|
Andrew T Wilson (Slow)
2015/08/13 11:26:18
Why is the ordering important? I'm not sure I unde
Polina Bondarenko
2015/08/13 14:51:16
Yes, you're right, it's not important, removed it.
|
| + // log uploader's constructor. |
| + uploader_.reset(new SystemLogUploader(delegate.Pass(), task_runner_)); |
| + settings_helper_.ReplaceProvider(chromeos::kLogUploadEnabled); |
| + } |
| + |
| + void DestroyTestCase() { settings_helper_.RestoreProvider(); } |
| + |
| + protected: |
| + content::TestBrowserThreadBundle thread_bundle_; |
| + chromeos::ScopedCrosSettingsTestHelper settings_helper_; |
| scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| + scoped_ptr<SystemLogUploader> uploader_; |
| }; |
| +// Turn off system log uploads. |
| +TEST_F(SystemLogUploaderTest, Basic) { |
| + EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); |
| + |
| + scoped_ptr<MockSystemLogDelegate> syslog_delegate( |
| + new MockSystemLogDelegate(false, SystemLogUploader::SystemLogs())); |
| + syslog_delegate->set_upload_allowed(false); |
| + InitTestCase(syslog_delegate.Pass()); |
|
Andrew T Wilson (Slow)
2015/08/13 11:26:18
It's a bit weird to have this Init/DestroyTestCase
Polina Bondarenko
2015/08/13 14:51:17
Yes, it's possible, done.
|
| + |
| + settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, false); |
| + |
| + task_runner_->RunPendingTasks(); |
| + DestroyTestCase(); |
| +} |
| + |
| // One success task pending. |
| TEST_F(SystemLogUploaderTest, SuccessTest) { |
| EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); |
| - SystemLogUploader uploader(make_scoped_ptr(new MockSystemLogDelegate( |
| - false, SystemLogUploader::SystemLogs())), |
| - task_runner_); |
| + scoped_ptr<MockSystemLogDelegate> syslog_delegate( |
| + new MockSystemLogDelegate(false, SystemLogUploader::SystemLogs())); |
| + syslog_delegate->set_upload_allowed(true); |
| + InitTestCase(syslog_delegate.Pass()); |
| + |
| + settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, true); |
| EXPECT_EQ(1U, task_runner_->GetPendingTasks().size()); |
| - RunPendingUploadTaskAndCheckNext( |
| - uploader, base::TimeDelta::FromMilliseconds( |
| - SystemLogUploader::kDefaultUploadDelayMs)); |
| + RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds( |
| + SystemLogUploader::kDefaultUploadDelayMs)); |
| + DestroyTestCase(); |
| } |
| // Three failed responses recieved. |
| TEST_F(SystemLogUploaderTest, ThreeFailureTest) { |
| EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); |
| - SystemLogUploader uploader(make_scoped_ptr(new MockSystemLogDelegate( |
| - true, SystemLogUploader::SystemLogs())), |
| - task_runner_); |
| + scoped_ptr<MockSystemLogDelegate> syslog_delegate( |
| + new MockSystemLogDelegate(true, SystemLogUploader::SystemLogs())); |
| + syslog_delegate->set_upload_allowed(true); |
| + |
| + InitTestCase(syslog_delegate.Pass()); |
| + settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, true); |
| EXPECT_EQ(1U, task_runner_->GetPendingTasks().size()); |
| // Do not retry two times consequentially. |
| - RunPendingUploadTaskAndCheckNext(uploader, |
| - base::TimeDelta::FromMilliseconds( |
| - SystemLogUploader::kErrorUploadDelayMs)); |
| + RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds( |
| + SystemLogUploader::kErrorUploadDelayMs)); |
| // We are using the kDefaultUploadDelayMs and not the kErrorUploadDelayMs here |
| // because there's just one retry. |
| - RunPendingUploadTaskAndCheckNext( |
| - uploader, base::TimeDelta::FromMilliseconds( |
| - SystemLogUploader::kDefaultUploadDelayMs)); |
| - RunPendingUploadTaskAndCheckNext(uploader, |
| - base::TimeDelta::FromMilliseconds( |
| - SystemLogUploader::kErrorUploadDelayMs)); |
| + RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds( |
| + SystemLogUploader::kDefaultUploadDelayMs)); |
| + RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds( |
| + SystemLogUploader::kErrorUploadDelayMs)); |
| + DestroyTestCase(); |
| } |
| // Check header fields of system log files to upload. |
| @@ -203,15 +244,47 @@ TEST_F(SystemLogUploaderTest, CheckHeaders) { |
| EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); |
| SystemLogUploader::SystemLogs system_logs = GenerateTestSystemLogFiles(); |
| - SystemLogUploader uploader( |
| - make_scoped_ptr(new MockSystemLogDelegate(false, system_logs)), |
| - task_runner_); |
| + scoped_ptr<MockSystemLogDelegate> syslog_delegate( |
| + new MockSystemLogDelegate(false, system_logs)); |
| + syslog_delegate->set_upload_allowed(true); |
| + InitTestCase(syslog_delegate.Pass()); |
| + |
| + settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, true); |
| EXPECT_EQ(1U, task_runner_->GetPendingTasks().size()); |
| - RunPendingUploadTaskAndCheckNext( |
| - uploader, base::TimeDelta::FromMilliseconds( |
| - SystemLogUploader::kDefaultUploadDelayMs)); |
| + RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds( |
| + SystemLogUploader::kDefaultUploadDelayMs)); |
| + DestroyTestCase(); |
| +} |
| + |
| +// Disable system log uploads after one failed log upload. |
| +TEST_F(SystemLogUploaderTest, DisableLogUpload) { |
| + EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); |
| + |
| + scoped_ptr<MockSystemLogDelegate> syslog_delegate( |
| + new MockSystemLogDelegate(true, SystemLogUploader::SystemLogs())); |
| + MockSystemLogDelegate* mock_delegate = syslog_delegate.get(); |
| + InitTestCase(syslog_delegate.Pass()); |
| + |
| + settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, true); |
| + mock_delegate->set_upload_allowed(true); |
| + |
| + EXPECT_EQ(1U, task_runner_->GetPendingTasks().size()); |
| + RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds( |
| + SystemLogUploader::kErrorUploadDelayMs)); |
| + |
| + // Disable log upload and check that frequency is usual, because there is no |
| + // errors, we should not upload logs. |
| + settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, false); |
| + mock_delegate->set_upload_allowed(false); |
| + task_runner_->RunPendingTasks(); |
| + |
| + RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds( |
| + SystemLogUploader::kDefaultUploadDelayMs)); |
| + RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds( |
| + SystemLogUploader::kDefaultUploadDelayMs)); |
| + DestroyTestCase(); |
| } |
| } // namespace policy |