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

Side by Side Diff: sync/sessions/nudge_tracker_unittest.cc

Issue 124083002: Client-side changes to support retry GU. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 "base/message_loop/message_loop.h" 5 #include "base/message_loop/message_loop.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "sync/internal_api/public/base/model_type_test_util.h" 7 #include "sync/internal_api/public/base/model_type_test_util.h"
8 #include "sync/notifier/invalidation_util.h" 8 #include "sync/notifier/invalidation_util.h"
9 #include "sync/notifier/mock_ack_handler.h" 9 #include "sync/notifier/mock_ack_handler.h"
10 #include "sync/notifier/object_id_invalidation_map.h" 10 #include "sync/notifier/object_id_invalidation_map.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 } 62 }
63 63
64 int ProtoRefreshRequestedCount(ModelType type) const { 64 int ProtoRefreshRequestedCount(ModelType type) const {
65 sync_pb::GetUpdateTriggers gu_trigger; 65 sync_pb::GetUpdateTriggers gu_trigger;
66 nudge_tracker_.FillProtoMessage(type, &gu_trigger); 66 nudge_tracker_.FillProtoMessage(type, &gu_trigger);
67 return gu_trigger.datatype_refresh_nudges(); 67 return gu_trigger.datatype_refresh_nudges();
68 } 68 }
69 69
70 void SetInvalidationsInSync() { 70 void SetInvalidationsInSync() {
71 nudge_tracker_.OnInvalidationsEnabled(); 71 nudge_tracker_.OnInvalidationsEnabled();
72 nudge_tracker_.RecordSuccessfulSyncCycle(); 72 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
73 } 73 }
74 74
75 protected: 75 protected:
76 NudgeTracker nudge_tracker_; 76 NudgeTracker nudge_tracker_;
77 }; 77 };
78 78
79 // Exercise an empty NudgeTracker. 79 // Exercise an empty NudgeTracker.
80 // Use with valgrind to detect uninitialized members. 80 // Use with valgrind to detect uninitialized members.
81 TEST_F(NudgeTrackerTest, EmptyNudgeTracker) { 81 TEST_F(NudgeTrackerTest, EmptyNudgeTracker) {
82 // Now we're at the normal, "idle" state. 82 // Now we're at the normal, "idle" state.
83 EXPECT_FALSE(nudge_tracker_.IsSyncRequired()); 83 EXPECT_FALSE(nudge_tracker_.IsSyncRequired());
84 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 84 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
85 EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::UNKNOWN, 85 EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::UNKNOWN,
86 nudge_tracker_.updates_source()); 86 nudge_tracker_.updates_source());
87 87
88 sync_pb::GetUpdateTriggers gu_trigger; 88 sync_pb::GetUpdateTriggers gu_trigger;
89 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger); 89 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger);
90 90
91 EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::UNKNOWN, 91 EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::UNKNOWN,
92 nudge_tracker_.updates_source()); 92 nudge_tracker_.updates_source());
93 } 93 }
94 94
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 nudge_tracker_.RecordRemoteInvalidation(invalidation_map); 264 nudge_tracker_.RecordRemoteInvalidation(invalidation_map);
265 { 265 {
266 sync_pb::GetUpdateTriggers gu_trigger; 266 sync_pb::GetUpdateTriggers gu_trigger;
267 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger); 267 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger);
268 EXPECT_TRUE(gu_trigger.server_dropped_hints()); 268 EXPECT_TRUE(gu_trigger.server_dropped_hints());
269 EXPECT_FALSE(gu_trigger.client_dropped_hints()); 269 EXPECT_FALSE(gu_trigger.client_dropped_hints());
270 ASSERT_EQ(0, gu_trigger.notification_hint_size()); 270 ASSERT_EQ(0, gu_trigger.notification_hint_size());
271 } 271 }
272 272
273 // Clear status then verify. 273 // Clear status then verify.
274 nudge_tracker_.RecordSuccessfulSyncCycle(); 274 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
275 { 275 {
276 sync_pb::GetUpdateTriggers gu_trigger; 276 sync_pb::GetUpdateTriggers gu_trigger;
277 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger); 277 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger);
278 EXPECT_FALSE(gu_trigger.client_dropped_hints()); 278 EXPECT_FALSE(gu_trigger.client_dropped_hints());
279 EXPECT_FALSE(gu_trigger.server_dropped_hints()); 279 EXPECT_FALSE(gu_trigger.server_dropped_hints());
280 ASSERT_EQ(0, gu_trigger.notification_hint_size()); 280 ASSERT_EQ(0, gu_trigger.notification_hint_size());
281 } 281 }
282 } 282 }
283 283
284 // Tests the receipt of 'unknown version' invalidations. This test also 284 // Tests the receipt of 'unknown version' invalidations. This test also
285 // includes a known version invalidation to mix things up a bit. 285 // includes a known version invalidation to mix things up a bit.
286 TEST_F(NudgeTrackerTest, DropHintsAtServer_WithOtherInvalidations) { 286 TEST_F(NudgeTrackerTest, DropHintsAtServer_WithOtherInvalidations) {
287 ObjectIdInvalidationMap invalidation_map; 287 ObjectIdInvalidationMap invalidation_map;
288 invalidation_map.Insert(BuildUnknownVersionInvalidation(BOOKMARKS)); 288 invalidation_map.Insert(BuildUnknownVersionInvalidation(BOOKMARKS));
289 invalidation_map.Insert(BuildInvalidation(BOOKMARKS, 10, "hint")); 289 invalidation_map.Insert(BuildInvalidation(BOOKMARKS, 10, "hint"));
290 290
291 // Record the two invalidations, one with unknown version, the other unknown. 291 // Record the two invalidations, one with unknown version, the other unknown.
292 nudge_tracker_.RecordRemoteInvalidation(invalidation_map); 292 nudge_tracker_.RecordRemoteInvalidation(invalidation_map);
293 { 293 {
294 sync_pb::GetUpdateTriggers gu_trigger; 294 sync_pb::GetUpdateTriggers gu_trigger;
295 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger); 295 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger);
296 EXPECT_TRUE(gu_trigger.server_dropped_hints()); 296 EXPECT_TRUE(gu_trigger.server_dropped_hints());
297 EXPECT_FALSE(gu_trigger.client_dropped_hints()); 297 EXPECT_FALSE(gu_trigger.client_dropped_hints());
298 ASSERT_EQ(1, gu_trigger.notification_hint_size()); 298 ASSERT_EQ(1, gu_trigger.notification_hint_size());
299 EXPECT_EQ("hint", gu_trigger.notification_hint(0)); 299 EXPECT_EQ("hint", gu_trigger.notification_hint(0));
300 } 300 }
301 301
302 // Clear status then verify. 302 // Clear status then verify.
303 nudge_tracker_.RecordSuccessfulSyncCycle(); 303 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
304 { 304 {
305 sync_pb::GetUpdateTriggers gu_trigger; 305 sync_pb::GetUpdateTriggers gu_trigger;
306 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger); 306 nudge_tracker_.FillProtoMessage(BOOKMARKS, &gu_trigger);
307 EXPECT_FALSE(gu_trigger.client_dropped_hints()); 307 EXPECT_FALSE(gu_trigger.client_dropped_hints());
308 EXPECT_FALSE(gu_trigger.server_dropped_hints()); 308 EXPECT_FALSE(gu_trigger.server_dropped_hints());
309 ASSERT_EQ(0, gu_trigger.notification_hint_size()); 309 ASSERT_EQ(0, gu_trigger.notification_hint_size());
310 } 310 }
311 } 311 }
312 312
313 // Checks the behaviour of the invalidations-out-of-sync flag. 313 // Checks the behaviour of the invalidations-out-of-sync flag.
314 TEST_F(NudgeTrackerTest, EnableDisableInvalidations) { 314 TEST_F(NudgeTrackerTest, EnableDisableInvalidations) {
315 // Start with invalidations offline. 315 // Start with invalidations offline.
316 nudge_tracker_.OnInvalidationsDisabled(); 316 nudge_tracker_.OnInvalidationsDisabled();
317 EXPECT_TRUE(InvalidationsOutOfSync()); 317 EXPECT_TRUE(InvalidationsOutOfSync());
318 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 318 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
319 319
320 // Simply enabling invalidations does not bring us back into sync. 320 // Simply enabling invalidations does not bring us back into sync.
321 nudge_tracker_.OnInvalidationsEnabled(); 321 nudge_tracker_.OnInvalidationsEnabled();
322 EXPECT_TRUE(InvalidationsOutOfSync()); 322 EXPECT_TRUE(InvalidationsOutOfSync());
323 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 323 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
324 324
325 // We must successfully complete a sync cycle while invalidations are enabled 325 // We must successfully complete a sync cycle while invalidations are enabled
326 // to be sure that we're in sync. 326 // to be sure that we're in sync.
327 nudge_tracker_.RecordSuccessfulSyncCycle(); 327 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
328 EXPECT_FALSE(InvalidationsOutOfSync()); 328 EXPECT_FALSE(InvalidationsOutOfSync());
329 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 329 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
330 330
331 // If the invalidator malfunctions, we go become unsynced again. 331 // If the invalidator malfunctions, we go become unsynced again.
332 nudge_tracker_.OnInvalidationsDisabled(); 332 nudge_tracker_.OnInvalidationsDisabled();
333 EXPECT_TRUE(InvalidationsOutOfSync()); 333 EXPECT_TRUE(InvalidationsOutOfSync());
334 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 334 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
335 335
336 // A sync cycle while invalidations are disabled won't reset the flag. 336 // A sync cycle while invalidations are disabled won't reset the flag.
337 nudge_tracker_.RecordSuccessfulSyncCycle(); 337 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
338 EXPECT_TRUE(InvalidationsOutOfSync()); 338 EXPECT_TRUE(InvalidationsOutOfSync());
339 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 339 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
340 340
341 // Nor will the re-enabling of invalidations be sufficient, even now that 341 // Nor will the re-enabling of invalidations be sufficient, even now that
342 // we've had a successful sync cycle. 342 // we've had a successful sync cycle.
343 nudge_tracker_.RecordSuccessfulSyncCycle(); 343 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
344 EXPECT_TRUE(InvalidationsOutOfSync()); 344 EXPECT_TRUE(InvalidationsOutOfSync());
345 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 345 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
346 } 346 }
347 347
348 // Tests that locally modified types are correctly written out to the 348 // Tests that locally modified types are correctly written out to the
349 // GetUpdateTriggers proto. 349 // GetUpdateTriggers proto.
350 TEST_F(NudgeTrackerTest, WriteLocallyModifiedTypesToProto) { 350 TEST_F(NudgeTrackerTest, WriteLocallyModifiedTypesToProto) {
351 // Should not be locally modified by default. 351 // Should not be locally modified by default.
352 EXPECT_EQ(0, ProtoLocallyModifiedCount(PREFERENCES)); 352 EXPECT_EQ(0, ProtoLocallyModifiedCount(PREFERENCES));
353 353
354 // Record a local bookmark change. Verify it was registered correctly. 354 // Record a local bookmark change. Verify it was registered correctly.
355 nudge_tracker_.RecordLocalChange(ModelTypeSet(PREFERENCES)); 355 nudge_tracker_.RecordLocalChange(ModelTypeSet(PREFERENCES));
356 EXPECT_EQ(1, ProtoLocallyModifiedCount(PREFERENCES)); 356 EXPECT_EQ(1, ProtoLocallyModifiedCount(PREFERENCES));
357 357
358 // Record a successful sync cycle. Verify the count is cleared. 358 // Record a successful sync cycle. Verify the count is cleared.
359 nudge_tracker_.RecordSuccessfulSyncCycle(); 359 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
360 EXPECT_EQ(0, ProtoLocallyModifiedCount(PREFERENCES)); 360 EXPECT_EQ(0, ProtoLocallyModifiedCount(PREFERENCES));
361 } 361 }
362 362
363 // Tests that refresh requested types are correctly written out to the 363 // Tests that refresh requested types are correctly written out to the
364 // GetUpdateTriggers proto. 364 // GetUpdateTriggers proto.
365 TEST_F(NudgeTrackerTest, WriteRefreshRequestedTypesToProto) { 365 TEST_F(NudgeTrackerTest, WriteRefreshRequestedTypesToProto) {
366 // There should be no refresh requested by default. 366 // There should be no refresh requested by default.
367 EXPECT_EQ(0, ProtoRefreshRequestedCount(SESSIONS)); 367 EXPECT_EQ(0, ProtoRefreshRequestedCount(SESSIONS));
368 368
369 // Record a local refresh request. Verify it was registered correctly. 369 // Record a local refresh request. Verify it was registered correctly.
370 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(SESSIONS)); 370 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(SESSIONS));
371 EXPECT_EQ(1, ProtoRefreshRequestedCount(SESSIONS)); 371 EXPECT_EQ(1, ProtoRefreshRequestedCount(SESSIONS));
372 372
373 // Record a successful sync cycle. Verify the count is cleared. 373 // Record a successful sync cycle. Verify the count is cleared.
374 nudge_tracker_.RecordSuccessfulSyncCycle(); 374 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
375 EXPECT_EQ(0, ProtoRefreshRequestedCount(SESSIONS)); 375 EXPECT_EQ(0, ProtoRefreshRequestedCount(SESSIONS));
376 } 376 }
377 377
378 // Basic tests for the IsSyncRequired() flag. 378 // Basic tests for the IsSyncRequired() flag.
379 TEST_F(NudgeTrackerTest, IsSyncRequired) { 379 TEST_F(NudgeTrackerTest, IsSyncRequired) {
380 EXPECT_FALSE(nudge_tracker_.IsSyncRequired()); 380 EXPECT_FALSE(nudge_tracker_.IsSyncRequired());
381 381
382 // Local changes. 382 // Local changes.
383 nudge_tracker_.RecordLocalChange(ModelTypeSet(SESSIONS)); 383 nudge_tracker_.RecordLocalChange(ModelTypeSet(SESSIONS));
384 EXPECT_TRUE(nudge_tracker_.IsSyncRequired()); 384 EXPECT_TRUE(nudge_tracker_.IsSyncRequired());
385 nudge_tracker_.RecordSuccessfulSyncCycle(); 385 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
386 EXPECT_FALSE(nudge_tracker_.IsSyncRequired()); 386 EXPECT_FALSE(nudge_tracker_.IsSyncRequired());
387 387
388 // Refresh requests. 388 // Refresh requests.
389 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(SESSIONS)); 389 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(SESSIONS));
390 EXPECT_TRUE(nudge_tracker_.IsSyncRequired()); 390 EXPECT_TRUE(nudge_tracker_.IsSyncRequired());
391 nudge_tracker_.RecordSuccessfulSyncCycle(); 391 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
392 EXPECT_FALSE(nudge_tracker_.IsSyncRequired()); 392 EXPECT_FALSE(nudge_tracker_.IsSyncRequired());
393 393
394 // Invalidations. 394 // Invalidations.
395 ObjectIdInvalidationMap invalidation_map = 395 ObjectIdInvalidationMap invalidation_map =
396 BuildInvalidationMap(PREFERENCES, 1, "hint"); 396 BuildInvalidationMap(PREFERENCES, 1, "hint");
397 nudge_tracker_.RecordRemoteInvalidation(invalidation_map); 397 nudge_tracker_.RecordRemoteInvalidation(invalidation_map);
398 EXPECT_TRUE(nudge_tracker_.IsSyncRequired()); 398 EXPECT_TRUE(nudge_tracker_.IsSyncRequired());
399 nudge_tracker_.RecordSuccessfulSyncCycle(); 399 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
400 EXPECT_FALSE(nudge_tracker_.IsSyncRequired()); 400 EXPECT_FALSE(nudge_tracker_.IsSyncRequired());
401 } 401 }
402 402
403 // Basic tests for the IsGetUpdatesRequired() flag. 403 // Basic tests for the IsGetUpdatesRequired() flag.
404 TEST_F(NudgeTrackerTest, IsGetUpdatesRequired) { 404 TEST_F(NudgeTrackerTest, IsGetUpdatesRequired) {
405 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 405 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
406 406
407 // Local changes. 407 // Local changes.
408 nudge_tracker_.RecordLocalChange(ModelTypeSet(SESSIONS)); 408 nudge_tracker_.RecordLocalChange(ModelTypeSet(SESSIONS));
409 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 409 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
410 nudge_tracker_.RecordSuccessfulSyncCycle(); 410 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
411 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 411 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
412 412
413 // Refresh requests. 413 // Refresh requests.
414 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(SESSIONS)); 414 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(SESSIONS));
415 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 415 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
416 nudge_tracker_.RecordSuccessfulSyncCycle(); 416 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
417 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 417 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
418 418
419 // Invalidations. 419 // Invalidations.
420 ObjectIdInvalidationMap invalidation_map = 420 ObjectIdInvalidationMap invalidation_map =
421 BuildInvalidationMap(PREFERENCES, 1, "hint"); 421 BuildInvalidationMap(PREFERENCES, 1, "hint");
422 nudge_tracker_.RecordRemoteInvalidation(invalidation_map); 422 nudge_tracker_.RecordRemoteInvalidation(invalidation_map);
423 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 423 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
424 nudge_tracker_.RecordSuccessfulSyncCycle(); 424 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
425 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 425 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
426 } 426 }
427 427
428 // Test IsSyncRequired() responds correctly to data type throttling. 428 // Test IsSyncRequired() responds correctly to data type throttling.
429 TEST_F(NudgeTrackerTest, IsSyncRequired_Throttling) { 429 TEST_F(NudgeTrackerTest, IsSyncRequired_Throttling) {
430 const base::TimeTicks t0 = base::TimeTicks::FromInternalValue(1234); 430 const base::TimeTicks t0 = base::TimeTicks::FromInternalValue(1234);
431 const base::TimeDelta throttle_length = base::TimeDelta::FromMinutes(10); 431 const base::TimeDelta throttle_length = base::TimeDelta::FromMinutes(10);
432 const base::TimeTicks t1 = t0 + throttle_length; 432 const base::TimeTicks t1 = t0 + throttle_length;
433 433
434 EXPECT_FALSE(nudge_tracker_.IsSyncRequired()); 434 EXPECT_FALSE(nudge_tracker_.IsSyncRequired());
435 435
436 // A local change to sessions enables the flag. 436 // A local change to sessions enables the flag.
437 nudge_tracker_.RecordLocalChange(ModelTypeSet(SESSIONS)); 437 nudge_tracker_.RecordLocalChange(ModelTypeSet(SESSIONS));
438 EXPECT_TRUE(nudge_tracker_.IsSyncRequired()); 438 EXPECT_TRUE(nudge_tracker_.IsSyncRequired());
439 439
440 // But the throttling of sessions unsets it. 440 // But the throttling of sessions unsets it.
441 nudge_tracker_.SetTypesThrottledUntil(ModelTypeSet(SESSIONS), 441 nudge_tracker_.SetTypesThrottledUntil(ModelTypeSet(SESSIONS),
442 throttle_length, 442 throttle_length,
443 t0); 443 t0);
444 EXPECT_FALSE(nudge_tracker_.IsSyncRequired()); 444 EXPECT_FALSE(nudge_tracker_.IsSyncRequired());
445 445
446 // A refresh request for bookmarks means we have reason to sync again. 446 // A refresh request for bookmarks means we have reason to sync again.
447 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(BOOKMARKS)); 447 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(BOOKMARKS));
448 EXPECT_TRUE(nudge_tracker_.IsSyncRequired()); 448 EXPECT_TRUE(nudge_tracker_.IsSyncRequired());
449 449
450 // A successful sync cycle means we took care of bookmarks. 450 // A successful sync cycle means we took care of bookmarks.
451 nudge_tracker_.RecordSuccessfulSyncCycle(); 451 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
452 EXPECT_FALSE(nudge_tracker_.IsSyncRequired()); 452 EXPECT_FALSE(nudge_tracker_.IsSyncRequired());
453 453
454 // But we still haven't dealt with sessions. We'll need to remember 454 // But we still haven't dealt with sessions. We'll need to remember
455 // that sessions are out of sync and re-enable the flag when their 455 // that sessions are out of sync and re-enable the flag when their
456 // throttling interval expires. 456 // throttling interval expires.
457 nudge_tracker_.UpdateTypeThrottlingState(t1); 457 nudge_tracker_.UpdateTypeThrottlingState(t1);
458 EXPECT_FALSE(nudge_tracker_.IsTypeThrottled(SESSIONS)); 458 EXPECT_FALSE(nudge_tracker_.IsTypeThrottled(SESSIONS));
459 EXPECT_TRUE(nudge_tracker_.IsSyncRequired()); 459 EXPECT_TRUE(nudge_tracker_.IsSyncRequired());
460 } 460 }
461 461
462 // Test IsGetUpdatesRequired() responds correctly to data type throttling. 462 // Test IsGetUpdatesRequired() responds correctly to data type throttling.
463 TEST_F(NudgeTrackerTest, IsGetUpdatesRequired_Throttling) { 463 TEST_F(NudgeTrackerTest, IsGetUpdatesRequired_Throttling) {
464 const base::TimeTicks t0 = base::TimeTicks::FromInternalValue(1234); 464 const base::TimeTicks t0 = base::TimeTicks::FromInternalValue(1234);
465 const base::TimeDelta throttle_length = base::TimeDelta::FromMinutes(10); 465 const base::TimeDelta throttle_length = base::TimeDelta::FromMinutes(10);
466 const base::TimeTicks t1 = t0 + throttle_length; 466 const base::TimeTicks t1 = t0 + throttle_length;
467 467
468 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 468 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
469 469
470 // A refresh request to sessions enables the flag. 470 // A refresh request to sessions enables the flag.
471 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(SESSIONS)); 471 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(SESSIONS));
472 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 472 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
473 473
474 // But the throttling of sessions unsets it. 474 // But the throttling of sessions unsets it.
475 nudge_tracker_.SetTypesThrottledUntil(ModelTypeSet(SESSIONS), 475 nudge_tracker_.SetTypesThrottledUntil(ModelTypeSet(SESSIONS),
476 throttle_length, 476 throttle_length,
477 t0); 477 t0);
478 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 478 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
479 479
480 // A refresh request for bookmarks means we have reason to sync again. 480 // A refresh request for bookmarks means we have reason to sync again.
481 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(BOOKMARKS)); 481 nudge_tracker_.RecordLocalRefreshRequest(ModelTypeSet(BOOKMARKS));
482 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 482 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
483 483
484 // A successful sync cycle means we took care of bookmarks. 484 // A successful sync cycle means we took care of bookmarks.
485 nudge_tracker_.RecordSuccessfulSyncCycle(); 485 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
486 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); 486 EXPECT_FALSE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
487 487
488 // But we still haven't dealt with sessions. We'll need to remember 488 // But we still haven't dealt with sessions. We'll need to remember
489 // that sessions are out of sync and re-enable the flag when their 489 // that sessions are out of sync and re-enable the flag when their
490 // throttling interval expires. 490 // throttling interval expires.
491 nudge_tracker_.UpdateTypeThrottlingState(t1); 491 nudge_tracker_.UpdateTypeThrottlingState(t1);
492 EXPECT_FALSE(nudge_tracker_.IsTypeThrottled(SESSIONS)); 492 EXPECT_FALSE(nudge_tracker_.IsTypeThrottled(SESSIONS));
493 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired()); 493 EXPECT_TRUE(nudge_tracker_.IsGetUpdatesRequired(base::TimeTicks::Now()));
494 } 494 }
495 495
496 // Tests throttling-related getter functions when no types are throttled. 496 // Tests throttling-related getter functions when no types are throttled.
497 TEST_F(NudgeTrackerTest, NoTypesThrottled) { 497 TEST_F(NudgeTrackerTest, NoTypesThrottled) {
498 EXPECT_FALSE(nudge_tracker_.IsAnyTypeThrottled()); 498 EXPECT_FALSE(nudge_tracker_.IsAnyTypeThrottled());
499 EXPECT_FALSE(nudge_tracker_.IsTypeThrottled(SESSIONS)); 499 EXPECT_FALSE(nudge_tracker_.IsTypeThrottled(SESSIONS));
500 EXPECT_TRUE(nudge_tracker_.GetThrottledTypes().Empty()); 500 EXPECT_TRUE(nudge_tracker_.GetThrottledTypes().Empty());
501 } 501 }
502 502
503 // Tests throttling-related getter functions when some types are throttled. 503 // Tests throttling-related getter functions when some types are throttled.
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 // Send it to the NudgeTracker. 620 // Send it to the NudgeTracker.
621 ObjectIdInvalidationMap invalidation_map; 621 ObjectIdInvalidationMap invalidation_map;
622 invalidation_map.Insert(invalidation); 622 invalidation_map.Insert(invalidation);
623 nudge_tracker_.RecordRemoteInvalidation(invalidation_map); 623 nudge_tracker_.RecordRemoteInvalidation(invalidation_map);
624 624
625 // Return it to the test framework for use in assertions. 625 // Return it to the test framework for use in assertions.
626 return invalidation; 626 return invalidation;
627 } 627 }
628 628
629 void RecordSuccessfulSyncCycle() { 629 void RecordSuccessfulSyncCycle() {
630 nudge_tracker_.RecordSuccessfulSyncCycle(); 630 nudge_tracker_.RecordSuccessfulSyncCycle(base::TimeTicks::Now());
631 } 631 }
632 632
633 private: 633 private:
634 syncer::MockAckHandler mock_ack_handler_; 634 syncer::MockAckHandler mock_ack_handler_;
635 base::MessageLoop loop_; 635 base::MessageLoop loop_;
636 }; 636 };
637 637
638 // Test the acknowledgement of a single invalidation. 638 // Test the acknowledgement of a single invalidation.
639 TEST_F(NudgeTrackerAckTrackingTest, SimpleAcknowledgement) { 639 TEST_F(NudgeTrackerAckTrackingTest, SimpleAcknowledgement) {
640 Invalidation inv = SendInvalidation(BOOKMARKS, 10, "hint"); 640 Invalidation inv = SendInvalidation(BOOKMARKS, 10, "hint");
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 // Finish the sync cycle and expect all remaining invalidations to be acked. 730 // Finish the sync cycle and expect all remaining invalidations to be acked.
731 RecordSuccessfulSyncCycle(); 731 RecordSuccessfulSyncCycle();
732 EXPECT_TRUE(IsInvalidationAcknowledged(inv1)); 732 EXPECT_TRUE(IsInvalidationAcknowledged(inv1));
733 EXPECT_TRUE(IsInvalidationAcknowledged(inv2)); 733 EXPECT_TRUE(IsInvalidationAcknowledged(inv2));
734 EXPECT_TRUE(IsInvalidationAcknowledged(inv3)); 734 EXPECT_TRUE(IsInvalidationAcknowledged(inv3));
735 EXPECT_TRUE(IsInvalidationAcknowledged(inv4)); 735 EXPECT_TRUE(IsInvalidationAcknowledged(inv4));
736 EXPECT_TRUE(IsInvalidationAcknowledged(inv5)); 736 EXPECT_TRUE(IsInvalidationAcknowledged(inv5));
737 737
738 EXPECT_TRUE(AllInvalidationsAccountedFor()); 738 EXPECT_TRUE(AllInvalidationsAccountedFor());
739 } 739 }
740 740
rlarocque 2014/01/08 20:30:08 Since you went through all this trouble to add sup
haitaol1 2014/01/09 00:33:37 working on tests On 2014/01/08 20:30:08, rlarocqu
741 } // namespace sessions 741 } // namespace sessions
742 } // namespace syncer 742 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698