| OLD | NEW |
| 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 "chrome/browser/chromeos/policy/system_log_uploader.h" | 5 #include "chrome/browser/chromeos/policy/system_log_uploader.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 } | 151 } |
| 152 | 152 |
| 153 void TearDown() override { | 153 void TearDown() override { |
| 154 settings_helper_.RestoreProvider(); | 154 settings_helper_.RestoreProvider(); |
| 155 content::RunAllBlockingPoolTasksUntilIdle(); | 155 content::RunAllBlockingPoolTasksUntilIdle(); |
| 156 } | 156 } |
| 157 | 157 |
| 158 // Given a pending task to upload system logs. | 158 // Given a pending task to upload system logs. |
| 159 void RunPendingUploadTaskAndCheckNext(const SystemLogUploader& uploader, | 159 void RunPendingUploadTaskAndCheckNext(const SystemLogUploader& uploader, |
| 160 base::TimeDelta expected_delay) { | 160 base::TimeDelta expected_delay) { |
| 161 EXPECT_FALSE(task_runner_->GetPendingTasks().empty()); | 161 EXPECT_TRUE(task_runner_->HasPendingTask()); |
| 162 task_runner_->RunPendingTasks(); | 162 task_runner_->RunPendingTasks(); |
| 163 | 163 |
| 164 // The previous task should have uploaded another log upload task. | 164 // The previous task should have uploaded another log upload task. |
| 165 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); | 165 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); |
| 166 | 166 |
| 167 CheckPendingTaskDelay(uploader, expected_delay); | 167 CheckPendingTaskDelay(uploader, expected_delay); |
| 168 } | 168 } |
| 169 | 169 |
| 170 void CheckPendingTaskDelay(const SystemLogUploader& uploader, | 170 void CheckPendingTaskDelay(const SystemLogUploader& uploader, |
| 171 base::TimeDelta expected_delay) { | 171 base::TimeDelta expected_delay) { |
| 172 // The next task should be scheduled sometime between | 172 // The next task should be scheduled sometime between |
| 173 // |last_upload_attempt| + |expected_delay| and | 173 // |last_upload_attempt| + |expected_delay| and |
| 174 // |now| + |expected_delay|. | 174 // |now| + |expected_delay|. |
| 175 base::Time now = base::Time::NowFromSystemTime(); | 175 base::Time now = base::Time::NowFromSystemTime(); |
| 176 base::Time next_task = now + task_runner_->NextPendingTaskDelay(); | 176 base::Time next_task = now + task_runner_->NextPendingTaskDelay(); |
| 177 | 177 |
| 178 EXPECT_LE(next_task, now + expected_delay); | 178 EXPECT_LE(next_task, now + expected_delay); |
| 179 EXPECT_GE(next_task, uploader.last_upload_attempt() + expected_delay); | 179 EXPECT_GE(next_task, uploader.last_upload_attempt() + expected_delay); |
| 180 } | 180 } |
| 181 | 181 |
| 182 protected: | 182 protected: |
| 183 content::TestBrowserThreadBundle thread_bundle_; | 183 content::TestBrowserThreadBundle thread_bundle_; |
| 184 chromeos::ScopedCrosSettingsTestHelper settings_helper_; | 184 chromeos::ScopedCrosSettingsTestHelper settings_helper_; |
| 185 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 185 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 186 }; | 186 }; |
| 187 | 187 |
| 188 // Check disabled system log uploads by default. | 188 // Check disabled system log uploads by default. |
| 189 TEST_F(SystemLogUploaderTest, Basic) { | 189 TEST_F(SystemLogUploaderTest, Basic) { |
| 190 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); | 190 EXPECT_FALSE(task_runner_->HasPendingTask()); |
| 191 | 191 |
| 192 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( | 192 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( |
| 193 new MockSystemLogDelegate(false, SystemLogUploader::SystemLogs())); | 193 new MockSystemLogDelegate(false, SystemLogUploader::SystemLogs())); |
| 194 syslog_delegate->set_upload_allowed(false); | 194 syslog_delegate->set_upload_allowed(false); |
| 195 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); | 195 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); |
| 196 | 196 |
| 197 task_runner_->RunPendingTasks(); | 197 task_runner_->RunPendingTasks(); |
| 198 } | 198 } |
| 199 | 199 |
| 200 // One success task pending. | 200 // One success task pending. |
| 201 TEST_F(SystemLogUploaderTest, SuccessTest) { | 201 TEST_F(SystemLogUploaderTest, SuccessTest) { |
| 202 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); | 202 EXPECT_FALSE(task_runner_->HasPendingTask()); |
| 203 | 203 |
| 204 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( | 204 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( |
| 205 new MockSystemLogDelegate(false, SystemLogUploader::SystemLogs())); | 205 new MockSystemLogDelegate(false, SystemLogUploader::SystemLogs())); |
| 206 syslog_delegate->set_upload_allowed(true); | 206 syslog_delegate->set_upload_allowed(true); |
| 207 settings_helper_.SetBoolean(chromeos::kSystemLogUploadEnabled, true); | 207 settings_helper_.SetBoolean(chromeos::kSystemLogUploadEnabled, true); |
| 208 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); | 208 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); |
| 209 | 209 |
| 210 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); | 210 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); |
| 211 | 211 |
| 212 RunPendingUploadTaskAndCheckNext( | 212 RunPendingUploadTaskAndCheckNext( |
| 213 uploader, base::TimeDelta::FromMilliseconds( | 213 uploader, base::TimeDelta::FromMilliseconds( |
| 214 SystemLogUploader::kDefaultUploadDelayMs)); | 214 SystemLogUploader::kDefaultUploadDelayMs)); |
| 215 } | 215 } |
| 216 | 216 |
| 217 // Three failed responses recieved. | 217 // Three failed responses recieved. |
| 218 TEST_F(SystemLogUploaderTest, ThreeFailureTest) { | 218 TEST_F(SystemLogUploaderTest, ThreeFailureTest) { |
| 219 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); | 219 EXPECT_FALSE(task_runner_->HasPendingTask()); |
| 220 | 220 |
| 221 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( | 221 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( |
| 222 new MockSystemLogDelegate(true, SystemLogUploader::SystemLogs())); | 222 new MockSystemLogDelegate(true, SystemLogUploader::SystemLogs())); |
| 223 syslog_delegate->set_upload_allowed(true); | 223 syslog_delegate->set_upload_allowed(true); |
| 224 settings_helper_.SetBoolean(chromeos::kSystemLogUploadEnabled, true); | 224 settings_helper_.SetBoolean(chromeos::kSystemLogUploadEnabled, true); |
| 225 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); | 225 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); |
| 226 | 226 |
| 227 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); | 227 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); |
| 228 | 228 |
| 229 // Do not retry two times consequentially. | 229 // Do not retry two times consequentially. |
| 230 RunPendingUploadTaskAndCheckNext(uploader, | 230 RunPendingUploadTaskAndCheckNext(uploader, |
| 231 base::TimeDelta::FromMilliseconds( | 231 base::TimeDelta::FromMilliseconds( |
| 232 SystemLogUploader::kErrorUploadDelayMs)); | 232 SystemLogUploader::kErrorUploadDelayMs)); |
| 233 // We are using the kDefaultUploadDelayMs and not the kErrorUploadDelayMs here | 233 // We are using the kDefaultUploadDelayMs and not the kErrorUploadDelayMs here |
| 234 // because there's just one retry. | 234 // because there's just one retry. |
| 235 RunPendingUploadTaskAndCheckNext( | 235 RunPendingUploadTaskAndCheckNext( |
| 236 uploader, base::TimeDelta::FromMilliseconds( | 236 uploader, base::TimeDelta::FromMilliseconds( |
| 237 SystemLogUploader::kDefaultUploadDelayMs)); | 237 SystemLogUploader::kDefaultUploadDelayMs)); |
| 238 RunPendingUploadTaskAndCheckNext(uploader, | 238 RunPendingUploadTaskAndCheckNext(uploader, |
| 239 base::TimeDelta::FromMilliseconds( | 239 base::TimeDelta::FromMilliseconds( |
| 240 SystemLogUploader::kErrorUploadDelayMs)); | 240 SystemLogUploader::kErrorUploadDelayMs)); |
| 241 } | 241 } |
| 242 | 242 |
| 243 // Check header fields of system log files to upload. | 243 // Check header fields of system log files to upload. |
| 244 TEST_F(SystemLogUploaderTest, CheckHeaders) { | 244 TEST_F(SystemLogUploaderTest, CheckHeaders) { |
| 245 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); | 245 EXPECT_FALSE(task_runner_->HasPendingTask()); |
| 246 | 246 |
| 247 SystemLogUploader::SystemLogs system_logs = GenerateTestSystemLogFiles(); | 247 SystemLogUploader::SystemLogs system_logs = GenerateTestSystemLogFiles(); |
| 248 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( | 248 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( |
| 249 new MockSystemLogDelegate(false, system_logs)); | 249 new MockSystemLogDelegate(false, system_logs)); |
| 250 syslog_delegate->set_upload_allowed(true); | 250 syslog_delegate->set_upload_allowed(true); |
| 251 settings_helper_.SetBoolean(chromeos::kSystemLogUploadEnabled, true); | 251 settings_helper_.SetBoolean(chromeos::kSystemLogUploadEnabled, true); |
| 252 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); | 252 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); |
| 253 | 253 |
| 254 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); | 254 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); |
| 255 | 255 |
| 256 RunPendingUploadTaskAndCheckNext( | 256 RunPendingUploadTaskAndCheckNext( |
| 257 uploader, base::TimeDelta::FromMilliseconds( | 257 uploader, base::TimeDelta::FromMilliseconds( |
| 258 SystemLogUploader::kDefaultUploadDelayMs)); | 258 SystemLogUploader::kDefaultUploadDelayMs)); |
| 259 } | 259 } |
| 260 | 260 |
| 261 // Disable system log uploads after one failed log upload. | 261 // Disable system log uploads after one failed log upload. |
| 262 TEST_F(SystemLogUploaderTest, DisableLogUpload) { | 262 TEST_F(SystemLogUploaderTest, DisableLogUpload) { |
| 263 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); | 263 EXPECT_FALSE(task_runner_->HasPendingTask()); |
| 264 | 264 |
| 265 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( | 265 std::unique_ptr<MockSystemLogDelegate> syslog_delegate( |
| 266 new MockSystemLogDelegate(true, SystemLogUploader::SystemLogs())); | 266 new MockSystemLogDelegate(true, SystemLogUploader::SystemLogs())); |
| 267 MockSystemLogDelegate* mock_delegate = syslog_delegate.get(); | 267 MockSystemLogDelegate* mock_delegate = syslog_delegate.get(); |
| 268 settings_helper_.SetBoolean(chromeos::kSystemLogUploadEnabled, true); | 268 settings_helper_.SetBoolean(chromeos::kSystemLogUploadEnabled, true); |
| 269 mock_delegate->set_upload_allowed(true); | 269 mock_delegate->set_upload_allowed(true); |
| 270 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); | 270 SystemLogUploader uploader(std::move(syslog_delegate), task_runner_); |
| 271 | 271 |
| 272 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); | 272 EXPECT_EQ(1U, task_runner_->NumPendingTasks()); |
| 273 RunPendingUploadTaskAndCheckNext(uploader, | 273 RunPendingUploadTaskAndCheckNext(uploader, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 "<IPv4: 1>55\n" | 311 "<IPv4: 1>55\n" |
| 312 "aaaa<IPv4: 2>aaa\n" | 312 "aaaa<IPv4: 2>aaa\n" |
| 313 "11:11;<IPv6: 1>\n" | 313 "11:11;<IPv6: 1>\n" |
| 314 "<IPv6: 1>\n" | 314 "<IPv6: 1>\n" |
| 315 "11:11:abcdef:0:0:0:0:0\n" | 315 "11:11:abcdef:0:0:0:0:0\n" |
| 316 "aa:aa:aa:00:00:01"; | 316 "aa:aa:aa:00:00:01"; |
| 317 EXPECT_EQ(result, SystemLogUploader::RemoveSensitiveData(&anonymizer, data)); | 317 EXPECT_EQ(result, SystemLogUploader::RemoveSensitiveData(&anonymizer, data)); |
| 318 } | 318 } |
| 319 | 319 |
| 320 } // namespace policy | 320 } // namespace policy |
| OLD | NEW |