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

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 according to the main log uploader CL. 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
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 // MockSystemLogDelegate - mock class that does nothing.
13 class MockSystemLogDelegate : public SystemLogUploadJob::Delegate {
14 public:
15 MockSystemLogDelegate();
16 ~MockSystemLogDelegate() override;
17
18 void LoadSystemLogs(
19 const SystemLogUploadJob::LogUploadCallback& upload_callback) override;
20 scoped_ptr<UploadJob> CreateUploadJob(const GURL&,
21 UploadJob::Delegate*) override;
22 };
23
24 // MockSystemLogUploadJob - mock class that stores the SUCCESS or FAILURE
25 // response and invokes appropriate SystemLogUploader's callback.
26 class MockSystemLogUploadJob : public SystemLogUploadJob {
27 public:
28 // Store response from server on system log upload.
29 explicit MockSystemLogUploadJob(
30 scoped_ptr<MockSystemLogDelegate> syslog_delegate,
31 bool response);
32 ~MockSystemLogUploadJob() override;
33
34 // Runs succeeded or failed callback according to response_ stored.
35 void Run(const base::Closure& succeeded_callback,
36 const base::Closure& failed_callback) override;
37
38 private:
39 bool response_;
40 };
41
42 // MockSystemLogUploader - overrides only the creation of the system log
43 // upload job of SystemLogUploader.
44 class MockSystemLogUploader : public SystemLogUploader {
45 public:
46 MockSystemLogUploader(
47 const scoped_refptr<base::SequencedTaskRunner>& task_runner,
48 bool result);
49
50 private:
51 SystemLogUploadJob* CreateSystemLogUploadJob() override;
52 // Passed to the upload job.
53 bool response_;
54 };
55
56 MockSystemLogUploader::MockSystemLogUploader(
57 const scoped_refptr<base::SequencedTaskRunner>& task_runner,
58 bool response)
59 : SystemLogUploader(task_runner), response_(response) {
60 }
61
62 SystemLogUploadJob* MockSystemLogUploader::CreateSystemLogUploadJob() {
63 // Passes |response_| to the upload job.
64 return new MockSystemLogUploadJob(
65 make_scoped_ptr(new MockSystemLogDelegate()), response_);
66 }
67
68 class SystemLogUploaderTest : public testing::Test {
69 public:
70 SystemLogUploaderTest() : task_runner_(new base::TestSimpleTaskRunner()) {}
71
72 // Given a pending task to upload system logs.
73 void RunPendingUploadTaskAndCheckNext(const MockSystemLogUploader& uploader,
74 base::TimeDelta expected_delay) {
75 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
76 task_runner_->RunPendingTasks();
77
78 // The previours task scheduled new log upload task.
79 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
80
81 CheckPendingTaskDelay(uploader, expected_delay);
82 }
83
84 void CheckPendingTaskDelay(const MockSystemLogUploader& uploader,
85 base::TimeDelta expected_delay) {
86 // The next task should be scheduled sometime between
87 // |last_upload_attempt| + |expected_delay| and
88 // |now| + |expected_delay|.
89 base::Time now = base::Time::NowFromSystemTime();
90 base::Time next_task = now + task_runner_->NextPendingTaskDelay();
91
92 EXPECT_LE(next_task, now + expected_delay);
93 EXPECT_GE(next_task, uploader.last_upload_attempt() + expected_delay);
94 }
95
96 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
97 };
98
99 MockSystemLogDelegate::MockSystemLogDelegate() {
100 }
101
102 MockSystemLogDelegate::~MockSystemLogDelegate() {
103 }
104
105 void MockSystemLogDelegate::LoadSystemLogs(
106 const SystemLogUploadJob::LogUploadCallback& upload_callback) {
107 }
108
109 scoped_ptr<UploadJob> MockSystemLogDelegate::CreateUploadJob(
110 const GURL& upload_url,
111 UploadJob::Delegate* delegate) {
112 return nullptr;
113 }
114
115 MockSystemLogUploadJob::MockSystemLogUploadJob(
116 scoped_ptr<MockSystemLogDelegate> syslog_delegate,
117 bool response)
118 : SystemLogUploadJob(syslog_delegate.Pass()), response_(response) {
119 }
120
121 MockSystemLogUploadJob::~MockSystemLogUploadJob() {
122 }
123
124 void MockSystemLogUploadJob::Run(const base::Closure& succeeded_callback,
125 const base::Closure& failed_callback) {
126 if (response_)
127 succeeded_callback.Run();
128 else
129 failed_callback.Run();
130 }
131
132 // One success task pending.
133 TEST_F(SystemLogUploaderTest, SuccessTest) {
134 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
135
136 MockSystemLogUploader uploader(task_runner_, true);
137
138 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
139
140 CheckPendingTaskDelay(uploader,
141 base::TimeDelta::FromMilliseconds(
142 SystemLogUploader::kDefaultUploadDelayMs));
143 }
144
145 // Three failed responses recieved.
146 TEST_F(SystemLogUploaderTest, ThreeFailureTest) {
147 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
148 MockSystemLogUploader uploader(task_runner_, false);
149
150 EXPECT_EQ(1U, task_runner_->GetPendingTasks().size());
151
152 // Do not retry two times consequentially.
153 RunPendingUploadTaskAndCheckNext(uploader,
154 base::TimeDelta::FromMilliseconds(
155 SystemLogUploader::kErrorUploadDelayMs));
156 RunPendingUploadTaskAndCheckNext(
157 uploader, base::TimeDelta::FromMilliseconds(
158 SystemLogUploader::kDefaultUploadDelayMs));
159 RunPendingUploadTaskAndCheckNext(uploader,
160 base::TimeDelta::FromMilliseconds(
161 SystemLogUploader::kErrorUploadDelayMs));
162 }
Andrew T Wilson (Slow) 2015/07/03 16:20:00 Good, you've covered the cases of making sure that
Polina Bondarenko 2015/07/10 13:24:22 I decided to test it separately. Thus here is the
163
164 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698