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

Side by Side Diff: chrome/browser/chromeos/policy/system_log_uploader_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 unified diff | Download patch
« no previous file with comments | « chrome/browser/chromeos/policy/system_log_uploader.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/test/test_simple_task_runner.h"
6 #include "base/time/time.h"
7 #include "chrome/browser/chromeos/policy/system_log_uploader.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9
10 namespace policy {
11
12 namespace {
13
14 // MockSystemLogDelegate - mock class that does nothing.
15 class MockSystemLogDelegate : public SystemLogUploadJob::Delegate {
16 public:
17 MockSystemLogDelegate() {}
18 ~MockSystemLogDelegate() override {}
19
20 void LoadSystemLogs(const LogUploadCallback& upload_callback) override {}
21 scoped_ptr<UploadJob> CreateUploadJob(const GURL&,
Andrew T Wilson (Slow) 2015/07/17 15:59:28 Maybe explain that neither of these should ever be
Polina Bondarenko 2015/07/29 15:36:02 Changed the system log upload logic here: https://
22 UploadJob::Delegate*) override {
23 return nullptr;
24 }
25 };
26
27 // MockSystemLogUploadJob - mock class that invokes appropriate
28 // SystemLogUploader's callback.
29 class MockSystemLogUploadJob : public SystemLogUploadJob {
30 public:
31 // Store response from server on system log upload.
32 explicit MockSystemLogUploadJob(
33 scoped_ptr<MockSystemLogDelegate> syslog_delegate,
34 const base::Closure& succeeded_callback,
35 const base::Closure& failed_callback,
36 bool response)
37 : SystemLogUploadJob(syslog_delegate.Pass(),
38 succeeded_callback,
39 failed_callback) {
40 // Store only appropriate callback to be invoked.
41 if (response)
42 callback = succeeded_callback;
43 else
44 callback = failed_callback;
45 }
46
47 ~MockSystemLogUploadJob() override {}
48
49 // Runs succeeded or failed callback according to response_ stored.
50 void Run() override { callback.Run(); }
Andrew T Wilson (Slow) 2015/07/17 15:59:28 This is OK, but would be even better if we could e
Polina Bondarenko 2015/07/29 15:36:02 Removed this MockSystemLogUploadJob at all.
51
52 private:
53 base::Closure callback;
54 };
55
56 // MockSystemLogUploader - overrides only the creation of the system log
57 // upload job of SystemLogUploader.
58 class MockSystemLogUploader : public SystemLogUploader {
59 public:
60 MockSystemLogUploader(
61 const scoped_refptr<base::SequencedTaskRunner>& task_runner,
62 bool response)
63 : SystemLogUploader(task_runner), response_(response) {}
64
65 private:
66 SystemLogUploadJob* CreateSystemLogUploadJob(
67 const base::Closure& succeeded_callback,
68 const base::Closure& failed_callback) override {
69 // Passes |response_| to the upload job.
70 return new MockSystemLogUploadJob(
71 make_scoped_ptr(new MockSystemLogDelegate()), succeeded_callback,
72 failed_callback, response_);
73 }
74
75 // Passed to the upload job.
76 bool response_;
77 };
78
79 } // namespace
80
81 class SystemLogUploaderTest : public testing::Test {
82 public:
83 SystemLogUploaderTest() : task_runner_(new base::TestSimpleTaskRunner()) {}
84
85 // Given a pending task to upload system logs.
86 void RunPendingUploadTaskAndCheckNext(const MockSystemLogUploader& uploader,
87 base::TimeDelta expected_delay) {
88 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
89 task_runner_->RunPendingTasks();
90
91 // The previours task scheduled new log upload task.
Andrew T Wilson (Slow) 2015/07/17 15:59:28 nit: The previous task should have uploaded anothe
Polina Bondarenko 2015/07/29 15:36:02 Done.
92 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
93
94 CheckPendingTaskDelay(uploader, expected_delay);
95 }
96
97 void CheckPendingTaskDelay(const MockSystemLogUploader& uploader,
98 base::TimeDelta expected_delay) {
99 // The next task should be scheduled sometime between
100 // |last_upload_attempt| + |expected_delay| and
101 // |now| + |expected_delay|.
102 base::Time now = base::Time::NowFromSystemTime();
103 base::Time next_task = now + task_runner_->NextPendingTaskDelay();
104
105 EXPECT_LE(next_task, now + expected_delay);
106 EXPECT_GE(next_task, uploader.last_upload_attempt() + expected_delay);
107 }
108
109 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
110 };
111
112 // One success task pending.
113 TEST_F(SystemLogUploaderTest, SuccessTest) {
114 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
115
116 MockSystemLogUploader uploader(task_runner_, true);
117
118 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
119
120 CheckPendingTaskDelay(uploader,
121 base::TimeDelta::FromMilliseconds(
122 SystemLogUploader::kDefaultUploadDelayMs));
123 }
124
125 // Three failed responses recieved.
126 TEST_F(SystemLogUploaderTest, ThreeFailureTest) {
127 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
128
129 MockSystemLogUploader uploader(task_runner_, false);
130
131 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
132
133 // Do not retry two times consequentially.
134 RunPendingUploadTaskAndCheckNext(uploader,
135 base::TimeDelta::FromMilliseconds(
136 SystemLogUploader::kErrorUploadDelayMs));
137 RunPendingUploadTaskAndCheckNext(
138 uploader, base::TimeDelta::FromMilliseconds(
139 SystemLogUploader::kDefaultUploadDelayMs));
Andrew T Wilson (Slow) 2015/07/17 15:59:28 Maybe highlight that we are using the upload_delay
Polina Bondarenko 2015/07/29 15:36:02 Done.
140 RunPendingUploadTaskAndCheckNext(uploader,
141 base::TimeDelta::FromMilliseconds(
142 SystemLogUploader::kErrorUploadDelayMs));
143 }
144
145 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/policy/system_log_uploader.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698