Home | History | Annotate | Download | only in notifier
      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:
     28   NonBlockingInvalidationNotifierTest() {}
     29 
     30  protected:
     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 
     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 
     60 TEST_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 (at) 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