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

Side by Side Diff: components/invalidation/p2p_invalidator_unittest.cc

Issue 403103002: Prep for moving files into components/invalidation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 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
« no previous file with comments | « chrome/chrome_browser.gypi ('k') | sync/internal_api/public/base/invalidation_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/invalidation/p2p_invalidator.h" 5 #include "components/invalidation/p2p_invalidator.h"
6 6
7 #include <cstddef> 7 #include <cstddef>
8 8
9 #include "components/invalidation/fake_invalidation_handler.h" 9 #include "components/invalidation/fake_invalidation_handler.h"
10 #include "components/invalidation/invalidator_test_template.h" 10 #include "components/invalidation/invalidator_test_template.h"
11 #include "components/invalidation/notifier_reason_util.h" 11 #include "components/invalidation/notifier_reason_util.h"
12 #include "jingle/notifier/listener/fake_push_client.h" 12 #include "jingle/notifier/listener/fake_push_client.h"
13 #include "sync/internal_api/public/base/invalidator_state.h" 13 #include "sync/internal_api/public/base/invalidator_state.h"
14 #include "sync/internal_api/public/base/model_type.h"
15 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
16 15
17 namespace syncer { 16 namespace syncer {
18 17
19 namespace { 18 namespace {
20 19
21 class P2PInvalidatorTestDelegate { 20 class P2PInvalidatorTestDelegate {
22 public: 21 public:
23 P2PInvalidatorTestDelegate() : fake_push_client_(NULL) {} 22 P2PInvalidatorTestDelegate() : fake_push_client_(NULL) {}
24 23
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 private: 78 private:
80 // Owned by |invalidator_|. 79 // Owned by |invalidator_|.
81 notifier::FakePushClient* fake_push_client_; 80 notifier::FakePushClient* fake_push_client_;
82 scoped_ptr<P2PInvalidator> invalidator_; 81 scoped_ptr<P2PInvalidator> invalidator_;
83 }; 82 };
84 83
85 class P2PInvalidatorTest : public testing::Test { 84 class P2PInvalidatorTest : public testing::Test {
86 protected: 85 protected:
87 P2PInvalidatorTest() 86 P2PInvalidatorTest()
88 : next_sent_notification_to_reflect_(0) { 87 : next_sent_notification_to_reflect_(0) {
88 default_enabled_ids_.insert(invalidation::ObjectId(10, "A"));
89 default_enabled_ids_.insert(invalidation::ObjectId(10, "B"));
89 delegate_.CreateInvalidator("sender", 90 delegate_.CreateInvalidator("sender",
90 "fake_state", 91 "fake_state",
91 base::WeakPtr<InvalidationStateTracker>()); 92 base::WeakPtr<InvalidationStateTracker>());
92 delegate_.GetInvalidator()->RegisterHandler(&fake_handler_); 93 delegate_.GetInvalidator()->RegisterHandler(&fake_handler_);
93 } 94 }
94 95
95 virtual ~P2PInvalidatorTest() { 96 virtual ~P2PInvalidatorTest() {
96 delegate_.GetInvalidator()->UnregisterHandler(&fake_handler_); 97 delegate_.GetInvalidator()->UnregisterHandler(&fake_handler_);
97 } 98 }
98 99
99 ObjectIdInvalidationMap MakeInvalidationMap(ModelTypeSet types) { 100 ObjectIdInvalidationMap MakeInvalidationMap(ObjectIdSet ids) {
100 ObjectIdInvalidationMap invalidations;
101 ObjectIdSet ids = ModelTypeSetToObjectIdSet(types);
102 return ObjectIdInvalidationMap::InvalidateAll(ids); 101 return ObjectIdInvalidationMap::InvalidateAll(ids);
103 } 102 }
104 103
105 // Simulate receiving all the notifications we sent out since last 104 // Simulate receiving all the notifications we sent out since last
106 // time this was called. 105 // time this was called.
107 void ReflectSentNotifications() { 106 void ReflectSentNotifications() {
108 const std::vector<notifier::Notification>& sent_notifications = 107 const std::vector<notifier::Notification>& sent_notifications =
109 delegate_.GetPushClient()->sent_notifications(); 108 delegate_.GetPushClient()->sent_notifications();
110 for(size_t i = next_sent_notification_to_reflect_; 109 for(size_t i = next_sent_notification_to_reflect_;
111 i < sent_notifications.size(); ++i) { 110 i < sent_notifications.size(); ++i) {
112 delegate_.GetInvalidator()->OnIncomingNotification(sent_notifications[i]); 111 delegate_.GetInvalidator()->OnIncomingNotification(sent_notifications[i]);
113 } 112 }
114 next_sent_notification_to_reflect_ = sent_notifications.size(); 113 next_sent_notification_to_reflect_ = sent_notifications.size();
115 } 114 }
116 115
116 ObjectIdSet default_enabled_ids_;
117
117 FakeInvalidationHandler fake_handler_; 118 FakeInvalidationHandler fake_handler_;
118 P2PInvalidatorTestDelegate delegate_; 119 P2PInvalidatorTestDelegate delegate_;
119 120
120 private: 121 private:
121 size_t next_sent_notification_to_reflect_; 122 size_t next_sent_notification_to_reflect_;
122 }; 123 };
123 124
124 // Make sure the P2PNotificationTarget <-> string conversions work. 125 // Make sure the P2PNotificationTarget <-> string conversions work.
125 TEST_F(P2PInvalidatorTest, P2PNotificationTarget) { 126 TEST_F(P2PInvalidatorTest, P2PNotificationTarget) {
126 for (int i = FIRST_NOTIFICATION_TARGET; 127 for (int i = FIRST_NOTIFICATION_TARGET;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 174
174 P2PNotificationData notification_data_parsed; 175 P2PNotificationData notification_data_parsed;
175 EXPECT_TRUE(notification_data_parsed.ResetFromString(notification_data_str)); 176 EXPECT_TRUE(notification_data_parsed.ResetFromString(notification_data_str));
176 EXPECT_TRUE(notification_data.Equals(notification_data_parsed)); 177 EXPECT_TRUE(notification_data.Equals(notification_data_parsed));
177 } 178 }
178 179
179 // Make sure the P2PNotificationData <-> string conversions work for a 180 // Make sure the P2PNotificationData <-> string conversions work for a
180 // non-default-constructed P2PNotificationData. 181 // non-default-constructed P2PNotificationData.
181 TEST_F(P2PInvalidatorTest, P2PNotificationDataNonDefault) { 182 TEST_F(P2PInvalidatorTest, P2PNotificationDataNonDefault) {
182 ObjectIdInvalidationMap invalidation_map = 183 ObjectIdInvalidationMap invalidation_map =
183 ObjectIdInvalidationMap::InvalidateAll( 184 ObjectIdInvalidationMap::InvalidateAll(default_enabled_ids_);
184 ModelTypeSetToObjectIdSet(ModelTypeSet(BOOKMARKS, THEMES)));
185 const P2PNotificationData notification_data("sender", 185 const P2PNotificationData notification_data("sender",
186 NOTIFY_ALL, 186 NOTIFY_ALL,
187 invalidation_map); 187 invalidation_map);
188 EXPECT_TRUE(notification_data.IsTargeted("sender")); 188 EXPECT_TRUE(notification_data.IsTargeted("sender"));
189 EXPECT_TRUE(notification_data.IsTargeted("other1")); 189 EXPECT_TRUE(notification_data.IsTargeted("other1"));
190 EXPECT_TRUE(notification_data.IsTargeted("other2")); 190 EXPECT_TRUE(notification_data.IsTargeted("other2"));
191 EXPECT_EQ(invalidation_map, notification_data.GetIdInvalidationMap()); 191 EXPECT_EQ(invalidation_map, notification_data.GetIdInvalidationMap());
192 const std::string& notification_data_str = notification_data.ToString(); 192 const std::string& notification_data_str = notification_data.ToString();
193 EXPECT_EQ( 193 EXPECT_EQ(
194 "{\"invalidations\":[" 194 "{\"invalidations\":["
195 "{\"isUnknownVersion\":true," 195 "{\"isUnknownVersion\":true,"
196 "\"objectId\":{\"name\":\"BOOKMARK\",\"source\":1004}}," 196 "\"objectId\":{\"name\":\"A\",\"source\":10}},"
197 "{\"isUnknownVersion\":true," 197 "{\"isUnknownVersion\":true,"
198 "\"objectId\":{\"name\":\"THEME\",\"source\":1004}}" 198 "\"objectId\":{\"name\":\"B\",\"source\":10}}"
199 "],\"notificationType\":\"notifyAll\"," 199 "],\"notificationType\":\"notifyAll\","
200 "\"senderId\":\"sender\"}", notification_data_str); 200 "\"senderId\":\"sender\"}",
201 notification_data_str);
201 202
202 P2PNotificationData notification_data_parsed; 203 P2PNotificationData notification_data_parsed;
203 EXPECT_TRUE(notification_data_parsed.ResetFromString(notification_data_str)); 204 EXPECT_TRUE(notification_data_parsed.ResetFromString(notification_data_str));
204 EXPECT_TRUE(notification_data.Equals(notification_data_parsed)); 205 EXPECT_TRUE(notification_data.Equals(notification_data_parsed));
205 } 206 }
206 207
207 // Set up the P2PInvalidator, simulate a successful connection, and send 208 // Set up the P2PInvalidator, simulate a successful connection, and send
208 // a notification with the default target (NOTIFY_OTHERS). The 209 // a notification with the default target (NOTIFY_OTHERS). The
209 // observer should receive only a notification from the call to 210 // observer should receive only a notification from the call to
210 // UpdateEnabledTypes(). 211 // UpdateEnabledTypes().
211 TEST_F(P2PInvalidatorTest, NotificationsBasic) { 212 TEST_F(P2PInvalidatorTest, NotificationsBasic) {
212 const ModelTypeSet enabled_types(BOOKMARKS, PREFERENCES);
213
214 P2PInvalidator* const invalidator = delegate_.GetInvalidator(); 213 P2PInvalidator* const invalidator = delegate_.GetInvalidator();
215 notifier::FakePushClient* const push_client = delegate_.GetPushClient(); 214 notifier::FakePushClient* const push_client = delegate_.GetPushClient();
216 215
217 invalidator->UpdateRegisteredIds(&fake_handler_, 216 invalidator->UpdateRegisteredIds(&fake_handler_, default_enabled_ids_);
218 ModelTypeSetToObjectIdSet(enabled_types));
219 217
220 const char kEmail[] = "foo@bar.com"; 218 const char kEmail[] = "foo@bar.com";
221 const char kToken[] = "token"; 219 const char kToken[] = "token";
222 invalidator->UpdateCredentials(kEmail, kToken); 220 invalidator->UpdateCredentials(kEmail, kToken);
223 { 221 {
224 notifier::Subscription expected_subscription; 222 notifier::Subscription expected_subscription;
225 expected_subscription.channel = kSyncP2PNotificationChannel; 223 expected_subscription.channel = kSyncP2PNotificationChannel;
226 expected_subscription.from = kEmail; 224 expected_subscription.from = kEmail;
227 EXPECT_TRUE(notifier::SubscriptionListsEqual( 225 EXPECT_TRUE(notifier::SubscriptionListsEqual(
228 push_client->subscriptions(), 226 push_client->subscriptions(),
229 notifier::SubscriptionList(1, expected_subscription))); 227 notifier::SubscriptionList(1, expected_subscription)));
230 } 228 }
231 EXPECT_EQ(kEmail, push_client->email()); 229 EXPECT_EQ(kEmail, push_client->email());
232 EXPECT_EQ(kToken, push_client->token()); 230 EXPECT_EQ(kToken, push_client->token());
233 231
234 ReflectSentNotifications(); 232 ReflectSentNotifications();
235 push_client->EnableNotifications(); 233 push_client->EnableNotifications();
236 EXPECT_EQ(INVALIDATIONS_ENABLED, fake_handler_.GetInvalidatorState()); 234 EXPECT_EQ(INVALIDATIONS_ENABLED, fake_handler_.GetInvalidatorState());
237 235
238 ReflectSentNotifications(); 236 ReflectSentNotifications();
239 EXPECT_EQ(1, fake_handler_.GetInvalidationCount()); 237 EXPECT_EQ(1, fake_handler_.GetInvalidationCount());
240 EXPECT_THAT( 238 EXPECT_THAT(MakeInvalidationMap(default_enabled_ids_),
241 MakeInvalidationMap(enabled_types), 239 Eq(fake_handler_.GetLastInvalidationMap()));
242 Eq(fake_handler_.GetLastInvalidationMap()));
243 240
244 // Sent with target NOTIFY_OTHERS so should not be propagated to 241 // Sent with target NOTIFY_OTHERS so should not be propagated to
245 // |fake_handler_|. 242 // |fake_handler_|.
246 invalidator->SendInvalidation( 243 invalidator->SendInvalidation(default_enabled_ids_);
247 ModelTypeSetToObjectIdSet(ModelTypeSet(THEMES, APPS)));
248 244
249 ReflectSentNotifications(); 245 ReflectSentNotifications();
250 EXPECT_EQ(1, fake_handler_.GetInvalidationCount()); 246 EXPECT_EQ(1, fake_handler_.GetInvalidationCount());
251 } 247 }
252 248
253 // Set up the P2PInvalidator and send out notifications with various 249 // Set up the P2PInvalidator and send out notifications with various
254 // target settings. The notifications received by the observer should 250 // target settings. The notifications received by the observer should
255 // be consistent with the target settings. 251 // be consistent with the target settings.
256 TEST_F(P2PInvalidatorTest, SendNotificationData) { 252 TEST_F(P2PInvalidatorTest, SendNotificationData) {
257 const ModelTypeSet enabled_types(BOOKMARKS, PREFERENCES, THEMES); 253 ObjectIdSet enabled_ids;
258 const ModelTypeSet changed_types(THEMES, APPS); 254 ObjectIdSet changed_ids;
259 const ModelTypeSet expected_types(THEMES); 255 ObjectIdSet expected_ids;
256
257 enabled_ids.insert(invalidation::ObjectId(20, "A"));
258 enabled_ids.insert(invalidation::ObjectId(20, "B"));
259 enabled_ids.insert(invalidation::ObjectId(20, "C"));
260
261 changed_ids.insert(invalidation::ObjectId(20, "A"));
262 changed_ids.insert(invalidation::ObjectId(20, "Z"));
263
264 expected_ids.insert(invalidation::ObjectId(20, "A"));
260 265
261 const ObjectIdInvalidationMap& invalidation_map = 266 const ObjectIdInvalidationMap& invalidation_map =
262 MakeInvalidationMap(changed_types); 267 MakeInvalidationMap(changed_ids);
263 268
264 P2PInvalidator* const invalidator = delegate_.GetInvalidator(); 269 P2PInvalidator* const invalidator = delegate_.GetInvalidator();
265 notifier::FakePushClient* const push_client = delegate_.GetPushClient(); 270 notifier::FakePushClient* const push_client = delegate_.GetPushClient();
266 271
267 invalidator->UpdateRegisteredIds(&fake_handler_, 272 invalidator->UpdateRegisteredIds(&fake_handler_, enabled_ids);
268 ModelTypeSetToObjectIdSet(enabled_types));
269 273
270 invalidator->UpdateCredentials("foo@bar.com", "fake_token"); 274 invalidator->UpdateCredentials("foo@bar.com", "fake_token");
271 275
272 ReflectSentNotifications(); 276 ReflectSentNotifications();
273 push_client->EnableNotifications(); 277 push_client->EnableNotifications();
274 EXPECT_EQ(INVALIDATIONS_ENABLED, fake_handler_.GetInvalidatorState()); 278 EXPECT_EQ(INVALIDATIONS_ENABLED, fake_handler_.GetInvalidatorState());
275 279
276 ReflectSentNotifications(); 280 ReflectSentNotifications();
277 EXPECT_EQ(1, fake_handler_.GetInvalidationCount()); 281 EXPECT_EQ(1, fake_handler_.GetInvalidationCount());
278 EXPECT_EQ(ModelTypeSetToObjectIdSet(enabled_types), 282 EXPECT_EQ(enabled_ids, fake_handler_.GetLastInvalidationMap().GetObjectIds());
279 fake_handler_.GetLastInvalidationMap().GetObjectIds());
280 283
281 // Should be dropped. 284 // Should be dropped.
282 invalidator->SendNotificationDataForTest(P2PNotificationData()); 285 invalidator->SendNotificationDataForTest(P2PNotificationData());
283 ReflectSentNotifications(); 286 ReflectSentNotifications();
284 EXPECT_EQ(1, fake_handler_.GetInvalidationCount()); 287 EXPECT_EQ(1, fake_handler_.GetInvalidationCount());
285 288
286 const ObjectIdSet& expected_ids = ModelTypeSetToObjectIdSet(expected_types);
287
288 // Should be propagated. 289 // Should be propagated.
289 invalidator->SendNotificationDataForTest( 290 invalidator->SendNotificationDataForTest(
290 P2PNotificationData("sender", NOTIFY_SELF, invalidation_map)); 291 P2PNotificationData("sender", NOTIFY_SELF, invalidation_map));
291 ReflectSentNotifications(); 292 ReflectSentNotifications();
292 EXPECT_EQ(2, fake_handler_.GetInvalidationCount()); 293 EXPECT_EQ(2, fake_handler_.GetInvalidationCount());
293 EXPECT_EQ(expected_ids, 294 EXPECT_EQ(expected_ids,
294 fake_handler_.GetLastInvalidationMap().GetObjectIds()); 295 fake_handler_.GetLastInvalidationMap().GetObjectIds());
295 296
296 // Should be dropped. 297 // Should be dropped.
297 invalidator->SendNotificationDataForTest( 298 invalidator->SendNotificationDataForTest(
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 EXPECT_EQ(5, fake_handler_.GetInvalidationCount()); 349 EXPECT_EQ(5, fake_handler_.GetInvalidationCount());
349 } 350 }
350 351
351 INSTANTIATE_TYPED_TEST_CASE_P( 352 INSTANTIATE_TYPED_TEST_CASE_P(
352 P2PInvalidatorTest, InvalidatorTest, 353 P2PInvalidatorTest, InvalidatorTest,
353 P2PInvalidatorTestDelegate); 354 P2PInvalidatorTestDelegate);
354 355
355 } // namespace 356 } // namespace
356 357
357 } // namespace syncer 358 } // namespace syncer
OLDNEW
« no previous file with comments | « chrome/chrome_browser.gypi ('k') | sync/internal_api/public/base/invalidation_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698