• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)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@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