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
19namespace sync_notifier {
20
21namespace {
22
23using ::testing::InSequence;
24using ::testing::StrictMock;
25
26class 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
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