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

Side by Side Diff: chrome/browser/policy/cloud/remote_commands_invalidator_unittest.cc

Issue 1094493003: Initial RemoteCommandsInvalidator (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: fixes addressing #5 Created 5 years, 7 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 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 "chrome/browser/policy/cloud/remote_commands_invalidator.h"
6
7 #include "base/message_loop/message_loop.h"
8 #include "base/run_loop.h"
9 #include "base/sequenced_task_runner.h"
bartfab (slow) 2015/05/15 16:00:30 Nit: Not used.
binjin 2015/05/15 16:12:41 Done.
10 #include "chrome/browser/invalidation/fake_invalidation_service.h"
11 #include "components/invalidation/invalidation.h"
12 #include "components/invalidation/invalidation_util.h"
13 #include "components/invalidation/invalidator_registrar.h"
14 #include "components/invalidation/invalidator_state.h"
15 #include "components/invalidation/mock_ack_handler.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 namespace em = enterprise_management;
20
21 using ::testing::Mock;
22 using ::testing::StrictMock;
23
24 namespace policy {
25
26 class MockRemoteCommandInvalidator : public RemoteCommandsInvalidator {
27 public:
28 MockRemoteCommandInvalidator() {}
29
30 MOCK_METHOD0(OnInitialize, void());
31 MOCK_METHOD0(OnShutdown, void());
32 MOCK_METHOD0(OnStart, void());
33 MOCK_METHOD0(OnStop, void());
34 MOCK_METHOD0(DoRemoteCommandsFetch, void());
35
36 void SetInvalidationObjectID(const invalidation::ObjectId& object_id) {
37 em::PolicyData policy_data;
38 policy_data.set_command_invalidation_source(object_id.source());
39 policy_data.set_command_invalidation_name(object_id.name());
40 ReloadPolicyData(&policy_data);
41 }
42
43 void ClearInvalidationObjectID() {
44 const em::PolicyData policy_data;
45 ReloadPolicyData(&policy_data);
46 }
47
48 private:
49 DISALLOW_COPY_AND_ASSIGN(MockRemoteCommandInvalidator);
50 };
51
52 class RemoteCommandsInvalidatorTest : public testing::Test {
53 public:
54 RemoteCommandsInvalidatorTest()
55 : kTestingObjectId1(123456, "abcdef"),
56 kTestingObjectId2(654321, "defabc") {
57 }
58
59 void EnableInvalidationService() {
60 invalidation_service_.SetInvalidatorState(syncer::INVALIDATIONS_ENABLED);
61 }
62
63 void DisableInvalidationService() {
64 invalidation_service_.SetInvalidatorState(
65 syncer::TRANSIENT_INVALIDATION_ERROR);
66 }
67
68 syncer::Invalidation FireInvalidation(
69 const invalidation::ObjectId& object_id) {
70 const syncer::Invalidation invalidation =
71 syncer::Invalidation::InitUnknownVersion(object_id);
72 invalidation_service_.EmitInvalidationForTest(invalidation);
73 return invalidation;
74 }
75
76 bool IsInvalidationSent(const syncer::Invalidation& invalidation) {
77 return !invalidation_service_.GetMockAckHandler()->IsUnsent(invalidation);
78 }
79
80 bool IsInvalidationAcknowledged(const syncer::Invalidation& invalidation) {
81 return invalidation_service_.GetMockAckHandler()->IsAcknowledged(
82 invalidation);
83 }
84
85 bool IsInvalidatorRegistered() {
86 return !invalidation_service_.invalidator_registrar()
87 .GetRegisteredIds(&invalidator_)
88 .empty();
89 }
90
91 void VerifyExpectations() {
92 Mock::VerifyAndClearExpectations(&invalidator_);
93 }
94
95 protected:
96 // Initialize and start the invalidator.
97 void InitializeAndStart() {
98 EXPECT_CALL(invalidator_, OnInitialize()).Times(1);
99 invalidator_.Initialize(&invalidation_service_);
100 VerifyExpectations();
101
102 EXPECT_CALL(invalidator_, OnStart()).Times(1);
103 invalidator_.Start();
104
105 VerifyExpectations();
106 }
107
108 // Stop and shutdown the invalidator.
109 void StopAndShutdown() {
110 EXPECT_CALL(invalidator_, OnStop()).Times(1);
111 EXPECT_CALL(invalidator_, OnShutdown()).Times(1);
112 invalidator_.Shutdown();
113
114 VerifyExpectations();
115 }
116
117 // Fire an invalidation to verify that invalidation is not working.
118 void VerifyInvalidationDisabled(const invalidation::ObjectId& object_id) {
119 const syncer::Invalidation invalidation = FireInvalidation(object_id);
120
121 base::RunLoop().RunUntilIdle();
122 EXPECT_FALSE(IsInvalidationSent(invalidation));
123 }
124
125 // Fire an invalidation to verify that invalidation works.
126 void VerifyInvalidationEnabled(const invalidation::ObjectId& object_id) {
127 EXPECT_TRUE(invalidator_.invalidations_enabled());
128
129 EXPECT_CALL(invalidator_, DoRemoteCommandsFetch()).Times(1);
130 const syncer::Invalidation invalidation = FireInvalidation(object_id);
131
132 base::RunLoop().RunUntilIdle();
133 EXPECT_TRUE(IsInvalidationSent(invalidation));
134 EXPECT_TRUE(IsInvalidationAcknowledged(invalidation));
135 VerifyExpectations();
136 }
137
138 const invalidation::ObjectId kTestingObjectId1;
139 const invalidation::ObjectId kTestingObjectId2;
140
141 base::MessageLoop loop_;
142
143 invalidation::FakeInvalidationService invalidation_service_;
144 StrictMock<MockRemoteCommandInvalidator> invalidator_;
145
146 private:
147 DISALLOW_COPY_AND_ASSIGN(RemoteCommandsInvalidatorTest);
148 };
149
150 // Verifies that only the fired invalidations will be received.
151 TEST_F(RemoteCommandsInvalidatorTest, FiredInvalidation) {
152 InitializeAndStart();
153
154 // Invalidator won't work at this point.
155 EXPECT_FALSE(invalidator_.invalidations_enabled());
156
157 // Load the policy data, it should work now.
158 invalidator_.SetInvalidationObjectID(kTestingObjectId1);
159 EXPECT_TRUE(invalidator_.invalidations_enabled());
160
161 base::RunLoop().RunUntilIdle();
162 // No invalidation will be received if no invalidation is fired.
163 VerifyExpectations();
164
165 // Fire an invalidation with different object id, no invalidation will be
166 // received.
167 const syncer::Invalidation invalidation1 =
168 FireInvalidation(kTestingObjectId2);
169
170 base::RunLoop().RunUntilIdle();
171 EXPECT_FALSE(IsInvalidationSent(invalidation1));
172 VerifyExpectations();
173
174 // Fire the invalidation, it should be acknowledged and trigger a remote
175 // commands fetch.
176 EXPECT_CALL(invalidator_, DoRemoteCommandsFetch()).Times(1);
177 const syncer::Invalidation invalidation2 =
178 FireInvalidation(kTestingObjectId1);
179
180 base::RunLoop().RunUntilIdle();
181 EXPECT_TRUE(IsInvalidationSent(invalidation2));
182 EXPECT_TRUE(IsInvalidationAcknowledged(invalidation2));
183 VerifyExpectations();
184
185 StopAndShutdown();
186 }
187
188 // Verifies that no invalidation will be received when invalidator is shutdown.
189 TEST_F(RemoteCommandsInvalidatorTest, ShutDown) {
190 EXPECT_FALSE(invalidator_.invalidations_enabled());
191 FireInvalidation(kTestingObjectId1);
192
193 base::RunLoop().RunUntilIdle();
194 EXPECT_FALSE(invalidator_.invalidations_enabled());
195 }
196
197 // Verifies that no invalidation will be received when invalidator is stopped.
198 TEST_F(RemoteCommandsInvalidatorTest, Stopped) {
199 EXPECT_CALL(invalidator_, OnInitialize()).Times(1);
200 invalidator_.Initialize(&invalidation_service_);
201 VerifyExpectations();
202
203 EXPECT_FALSE(invalidator_.invalidations_enabled());
204 FireInvalidation(kTestingObjectId2);
205
206 base::RunLoop().RunUntilIdle();
207 EXPECT_FALSE(invalidator_.invalidations_enabled());
208
209 EXPECT_CALL(invalidator_, OnShutdown()).Times(1);
210 invalidator_.Shutdown();
211 }
212
213 // Verifies that stated/stopped state changes work as expected.
214 TEST_F(RemoteCommandsInvalidatorTest, StartedStateChange) {
215 InitializeAndStart();
216
217 // Invalidator requires object id to work.
218 VerifyInvalidationDisabled(kTestingObjectId1);
219 EXPECT_FALSE(invalidator_.invalidations_enabled());
220 invalidator_.SetInvalidationObjectID(kTestingObjectId1);
221 VerifyInvalidationEnabled(kTestingObjectId1);
222
223 // Stop and restart invalidator.
224 EXPECT_CALL(invalidator_, OnStop()).Times(1);
225 invalidator_.Stop();
226 VerifyExpectations();
227
228 VerifyInvalidationDisabled(kTestingObjectId1);
229 EXPECT_FALSE(invalidator_.invalidations_enabled());
230
231 EXPECT_CALL(invalidator_, OnStart()).Times(1);
232 invalidator_.Start();
233 VerifyExpectations();
234
235 // Invalidator requires object id to work.
236 invalidator_.SetInvalidationObjectID(kTestingObjectId1);
237 VerifyInvalidationEnabled(kTestingObjectId1);
238
239 StopAndShutdown();
240 }
241
242 // Verifies that registered state changes work as expected.
243 TEST_F(RemoteCommandsInvalidatorTest, RegistedStateChange) {
244 InitializeAndStart();
245
246 invalidator_.SetInvalidationObjectID(kTestingObjectId1);
247 VerifyInvalidationEnabled(kTestingObjectId1);
248
249 invalidator_.SetInvalidationObjectID(kTestingObjectId2);
250 VerifyInvalidationEnabled(kTestingObjectId2);
251 VerifyInvalidationDisabled(kTestingObjectId1);
252
253 invalidator_.SetInvalidationObjectID(kTestingObjectId1);
254 VerifyInvalidationEnabled(kTestingObjectId1);
255 VerifyInvalidationDisabled(kTestingObjectId2);
256
257 invalidator_.ClearInvalidationObjectID();
258 VerifyInvalidationDisabled(kTestingObjectId1);
259 VerifyInvalidationDisabled(kTestingObjectId2);
260 EXPECT_FALSE(invalidator_.invalidations_enabled());
261
262 invalidator_.SetInvalidationObjectID(kTestingObjectId2);
263 VerifyInvalidationEnabled(kTestingObjectId2);
264 VerifyInvalidationDisabled(kTestingObjectId1);
265
266 StopAndShutdown();
267 }
268
269 // Verifies that invalidation service enabled state changes work as expected.
270 TEST_F(RemoteCommandsInvalidatorTest, InvalidationServiceEnabledStateChanged) {
271 InitializeAndStart();
272
273 invalidator_.SetInvalidationObjectID(kTestingObjectId1);
274 VerifyInvalidationEnabled(kTestingObjectId1);
275
276 DisableInvalidationService();
277 EXPECT_FALSE(invalidator_.invalidations_enabled());
278
279 EnableInvalidationService();
280 VerifyInvalidationEnabled(kTestingObjectId1);
281
282 EnableInvalidationService();
283 VerifyInvalidationEnabled(kTestingObjectId1);
284
285 DisableInvalidationService();
286 EXPECT_FALSE(invalidator_.invalidations_enabled());
287
288 DisableInvalidationService();
289 EXPECT_FALSE(invalidator_.invalidations_enabled());
290
291 StopAndShutdown();
292 }
293
294 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698