| Index: sync/notifier/invalidator_test_template.h
|
| diff --git a/sync/notifier/invalidator_test_template.h b/sync/notifier/invalidator_test_template.h
|
| index df25107fbc8299baa0351685c65c3459fca3f395..8aadade911582eba5faae94408a4efc81f21bb02 100644
|
| --- a/sync/notifier/invalidator_test_template.h
|
| +++ b/sync/notifier/invalidator_test_template.h
|
| @@ -46,25 +46,18 @@
|
| // // The Trigger* functions below should block until the effects of
|
| // // the call are visible on the current thread.
|
| //
|
| -// // Should cause OnNotificationsEnabled() to be called on all
|
| -// // observers of the Invalidator implementation.
|
| -// void TriggerOnNotificationsEnabled() {
|
| -// ...
|
| -// }
|
| -//
|
| -// // Should cause OnIncomingNotification() to be called on all
|
| +// // Should cause OnInvalidatorStateChange() to be called on all
|
| // // observers of the Invalidator implementation with the given
|
| // // parameters.
|
| -// void TriggerOnIncomingNotification(const ObjectIdStateMap& id_state_map,
|
| -// IncomingNotificationSource source) {
|
| +// void TriggerOnInvalidatorStateChange(InvalidatorState state) {
|
| // ...
|
| // }
|
| //
|
| -// // Should cause OnNotificationsDisabled() to be called on all
|
| +// // Should cause OnIncomingInvalidation() to be called on all
|
| // // observers of the Invalidator implementation with the given
|
| // // parameters.
|
| -// void TriggerOnNotificationsDisabled(
|
| -// NotificationsDisabledReason reason) {
|
| +// void TriggerOnIncomingInvalidation(const ObjectIdStateMap& id_state_map,
|
| +// IncomingInvalidationSource source) {
|
| // ...
|
| // }
|
| //
|
| @@ -90,6 +83,8 @@
|
| #ifndef SYNC_NOTIFIER_INVALIDATOR_TEST_TEMPLATE_H_
|
| #define SYNC_NOTIFIER_INVALIDATOR_TEST_TEMPLATE_H_
|
|
|
| +#include "base/basictypes.h"
|
| +#include "base/compiler_specific.h"
|
| #include "google/cacheinvalidation/include/types.h"
|
| #include "google/cacheinvalidation/types.pb.h"
|
| #include "sync/notifier/fake_invalidation_handler.h"
|
| @@ -159,28 +154,27 @@ TYPED_TEST_P(InvalidatorTest, Basic) {
|
| states[this->id3].payload = "3";
|
|
|
| // Should be ignored since no IDs are registered to |handler|.
|
| - this->delegate_.TriggerOnIncomingNotification(states, REMOTE_NOTIFICATION);
|
| - EXPECT_EQ(0, handler.GetNotificationCount());
|
| + this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION);
|
| + EXPECT_EQ(0, handler.GetInvalidationCount());
|
|
|
| ObjectIdSet ids;
|
| ids.insert(this->id1);
|
| ids.insert(this->id2);
|
| invalidator->UpdateRegisteredIds(&handler, ids);
|
|
|
| - this->delegate_.TriggerOnNotificationsEnabled();
|
| - EXPECT_EQ(NO_NOTIFICATION_ERROR,
|
| - handler.GetNotificationsDisabledReason());
|
| + this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED);
|
| + EXPECT_EQ(INVALIDATIONS_ENABLED, handler.GetInvalidatorState());
|
|
|
| ObjectIdStateMap expected_states;
|
| expected_states[this->id1].payload = "1";
|
| expected_states[this->id2].payload = "2";
|
|
|
| - this->delegate_.TriggerOnIncomingNotification(states, REMOTE_NOTIFICATION);
|
| - EXPECT_EQ(1, handler.GetNotificationCount());
|
| + this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION);
|
| + EXPECT_EQ(1, handler.GetInvalidationCount());
|
| EXPECT_THAT(
|
| expected_states,
|
| - Eq(handler.GetLastNotificationIdStateMap()));
|
| - EXPECT_EQ(REMOTE_NOTIFICATION, handler.GetLastNotificationSource());
|
| + Eq(handler.GetLastInvalidationIdStateMap()));
|
| + EXPECT_EQ(REMOTE_INVALIDATION, handler.GetLastInvalidationSource());
|
|
|
| ids.erase(this->id1);
|
| ids.insert(this->id3);
|
| @@ -190,33 +184,33 @@ TYPED_TEST_P(InvalidatorTest, Basic) {
|
| expected_states[this->id3].payload = "3";
|
|
|
| // Removed object IDs should not be notified, newly-added ones should.
|
| - this->delegate_.TriggerOnIncomingNotification(states, REMOTE_NOTIFICATION);
|
| - EXPECT_EQ(2, handler.GetNotificationCount());
|
| + this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION);
|
| + EXPECT_EQ(2, handler.GetInvalidationCount());
|
| EXPECT_THAT(
|
| expected_states,
|
| - Eq(handler.GetLastNotificationIdStateMap()));
|
| - EXPECT_EQ(REMOTE_NOTIFICATION, handler.GetLastNotificationSource());
|
| + Eq(handler.GetLastInvalidationIdStateMap()));
|
| + EXPECT_EQ(REMOTE_INVALIDATION, handler.GetLastInvalidationSource());
|
|
|
| - this->delegate_.TriggerOnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR);
|
| - EXPECT_EQ(TRANSIENT_NOTIFICATION_ERROR,
|
| - handler.GetNotificationsDisabledReason());
|
| + this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR);
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR,
|
| + handler.GetInvalidatorState());
|
|
|
| - this->delegate_.TriggerOnNotificationsDisabled(
|
| - NOTIFICATION_CREDENTIALS_REJECTED);
|
| - EXPECT_EQ(NOTIFICATION_CREDENTIALS_REJECTED,
|
| - handler.GetNotificationsDisabledReason());
|
| + this->delegate_.TriggerOnInvalidatorStateChange(
|
| + INVALIDATION_CREDENTIALS_REJECTED);
|
| + EXPECT_EQ(INVALIDATION_CREDENTIALS_REJECTED,
|
| + handler.GetInvalidatorState());
|
|
|
| invalidator->UnregisterHandler(&handler);
|
|
|
| // Should be ignored since |handler| isn't registered anymore.
|
| - this->delegate_.TriggerOnIncomingNotification(states, REMOTE_NOTIFICATION);
|
| - EXPECT_EQ(2, handler.GetNotificationCount());
|
| + this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION);
|
| + EXPECT_EQ(2, handler.GetInvalidationCount());
|
| }
|
|
|
| // Register handlers and some IDs for those handlers, register a handler with
|
| // no IDs, and register a handler with some IDs but unregister it. Then,
|
| -// dispatch some notifications and invalidations. Handlers that are registered
|
| -// should get notifications, and the ones that have registered IDs should
|
| +// dispatch some invalidations and invalidations. Handlers that are registered
|
| +// should get invalidations, and the ones that have registered IDs should
|
| // receive invalidations for those IDs.
|
| TYPED_TEST_P(InvalidatorTest, MultipleHandlers) {
|
| Invalidator* const invalidator = this->CreateAndInitializeInvalidator();
|
| @@ -254,15 +248,11 @@ TYPED_TEST_P(InvalidatorTest, MultipleHandlers) {
|
|
|
| invalidator->UnregisterHandler(&handler4);
|
|
|
| - this->delegate_.TriggerOnNotificationsEnabled();
|
| - EXPECT_EQ(NO_NOTIFICATION_ERROR,
|
| - handler1.GetNotificationsDisabledReason());
|
| - EXPECT_EQ(NO_NOTIFICATION_ERROR,
|
| - handler2.GetNotificationsDisabledReason());
|
| - EXPECT_EQ(NO_NOTIFICATION_ERROR,
|
| - handler3.GetNotificationsDisabledReason());
|
| - EXPECT_EQ(TRANSIENT_NOTIFICATION_ERROR,
|
| - handler4.GetNotificationsDisabledReason());
|
| + this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED);
|
| + EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState());
|
| + EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState());
|
| + EXPECT_EQ(INVALIDATIONS_ENABLED, handler3.GetInvalidatorState());
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler4.GetInvalidatorState());
|
|
|
| {
|
| ObjectIdStateMap states;
|
| @@ -270,40 +260,36 @@ TYPED_TEST_P(InvalidatorTest, MultipleHandlers) {
|
| states[this->id2].payload = "2";
|
| states[this->id3].payload = "3";
|
| states[this->id4].payload = "4";
|
| - this->delegate_.TriggerOnIncomingNotification(states, REMOTE_NOTIFICATION);
|
| + this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION);
|
|
|
| ObjectIdStateMap expected_states;
|
| expected_states[this->id1].payload = "1";
|
| expected_states[this->id2].payload = "2";
|
|
|
| - EXPECT_EQ(1, handler1.GetNotificationCount());
|
| + EXPECT_EQ(1, handler1.GetInvalidationCount());
|
| EXPECT_THAT(
|
| expected_states,
|
| - Eq(handler1.GetLastNotificationIdStateMap()));
|
| - EXPECT_EQ(REMOTE_NOTIFICATION, handler1.GetLastNotificationSource());
|
| + Eq(handler1.GetLastInvalidationIdStateMap()));
|
| + EXPECT_EQ(REMOTE_INVALIDATION, handler1.GetLastInvalidationSource());
|
|
|
| expected_states.clear();
|
| expected_states[this->id3].payload = "3";
|
|
|
| - EXPECT_EQ(1, handler2.GetNotificationCount());
|
| + EXPECT_EQ(1, handler2.GetInvalidationCount());
|
| EXPECT_THAT(
|
| expected_states,
|
| - Eq(handler2.GetLastNotificationIdStateMap()));
|
| - EXPECT_EQ(REMOTE_NOTIFICATION, handler2.GetLastNotificationSource());
|
| + Eq(handler2.GetLastInvalidationIdStateMap()));
|
| + EXPECT_EQ(REMOTE_INVALIDATION, handler2.GetLastInvalidationSource());
|
|
|
| - EXPECT_EQ(0, handler3.GetNotificationCount());
|
| - EXPECT_EQ(0, handler4.GetNotificationCount());
|
| + EXPECT_EQ(0, handler3.GetInvalidationCount());
|
| + EXPECT_EQ(0, handler4.GetInvalidationCount());
|
| }
|
|
|
| - this->delegate_.TriggerOnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR);
|
| - EXPECT_EQ(TRANSIENT_NOTIFICATION_ERROR,
|
| - handler1.GetNotificationsDisabledReason());
|
| - EXPECT_EQ(TRANSIENT_NOTIFICATION_ERROR,
|
| - handler2.GetNotificationsDisabledReason());
|
| - EXPECT_EQ(TRANSIENT_NOTIFICATION_ERROR,
|
| - handler3.GetNotificationsDisabledReason());
|
| - EXPECT_EQ(TRANSIENT_NOTIFICATION_ERROR,
|
| - handler4.GetNotificationsDisabledReason());
|
| + this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR);
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler1.GetInvalidatorState());
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler2.GetInvalidatorState());
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler3.GetInvalidatorState());
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler4.GetInvalidatorState());
|
| }
|
|
|
| // Make sure that passing an empty set to UpdateRegisteredIds clears the
|
| @@ -336,27 +322,65 @@ TYPED_TEST_P(InvalidatorTest, EmptySetUnregisters) {
|
| // further invalidations.
|
| invalidator->UpdateRegisteredIds(&handler1, ObjectIdSet());
|
|
|
| - this->delegate_.TriggerOnNotificationsEnabled();
|
| - EXPECT_EQ(NO_NOTIFICATION_ERROR,
|
| - handler1.GetNotificationsDisabledReason());
|
| - EXPECT_EQ(NO_NOTIFICATION_ERROR,
|
| - handler2.GetNotificationsDisabledReason());
|
| + this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED);
|
| + EXPECT_EQ(INVALIDATIONS_ENABLED, handler1.GetInvalidatorState());
|
| + EXPECT_EQ(INVALIDATIONS_ENABLED, handler2.GetInvalidatorState());
|
|
|
| {
|
| ObjectIdStateMap states;
|
| states[this->id1].payload = "1";
|
| states[this->id2].payload = "2";
|
| states[this->id3].payload = "3";
|
| - this->delegate_.TriggerOnIncomingNotification(states, REMOTE_NOTIFICATION);
|
| - EXPECT_EQ(0, handler1.GetNotificationCount());
|
| - EXPECT_EQ(1, handler2.GetNotificationCount());
|
| + this->delegate_.TriggerOnIncomingInvalidation(states, REMOTE_INVALIDATION);
|
| + EXPECT_EQ(0, handler1.GetInvalidationCount());
|
| + EXPECT_EQ(1, handler2.GetInvalidationCount());
|
| }
|
|
|
| - this->delegate_.TriggerOnNotificationsDisabled(TRANSIENT_NOTIFICATION_ERROR);
|
| - EXPECT_EQ(TRANSIENT_NOTIFICATION_ERROR,
|
| - handler1.GetNotificationsDisabledReason());
|
| - EXPECT_EQ(TRANSIENT_NOTIFICATION_ERROR,
|
| - handler2.GetNotificationsDisabledReason());
|
| + this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR);
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler1.GetInvalidatorState());
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler2.GetInvalidatorState());
|
| +}
|
| +
|
| +namespace internal {
|
| +
|
| +// A FakeInvalidationHandler that is "bound" to a specific
|
| +// Invalidator. This is for cross-referencing state information with
|
| +// the bound Invalidator.
|
| +class BoundFakeInvalidationHandler : public FakeInvalidationHandler {
|
| + public:
|
| + explicit BoundFakeInvalidationHandler(const Invalidator& invalidator);
|
| + virtual ~BoundFakeInvalidationHandler();
|
| +
|
| + // Returns the last return value of GetInvalidatorState() on the
|
| + // bound invalidator from the last time the invalidator state
|
| + // changed.
|
| + InvalidatorState GetLastRetrievedState() const;
|
| +
|
| + // InvalidationHandler implementation.
|
| + virtual void OnInvalidatorStateChange(InvalidatorState state) OVERRIDE;
|
| +
|
| + private:
|
| + const Invalidator& invalidator_;
|
| + InvalidatorState last_retrieved_state_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(BoundFakeInvalidationHandler);
|
| +};
|
| +
|
| +} // namespace internal
|
| +
|
| +TYPED_TEST_P(InvalidatorTest, GetInvalidatorStateAlwaysCurrent) {
|
| + Invalidator* const invalidator = this->CreateAndInitializeInvalidator();
|
| +
|
| + internal::BoundFakeInvalidationHandler handler(*invalidator);
|
| + invalidator->RegisterHandler(&handler);
|
| +
|
| + this->delegate_.TriggerOnInvalidatorStateChange(INVALIDATIONS_ENABLED);
|
| + EXPECT_EQ(INVALIDATIONS_ENABLED, handler.GetInvalidatorState());
|
| + EXPECT_EQ(INVALIDATIONS_ENABLED, handler.GetLastRetrievedState());
|
| +
|
| + this->delegate_.TriggerOnInvalidatorStateChange(TRANSIENT_INVALIDATION_ERROR);
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler.GetInvalidatorState());
|
| + EXPECT_EQ(TRANSIENT_INVALIDATION_ERROR, handler.GetLastRetrievedState());
|
| }
|
|
|
| // Initialize the invalidator with an empty initial state. Call the deprecated
|
| @@ -386,7 +410,7 @@ TYPED_TEST_P(InvalidatorTest, MigrateState) {
|
| // Pretend that Chrome has shut down.
|
| this->delegate_.DestroyInvalidator();
|
| this->delegate_.CreateInvalidator("fake_state",
|
| - this->fake_tracker_.AsWeakPtr());
|
| + this->fake_tracker_.AsWeakPtr());
|
| invalidator = this->delegate_.GetInvalidator();
|
|
|
| // Should do nothing.
|
| @@ -397,7 +421,7 @@ TYPED_TEST_P(InvalidatorTest, MigrateState) {
|
|
|
| REGISTER_TYPED_TEST_CASE_P(InvalidatorTest,
|
| Basic, MultipleHandlers, EmptySetUnregisters,
|
| - MigrateState);
|
| + GetInvalidatorStateAlwaysCurrent, MigrateState);
|
|
|
| } // namespace syncer
|
|
|
|
|