1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/sync/notifier/non_blocking_invalidation_notifier.h" 6 7 #include "base/memory/ref_counted.h" 8 #include "base/memory/scoped_ptr.h" 9 #include "base/message_loop.h" 10 #include "chrome/browser/sync/notifier/mock_sync_notifier_observer.h" 11 #include "chrome/browser/sync/syncable/model_type.h" 12 #include "chrome/browser/sync/syncable/model_type_payload_map.h" 13 #include "chrome/test/test_url_request_context_getter.h" 14 #include "content/browser/browser_thread.h" 15 #include "jingle/notifier/base/fake_base_task.h" 16 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gtest/include/gtest/gtest.h" 18 19 namespace sync_notifier { 20 21 namespace { 22 23 using ::testing::InSequence; 24 using ::testing::StrictMock; 25 26 class NonBlockingInvalidationNotifierTest : public testing::Test { 27 public: NonBlockingInvalidationNotifierTest()28 NonBlockingInvalidationNotifierTest() {} 29 30 protected: SetUp()31 virtual void SetUp() { 32 request_context_getter_ = new TestURLRequestContextGetter; 33 notifier::NotifierOptions notifier_options; 34 notifier_options.request_context_getter = request_context_getter_; 35 invalidation_notifier_.reset( 36 new NonBlockingInvalidationNotifier(notifier_options, 37 "fake_client_info")); 38 invalidation_notifier_->AddObserver(&mock_observer_); 39 } 40 TearDown()41 virtual void TearDown() { 42 invalidation_notifier_->RemoveObserver(&mock_observer_); 43 invalidation_notifier_.reset(); 44 { 45 // The request context getter gets deleted on the I/O thread. To prevent a 46 // leak supply one here. 47 BrowserThread io_thread(BrowserThread::IO, MessageLoop::current()); 48 request_context_getter_ = NULL; 49 } 50 MessageLoop::current()->RunAllPending(); 51 } 52 53 MessageLoop message_loop_; 54 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; 55 scoped_ptr<NonBlockingInvalidationNotifier> invalidation_notifier_; 56 StrictMock<MockSyncNotifierObserver> mock_observer_; 57 notifier::FakeBaseTask fake_base_task_; 58 }; 59 TEST_F(NonBlockingInvalidationNotifierTest,Basic)60TEST_F(NonBlockingInvalidationNotifierTest, Basic) { 61 syncable::ModelTypeSet types; 62 types.insert(syncable::BOOKMARKS); 63 types.insert(syncable::AUTOFILL); 64 65 invalidation_notifier_->SetState("fake_state"); 66 invalidation_notifier_->UpdateCredentials("foo@bar.com", "fake_token"); 67 invalidation_notifier_->UpdateEnabledTypes(types); 68 } 69 70 // TODO(akalin): Add synchronous operations for testing to 71 // NonBlockingInvalidationNotifierTest and use that to test it. 72 73 } // namespace 74 75 } // namespace sync_notifier 76