| OLD | NEW |
| 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 Invalidator should pass in | 5 // This class defines tests that implementations of Invalidator should pass in |
| 6 // order to be conformant. Here's how you use it to test your implementation. | 6 // order to be conformant. Here's how you use it to test your implementation. |
| 7 // | 7 // |
| 8 // Say your class is called MyInvalidator. Then you need to define a class | 8 // Say your class is called MyInvalidator. Then you need to define a class |
| 9 // called MyInvalidatorTestDelegate in my_sync_notifier_unittest.cc like this: | 9 // called MyInvalidatorTestDelegate in my_sync_notifier_unittest.cc like this: |
| 10 // | 10 // |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 invalidation_map.Insert(Invalidation::Init(this->id2, 2, "2")); | 139 invalidation_map.Insert(Invalidation::Init(this->id2, 2, "2")); |
| 140 invalidation_map.Insert(Invalidation::Init(this->id3, 3, "3")); | 140 invalidation_map.Insert(Invalidation::Init(this->id3, 3, "3")); |
| 141 | 141 |
| 142 // Should be ignored since no IDs are registered to |handler|. | 142 // Should be ignored since no IDs are registered to |handler|. |
| 143 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map); | 143 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map); |
| 144 EXPECT_EQ(0, handler.GetInvalidationCount()); | 144 EXPECT_EQ(0, handler.GetInvalidationCount()); |
| 145 | 145 |
| 146 ObjectIdSet ids; | 146 ObjectIdSet ids; |
| 147 ids.insert(this->id1); | 147 ids.insert(this->id1); |
| 148 ids.insert(this->id2); | 148 ids.insert(this->id2); |
| 149 invalidator->UpdateRegisteredIds(&handler, ids); | 149 EXPECT_TRUE(invalidator->UpdateRegisteredIds(&handler, ids)); |
| 150 | 150 |
| 151 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); | 151 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); |
| 152 EXPECT_EQ(INVALIDATIONS_ENABLED, handler.GetInvalidatorState()); | 152 EXPECT_EQ(INVALIDATIONS_ENABLED, handler.GetInvalidatorState()); |
| 153 | 153 |
| 154 ObjectIdInvalidationMap expected_invalidations; | 154 ObjectIdInvalidationMap expected_invalidations; |
| 155 expected_invalidations.Insert(Invalidation::Init(this->id1, 1, "1")); | 155 expected_invalidations.Insert(Invalidation::Init(this->id1, 1, "1")); |
| 156 expected_invalidations.Insert(Invalidation::Init(this->id2, 2, "2")); | 156 expected_invalidations.Insert(Invalidation::Init(this->id2, 2, "2")); |
| 157 | 157 |
| 158 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map); | 158 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map); |
| 159 EXPECT_EQ(1, handler.GetInvalidationCount()); | 159 EXPECT_EQ(1, handler.GetInvalidationCount()); |
| 160 EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap())); | 160 EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap())); |
| 161 | 161 |
| 162 ids.erase(this->id1); | 162 ids.erase(this->id1); |
| 163 ids.insert(this->id3); | 163 ids.insert(this->id3); |
| 164 invalidator->UpdateRegisteredIds(&handler, ids); | 164 EXPECT_TRUE(invalidator->UpdateRegisteredIds(&handler, ids)); |
| 165 | 165 |
| 166 expected_invalidations = ObjectIdInvalidationMap(); | 166 expected_invalidations = ObjectIdInvalidationMap(); |
| 167 expected_invalidations.Insert(Invalidation::Init(this->id2, 2, "2")); | 167 expected_invalidations.Insert(Invalidation::Init(this->id2, 2, "2")); |
| 168 expected_invalidations.Insert(Invalidation::Init(this->id3, 3, "3")); | 168 expected_invalidations.Insert(Invalidation::Init(this->id3, 3, "3")); |
| 169 | 169 |
| 170 // Removed object IDs should not be notified, newly-added ones should. | 170 // Removed object IDs should not be notified, newly-added ones should. |
| 171 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map); | 171 this->delegate_.TriggerOnIncomingInvalidation(invalidation_map); |
| 172 EXPECT_EQ(2, handler.GetInvalidationCount()); | 172 EXPECT_EQ(2, handler.GetInvalidationCount()); |
| 173 EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap())); | 173 EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap())); |
| 174 | 174 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 203 | 203 |
| 204 invalidator->RegisterHandler(&handler1); | 204 invalidator->RegisterHandler(&handler1); |
| 205 invalidator->RegisterHandler(&handler2); | 205 invalidator->RegisterHandler(&handler2); |
| 206 invalidator->RegisterHandler(&handler3); | 206 invalidator->RegisterHandler(&handler3); |
| 207 invalidator->RegisterHandler(&handler4); | 207 invalidator->RegisterHandler(&handler4); |
| 208 | 208 |
| 209 { | 209 { |
| 210 ObjectIdSet ids; | 210 ObjectIdSet ids; |
| 211 ids.insert(this->id1); | 211 ids.insert(this->id1); |
| 212 ids.insert(this->id2); | 212 ids.insert(this->id2); |
| 213 invalidator->UpdateRegisteredIds(&handler1, ids); | 213 EXPECT_TRUE(invalidator->UpdateRegisteredIds(&handler1, ids)); |
| 214 } | 214 } |
| 215 | 215 |
| 216 { | 216 { |
| 217 ObjectIdSet ids; | 217 ObjectIdSet ids; |
| 218 ids.insert(this->id3); | 218 ids.insert(this->id3); |
| 219 invalidator->UpdateRegisteredIds(&handler2, ids); | 219 EXPECT_TRUE(invalidator->UpdateRegisteredIds(&handler2, ids)); |
| 220 } | 220 } |
| 221 | 221 |
| 222 // Don't register any IDs for handler3. | 222 // Don't register any IDs for handler3. |
| 223 | 223 |
| 224 { | 224 { |
| 225 ObjectIdSet ids; | 225 ObjectIdSet ids; |
| 226 ids.insert(this->id4); | 226 ids.insert(this->id4); |
| 227 invalidator->UpdateRegisteredIds(&handler4, ids); | 227 EXPECT_TRUE(invalidator->UpdateRegisteredIds(&handler4, ids)); |
| 228 } | 228 } |
| 229 | 229 |
| 230 invalidator->UnregisterHandler(&handler4); | 230 invalidator->UnregisterHandler(&handler4); |
| 231 | 231 |
| 232 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); | 232 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); |
| 233 EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); | 233 EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); |
| 234 EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); | 234 EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); |
| 235 EXPECT_EQ(INVALIDATIONS_ENABLED, handler3.GetInvalidatorState()); | 235 EXPECT_EQ(INVALIDATIONS_ENABLED, handler3.GetInvalidatorState()); |
| 236 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler4.GetInvalidatorState()); | 236 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler4.GetInvalidatorState()); |
| 237 | 237 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 265 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler1.GetInvalidatorState()); | 265 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler1.GetInvalidatorState()); |
| 266 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler2.GetInvalidatorState()); | 266 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler2.GetInvalidatorState()); |
| 267 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler3.GetInvalidatorState()); | 267 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler3.GetInvalidatorState()); |
| 268 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler4.GetInvalidatorState()); | 268 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler4.GetInvalidatorState()); |
| 269 | 269 |
| 270 invalidator->UnregisterHandler(&handler3); | 270 invalidator->UnregisterHandler(&handler3); |
| 271 invalidator->UnregisterHandler(&handler2); | 271 invalidator->UnregisterHandler(&handler2); |
| 272 invalidator->UnregisterHandler(&handler1); | 272 invalidator->UnregisterHandler(&handler1); |
| 273 } | 273 } |
| 274 | 274 |
| 275 // Multiple registrations by different handlers on the same object ID should |
| 276 // return false. |
| 277 TYPED_TEST_P(InvalidatorTest, MultipleRegistrations) { |
| 278 Invalidator* const invalidator = this->CreateAndInitializeInvalidator(); |
| 279 |
| 280 FakeInvalidationHandler handler1; |
| 281 FakeInvalidationHandler handler2; |
| 282 |
| 283 invalidator->RegisterHandler(&handler1); |
| 284 invalidator->RegisterHandler(&handler2); |
| 285 |
| 286 // Registering both handlers for the same ObjectId. First call should succeed, |
| 287 // second should fail. |
| 288 ObjectIdSet ids; |
| 289 ids.insert(this->id1); |
| 290 EXPECT_TRUE(invalidator->UpdateRegisteredIds(&handler1, ids)); |
| 291 EXPECT_FALSE(invalidator->UpdateRegisteredIds(&handler2, ids)); |
| 292 |
| 293 invalidator->UnregisterHandler(&handler2); |
| 294 invalidator->UnregisterHandler(&handler1); |
| 295 } |
| 296 |
| 275 // Make sure that passing an empty set to UpdateRegisteredIds clears the | 297 // Make sure that passing an empty set to UpdateRegisteredIds clears the |
| 276 // corresponding entries for the handler. | 298 // corresponding entries for the handler. |
| 277 TYPED_TEST_P(InvalidatorTest, EmptySetUnregisters) { | 299 TYPED_TEST_P(InvalidatorTest, EmptySetUnregisters) { |
| 278 Invalidator* const invalidator = this->CreateAndInitializeInvalidator(); | 300 Invalidator* const invalidator = this->CreateAndInitializeInvalidator(); |
| 279 | 301 |
| 280 FakeInvalidationHandler handler1; | 302 FakeInvalidationHandler handler1; |
| 281 | 303 |
| 282 // Control observer. | 304 // Control observer. |
| 283 FakeInvalidationHandler handler2; | 305 FakeInvalidationHandler handler2; |
| 284 | 306 |
| 285 invalidator->RegisterHandler(&handler1); | 307 invalidator->RegisterHandler(&handler1); |
| 286 invalidator->RegisterHandler(&handler2); | 308 invalidator->RegisterHandler(&handler2); |
| 287 | 309 |
| 288 { | 310 { |
| 289 ObjectIdSet ids; | 311 ObjectIdSet ids; |
| 290 ids.insert(this->id1); | 312 ids.insert(this->id1); |
| 291 ids.insert(this->id2); | 313 ids.insert(this->id2); |
| 292 invalidator->UpdateRegisteredIds(&handler1, ids); | 314 EXPECT_TRUE(invalidator->UpdateRegisteredIds(&handler1, ids)); |
| 293 } | 315 } |
| 294 | 316 |
| 295 { | 317 { |
| 296 ObjectIdSet ids; | 318 ObjectIdSet ids; |
| 297 ids.insert(this->id3); | 319 ids.insert(this->id3); |
| 298 invalidator->UpdateRegisteredIds(&handler2, ids); | 320 EXPECT_TRUE(invalidator->UpdateRegisteredIds(&handler2, ids)); |
| 299 } | 321 } |
| 300 | 322 |
| 301 // Unregister the IDs for the first observer. It should not receive any | 323 // Unregister the IDs for the first observer. It should not receive any |
| 302 // further invalidations. | 324 // further invalidations. |
| 303 invalidator->UpdateRegisteredIds(&handler1, ObjectIdSet()); | 325 EXPECT_TRUE(invalidator->UpdateRegisteredIds(&handler1, ObjectIdSet())); |
| 304 | 326 |
| 305 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); | 327 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); |
| 306 EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); | 328 EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); |
| 307 EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); | 329 EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); |
| 308 | 330 |
| 309 { | 331 { |
| 310 ObjectIdInvalidationMap invalidation_map; | 332 ObjectIdInvalidationMap invalidation_map; |
| 311 invalidation_map.Insert(Invalidation::Init(this->id1, 1, "1")); | 333 invalidation_map.Insert(Invalidation::Init(this->id1, 1, "1")); |
| 312 invalidation_map.Insert(Invalidation::Init(this->id2, 2, "2")); | 334 invalidation_map.Insert(Invalidation::Init(this->id2, 2, "2")); |
| 313 invalidation_map.Insert(Invalidation::Init(this->id3, 3, "3")); | 335 invalidation_map.Insert(Invalidation::Init(this->id3, 3, "3")); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 EXPECT_EQ(INVALIDATIONS_ENABLED, handler.GetLastRetrievedState()); | 384 EXPECT_EQ(INVALIDATIONS_ENABLED, handler.GetLastRetrievedState()); |
| 363 | 385 |
| 364 this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR); | 386 this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR); |
| 365 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler.GetInvalidatorState()); | 387 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler.GetInvalidatorState()); |
| 366 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler.GetLastRetrievedState()); | 388 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler.GetLastRetrievedState()); |
| 367 | 389 |
| 368 invalidator->UnregisterHandler(&handler); | 390 invalidator->UnregisterHandler(&handler); |
| 369 } | 391 } |
| 370 | 392 |
| 371 REGISTER_TYPED_TEST_CASE_P(InvalidatorTest, | 393 REGISTER_TYPED_TEST_CASE_P(InvalidatorTest, |
| 372 Basic, MultipleHandlers, EmptySetUnregisters, | 394 Basic, |
| 395 MultipleHandlers, |
| 396 MultipleRegistrations, |
| 397 EmptySetUnregisters, |
| 373 GetInvalidatorStateAlwaysCurrent); | 398 GetInvalidatorStateAlwaysCurrent); |
| 374 | 399 |
| 375 } // namespace syncer | 400 } // namespace syncer |
| 376 | 401 |
| 377 #endif // COMPONENTS_INVALIDATION_INVALIDATOR_TEST_TEMPLATE_H_ | 402 #endif // COMPONENTS_INVALIDATION_INVALIDATOR_TEST_TEMPLATE_H_ |
| OLD | NEW |