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

Side by Side Diff: components/invalidation/invalidation_service_test_template.h

Issue 1146533005: [Sync] InvalidationService shouldn't CHECK when registering ObjectId for more than one handler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments from Bartosz. 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 // This class defines tests that implementations of InvalidationService should 5 // This class defines tests that implementations of InvalidationService should
6 // pass in order to be conformant. Here's how you use it to test your 6 // pass in order to be conformant. Here's how you use it to test your
7 // implementation. 7 // implementation.
8 // 8 //
9 // Say your class is called MyInvalidationService. Then you need to define a 9 // Say your class is called MyInvalidationService. Then you need to define a
10 // class called MyInvalidationServiceTestDelegate in 10 // class called MyInvalidationServiceTestDelegate in
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 invalidation_map.Insert(syncer::Invalidation::Init(this->id2, 2, "2")); 127 invalidation_map.Insert(syncer::Invalidation::Init(this->id2, 2, "2"));
128 invalidation_map.Insert(syncer::Invalidation::Init(this->id3, 3, "3")); 128 invalidation_map.Insert(syncer::Invalidation::Init(this->id3, 3, "3"));
129 129
130 // Should be ignored since no IDs are registered to |handler|. 130 // Should be ignored since no IDs are registered to |handler|.
131 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map); 131 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map);
132 EXPECT_EQ(0, handler.GetInvalidationCount()); 132 EXPECT_EQ(0, handler.GetInvalidationCount());
133 133
134 syncer::ObjectIdSet ids; 134 syncer::ObjectIdSet ids;
135 ids.insert(this->id1); 135 ids.insert(this->id1);
136 ids.insert(this->id2); 136 ids.insert(this->id2);
137 invalidator->UpdateRegisteredInvalidationIds(&handler, ids); 137 EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler, ids));
138 138
139 this->delegate_.TriggerOnInvalidatorStateChange( 139 this->delegate_.TriggerOnInvalidatorStateChange(
140 syncer::INVALIDATIONS_ENABLED); 140 syncer::INVALIDATIONS_ENABLED);
141 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler.GetInvalidatorState()); 141 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler.GetInvalidatorState());
142 142
143 syncer::ObjectIdInvalidationMap expected_invalidations; 143 syncer::ObjectIdInvalidationMap expected_invalidations;
144 expected_invalidations.Insert(syncer::Invalidation::Init(this->id1, 1, "1")); 144 expected_invalidations.Insert(syncer::Invalidation::Init(this->id1, 1, "1"));
145 expected_invalidations.Insert(syncer::Invalidation::Init(this->id2, 2, "2")); 145 expected_invalidations.Insert(syncer::Invalidation::Init(this->id2, 2, "2"));
146 146
147 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map); 147 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map);
148 EXPECT_EQ(1, handler.GetInvalidationCount()); 148 EXPECT_EQ(1, handler.GetInvalidationCount());
149 EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap())); 149 EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap()));
150 150
151 ids.erase(this->id1); 151 ids.erase(this->id1);
152 ids.insert(this->id3); 152 ids.insert(this->id3);
153 invalidator->UpdateRegisteredInvalidationIds(&handler, ids); 153 EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler, ids));
154 154
155 expected_invalidations = syncer::ObjectIdInvalidationMap(); 155 expected_invalidations = syncer::ObjectIdInvalidationMap();
156 expected_invalidations.Insert(syncer::Invalidation::Init(this->id2, 2, "2")); 156 expected_invalidations.Insert(syncer::Invalidation::Init(this->id2, 2, "2"));
157 expected_invalidations.Insert(syncer::Invalidation::Init(this->id3, 3, "3")); 157 expected_invalidations.Insert(syncer::Invalidation::Init(this->id3, 3, "3"));
158 158
159 // Removed object IDs should not be notified, newly-added ones should. 159 // Removed object IDs should not be notified, newly-added ones should.
160 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map); 160 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map);
161 EXPECT_EQ(2, handler.GetInvalidationCount()); 161 EXPECT_EQ(2, handler.GetInvalidationCount());
162 EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap())); 162 EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap()));
163 163
(...skipping 30 matching lines...) Expand all
194 194
195 invalidator->RegisterInvalidationHandler(&handler1); 195 invalidator->RegisterInvalidationHandler(&handler1);
196 invalidator->RegisterInvalidationHandler(&handler2); 196 invalidator->RegisterInvalidationHandler(&handler2);
197 invalidator->RegisterInvalidationHandler(&handler3); 197 invalidator->RegisterInvalidationHandler(&handler3);
198 invalidator->RegisterInvalidationHandler(&handler4); 198 invalidator->RegisterInvalidationHandler(&handler4);
199 199
200 { 200 {
201 syncer::ObjectIdSet ids; 201 syncer::ObjectIdSet ids;
202 ids.insert(this->id1); 202 ids.insert(this->id1);
203 ids.insert(this->id2); 203 ids.insert(this->id2);
204 invalidator->UpdateRegisteredInvalidationIds(&handler1, ids); 204 EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler1, ids));
205 } 205 }
206 206
207 { 207 {
208 syncer::ObjectIdSet ids; 208 syncer::ObjectIdSet ids;
209 ids.insert(this->id3); 209 ids.insert(this->id3);
210 invalidator->UpdateRegisteredInvalidationIds(&handler2, ids); 210 EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler2, ids));
211 } 211 }
212 212
213 // Don't register any IDs for handler3. 213 // Don't register any IDs for handler3.
214 214
215 { 215 {
216 syncer::ObjectIdSet ids; 216 syncer::ObjectIdSet ids;
217 ids.insert(this->id4); 217 ids.insert(this->id4);
218 invalidator->UpdateRegisteredInvalidationIds(&handler4, ids); 218 EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler4, ids));
219 } 219 }
220 220
221 invalidator->UnregisterInvalidationHandler(&handler4); 221 invalidator->UnregisterInvalidationHandler(&handler4);
222 222
223 this->delegate_.TriggerOnInvalidatorStateChange( 223 this->delegate_.TriggerOnInvalidatorStateChange(
224 syncer::INVALIDATIONS_ENABLED); 224 syncer::INVALIDATIONS_ENABLED);
225 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); 225 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler1.GetInvalidatorState());
226 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); 226 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler2.GetInvalidatorState());
227 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler3.GetInvalidatorState()); 227 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler3.GetInvalidatorState());
228 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR, 228 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR, 265 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
266 handler3.GetInvalidatorState()); 266 handler3.GetInvalidatorState());
267 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR, 267 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
268 handler4.GetInvalidatorState()); 268 handler4.GetInvalidatorState());
269 269
270 invalidator->UnregisterInvalidationHandler(&handler3); 270 invalidator->UnregisterInvalidationHandler(&handler3);
271 invalidator->UnregisterInvalidationHandler(&handler2); 271 invalidator->UnregisterInvalidationHandler(&handler2);
272 invalidator->UnregisterInvalidationHandler(&handler1); 272 invalidator->UnregisterInvalidationHandler(&handler1);
273 } 273 }
274 274
275 // Multiple registrations by different handlers on the same object ID should
276 // return false.
277 TYPED_TEST_P(InvalidationServiceTest, MultipleRegistrations) {
278 invalidation::InvalidationService* const invalidator =
279 this->CreateAndInitializeInvalidationService();
280
281 syncer::FakeInvalidationHandler handler1;
282 syncer::FakeInvalidationHandler handler2;
283
284 invalidator->RegisterInvalidationHandler(&handler1);
285 invalidator->RegisterInvalidationHandler(&handler2);
286
287 // Registering both handlers for the same ObjectId. First call should succeed,
288 // second should fail.
289 syncer::ObjectIdSet ids;
290 ids.insert(this->id1);
291 EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler1, ids));
292 EXPECT_FALSE(invalidator->UpdateRegisteredInvalidationIds(&handler2, ids));
293
294 invalidator->UnregisterInvalidationHandler(&handler2);
295 invalidator->UnregisterInvalidationHandler(&handler1);
296 }
297
275 // Make sure that passing an empty set to UpdateRegisteredInvalidationIds clears 298 // Make sure that passing an empty set to UpdateRegisteredInvalidationIds clears
276 // the corresponding entries for the handler. 299 // the corresponding entries for the handler.
277 TYPED_TEST_P(InvalidationServiceTest, EmptySetUnregisters) { 300 TYPED_TEST_P(InvalidationServiceTest, EmptySetUnregisters) {
278 invalidation::InvalidationService* const invalidator = 301 invalidation::InvalidationService* const invalidator =
279 this->CreateAndInitializeInvalidationService(); 302 this->CreateAndInitializeInvalidationService();
280 303
281 syncer::FakeInvalidationHandler handler1; 304 syncer::FakeInvalidationHandler handler1;
282 305
283 // Control observer. 306 // Control observer.
284 syncer::FakeInvalidationHandler handler2; 307 syncer::FakeInvalidationHandler handler2;
285 308
286 invalidator->RegisterInvalidationHandler(&handler1); 309 invalidator->RegisterInvalidationHandler(&handler1);
287 invalidator->RegisterInvalidationHandler(&handler2); 310 invalidator->RegisterInvalidationHandler(&handler2);
288 311
289 { 312 {
290 syncer::ObjectIdSet ids; 313 syncer::ObjectIdSet ids;
291 ids.insert(this->id1); 314 ids.insert(this->id1);
292 ids.insert(this->id2); 315 ids.insert(this->id2);
293 invalidator->UpdateRegisteredInvalidationIds(&handler1, ids); 316 EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler1, ids));
294 } 317 }
295 318
296 { 319 {
297 syncer::ObjectIdSet ids; 320 syncer::ObjectIdSet ids;
298 ids.insert(this->id3); 321 ids.insert(this->id3);
299 invalidator->UpdateRegisteredInvalidationIds(&handler2, ids); 322 EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler2, ids));
300 } 323 }
301 324
302 // Unregister the IDs for the first observer. It should not receive any 325 // Unregister the IDs for the first observer. It should not receive any
303 // further invalidations. 326 // further invalidations.
304 invalidator->UpdateRegisteredInvalidationIds(&handler1, 327 EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(
305 syncer::ObjectIdSet()); 328 &handler1, syncer::ObjectIdSet()));
306 329
307 this->delegate_.TriggerOnInvalidatorStateChange( 330 this->delegate_.TriggerOnInvalidatorStateChange(
308 syncer::INVALIDATIONS_ENABLED); 331 syncer::INVALIDATIONS_ENABLED);
309 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); 332 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler1.GetInvalidatorState());
310 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); 333 EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler2.GetInvalidatorState());
311 334
312 { 335 {
313 syncer::ObjectIdInvalidationMap invalidation_map; 336 syncer::ObjectIdInvalidationMap invalidation_map;
314 invalidation_map.Insert(syncer::Invalidation::Init(this->id1, 1, "1")); 337 invalidation_map.Insert(syncer::Invalidation::Init(this->id1, 1, "1"));
315 invalidation_map.Insert(syncer::Invalidation::Init(this->id2, 2, "2")); 338 invalidation_map.Insert(syncer::Invalidation::Init(this->id2, 2, "2"));
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 syncer::TRANSIENT_INVALIDATION_ERROR); 397 syncer::TRANSIENT_INVALIDATION_ERROR);
375 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR, 398 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
376 handler.GetInvalidatorState()); 399 handler.GetInvalidatorState());
377 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR, 400 EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
378 handler.GetLastRetrievedState()); 401 handler.GetLastRetrievedState());
379 402
380 invalidator->UnregisterInvalidationHandler(&handler); 403 invalidator->UnregisterInvalidationHandler(&handler);
381 } 404 }
382 405
383 REGISTER_TYPED_TEST_CASE_P(InvalidationServiceTest, 406 REGISTER_TYPED_TEST_CASE_P(InvalidationServiceTest,
384 Basic, MultipleHandlers, EmptySetUnregisters, 407 Basic,
408 MultipleHandlers,
409 MultipleRegistrations,
410 EmptySetUnregisters,
385 GetInvalidatorStateAlwaysCurrent); 411 GetInvalidatorStateAlwaysCurrent);
386 412
387 #endif // COMPONENTS_INVALIDATION_INVALIDATION_SERVICE_TEST_TEMPLATE_H_ 413 #endif // COMPONENTS_INVALIDATION_INVALIDATION_SERVICE_TEST_TEMPLATE_H_
OLDNEW
« no previous file with comments | « components/invalidation/invalidation_service_android.cc ('k') | components/invalidation/invalidator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698