1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)// found in the LICENSE file. 4a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/invalidation/ticl_invalidation_service.h" 6a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/bind.h" 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/files/file_path.h" 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/weak_ptr.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/gcm_driver/fake_gcm_driver.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/gcm_driver/gcm_driver.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/invalidation/fake_invalidation_state_tracker.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/invalidation/fake_invalidator.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/invalidation/gcm_invalidation_bridge.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/invalidation/invalidation_service_test_template.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/invalidation/invalidation_state_tracker.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/invalidation/invalidator.h" 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "google_apis/gaia/fake_identity_provider.h" 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "google_apis/gaia/fake_oauth2_token_service.h" 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "net/url_request/url_request_context_getter.h" 21a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 22a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 23a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)namespace invalidation { 24a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace { 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass FakeTiclSettingsProvider : public TiclSettingsProvider { 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public: 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FakeTiclSettingsProvider(); 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~FakeTiclSettingsProvider(); 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // TiclSettingsProvider: 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool UseGCMChannel() const OVERRIDE; 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(FakeTiclSettingsProvider); 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuFakeTiclSettingsProvider::FakeTiclSettingsProvider() { 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuFakeTiclSettingsProvider::~FakeTiclSettingsProvider() { 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool FakeTiclSettingsProvider::UseGCMChannel() const { 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return false; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 51a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)class TiclInvalidationServiceTestDelegate { 52a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) public: 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TiclInvalidationServiceTestDelegate() {} 54a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 55a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ~TiclInvalidationServiceTestDelegate() { 56a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 57a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void CreateInvalidationService() { 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch CreateUninitializedInvalidationService(); 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch InitializeInvalidationService(); 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void CreateUninitializedInvalidationService() { 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gcm_driver_.reset(new gcm::FakeGCMDriver()); 6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) invalidation_service_.reset(new TiclInvalidationService( 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "TestUserAgent", 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<IdentityProvider>(new FakeIdentityProvider(&token_service_)), 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<TiclSettingsProvider>(new FakeTiclSettingsProvider), 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gcm_driver_.get(), 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NULL)); 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void InitializeInvalidationService() { 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch fake_invalidator_ = new syncer::FakeInvalidator(); 750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch invalidation_service_->InitForTest( 760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<syncer::InvalidationStateTracker>( 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new syncer::FakeInvalidationStateTracker), 780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch fake_invalidator_); 79a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 80a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch InvalidationService* GetInvalidationService() { 82a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return invalidation_service_.get(); 83a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 84a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void DestroyInvalidationService() { 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) invalidation_service_.reset(); 87a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 88a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 89a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) void TriggerOnInvalidatorStateChange(syncer::InvalidatorState state) { 90a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) fake_invalidator_->EmitOnInvalidatorStateChange(state); 91a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 92a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 93a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) void TriggerOnIncomingInvalidation( 94a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const syncer::ObjectIdInvalidationMap& invalidation_map) { 95a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) fake_invalidator_->EmitOnIncomingInvalidation(invalidation_map); 96a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 97a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FakeOAuth2TokenService token_service_; 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<gcm::GCMDriver> gcm_driver_; 1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::FakeInvalidator* fake_invalidator_; // Owned by the service. 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<TiclInvalidationService> invalidation_service_; 103a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)}; 104a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 105a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)INSTANTIATE_TYPED_TEST_CASE_P( 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TiclInvalidationServiceTest, InvalidationServiceTest, 107a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) TiclInvalidationServiceTestDelegate); 108a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace internal { 110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass FakeCallbackContainer { 112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public: 1135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FakeCallbackContainer() : called_(false), 1145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu weak_ptr_factory_(this) {} 115c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void FakeCallback(const base::DictionaryValue& value) { 117c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch called_ = true; 118c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 119c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool called_; 121c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::WeakPtrFactory<FakeCallbackContainer> weak_ptr_factory_; 122c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 124c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace internal 125c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 126c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Test that requesting for detailed status doesn't crash even if the 127c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// underlying invalidator is not initialized. 128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST(TiclInvalidationServiceLoggingTest, DetailedStatusCallbacksWork) { 129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<TiclInvalidationServiceTestDelegate> delegate ( 130c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new TiclInvalidationServiceTestDelegate()); 131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delegate->CreateUninitializedInvalidationService(); 133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch invalidation::InvalidationService* const invalidator = 134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delegate->GetInvalidationService(); 135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch internal::FakeCallbackContainer fake_container; 137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch invalidator->RequestDetailedStatus( 1385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::Bind(&internal::FakeCallbackContainer::FakeCallback, 1395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu fake_container.weak_ptr_factory_.GetWeakPtr())); 140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(fake_container.called_); 141c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delegate->InitializeInvalidationService(); 143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch invalidator->RequestDetailedStatus( 1455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::Bind(&internal::FakeCallbackContainer::FakeCallback, 1465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu fake_container.weak_ptr_factory_.GetWeakPtr())); 147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(fake_container.called_); 148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 150a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} // namespace invalidation 151