| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 // // Should cause OnInvalidatorStateChange() to be called on all | 49 // // Should cause OnInvalidatorStateChange() to be called on all |
| 50 // // observers of the Invalidator implementation with the given | 50 // // observers of the Invalidator implementation with the given |
| 51 // // parameters. | 51 // // parameters. |
| 52 // void TriggerOnInvalidatorStateChange(InvalidatorState state) { | 52 // void TriggerOnInvalidatorStateChange(InvalidatorState state) { |
| 53 // ... | 53 // ... |
| 54 // } | 54 // } |
| 55 // | 55 // |
| 56 // // Should cause OnIncomingInvalidation() to be called on all | 56 // // Should cause OnIncomingInvalidation() to be called on all |
| 57 // // observers of the Invalidator implementation with the given | 57 // // observers of the Invalidator implementation with the given |
| 58 // // parameters. | 58 // // parameters. |
| 59 // void TriggerOnIncomingInvalidation(const ObjectIdStateMap& id_state_map, | 59 // void TriggerOnIncomingInvalidation( |
| 60 // IncomingInvalidationSource source) { | 60 // const ObjectIdInvalidationMap& invalidation_map, |
| 61 // IncomingInvalidationSource source) { |
| 61 // ... | 62 // ... |
| 62 // } | 63 // } |
| 63 // | 64 // |
| 64 // // Returns whether or not the notifier handles storing the old | 65 // // Returns whether or not the notifier handles storing the old |
| 65 // // (deprecated) notifier state. | 66 // // (deprecated) notifier state. |
| 66 // static bool InvalidatorHandlesDeprecatedState() { | 67 // static bool InvalidatorHandlesDeprecatedState() { |
| 67 // return false; | 68 // return false; |
| 68 // } | 69 // } |
| 69 // }; | 70 // }; |
| 70 // | 71 // |
| (...skipping 12 matching lines...) Expand all Loading... |
| 83 #ifndef SYNC_NOTIFIER_INVALIDATOR_TEST_TEMPLATE_H_ | 84 #ifndef SYNC_NOTIFIER_INVALIDATOR_TEST_TEMPLATE_H_ |
| 84 #define SYNC_NOTIFIER_INVALIDATOR_TEST_TEMPLATE_H_ | 85 #define SYNC_NOTIFIER_INVALIDATOR_TEST_TEMPLATE_H_ |
| 85 | 86 |
| 86 #include "base/basictypes.h" | 87 #include "base/basictypes.h" |
| 87 #include "base/compiler_specific.h" | 88 #include "base/compiler_specific.h" |
| 88 #include "google/cacheinvalidation/include/types.h" | 89 #include "google/cacheinvalidation/include/types.h" |
| 89 #include "google/cacheinvalidation/types.pb.h" | 90 #include "google/cacheinvalidation/types.pb.h" |
| 90 #include "sync/notifier/fake_invalidation_handler.h" | 91 #include "sync/notifier/fake_invalidation_handler.h" |
| 91 #include "sync/notifier/fake_invalidation_state_tracker.h" | 92 #include "sync/notifier/fake_invalidation_state_tracker.h" |
| 92 #include "sync/notifier/invalidator.h" | 93 #include "sync/notifier/invalidator.h" |
| 93 #include "sync/notifier/object_id_state_map.h" | 94 #include "sync/notifier/object_id_invalidation_map.h" |
| 94 #include "sync/notifier/object_id_state_map_test_util.h" | 95 #include "sync/notifier/object_id_invalidation_map_test_util.h" |
| 95 #include "testing/gtest/include/gtest/gtest.h" | 96 #include "testing/gtest/include/gtest/gtest.h" |
| 96 | 97 |
| 97 namespace syncer { | 98 namespace syncer { |
| 98 | 99 |
| 99 template <typename InvalidatorTestDelegate> | 100 template <typename InvalidatorTestDelegate> |
| 100 class InvalidatorTest : public testing::Test { | 101 class InvalidatorTest : public testing::Test { |
| 101 protected: | 102 protected: |
| 102 InvalidatorTest() | 103 InvalidatorTest() |
| 103 : id1(ipc::invalidation::ObjectSource::TEST, "a"), | 104 : id1(ipc::invalidation::ObjectSource::TEST, "a"), |
| 104 id2(ipc::invalidation::ObjectSource::TEST, "b"), | 105 id2(ipc::invalidation::ObjectSource::TEST, "b"), |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 // handler, and then unregister the handler, dispatching invalidations in | 142 // handler, and then unregister the handler, dispatching invalidations in |
| 142 // between. The handler should only see invalidations when its registered and | 143 // between. The handler should only see invalidations when its registered and |
| 143 // its IDs are registered. | 144 // its IDs are registered. |
| 144 TYPED_TEST_P(InvalidatorTest, Basic) { | 145 TYPED_TEST_P(InvalidatorTest, Basic) { |
| 145 Invalidator* const invalidator = this->CreateAndInitializeInvalidator(); | 146 Invalidator* const invalidator = this->CreateAndInitializeInvalidator(); |
| 146 | 147 |
| 147 FakeInvalidationHandler handler; | 148 FakeInvalidationHandler handler; |
| 148 | 149 |
| 149 invalidator->RegisterHandler(&handler); | 150 invalidator->RegisterHandler(&handler); |
| 150 | 151 |
| 151 ObjectIdStateMap states; | 152 ObjectIdInvalidationMap states; |
| 152 states[this->id1].payload = "1"; | 153 states[this->id1].payload = "1"; |
| 153 states[this->id2].payload = "2"; | 154 states[this->id2].payload = "2"; |
| 154 states[this->id3].payload = "3"; | 155 states[this->id3].payload = "3"; |
| 155 | 156 |
| 156 // Should be ignored since no IDs are registered to |handler|. | 157 // Should be ignored since no IDs are registered to |handler|. |
| 157 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); | 158 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); |
| 158 EXPECT_EQ(0, handler.GetInvalidationCount()); | 159 EXPECT_EQ(0, handler.GetInvalidationCount()); |
| 159 | 160 |
| 160 ObjectIdSet ids; | 161 ObjectIdSet ids; |
| 161 ids.insert(this->id1); | 162 ids.insert(this->id1); |
| 162 ids.insert(this->id2); | 163 ids.insert(this->id2); |
| 163 invalidator->UpdateRegisteredIds(&handler, ids); | 164 invalidator->UpdateRegisteredIds(&handler, ids); |
| 164 | 165 |
| 165 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); | 166 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); |
| 166 EXPECT_EQ(INVALIDATIONS_ENABLED, handler.GetInvalidatorState()); | 167 EXPECT_EQ(INVALIDATIONS_ENABLED, handler.GetInvalidatorState()); |
| 167 | 168 |
| 168 ObjectIdStateMap expected_states; | 169 ObjectIdInvalidationMap expected_states; |
| 169 expected_states[this->id1].payload = "1"; | 170 expected_states[this->id1].payload = "1"; |
| 170 expected_states[this->id2].payload = "2"; | 171 expected_states[this->id2].payload = "2"; |
| 171 | 172 |
| 172 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); | 173 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); |
| 173 EXPECT_EQ(1, handler.GetInvalidationCount()); | 174 EXPECT_EQ(1, handler.GetInvalidationCount()); |
| 174 EXPECT_THAT( | 175 EXPECT_THAT(expected_states, Eq(handler.GetLastInvalidationMap())); |
| 175 expected_states, | |
| 176 Eq(handler.GetLastInvalidationIdStateMap())); | |
| 177 EXPECT_EQ(REMOTE_INVALIDATION, handler.GetLastInvalidationSource()); | 176 EXPECT_EQ(REMOTE_INVALIDATION, handler.GetLastInvalidationSource()); |
| 178 | 177 |
| 179 ids.erase(this->id1); | 178 ids.erase(this->id1); |
| 180 ids.insert(this->id3); | 179 ids.insert(this->id3); |
| 181 invalidator->UpdateRegisteredIds(&handler, ids); | 180 invalidator->UpdateRegisteredIds(&handler, ids); |
| 182 | 181 |
| 183 expected_states.erase(this->id1); | 182 expected_states.erase(this->id1); |
| 184 expected_states[this->id3].payload = "3"; | 183 expected_states[this->id3].payload = "3"; |
| 185 | 184 |
| 186 // Removed object IDs should not be notified, newly-added ones should. | 185 // Removed object IDs should not be notified, newly-added ones should. |
| 187 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); | 186 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); |
| 188 EXPECT_EQ(2, handler.GetInvalidationCount()); | 187 EXPECT_EQ(2, handler.GetInvalidationCount()); |
| 189 EXPECT_THAT( | 188 EXPECT_THAT(expected_states, Eq(handler.GetLastInvalidationMap())); |
| 190 expected_states, | |
| 191 Eq(handler.GetLastInvalidationIdStateMap())); | |
| 192 EXPECT_EQ(REMOTE_INVALIDATION, handler.GetLastInvalidationSource()); | 189 EXPECT_EQ(REMOTE_INVALIDATION, handler.GetLastInvalidationSource()); |
| 193 | 190 |
| 194 this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR); | 191 this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR); |
| 195 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, | 192 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, |
| 196 handler.GetInvalidatorState()); | 193 handler.GetInvalidatorState()); |
| 197 | 194 |
| 198 this->delegate_.TriggerOnInvalidatorStateChange( | 195 this->delegate_.TriggerOnInvalidatorStateChange( |
| 199 INVALIDATION_CREDENTIALS_REJECTED); | 196 INVALIDATION_CREDENTIALS_REJECTED); |
| 200 EXPECT_EQ(INVALIDATION_CREDENTIALS_REJECTED, | 197 EXPECT_EQ(INVALIDATION_CREDENTIALS_REJECTED, |
| 201 handler.GetInvalidatorState()); | 198 handler.GetInvalidatorState()); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 | 245 |
| 249 invalidator->UnregisterHandler(&handler4); | 246 invalidator->UnregisterHandler(&handler4); |
| 250 | 247 |
| 251 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); | 248 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); |
| 252 EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); | 249 EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); |
| 253 EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); | 250 EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); |
| 254 EXPECT_EQ(INVALIDATIONS_ENABLED, handler3.GetInvalidatorState()); | 251 EXPECT_EQ(INVALIDATIONS_ENABLED, handler3.GetInvalidatorState()); |
| 255 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler4.GetInvalidatorState()); | 252 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler4.GetInvalidatorState()); |
| 256 | 253 |
| 257 { | 254 { |
| 258 ObjectIdStateMap states; | 255 ObjectIdInvalidationMap states; |
| 259 states[this->id1].payload = "1"; | 256 states[this->id1].payload = "1"; |
| 260 states[this->id2].payload = "2"; | 257 states[this->id2].payload = "2"; |
| 261 states[this->id3].payload = "3"; | 258 states[this->id3].payload = "3"; |
| 262 states[this->id4].payload = "4"; | 259 states[this->id4].payload = "4"; |
| 263 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); | 260 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); |
| 264 | 261 |
| 265 ObjectIdStateMap expected_states; | 262 ObjectIdInvalidationMap expected_states; |
| 266 expected_states[this->id1].payload = "1"; | 263 expected_states[this->id1].payload = "1"; |
| 267 expected_states[this->id2].payload = "2"; | 264 expected_states[this->id2].payload = "2"; |
| 268 | 265 |
| 269 EXPECT_EQ(1, handler1.GetInvalidationCount()); | 266 EXPECT_EQ(1, handler1.GetInvalidationCount()); |
| 270 EXPECT_THAT( | 267 EXPECT_THAT(expected_states, Eq(handler1.GetLastInvalidationMap())); |
| 271 expected_states, | |
| 272 Eq(handler1.GetLastInvalidationIdStateMap())); | |
| 273 EXPECT_EQ(REMOTE_INVALIDATION, handler1.GetLastInvalidationSource()); | 268 EXPECT_EQ(REMOTE_INVALIDATION, handler1.GetLastInvalidationSource()); |
| 274 | 269 |
| 275 expected_states.clear(); | 270 expected_states.clear(); |
| 276 expected_states[this->id3].payload = "3"; | 271 expected_states[this->id3].payload = "3"; |
| 277 | 272 |
| 278 EXPECT_EQ(1, handler2.GetInvalidationCount()); | 273 EXPECT_EQ(1, handler2.GetInvalidationCount()); |
| 279 EXPECT_THAT( | 274 EXPECT_THAT(expected_states, Eq(handler2.GetLastInvalidationMap())); |
| 280 expected_states, | |
| 281 Eq(handler2.GetLastInvalidationIdStateMap())); | |
| 282 EXPECT_EQ(REMOTE_INVALIDATION, handler2.GetLastInvalidationSource()); | 275 EXPECT_EQ(REMOTE_INVALIDATION, handler2.GetLastInvalidationSource()); |
| 283 | 276 |
| 284 EXPECT_EQ(0, handler3.GetInvalidationCount()); | 277 EXPECT_EQ(0, handler3.GetInvalidationCount()); |
| 285 EXPECT_EQ(0, handler4.GetInvalidationCount()); | 278 EXPECT_EQ(0, handler4.GetInvalidationCount()); |
| 286 } | 279 } |
| 287 | 280 |
| 288 this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR); | 281 this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR); |
| 289 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler1.GetInvalidatorState()); | 282 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler1.GetInvalidatorState()); |
| 290 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler2.GetInvalidatorState()); | 283 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler2.GetInvalidatorState()); |
| 291 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler3.GetInvalidatorState()); | 284 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler3.GetInvalidatorState()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 320 | 313 |
| 321 // Unregister the IDs for the first observer. It should not receive any | 314 // Unregister the IDs for the first observer. It should not receive any |
| 322 // further invalidations. | 315 // further invalidations. |
| 323 invalidator->UpdateRegisteredIds(&handler1, ObjectIdSet()); | 316 invalidator->UpdateRegisteredIds(&handler1, ObjectIdSet()); |
| 324 | 317 |
| 325 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); | 318 this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED); |
| 326 EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); | 319 EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState()); |
| 327 EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); | 320 EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState()); |
| 328 | 321 |
| 329 { | 322 { |
| 330 ObjectIdStateMap states; | 323 ObjectIdInvalidationMap states; |
| 331 states[this->id1].payload = "1"; | 324 states[this->id1].payload = "1"; |
| 332 states[this->id2].payload = "2"; | 325 states[this->id2].payload = "2"; |
| 333 states[this->id3].payload = "3"; | 326 states[this->id3].payload = "3"; |
| 334 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); | 327 this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION); |
| 335 EXPECT_EQ(0, handler1.GetInvalidationCount()); | 328 EXPECT_EQ(0, handler1.GetInvalidationCount()); |
| 336 EXPECT_EQ(1, handler2.GetInvalidationCount()); | 329 EXPECT_EQ(1, handler2.GetInvalidationCount()); |
| 337 } | 330 } |
| 338 | 331 |
| 339 this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR); | 332 this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR); |
| 340 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler1.GetInvalidatorState()); | 333 EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler1.GetInvalidatorState()); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 EXPECT_EQ("fake_state", this->fake_tracker_.GetBootstrapData()); | 412 EXPECT_EQ("fake_state", this->fake_tracker_.GetBootstrapData()); |
| 420 } | 413 } |
| 421 | 414 |
| 422 REGISTER_TYPED_TEST_CASE_P(InvalidatorTest, | 415 REGISTER_TYPED_TEST_CASE_P(InvalidatorTest, |
| 423 Basic, MultipleHandlers, EmptySetUnregisters, | 416 Basic, MultipleHandlers, EmptySetUnregisters, |
| 424 GetInvalidatorStateAlwaysCurrent, MigrateState); | 417 GetInvalidatorStateAlwaysCurrent, MigrateState); |
| 425 | 418 |
| 426 } // namespace syncer | 419 } // namespace syncer |
| 427 | 420 |
| 428 #endif // SYNC_NOTIFIER_INVALIDATOR_TEST_TEMPLATE_H_ | 421 #endif // SYNC_NOTIFIER_INVALIDATOR_TEST_TEMPLATE_H_ |
| OLD | NEW |