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

Side by Side Diff: chrome/browser/chromeos/policy/system_log_uploader_unittest.cc

Issue 1280003004: Added policy to disable/enable a system log upload. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/strings/stringprintf.h" 5 #include "base/strings/stringprintf.h"
6 #include "base/test/test_simple_task_runner.h" 6 #include "base/test/test_simple_task_runner.h"
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "chrome/browser/chromeos/policy/system_log_uploader.h" 8 #include "chrome/browser/chromeos/policy/system_log_uploader.h"
9 #include "chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h"
10 #include "content/public/test/test_browser_thread_bundle.h"
11 #include "content/public/test/test_utils.h"
9 #include "net/http/http_request_headers.h" 12 #include "net/http/http_request_headers.h"
10 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
11 14
12 namespace policy { 15 namespace policy {
13 16
14 namespace { 17 namespace {
15 18
16 // The list of tested system log file names. 19 // The list of tested system log file names.
17 const char* const kTestSystemLogFileNames[] = {"name1.txt", "name32.txt"}; 20 const char* const kTestSystemLogFileNames[] = {"name1.txt", "name32.txt"};
18 21
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 // MockSystemLogDelegate - mock class that creates an upload job and runs upload 106 // MockSystemLogDelegate - mock class that creates an upload job and runs upload
104 // callback. 107 // callback.
105 class MockSystemLogDelegate : public SystemLogUploader::Delegate { 108 class MockSystemLogDelegate : public SystemLogUploader::Delegate {
106 public: 109 public:
107 MockSystemLogDelegate(bool is_upload_error, 110 MockSystemLogDelegate(bool is_upload_error,
108 const SystemLogUploader::SystemLogs& system_logs) 111 const SystemLogUploader::SystemLogs& system_logs)
109 : is_upload_error_(is_upload_error), system_logs_(system_logs) {} 112 : is_upload_error_(is_upload_error), system_logs_(system_logs) {}
110 ~MockSystemLogDelegate() override {} 113 ~MockSystemLogDelegate() override {}
111 114
112 void LoadSystemLogs(const LogUploadCallback& upload_callback) override { 115 void LoadSystemLogs(const LogUploadCallback& upload_callback) override {
116 EXPECT_TRUE(is_upload_allowed_);
113 upload_callback.Run( 117 upload_callback.Run(
114 make_scoped_ptr(new SystemLogUploader::SystemLogs(system_logs_))); 118 make_scoped_ptr(new SystemLogUploader::SystemLogs(system_logs_)));
115 } 119 }
116 120
117 scoped_ptr<UploadJob> CreateUploadJob( 121 scoped_ptr<UploadJob> CreateUploadJob(
118 const GURL& url, 122 const GURL& url,
119 UploadJob::Delegate* delegate) override { 123 UploadJob::Delegate* delegate) override {
120 return make_scoped_ptr(new MockUploadJob(url, delegate, is_upload_error_, 124 return make_scoped_ptr(new MockUploadJob(url, delegate, is_upload_error_,
121 system_logs_.size())); 125 system_logs_.size()));
122 } 126 }
123 127
128 void set_upload_allowed(bool is_upload_allowed) {
129 is_upload_allowed_ = is_upload_allowed;
130 }
131
124 private: 132 private:
133 bool is_upload_allowed_;
125 bool is_upload_error_; 134 bool is_upload_error_;
126 SystemLogUploader::SystemLogs system_logs_; 135 SystemLogUploader::SystemLogs system_logs_;
127 }; 136 };
128 137
129 } // namespace 138 } // namespace
130 139
131 class SystemLogUploaderTest : public testing::Test { 140 class SystemLogUploaderTest : public testing::Test {
132 public: 141 public:
133 SystemLogUploaderTest() : task_runner_(new base::TestSimpleTaskRunner()) {} 142 SystemLogUploaderTest() : task_runner_(new base::TestSimpleTaskRunner()) {}
134 143
144 void TearDown() override { content::RunAllBlockingPoolTasksUntilIdle(); }
145
135 // Given a pending task to upload system logs. 146 // Given a pending task to upload system logs.
136 void RunPendingUploadTaskAndCheckNext(const SystemLogUploader& uploader, 147 void RunPendingUploadTaskAndCheckNext(base::TimeDelta expected_delay) {
137 base::TimeDelta expected_delay) {
138 EXPECT_FALSE(task_runner_->GetPendingTasks().empty()); 148 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
139 task_runner_->RunPendingTasks(); 149 task_runner_->RunPendingTasks();
140 150
141 // The previous task should have uploaded another log upload task. 151 // The previous task should have uploaded another log upload task.
142 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size()); 152 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
143 153
144 CheckPendingTaskDelay(uploader, expected_delay); 154 CheckPendingTaskDelay(expected_delay);
145 } 155 }
146 156
147 void CheckPendingTaskDelay(const SystemLogUploader& uploader, 157 void CheckPendingTaskDelay(base::TimeDelta expected_delay) {
148 base::TimeDelta expected_delay) {
149 // The next task should be scheduled sometime between 158 // The next task should be scheduled sometime between
150 // |last_upload_attempt| + |expected_delay| and 159 // |last_upload_attempt| + |expected_delay| and
151 // |now| + |expected_delay|. 160 // |now| + |expected_delay|.
152 base::Time now = base::Time::NowFromSystemTime(); 161 base::Time now = base::Time::NowFromSystemTime();
153 base::Time next_task = now + task_runner_->NextPendingTaskDelay(); 162 base::Time next_task = now + task_runner_->NextPendingTaskDelay();
154 163
155 EXPECT_LE(next_task, now + expected_delay); 164 EXPECT_LE(next_task, now + expected_delay);
156 EXPECT_GE(next_task, uploader.last_upload_attempt() + expected_delay); 165 EXPECT_GE(next_task, uploader_->last_upload_attempt() + expected_delay);
157 } 166 }
158 167
168 void InitTestCase(scoped_ptr<MockSystemLogDelegate> delegate) {
169 // 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.
170 // log uploader's constructor.
171 uploader_.reset(new SystemLogUploader(delegate.Pass(), task_runner_));
172 settings_helper_.ReplaceProvider(chromeos::kLogUploadEnabled);
173 }
174
175 void DestroyTestCase() { settings_helper_.RestoreProvider(); }
176
177 protected:
178 content::TestBrowserThreadBundle thread_bundle_;
179 chromeos::ScopedCrosSettingsTestHelper settings_helper_;
159 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 180 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
181 scoped_ptr<SystemLogUploader> uploader_;
160 }; 182 };
161 183
184 // Turn off system log uploads.
185 TEST_F(SystemLogUploaderTest, Basic) {
186 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
187
188 scoped_ptr<MockSystemLogDelegate> syslog_delegate(
189 new MockSystemLogDelegate(false, SystemLogUploader::SystemLogs()));
190 syslog_delegate->set_upload_allowed(false);
191 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.
192
193 settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, false);
194
195 task_runner_->RunPendingTasks();
196 DestroyTestCase();
197 }
198
162 // One success task pending. 199 // One success task pending.
163 TEST_F(SystemLogUploaderTest, SuccessTest) { 200 TEST_F(SystemLogUploaderTest, SuccessTest) {
164 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); 201 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
165 202
166 SystemLogUploader uploader(make_scoped_ptr(new MockSystemLogDelegate( 203 scoped_ptr<MockSystemLogDelegate> syslog_delegate(
167 false, SystemLogUploader::SystemLogs())), 204 new MockSystemLogDelegate(false, SystemLogUploader::SystemLogs()));
168 task_runner_); 205 syslog_delegate->set_upload_allowed(true);
206 InitTestCase(syslog_delegate.Pass());
207
208 settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, true);
169 209
170 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size()); 210 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
171 211
172 RunPendingUploadTaskAndCheckNext( 212 RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds(
173 uploader, base::TimeDelta::FromMilliseconds( 213 SystemLogUploader::kDefaultUploadDelayMs));
174 SystemLogUploader::kDefaultUploadDelayMs)); 214 DestroyTestCase();
175 } 215 }
176 216
177 // Three failed responses recieved. 217 // Three failed responses recieved.
178 TEST_F(SystemLogUploaderTest, ThreeFailureTest) { 218 TEST_F(SystemLogUploaderTest, ThreeFailureTest) {
179 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); 219 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
180 220
181 SystemLogUploader uploader(make_scoped_ptr(new MockSystemLogDelegate( 221 scoped_ptr<MockSystemLogDelegate> syslog_delegate(
182 true, SystemLogUploader::SystemLogs())), 222 new MockSystemLogDelegate(true, SystemLogUploader::SystemLogs()));
183 task_runner_); 223 syslog_delegate->set_upload_allowed(true);
184 224
225 InitTestCase(syslog_delegate.Pass());
226
227 settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, true);
185 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size()); 228 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
186 229
187 // Do not retry two times consequentially. 230 // Do not retry two times consequentially.
188 RunPendingUploadTaskAndCheckNext(uploader, 231 RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds(
189 base::TimeDelta::FromMilliseconds( 232 SystemLogUploader::kErrorUploadDelayMs));
190 SystemLogUploader::kErrorUploadDelayMs));
191 // We are using the kDefaultUploadDelayMs and not the kErrorUploadDelayMs here 233 // We are using the kDefaultUploadDelayMs and not the kErrorUploadDelayMs here
192 // because there's just one retry. 234 // because there's just one retry.
193 RunPendingUploadTaskAndCheckNext( 235 RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds(
194 uploader, base::TimeDelta::FromMilliseconds( 236 SystemLogUploader::kDefaultUploadDelayMs));
195 SystemLogUploader::kDefaultUploadDelayMs)); 237 RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds(
196 RunPendingUploadTaskAndCheckNext(uploader, 238 SystemLogUploader::kErrorUploadDelayMs));
197 base::TimeDelta::FromMilliseconds( 239 DestroyTestCase();
198 SystemLogUploader::kErrorUploadDelayMs));
199 } 240 }
200 241
201 // Check header fields of system log files to upload. 242 // Check header fields of system log files to upload.
202 TEST_F(SystemLogUploaderTest, CheckHeaders) { 243 TEST_F(SystemLogUploaderTest, CheckHeaders) {
203 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); 244 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
204 245
205 SystemLogUploader::SystemLogs system_logs = GenerateTestSystemLogFiles(); 246 SystemLogUploader::SystemLogs system_logs = GenerateTestSystemLogFiles();
206 SystemLogUploader uploader( 247 scoped_ptr<MockSystemLogDelegate> syslog_delegate(
207 make_scoped_ptr(new MockSystemLogDelegate(false, system_logs)), 248 new MockSystemLogDelegate(false, system_logs));
208 task_runner_); 249 syslog_delegate->set_upload_allowed(true);
250 InitTestCase(syslog_delegate.Pass());
251
252 settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, true);
209 253
210 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size()); 254 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
211 255
212 RunPendingUploadTaskAndCheckNext( 256 RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds(
213 uploader, base::TimeDelta::FromMilliseconds( 257 SystemLogUploader::kDefaultUploadDelayMs));
214 SystemLogUploader::kDefaultUploadDelayMs)); 258 DestroyTestCase();
259 }
260
261 // Disable system log uploads after one failed log upload.
262 TEST_F(SystemLogUploaderTest, DisableLogUpload) {
263 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
264
265 scoped_ptr<MockSystemLogDelegate> syslog_delegate(
266 new MockSystemLogDelegate(true, SystemLogUploader::SystemLogs()));
267 MockSystemLogDelegate* mock_delegate = syslog_delegate.get();
268 InitTestCase(syslog_delegate.Pass());
269
270 settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, true);
271 mock_delegate->set_upload_allowed(true);
272
273 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
274 RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds(
275 SystemLogUploader::kErrorUploadDelayMs));
276
277 // Disable log upload and check that frequency is usual, because there is no
278 // errors, we should not upload logs.
279 settings_helper_.SetBoolean(chromeos::kLogUploadEnabled, false);
280 mock_delegate->set_upload_allowed(false);
281 task_runner_->RunPendingTasks();
282
283 RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds(
284 SystemLogUploader::kDefaultUploadDelayMs));
285 RunPendingUploadTaskAndCheckNext(base::TimeDelta::FromMilliseconds(
286 SystemLogUploader::kDefaultUploadDelayMs));
287 DestroyTestCase();
215 } 288 }
216 289
217 } // namespace policy 290 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/policy/system_log_uploader.cc ('k') | chrome/browser/chromeos/settings/device_settings_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698