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

Unified Diff: components/invalidation/invalidation_service_test_template.h

Issue 1191393008: Introduce a layering in the invalidation component as public and impl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Explicitly forbid content to prevent future additions Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: components/invalidation/invalidation_service_test_template.h
diff --git a/components/invalidation/invalidation_service_test_template.h b/components/invalidation/invalidation_service_test_template.h
deleted file mode 100644
index 3f2e764691513dd8413228f47f663dc1a85dbae2..0000000000000000000000000000000000000000
--- a/components/invalidation/invalidation_service_test_template.h
+++ /dev/null
@@ -1,413 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This class defines tests that implementations of InvalidationService should
-// pass in order to be conformant. Here's how you use it to test your
-// implementation.
-//
-// Say your class is called MyInvalidationService. Then you need to define a
-// class called MyInvalidationServiceTestDelegate in
-// my_invalidation_frontend_unittest.cc like this:
-//
-// class MyInvalidationServiceTestDelegate {
-// public:
-// MyInvalidationServiceTestDelegate() ...
-//
-// ~MyInvalidationServiceTestDelegate() {
-// // DestroyInvalidator() may not be explicitly called by tests.
-// DestroyInvalidator();
-// }
-//
-// // Create the InvalidationService implementation with the given params.
-// void CreateInvalidationService() {
-// ...
-// }
-//
-// // Should return the InvalidationService implementation. Only called
-// // after CreateInvalidator and before DestroyInvalidator.
-// MyInvalidationService* GetInvalidationService() {
-// ...
-// }
-//
-// // Destroy the InvalidationService implementation.
-// void DestroyInvalidationService() {
-// ...
-// }
-//
-// // The Trigger* functions below should block until the effects of
-// // the call are visible on the current thread.
-//
-// // Should cause OnInvalidatorStateChange() to be called on all
-// // observers of the InvalidationService implementation with the given
-// // parameters.
-// void TriggerOnInvalidatorStateChange(InvalidatorState state) {
-// ...
-// }
-//
-// // Should cause OnIncomingInvalidation() to be called on all
-// // observers of the InvalidationService implementation with the given
-// // parameters.
-// void TriggerOnIncomingInvalidation(
-// const ObjectIdInvalidationMap& invalidation_map) {
-// ...
-// }
-// };
-//
-// The InvalidationServiceTest test harness will have a member variable of
-// this delegate type and will call its functions in the various
-// tests.
-//
-// Then you simply #include this file as well as gtest.h and add the
-// following statement to my_sync_notifier_unittest.cc:
-//
-// INSTANTIATE_TYPED_TEST_CASE_P(
-// MyInvalidationService,
-// InvalidationServiceTest,
-// MyInvalidatorTestDelegate);
-//
-// Easy!
-
-#ifndef COMPONENTS_INVALIDATION_INVALIDATION_SERVICE_TEST_TEMPLATE_H_
-#define COMPONENTS_INVALIDATION_INVALIDATION_SERVICE_TEST_TEMPLATE_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "components/invalidation/ack_handle.h"
-#include "components/invalidation/fake_invalidation_handler.h"
-#include "components/invalidation/invalidation.h"
-#include "components/invalidation/invalidation_service.h"
-#include "components/invalidation/object_id_invalidation_map.h"
-#include "components/invalidation/object_id_invalidation_map_test_util.h"
-#include "google/cacheinvalidation/include/types.h"
-#include "google/cacheinvalidation/types.pb.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-template <typename InvalidatorTestDelegate>
-class InvalidationServiceTest : public testing::Test {
- protected:
- InvalidationServiceTest()
- : id1(ipc::invalidation::ObjectSource::CHROME_SYNC, "BOOKMARK"),
- id2(ipc::invalidation::ObjectSource::CHROME_SYNC, "PREFERENCE"),
- id3(ipc::invalidation::ObjectSource::CHROME_SYNC, "AUTOFILL"),
- id4(ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING,
- "PUSH_MESSAGE") {
- }
-
- invalidation::InvalidationService*
- CreateAndInitializeInvalidationService() {
- this->delegate_.CreateInvalidationService();
- return this->delegate_.GetInvalidationService();
- }
-
- InvalidatorTestDelegate delegate_;
-
- const invalidation::ObjectId id1;
- const invalidation::ObjectId id2;
- const invalidation::ObjectId id3;
- const invalidation::ObjectId id4;
-};
-
-TYPED_TEST_CASE_P(InvalidationServiceTest);
-
-// Initialize the invalidator, register a handler, register some IDs for that
-// handler, and then unregister the handler, dispatching invalidations in
-// between. The handler should only see invalidations when its registered and
-// its IDs are registered.
-TYPED_TEST_P(InvalidationServiceTest, Basic) {
- invalidation::InvalidationService* const invalidator =
- this->CreateAndInitializeInvalidationService();
-
- syncer::FakeInvalidationHandler handler;
-
- invalidator->RegisterInvalidationHandler(&handler);
-
- syncer::ObjectIdInvalidationMap invalidation_map;
- invalidation_map.Insert(syncer::Invalidation::Init(this->id1, 1, "1"));
- invalidation_map.Insert(syncer::Invalidation::Init(this->id2, 2, "2"));
- invalidation_map.Insert(syncer::Invalidation::Init(this->id3, 3, "3"));
-
- // Should be ignored since no IDs are registered to |handler|.
- this->delegate_.TriggerOnIncomingInvalidation(invalidation_map);
- EXPECT_EQ(0, handler.GetInvalidationCount());
-
- syncer::ObjectIdSet ids;
- ids.insert(this->id1);
- ids.insert(this->id2);
- EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler, ids));
-
- this->delegate_.TriggerOnInvalidatorStateChange(
- syncer::INVALIDATIONS_ENABLED);
- EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler.GetInvalidatorState());
-
- syncer::ObjectIdInvalidationMap expected_invalidations;
- expected_invalidations.Insert(syncer::Invalidation::Init(this->id1, 1, "1"));
- expected_invalidations.Insert(syncer::Invalidation::Init(this->id2, 2, "2"));
-
- this->delegate_.TriggerOnIncomingInvalidation(invalidation_map);
- EXPECT_EQ(1, handler.GetInvalidationCount());
- EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap()));
-
- ids.erase(this->id1);
- ids.insert(this->id3);
- EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler, ids));
-
- expected_invalidations = syncer::ObjectIdInvalidationMap();
- expected_invalidations.Insert(syncer::Invalidation::Init(this->id2, 2, "2"));
- expected_invalidations.Insert(syncer::Invalidation::Init(this->id3, 3, "3"));
-
- // Removed object IDs should not be notified, newly-added ones should.
- this->delegate_.TriggerOnIncomingInvalidation(invalidation_map);
- EXPECT_EQ(2, handler.GetInvalidationCount());
- EXPECT_THAT(expected_invalidations, Eq(handler.GetLastInvalidationMap()));
-
- this->delegate_.TriggerOnInvalidatorStateChange(
- syncer::TRANSIENT_INVALIDATION_ERROR);
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler.GetInvalidatorState());
-
- this->delegate_.TriggerOnInvalidatorStateChange(
- syncer::INVALIDATIONS_ENABLED);
- EXPECT_EQ(syncer::INVALIDATIONS_ENABLED,
- handler.GetInvalidatorState());
-
- invalidator->UnregisterInvalidationHandler(&handler);
-
- // Should be ignored since |handler| isn't registered anymore.
- this->delegate_.TriggerOnIncomingInvalidation(invalidation_map);
- 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 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(InvalidationServiceTest, MultipleHandlers) {
- invalidation::InvalidationService* const invalidator =
- this->CreateAndInitializeInvalidationService();
-
- syncer::FakeInvalidationHandler handler1;
- syncer::FakeInvalidationHandler handler2;
- syncer::FakeInvalidationHandler handler3;
- syncer::FakeInvalidationHandler handler4;
-
- invalidator->RegisterInvalidationHandler(&handler1);
- invalidator->RegisterInvalidationHandler(&handler2);
- invalidator->RegisterInvalidationHandler(&handler3);
- invalidator->RegisterInvalidationHandler(&handler4);
-
- {
- syncer::ObjectIdSet ids;
- ids.insert(this->id1);
- ids.insert(this->id2);
- EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler1, ids));
- }
-
- {
- syncer::ObjectIdSet ids;
- ids.insert(this->id3);
- EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler2, ids));
- }
-
- // Don't register any IDs for handler3.
-
- {
- syncer::ObjectIdSet ids;
- ids.insert(this->id4);
- EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler4, ids));
- }
-
- invalidator->UnregisterInvalidationHandler(&handler4);
-
- this->delegate_.TriggerOnInvalidatorStateChange(
- syncer::INVALIDATIONS_ENABLED);
- EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler1.GetInvalidatorState());
- EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler2.GetInvalidatorState());
- EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler3.GetInvalidatorState());
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler4.GetInvalidatorState());
-
- {
- syncer::ObjectIdInvalidationMap invalidation_map;
- invalidation_map.Insert(syncer::Invalidation::Init(this->id1, 1, "1"));
- invalidation_map.Insert(syncer::Invalidation::Init(this->id2, 2, "2"));
- invalidation_map.Insert(syncer::Invalidation::Init(this->id3, 3, "3"));
- invalidation_map.Insert(syncer::Invalidation::Init(this->id4, 4, "4"));
- this->delegate_.TriggerOnIncomingInvalidation(invalidation_map);
-
- syncer::ObjectIdInvalidationMap expected_invalidations;
- expected_invalidations.Insert(
- syncer::Invalidation::Init(this->id1, 1, "1"));
- expected_invalidations.Insert(
- syncer::Invalidation::Init(this->id2, 2, "2"));
-
- EXPECT_EQ(1, handler1.GetInvalidationCount());
- EXPECT_THAT(expected_invalidations, Eq(handler1.GetLastInvalidationMap()));
-
- expected_invalidations = syncer::ObjectIdInvalidationMap();
- expected_invalidations.Insert(
- syncer::Invalidation::Init(this->id3, 3, "3"));
-
- EXPECT_EQ(1, handler2.GetInvalidationCount());
- EXPECT_THAT(expected_invalidations, Eq(handler2.GetLastInvalidationMap()));
-
- EXPECT_EQ(0, handler3.GetInvalidationCount());
- EXPECT_EQ(0, handler4.GetInvalidationCount());
- }
-
- this->delegate_.TriggerOnInvalidatorStateChange(
- syncer::TRANSIENT_INVALIDATION_ERROR);
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler1.GetInvalidatorState());
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler2.GetInvalidatorState());
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler3.GetInvalidatorState());
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler4.GetInvalidatorState());
-
- invalidator->UnregisterInvalidationHandler(&handler3);
- invalidator->UnregisterInvalidationHandler(&handler2);
- invalidator->UnregisterInvalidationHandler(&handler1);
-}
-
-// Multiple registrations by different handlers on the same object ID should
-// return false.
-TYPED_TEST_P(InvalidationServiceTest, MultipleRegistrations) {
- invalidation::InvalidationService* const invalidator =
- this->CreateAndInitializeInvalidationService();
-
- syncer::FakeInvalidationHandler handler1;
- syncer::FakeInvalidationHandler handler2;
-
- invalidator->RegisterInvalidationHandler(&handler1);
- invalidator->RegisterInvalidationHandler(&handler2);
-
- // Registering both handlers for the same ObjectId. First call should succeed,
- // second should fail.
- syncer::ObjectIdSet ids;
- ids.insert(this->id1);
- EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler1, ids));
- EXPECT_FALSE(invalidator->UpdateRegisteredInvalidationIds(&handler2, ids));
-
- invalidator->UnregisterInvalidationHandler(&handler2);
- invalidator->UnregisterInvalidationHandler(&handler1);
-}
-
-// Make sure that passing an empty set to UpdateRegisteredInvalidationIds clears
-// the corresponding entries for the handler.
-TYPED_TEST_P(InvalidationServiceTest, EmptySetUnregisters) {
- invalidation::InvalidationService* const invalidator =
- this->CreateAndInitializeInvalidationService();
-
- syncer::FakeInvalidationHandler handler1;
-
- // Control observer.
- syncer::FakeInvalidationHandler handler2;
-
- invalidator->RegisterInvalidationHandler(&handler1);
- invalidator->RegisterInvalidationHandler(&handler2);
-
- {
- syncer::ObjectIdSet ids;
- ids.insert(this->id1);
- ids.insert(this->id2);
- EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler1, ids));
- }
-
- {
- syncer::ObjectIdSet ids;
- ids.insert(this->id3);
- EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(&handler2, ids));
- }
-
- // Unregister the IDs for the first observer. It should not receive any
- // further invalidations.
- EXPECT_TRUE(invalidator->UpdateRegisteredInvalidationIds(
- &handler1, syncer::ObjectIdSet()));
-
- this->delegate_.TriggerOnInvalidatorStateChange(
- syncer::INVALIDATIONS_ENABLED);
- EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler1.GetInvalidatorState());
- EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler2.GetInvalidatorState());
-
- {
- syncer::ObjectIdInvalidationMap invalidation_map;
- invalidation_map.Insert(syncer::Invalidation::Init(this->id1, 1, "1"));
- invalidation_map.Insert(syncer::Invalidation::Init(this->id2, 2, "2"));
- invalidation_map.Insert(syncer::Invalidation::Init(this->id3, 3, "3"));
- this->delegate_.TriggerOnIncomingInvalidation(invalidation_map);
- EXPECT_EQ(0, handler1.GetInvalidationCount());
- EXPECT_EQ(1, handler2.GetInvalidationCount());
- }
-
- this->delegate_.TriggerOnInvalidatorStateChange(
- syncer::TRANSIENT_INVALIDATION_ERROR);
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler1.GetInvalidatorState());
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler2.GetInvalidatorState());
-
- invalidator->UnregisterInvalidationHandler(&handler2);
- invalidator->UnregisterInvalidationHandler(&handler1);
-}
-
-namespace internal {
-
-// A FakeInvalidationHandler that is "bound" to a specific
-// InvalidationService. This is for cross-referencing state information with
-// the bound InvalidationService.
-class BoundFakeInvalidationHandler : public syncer::FakeInvalidationHandler {
- public:
- explicit BoundFakeInvalidationHandler(
- const invalidation::InvalidationService& invalidator);
- ~BoundFakeInvalidationHandler() override;
-
- // Returns the last return value of GetInvalidatorState() on the
- // bound invalidator from the last time the invalidator state
- // changed.
- syncer::InvalidatorState GetLastRetrievedState() const;
-
- // InvalidationHandler implementation.
- void OnInvalidatorStateChange(syncer::InvalidatorState state) override;
-
- private:
- const invalidation::InvalidationService& invalidator_;
- syncer::InvalidatorState last_retrieved_state_;
-
- DISALLOW_COPY_AND_ASSIGN(BoundFakeInvalidationHandler);
-};
-
-} // namespace internal
-
-TYPED_TEST_P(InvalidationServiceTest, GetInvalidatorStateAlwaysCurrent) {
- invalidation::InvalidationService* const invalidator =
- this->CreateAndInitializeInvalidationService();
-
- internal::BoundFakeInvalidationHandler handler(*invalidator);
- invalidator->RegisterInvalidationHandler(&handler);
-
- this->delegate_.TriggerOnInvalidatorStateChange(
- syncer::INVALIDATIONS_ENABLED);
- EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler.GetInvalidatorState());
- EXPECT_EQ(syncer::INVALIDATIONS_ENABLED, handler.GetLastRetrievedState());
-
- this->delegate_.TriggerOnInvalidatorStateChange(
- syncer::TRANSIENT_INVALIDATION_ERROR);
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler.GetInvalidatorState());
- EXPECT_EQ(syncer::TRANSIENT_INVALIDATION_ERROR,
- handler.GetLastRetrievedState());
-
- invalidator->UnregisterInvalidationHandler(&handler);
-}
-
-REGISTER_TYPED_TEST_CASE_P(InvalidationServiceTest,
- Basic,
- MultipleHandlers,
- MultipleRegistrations,
- EmptySetUnregisters,
- GetInvalidatorStateAlwaysCurrent);
-
-#endif // COMPONENTS_INVALIDATION_INVALIDATION_SERVICE_TEST_TEMPLATE_H_

Powered by Google App Engine
This is Rietveld 408576698