Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Side by Side Diff: chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc

Issue 10826156: Plumb invalidations from Tango to the extensions code for the Push Messaging API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix gmock and maybe Android build Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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/extensions/api/push_messaging/push_messaging_invalidati on_handler.h"
6
7 #include "base/basictypes.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "chrome/browser/extensions/api/push_messaging/push_messaging_invalidati on_handler_observer.h"
10 #include "chrome/browser/sync/invalidation_service.h"
11 #include "google/cacheinvalidation/types.pb.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using ::testing::_;
16 using ::testing::NotNull;
17 using ::testing::SaveArg;
18 using ::testing::StrictMock;
19
20 namespace extensions {
21
22 namespace {
23
24 class MockInvalidationService : public InvalidationService {
25 public:
26 MockInvalidationService();
27 ~MockInvalidationService();
28 MOCK_METHOD2(UpdateRegisteredInvalidationIds,
29 void(syncer::SyncNotifierObserver*, const syncer::ObjectIdSet&));
30
31 private:
32 DISALLOW_COPY_AND_ASSIGN(MockInvalidationService);
33 };
34
35 MockInvalidationService::MockInvalidationService() {}
36 MockInvalidationService::~MockInvalidationService() {}
37
38 class MockInvalidationHandlerObserver
39 : public PushMessagingInvalidationHandlerObserver {
40 public:
41 MockInvalidationHandlerObserver();
42 ~MockInvalidationHandlerObserver();
43 MOCK_METHOD3(OnMessage,
44 void(const std::string&, int, const std::string&));
45
46 private:
47 DISALLOW_COPY_AND_ASSIGN(MockInvalidationHandlerObserver);
48 };
49
50 MockInvalidationHandlerObserver::MockInvalidationHandlerObserver() {}
51 MockInvalidationHandlerObserver::~MockInvalidationHandlerObserver() {}
52
53 class PushMessagingInvalidationHandlerTest : public ::testing::Test {
54 protected:
55 virtual void SetUp() OVERRIDE {
56 syncer::SyncNotifierObserver* handler = NULL;
57 EXPECT_CALL(service_,
58 UpdateRegisteredInvalidationIds(NotNull(),
59 syncer::ObjectIdSet()))
60 .WillOnce(SaveArg<0>(&handler));
61 handler_.reset(new PushMessagingInvalidationHandler(
62 &service_, &observer_, std::set<std::string>()));
63 ASSERT_EQ(handler_.get(), handler);
64 }
65 virtual void TearDown() OVERRIDE {
66 EXPECT_CALL(service_,
67 UpdateRegisteredInvalidationIds(handler_.get(),
68 syncer::ObjectIdSet()));
69 handler_.reset();
70 }
71 StrictMock<MockInvalidationService> service_;
72 StrictMock<MockInvalidationHandlerObserver> observer_;
73 scoped_ptr<PushMessagingInvalidationHandler> handler_;
74 };
75
76 // Tests that we correctly register any extensions passed in when constructed.
77 TEST_F(PushMessagingInvalidationHandlerTest, Construction) {
78 TearDown();
79
80 std::set<std::string> extension_ids;
81 extension_ids.insert("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
82 extension_ids.insert("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
83 syncer::ObjectIdSet expected_ids;
84 expected_ids.insert(invalidation::ObjectId(
85 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
86 "UPMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"));
87 expected_ids.insert(invalidation::ObjectId(
88 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
89 "UPMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"));
90 expected_ids.insert(invalidation::ObjectId(
91 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
92 "UPMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"));
93 expected_ids.insert(invalidation::ObjectId(
94 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
95 "UPMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"));
96 expected_ids.insert(invalidation::ObjectId(
97 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
98 "UPMbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0"));
99 expected_ids.insert(invalidation::ObjectId(
100 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
101 "UPMbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb1"));
102 expected_ids.insert(invalidation::ObjectId(
103 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
104 "UPMbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb2"));
105 expected_ids.insert(invalidation::ObjectId(
106 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
107 "UPMbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb3"));
108
109 EXPECT_CALL(service_,
110 UpdateRegisteredInvalidationIds(NotNull(), expected_ids));
111 handler_.reset(new PushMessagingInvalidationHandler(
112 &service_, &observer_, extension_ids));
113 }
114
115 TEST_F(PushMessagingInvalidationHandlerTest, RegisterUnregisterExtension) {
116 syncer::ObjectIdSet expected_ids;
117 expected_ids.insert(invalidation::ObjectId(
118 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
119 "UPMcccccccccccccccccccccccccccccccc0"));
120 expected_ids.insert(invalidation::ObjectId(
121 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
122 "UPMcccccccccccccccccccccccccccccccc1"));
123 expected_ids.insert(invalidation::ObjectId(
124 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
125 "UPMcccccccccccccccccccccccccccccccc2"));
126 expected_ids.insert(invalidation::ObjectId(
127 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
128 "UPMcccccccccccccccccccccccccccccccc3"));
129 EXPECT_CALL(service_,
130 UpdateRegisteredInvalidationIds(handler_.get(), expected_ids));
131 handler_->RegisterExtension("cccccccccccccccccccccccccccccccc");
132 EXPECT_CALL(service_,
133 UpdateRegisteredInvalidationIds(handler_.get(),
134 syncer::ObjectIdSet()));
135 handler_->UnregisterExtension("cccccccccccccccccccccccccccccccc");
136 }
137
138 TEST_F(PushMessagingInvalidationHandlerTest, Dispatch) {
139 syncer::ObjectIdSet ids;
140 ids.insert(invalidation::ObjectId(
141 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
142 "UPMdddddddddddddddddddddddddddddddd0"));
143 ids.insert(invalidation::ObjectId(
144 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
145 "UPMdddddddddddddddddddddddddddddddd3"));
146 EXPECT_CALL(observer_,
147 OnMessage("dddddddddddddddddddddddddddddddd", 0, "payload"));
148 EXPECT_CALL(observer_,
149 OnMessage("dddddddddddddddddddddddddddddddd", 3, "payload"));
150 handler_->OnIncomingNotification(ObjectIdSetToPayloadMap(ids, "payload"),
151 syncer::REMOTE_NOTIFICATION);
152 }
153
154 // Tests that malformed object IDs don't trigger spurious callbacks.
155 TEST_F(PushMessagingInvalidationHandlerTest, DispatchInvalidObjectIds) {
156 syncer::ObjectIdSet ids;
157 // Incorrect source.
158 ids.insert(invalidation::ObjectId(
159 ipc::invalidation::ObjectSource::TEST,
160 "UPMdddddddddddddddddddddddddddddddd3"));
161 // Incorrect length.
162 ids.insert(invalidation::ObjectId(
163 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
164 "UPMdddddddddddddddddddddddddddddddd34"));
165 // Incorrect format type.
166 ids.insert(invalidation::ObjectId(
167 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
168 "VPMdddddddddddddddddddddddddddddddd3"));
169 // Incorrect project ID.
170 ids.insert(invalidation::ObjectId(
171 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
172 "UPCdddddddddddddddddddddddddddddddd3"));
173 // Non-numeric subchannel.
174 ids.insert(invalidation::ObjectId(
175 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
176 "UPCddddddddddddddddddddddddddddddddz"));
177 // Subchannel out of range.
178 ids.insert(invalidation::ObjectId(
179 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
180 "UPCdddddddddddddddddddddddddddddddd4"));
181 handler_->OnIncomingNotification(ObjectIdSetToPayloadMap(ids, "payload"),
182 syncer::REMOTE_NOTIFICATION);
183 }
184
185 } // namespace
186
187 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698