Chromium Code Reviews| Index: chrome/browser/invalidation/ticl_invalidation_service_unittest.cc |
| diff --git a/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc b/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc |
| index 44f33b05bbb709c9ca4a0cfae947e5af5e09b147..babd1e62d09ac0e1a40087ace56791d916b5b795 100644 |
| --- a/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc |
| +++ b/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc |
| @@ -4,33 +4,92 @@ |
| #include "chrome/browser/invalidation/ticl_invalidation_service.h" |
| -#include "base/prefs/pref_service.h" |
| -#include "chrome/browser/invalidation/invalidation_service_factory.h" |
| +#include "base/bind.h" |
| +#include "base/files/file_path.h" |
| +#include "base/memory/weak_ptr.h" |
| +#include "chrome/browser/invalidation/gcm_invalidation_bridge.h" |
| #include "chrome/browser/invalidation/invalidation_service_test_template.h" |
| -#include "chrome/browser/invalidation/invalidator_storage.h" |
| -#include "chrome/browser/services/gcm/gcm_profile_service.h" |
| -#include "chrome/browser/services/gcm/gcm_profile_service_factory.h" |
| #include "chrome/browser/services/gcm/gcm_service.h" |
| -#include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
| -#include "chrome/browser/signin/fake_signin_manager.h" |
| -#include "chrome/browser/signin/profile_identity_provider.h" |
| -#include "chrome/browser/signin/signin_manager_factory.h" |
| -#include "chrome/common/pref_names.h" |
| -#include "chrome/test/base/testing_profile.h" |
| -#include "components/signin/core/browser/signin_manager.h" |
| -#include "content/public/test/test_browser_thread_bundle.h" |
| +#include "google_apis/gaia/fake_identity_provider.h" |
| +#include "google_apis/gaia/fake_oauth2_token_service.h" |
| #include "net/url_request/url_request_context_getter.h" |
| -#include "sync/notifier/fake_invalidation_handler.h" |
| +#include "sync/notifier/fake_invalidation_state_tracker.h" |
| #include "sync/notifier/fake_invalidator.h" |
| #include "sync/notifier/invalidation_state_tracker.h" |
| -#include "sync/notifier/invalidation_util.h" |
| +#include "sync/notifier/invalidator.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| namespace invalidation { |
| +namespace { |
| + |
| +class FakeTiclInvalidationServiceSettingsProvider |
| + : public TiclInvalidationServiceSettingsProvider { |
| + public: |
| + FakeTiclInvalidationServiceSettingsProvider(); |
| + virtual ~FakeTiclInvalidationServiceSettingsProvider(); |
| + |
| + // TiclInvalidationServiceSettingsProvider: |
| + bool UseGCMChannel() const OVERRIDE; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(FakeTiclInvalidationServiceSettingsProvider); |
| +}; |
| + |
| +class FakeGCMService : public gcm::GCMService { |
| + public: |
| + explicit FakeGCMService(OAuth2TokenService* token_service); |
| + virtual ~FakeGCMService(); |
| + |
| + protected: |
| + // gcm::GCMService: |
| + virtual bool ShouldStartAutomatically() const OVERRIDE; |
| + virtual base::FilePath GetStorePath() const OVERRIDE; |
| + virtual scoped_refptr<net::URLRequestContextGetter> |
| + GetURLRequestContextGetter() const OVERRIDE; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(FakeGCMService); |
| +}; |
| + |
| +FakeTiclInvalidationServiceSettingsProvider:: |
|
dcheng
2014/04/24 18:26:54
These class names are really long!
Technically, Ti
bartfab (slow)
2014/04/24 19:14:48
Done.
|
| +FakeTiclInvalidationServiceSettingsProvider() { |
| +} |
| + |
| +FakeTiclInvalidationServiceSettingsProvider:: |
| +~FakeTiclInvalidationServiceSettingsProvider() { |
| +} |
| + |
| +bool FakeTiclInvalidationServiceSettingsProvider::UseGCMChannel() const { |
| + return false; |
| +} |
| + |
| +FakeGCMService::FakeGCMService(OAuth2TokenService* token_service) |
| + : GCMService(scoped_ptr<IdentityProvider>( |
| + new FakeIdentityProvider(token_service))) { |
| +} |
| + |
| +FakeGCMService::~FakeGCMService() { |
| +} |
| + |
| +bool FakeGCMService::ShouldStartAutomatically() const { |
| + return false; |
| +} |
| + |
| +base::FilePath FakeGCMService::GetStorePath() const { |
| + return base::FilePath(); |
| +} |
| + |
| +scoped_refptr<net::URLRequestContextGetter> |
| +FakeGCMService::GetURLRequestContextGetter() const { |
| + return NULL; |
| +} |
| + |
| +} // namespace |
| + |
| class TiclInvalidationServiceTestDelegate { |
| public: |
| - TiclInvalidationServiceTestDelegate() { } |
| + TiclInvalidationServiceTestDelegate() {} |
| ~TiclInvalidationServiceTestDelegate() { |
| DestroyInvalidationService(); |
| @@ -42,23 +101,20 @@ class TiclInvalidationServiceTestDelegate { |
| } |
| void CreateUninitializedInvalidationService() { |
| - profile_.reset(new TestingProfile()); |
| - token_service_.reset(new FakeProfileOAuth2TokenService); |
| + gcm_service_.reset(new FakeGCMService(&token_service_)); |
| invalidation_service_.reset(new TiclInvalidationService( |
| - scoped_ptr<IdentityProvider>(new ProfileIdentityProvider( |
| - SigninManagerFactory::GetForProfile(profile_.get()), |
| - token_service_.get(), |
| - NULL)), |
| - gcm::GCMProfileServiceFactory::GetForProfile(profile_.get()), |
| - profile_->GetRequestContext(), |
| - profile_.get())); |
| + scoped_ptr<IdentityProvider>(new FakeIdentityProvider(&token_service_)), |
| + scoped_ptr<TiclInvalidationServiceSettingsProvider>( |
| + new FakeTiclInvalidationServiceSettingsProvider), |
| + gcm_service_.get(), |
| + NULL)); |
| } |
| void InitializeInvalidationService() { |
| fake_invalidator_ = new syncer::FakeInvalidator(); |
| invalidation_service_->InitForTest( |
| scoped_ptr<syncer::InvalidationStateTracker>( |
| - new InvalidatorStorage(profile_->GetPrefs())), |
| + new syncer::FakeInvalidationStateTracker), |
| fake_invalidator_); |
| } |
| @@ -79,9 +135,10 @@ class TiclInvalidationServiceTestDelegate { |
| fake_invalidator_->EmitOnIncomingInvalidation(invalidation_map); |
| } |
| - syncer::FakeInvalidator* fake_invalidator_; // owned by the service. |
| - scoped_ptr<TestingProfile> profile_; |
| - scoped_ptr<FakeProfileOAuth2TokenService> token_service_; |
| + FakeOAuth2TokenService token_service_; |
| + scoped_ptr<gcm::GCMService> gcm_service_; |
| + syncer::FakeInvalidator* fake_invalidator_; // Owned by the service. |
| + |
| scoped_ptr<TiclInvalidationService> invalidation_service_; |
| }; |
| @@ -89,93 +146,12 @@ INSTANTIATE_TYPED_TEST_CASE_P( |
| TiclInvalidationServiceTest, InvalidationServiceTest, |
| TiclInvalidationServiceTestDelegate); |
| -class TiclInvalidationServiceChannelTest : public ::testing::Test { |
| - public: |
| - TiclInvalidationServiceChannelTest() {} |
| - virtual ~TiclInvalidationServiceChannelTest() {} |
| - |
| - virtual void SetUp() OVERRIDE { |
| - TestingProfile::Builder builder; |
| - builder.AddTestingFactory(SigninManagerFactory::GetInstance(), |
| - FakeSigninManagerBase::Build); |
| - profile_ = builder.Build(); |
| - fake_signin_manager_ = static_cast<SigninManagerBase*>( |
| - SigninManagerFactory::GetForProfile(profile_.get())); |
| - token_service_.reset(new FakeProfileOAuth2TokenService); |
| - |
| - scoped_ptr<IdentityProvider> identity_provider(new ProfileIdentityProvider( |
| - fake_signin_manager_, token_service_.get(), NULL)); |
| - invalidation_service_.reset(new TiclInvalidationService( |
| - identity_provider.Pass(), |
| - gcm::GCMProfileServiceFactory::GetForProfile(profile_.get()), |
| - profile_->GetRequestContext(), |
| - profile_.get())); |
| - invalidation_service_->Init(scoped_ptr<syncer::InvalidationStateTracker>( |
| - new InvalidatorStorage(profile_->GetPrefs()))); |
| - } |
| - |
| - virtual void TearDown() OVERRIDE { |
| - invalidation_service_->Shutdown(); |
| - } |
| - |
| - TiclInvalidationService::InvalidationNetworkChannel GetNetworkChannel() { |
| - return invalidation_service_->network_channel_type_; |
| - } |
| - |
| - protected: |
| - content::TestBrowserThreadBundle thread_bundle_; |
| - scoped_ptr<TestingProfile> profile_; |
| - SigninManagerBase* fake_signin_manager_; |
| - scoped_ptr<FakeProfileOAuth2TokenService> token_service_; |
| - scoped_ptr<TiclInvalidationService> invalidation_service_; |
| -}; |
| - |
| -TEST_F(TiclInvalidationServiceChannelTest, ChannelSelectionTest) { |
| - EXPECT_EQ(TiclInvalidationService::PUSH_CLIENT_CHANNEL, GetNetworkChannel()); |
| - |
| - // If stars allign use GCM channel. |
| - profile_->GetPrefs()->SetBoolean(prefs::kGCMChannelEnabled, true); |
| - profile_->GetPrefs()->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, |
| - true); |
| - EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); |
| - |
| - // If Invalidation channel setting is not set or says false fall back to push |
| - // channel. |
| - profile_->GetPrefs()->SetBoolean(prefs::kGCMChannelEnabled, true); |
| - |
| - profile_->GetPrefs()->ClearPref(prefs::kInvalidationServiceUseGCMChannel); |
| - EXPECT_EQ(TiclInvalidationService::PUSH_CLIENT_CHANNEL, GetNetworkChannel()); |
| - |
| - profile_->GetPrefs()->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, |
| - false); |
| - EXPECT_EQ(TiclInvalidationService::PUSH_CLIENT_CHANNEL, GetNetworkChannel()); |
| - |
| - // If invalidation channel setting says use GCM but GCM is not ALWAYS_ENABLED |
| - // then fall back to push channel. |
| - profile_->GetPrefs()->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, |
| - false); |
| - |
| - profile_->GetPrefs()->ClearPref(prefs::kGCMChannelEnabled); |
| - EXPECT_EQ(TiclInvalidationService::PUSH_CLIENT_CHANNEL, GetNetworkChannel()); |
| - |
| - profile_->GetPrefs()->SetBoolean(prefs::kGCMChannelEnabled, false); |
| - EXPECT_EQ(TiclInvalidationService::PUSH_CLIENT_CHANNEL, GetNetworkChannel()); |
| - |
| - // If first invalidation setting gets enabled and after that gcm setting gets |
| - // enabled then should still switch to GCM channel. |
| - profile_->GetPrefs()->SetBoolean(prefs::kInvalidationServiceUseGCMChannel, |
| - true); |
| - profile_->GetPrefs()->SetBoolean(prefs::kGCMChannelEnabled, true); |
| - EXPECT_EQ(TiclInvalidationService::GCM_NETWORK_CHANNEL, GetNetworkChannel()); |
| -} |
| - |
| namespace internal { |
| class FakeCallbackContainer { |
| public: |
| - FakeCallbackContainer() |
| - : called_(false), |
| - weak_ptr_factory_(this) { } |
| + FakeCallbackContainer() : called_(false), |
| + weak_ptr_factory_(this) {} |
| void FakeCallback(const base::DictionaryValue& value) { |
| called_ = true; |
| @@ -184,13 +160,12 @@ class FakeCallbackContainer { |
| bool called_; |
| base::WeakPtrFactory<FakeCallbackContainer> weak_ptr_factory_; |
| }; |
| + |
| } // namespace internal |
| // Test that requesting for detailed status doesn't crash even if the |
| // underlying invalidator is not initialized. |
| TEST(TiclInvalidationServiceLoggingTest, DetailedStatusCallbacksWork) { |
| - content::TestBrowserThreadBundle thread_bundle; |
| - |
| scoped_ptr<TiclInvalidationServiceTestDelegate> delegate ( |
| new TiclInvalidationServiceTestDelegate()); |
| @@ -200,15 +175,16 @@ TEST(TiclInvalidationServiceLoggingTest, DetailedStatusCallbacksWork) { |
| internal::FakeCallbackContainer fake_container; |
| invalidator->RequestDetailedStatus( |
| - base::Bind(&internal::FakeCallbackContainer::FakeCallback, |
| - fake_container.weak_ptr_factory_.GetWeakPtr())); |
| + base::Bind(&internal::FakeCallbackContainer::FakeCallback, |
| + fake_container.weak_ptr_factory_.GetWeakPtr())); |
| EXPECT_FALSE(fake_container.called_); |
| delegate->InitializeInvalidationService(); |
| invalidator->RequestDetailedStatus( |
| - base::Bind(&internal::FakeCallbackContainer::FakeCallback, |
| - fake_container.weak_ptr_factory_.GetWeakPtr())); |
| + base::Bind(&internal::FakeCallbackContainer::FakeCallback, |
| + fake_container.weak_ptr_factory_.GetWeakPtr())); |
| EXPECT_TRUE(fake_container.called_); |
| } |
| + |
| } // namespace invalidation |