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

Side by Side Diff: sync/notifier/p2p_notifier_unittest.cc

Issue 10702074: Refactor sync-specific parts out of SyncNotifier/SyncNotifierObserver (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge Created 8 years, 5 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sync/notifier/p2p_notifier.h" 5 #include "sync/notifier/p2p_notifier.h"
6 6
7 #include <cstddef> 7 #include <cstddef>
8 8
9 #include "jingle/notifier/listener/fake_push_client.h" 9 #include "jingle/notifier/listener/fake_push_client.h"
10 #include "sync/internal_api/public/base/model_type.h" 10 #include "sync/internal_api/public/base/model_type.h"
11 #include "sync/internal_api/public/base/model_type_payload_map.h"
11 #include "sync/notifier/mock_sync_notifier_observer.h" 12 #include "sync/notifier/mock_sync_notifier_observer.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 namespace syncer { 15 namespace syncer {
15 16
16 namespace { 17 namespace {
17 18
18 using ::testing::_; 19 using ::testing::_;
19 using ::testing::Mock; 20 using ::testing::Mock;
21 using ::testing::Return;
20 using ::testing::StrictMock; 22 using ::testing::StrictMock;
21 23
22 class P2PNotifierTest : public testing::Test { 24 class P2PNotifierTest : public testing::Test {
23 protected: 25 protected:
24 P2PNotifierTest() 26 P2PNotifierTest()
25 : fake_push_client_(new notifier::FakePushClient()), 27 : fake_push_client_(new notifier::FakePushClient()),
26 p2p_notifier_( 28 p2p_notifier_(
27 scoped_ptr<notifier::PushClient>(fake_push_client_), 29 scoped_ptr<notifier::PushClient>(fake_push_client_),
28 NOTIFY_OTHERS), 30 NOTIFY_OTHERS),
29 next_sent_notification_to_reflect_(0) { 31 next_sent_notification_to_reflect_(0) {
30 p2p_notifier_.AddObserver(&mock_observer_); 32 p2p_notifier_.AddHandler(&mock_observer_);
31 } 33 }
32 34
33 virtual ~P2PNotifierTest() { 35 virtual ~P2PNotifierTest() {
34 p2p_notifier_.RemoveObserver(&mock_observer_); 36 p2p_notifier_.RemoveHandler(&mock_observer_);
35 } 37 }
36 38
37 syncer::ModelTypePayloadMap MakePayloadMap(syncer::ModelTypeSet types) { 39 syncer::ModelTypePayloadMap MakePayloadMap(syncer::ModelTypeSet types) {
38 return syncer::ModelTypePayloadMapFromEnumSet(types, ""); 40 return syncer::ModelTypePayloadMapFromEnumSet(types, "");
39 } 41 }
40 42
41 // Simulate receiving all the notifications we sent out since last 43 // Simulate receiving all the notifications we sent out since last
42 // time this was called. 44 // time this was called.
43 void ReflectSentNotifications() { 45 void ReflectSentNotifications() {
44 const std::vector<notifier::Notification>& sent_notifications = 46 const std::vector<notifier::Notification>& sent_notifications =
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 EXPECT_TRUE(notification_data.Equals(notification_data_parsed)); 137 EXPECT_TRUE(notification_data.Equals(notification_data_parsed));
136 } 138 }
137 139
138 // Set up the P2PNotifier, simulate a successful connection, and send 140 // Set up the P2PNotifier, simulate a successful connection, and send
139 // a notification with the default target (NOTIFY_OTHERS). The 141 // a notification with the default target (NOTIFY_OTHERS). The
140 // observer should receive only a notification from the call to 142 // observer should receive only a notification from the call to
141 // UpdateEnabledTypes(). 143 // UpdateEnabledTypes().
142 TEST_F(P2PNotifierTest, NotificationsBasic) { 144 TEST_F(P2PNotifierTest, NotificationsBasic) {
143 syncer::ModelTypeSet enabled_types(syncer::BOOKMARKS, syncer::PREFERENCES); 145 syncer::ModelTypeSet enabled_types(syncer::BOOKMARKS, syncer::PREFERENCES);
144 146
147 EXPECT_CALL(mock_observer_, GetHandledIds())
148 .WillOnce(Return(ModelTypeSetToObjectIdSet(enabled_types)));
149 p2p_notifier_.ReloadHandlers();
150
145 EXPECT_CALL(mock_observer_, OnNotificationsEnabled()); 151 EXPECT_CALL(mock_observer_, OnNotificationsEnabled());
146 EXPECT_CALL(mock_observer_, 152 EXPECT_CALL(mock_observer_, OnIncomingNotification(
147 OnIncomingNotification(MakePayloadMap(enabled_types), 153 ModelTypePayloadMapToObjectIdPayloadMap(MakePayloadMap(enabled_types)),
148 REMOTE_NOTIFICATION)); 154 REMOTE_NOTIFICATION));
149 155
150 p2p_notifier_.SetUniqueId("sender"); 156 p2p_notifier_.SetUniqueId("sender");
151 157
152 const char kEmail[] = "foo@bar.com"; 158 const char kEmail[] = "foo@bar.com";
153 const char kToken[] = "token"; 159 const char kToken[] = "token";
154 p2p_notifier_.UpdateCredentials(kEmail, kToken); 160 p2p_notifier_.UpdateCredentials(kEmail, kToken);
155 { 161 {
156 notifier::Subscription expected_subscription; 162 notifier::Subscription expected_subscription;
157 expected_subscription.channel = kSyncP2PNotificationChannel; 163 expected_subscription.channel = kSyncP2PNotificationChannel;
158 expected_subscription.from = kEmail; 164 expected_subscription.from = kEmail;
159 EXPECT_TRUE(notifier::SubscriptionListsEqual( 165 EXPECT_TRUE(notifier::SubscriptionListsEqual(
160 fake_push_client_->subscriptions(), 166 fake_push_client_->subscriptions(),
161 notifier::SubscriptionList(1, expected_subscription))); 167 notifier::SubscriptionList(1, expected_subscription)));
162 } 168 }
163 EXPECT_EQ(kEmail, fake_push_client_->email()); 169 EXPECT_EQ(kEmail, fake_push_client_->email());
164 EXPECT_EQ(kToken, fake_push_client_->token()); 170 EXPECT_EQ(kToken, fake_push_client_->token());
165 171
166 p2p_notifier_.UpdateEnabledTypes(enabled_types);
167
168 ReflectSentNotifications(); 172 ReflectSentNotifications();
169 fake_push_client_->EnableNotifications(); 173 fake_push_client_->EnableNotifications();
170 174
171 // Sent with target NOTIFY_OTHERS so should not be propagated to 175 // Sent with target NOTIFY_OTHERS so should not be propagated to
172 // |mock_observer_|. 176 // |mock_observer_|.
173 { 177 {
174 syncer::ModelTypeSet changed_types(syncer::THEMES, syncer::APPS); 178 syncer::ModelTypeSet changed_types(syncer::THEMES, syncer::APPS);
175 p2p_notifier_.SendNotification(changed_types); 179 p2p_notifier_.SendNotification(changed_types);
176 } 180 }
177 181
178 ReflectSentNotifications(); 182 ReflectSentNotifications();
179 } 183 }
180 184
181 // Set up the P2PNotifier and send out notifications with various 185 // Set up the P2PNotifier and send out notifications with various
182 // target settings. The notifications received by the observer should 186 // target settings. The notifications received by the observer should
183 // be consistent with the target settings. 187 // be consistent with the target settings.
184 TEST_F(P2PNotifierTest, SendNotificationData) { 188 TEST_F(P2PNotifierTest, SendNotificationData) {
185 syncer::ModelTypeSet enabled_types(syncer::BOOKMARKS, syncer::PREFERENCES); 189 syncer::ModelTypeSet enabled_types(syncer::BOOKMARKS, syncer::PREFERENCES);
186 190
187 syncer::ModelTypeSet changed_types(syncer::THEMES, syncer::APPS); 191 EXPECT_CALL(mock_observer_, GetHandledIds())
192 .WillOnce(Return(ModelTypeSetToObjectIdSet(enabled_types)));
193 p2p_notifier_.ReloadHandlers();
188 194
189 const syncer::ModelTypePayloadMap& changed_payload_map = 195 syncer::ModelTypeSet changed_types(syncer::BOOKMARKS, syncer::APPS);
190 MakePayloadMap(changed_types); 196 syncer::ModelTypeSet expected_changed_types(syncer::BOOKMARKS);
197
198 const syncer::ModelTypePayloadMap& expected_changed_payload_map =
199 MakePayloadMap(expected_changed_types);
191 200
192 EXPECT_CALL(mock_observer_, OnNotificationsEnabled()); 201 EXPECT_CALL(mock_observer_, OnNotificationsEnabled());
193 EXPECT_CALL(mock_observer_, 202 EXPECT_CALL(mock_observer_,
194 OnIncomingNotification(MakePayloadMap(enabled_types), 203 OnIncomingNotification(
195 REMOTE_NOTIFICATION)); 204 ModelTypePayloadMapToObjectIdPayloadMap(
205 MakePayloadMap(enabled_types)),
206 REMOTE_NOTIFICATION));
196 207
197 p2p_notifier_.SetUniqueId("sender"); 208 p2p_notifier_.SetUniqueId("sender");
198 p2p_notifier_.UpdateCredentials("foo@bar.com", "fake_token"); 209 p2p_notifier_.UpdateCredentials("foo@bar.com", "fake_token");
199 p2p_notifier_.UpdateEnabledTypes(enabled_types);
200 210
201 ReflectSentNotifications(); 211 ReflectSentNotifications();
202 fake_push_client_->EnableNotifications(); 212 fake_push_client_->EnableNotifications();
203 213
204 ReflectSentNotifications(); 214 ReflectSentNotifications();
205 215
206 // Should be dropped. 216 // Should be dropped.
207 Mock::VerifyAndClearExpectations(&mock_observer_); 217 Mock::VerifyAndClearExpectations(&mock_observer_);
208 p2p_notifier_.SendNotificationDataForTest(P2PNotificationData()); 218 p2p_notifier_.SendNotificationDataForTest(P2PNotificationData());
209 219
210 ReflectSentNotifications(); 220 ReflectSentNotifications();
211 221
212 // Should be propagated. 222 // Should be propagated.
213 Mock::VerifyAndClearExpectations(&mock_observer_); 223 Mock::VerifyAndClearExpectations(&mock_observer_);
214 EXPECT_CALL(mock_observer_, OnIncomingNotification(changed_payload_map, 224 EXPECT_CALL(mock_observer_, OnIncomingNotification(
215 REMOTE_NOTIFICATION)); 225 ModelTypePayloadMapToObjectIdPayloadMap(expected_changed_payload_map),
226 REMOTE_NOTIFICATION));
216 p2p_notifier_.SendNotificationDataForTest( 227 p2p_notifier_.SendNotificationDataForTest(
217 P2PNotificationData("sender", NOTIFY_SELF, changed_types)); 228 P2PNotificationData("sender", NOTIFY_SELF, changed_types));
218 229
219 ReflectSentNotifications(); 230 ReflectSentNotifications();
220 231
221 // Should be dropped. 232 // Should be dropped.
222 Mock::VerifyAndClearExpectations(&mock_observer_); 233 Mock::VerifyAndClearExpectations(&mock_observer_);
223 p2p_notifier_.SendNotificationDataForTest( 234 p2p_notifier_.SendNotificationDataForTest(
224 P2PNotificationData("sender2", NOTIFY_SELF, changed_types)); 235 P2PNotificationData("sender2", NOTIFY_SELF, changed_types));
225 236
226 ReflectSentNotifications(); 237 ReflectSentNotifications();
227 238
228 // Should be dropped. 239 // Should be dropped.
229 Mock::VerifyAndClearExpectations(&mock_observer_); 240 Mock::VerifyAndClearExpectations(&mock_observer_);
230 p2p_notifier_.SendNotificationDataForTest( 241 p2p_notifier_.SendNotificationDataForTest(
231 P2PNotificationData("sender", NOTIFY_SELF, syncer::ModelTypeSet())); 242 P2PNotificationData("sender", NOTIFY_SELF, syncer::ModelTypeSet()));
232 243
233 ReflectSentNotifications(); 244 ReflectSentNotifications();
234 245
235 // Should be dropped. 246 // Should be dropped.
236 p2p_notifier_.SendNotificationDataForTest( 247 p2p_notifier_.SendNotificationDataForTest(
237 P2PNotificationData("sender", NOTIFY_OTHERS, changed_types)); 248 P2PNotificationData("sender", NOTIFY_OTHERS, changed_types));
238 249
239 ReflectSentNotifications(); 250 ReflectSentNotifications();
240 251
241 // Should be propagated. 252 // Should be propagated.
242 Mock::VerifyAndClearExpectations(&mock_observer_); 253 Mock::VerifyAndClearExpectations(&mock_observer_);
243 EXPECT_CALL(mock_observer_, OnIncomingNotification(changed_payload_map, 254 EXPECT_CALL(mock_observer_, OnIncomingNotification(
244 REMOTE_NOTIFICATION)); 255 ModelTypePayloadMapToObjectIdPayloadMap(expected_changed_payload_map),
256 REMOTE_NOTIFICATION));
245 p2p_notifier_.SendNotificationDataForTest( 257 p2p_notifier_.SendNotificationDataForTest(
246 P2PNotificationData("sender2", NOTIFY_OTHERS, changed_types)); 258 P2PNotificationData("sender2", NOTIFY_OTHERS, changed_types));
247 259
248 ReflectSentNotifications(); 260 ReflectSentNotifications();
249 261
250 // Should be dropped. 262 // Should be dropped.
251 Mock::VerifyAndClearExpectations(&mock_observer_); 263 Mock::VerifyAndClearExpectations(&mock_observer_);
252 p2p_notifier_.SendNotificationDataForTest( 264 p2p_notifier_.SendNotificationDataForTest(
253 P2PNotificationData("sender2", NOTIFY_OTHERS, syncer::ModelTypeSet())); 265 P2PNotificationData("sender2", NOTIFY_OTHERS, syncer::ModelTypeSet()));
254 266
255 ReflectSentNotifications(); 267 ReflectSentNotifications();
256 268
257 // Should be propagated. 269 // Should be propagated.
258 Mock::VerifyAndClearExpectations(&mock_observer_); 270 Mock::VerifyAndClearExpectations(&mock_observer_);
259 EXPECT_CALL(mock_observer_, OnIncomingNotification(changed_payload_map, 271 EXPECT_CALL(mock_observer_, OnIncomingNotification(
260 REMOTE_NOTIFICATION)); 272 ModelTypePayloadMapToObjectIdPayloadMap(expected_changed_payload_map),
273 REMOTE_NOTIFICATION));
261 p2p_notifier_.SendNotificationDataForTest( 274 p2p_notifier_.SendNotificationDataForTest(
262 P2PNotificationData("sender", NOTIFY_ALL, changed_types)); 275 P2PNotificationData("sender", NOTIFY_ALL, changed_types));
263 276
264 ReflectSentNotifications(); 277 ReflectSentNotifications();
265 278
266 // Should be propagated. 279 // Should be propagated.
267 Mock::VerifyAndClearExpectations(&mock_observer_); 280 Mock::VerifyAndClearExpectations(&mock_observer_);
268 EXPECT_CALL(mock_observer_, OnIncomingNotification(changed_payload_map, 281 EXPECT_CALL(mock_observer_, OnIncomingNotification(
269 REMOTE_NOTIFICATION)); 282 ModelTypePayloadMapToObjectIdPayloadMap(expected_changed_payload_map),
283 REMOTE_NOTIFICATION));
270 p2p_notifier_.SendNotificationDataForTest( 284 p2p_notifier_.SendNotificationDataForTest(
271 P2PNotificationData("sender2", NOTIFY_ALL, changed_types)); 285 P2PNotificationData("sender2", NOTIFY_ALL, changed_types));
272 286
273 ReflectSentNotifications(); 287 ReflectSentNotifications();
274 288
275 // Should be dropped. 289 // Should be dropped.
276 Mock::VerifyAndClearExpectations(&mock_observer_); 290 Mock::VerifyAndClearExpectations(&mock_observer_);
277 p2p_notifier_.SendNotificationDataForTest( 291 p2p_notifier_.SendNotificationDataForTest(
278 P2PNotificationData("sender2", NOTIFY_ALL, syncer::ModelTypeSet())); 292 P2PNotificationData("sender2", NOTIFY_ALL, syncer::ModelTypeSet()));
279 293
280 ReflectSentNotifications(); 294 ReflectSentNotifications();
281 } 295 }
282 296
283 } // namespace 297 } // namespace
284 298
285 } // namespace syncer 299 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698