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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/InvalidationControllerTest.java

Issue 54923003: Support for shared invalidator client IDs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile issue Created 7 years, 1 month 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 package org.chromium.chrome.browser.invalidation; 5 package org.chromium.chrome.browser.invalidation;
6 6
7 import android.accounts.Account; 7 import android.accounts.Account;
8 import android.app.Activity; 8 import android.app.Activity;
9 import android.content.ComponentName; 9 import android.content.ComponentName;
10 import android.content.Context; 10 import android.content.Context;
11 import android.content.Intent; 11 import android.content.Intent;
12 import android.content.pm.PackageManager; 12 import android.content.pm.PackageManager;
13 import android.test.InstrumentationTestCase; 13 import android.test.InstrumentationTestCase;
14 import android.test.suitebuilder.annotation.SmallTest; 14 import android.test.suitebuilder.annotation.SmallTest;
15 15
16 import com.google.ipc.invalidation.external.client.types.ObjectId; 16 import com.google.ipc.invalidation.external.client.types.ObjectId;
17 17
18 import org.chromium.base.ActivityStatus; 18 import org.chromium.base.ActivityStatus;
19 import org.chromium.base.CollectionUtil; 19 import org.chromium.base.CollectionUtil;
20 import org.chromium.base.test.util.AdvancedMockContext; 20 import org.chromium.base.test.util.AdvancedMockContext;
21 import org.chromium.base.test.util.Feature; 21 import org.chromium.base.test.util.Feature;
22 import org.chromium.chrome.browser.identity.UniqueIdentificationGenerator;
23 import org.chromium.chrome.browser.identity.UniqueIdentificationGeneratorFactory ;
22 import org.chromium.sync.internal_api.pub.base.ModelType; 24 import org.chromium.sync.internal_api.pub.base.ModelType;
23 import org.chromium.sync.notifier.InvalidationIntentProtocol; 25 import org.chromium.sync.notifier.InvalidationIntentProtocol;
24 import org.chromium.sync.notifier.InvalidationPreferences; 26 import org.chromium.sync.notifier.InvalidationPreferences;
25 import org.chromium.sync.notifier.InvalidationService; 27 import org.chromium.sync.notifier.InvalidationService;
26 import org.chromium.sync.notifier.SyncStatusHelper; 28 import org.chromium.sync.notifier.SyncStatusHelper;
27 import org.chromium.sync.signin.AccountManagerHelper; 29 import org.chromium.sync.signin.AccountManagerHelper;
28 import org.chromium.sync.signin.ChromeSigninController; 30 import org.chromium.sync.signin.ChromeSigninController;
29 import org.chromium.sync.test.util.MockSyncContentResolverDelegate; 31 import org.chromium.sync.test.util.MockSyncContentResolverDelegate;
30 32
33 import java.util.Arrays;
31 import java.util.ArrayList; 34 import java.util.ArrayList;
32 import java.util.HashSet; 35 import java.util.HashSet;
33 import java.util.List; 36 import java.util.List;
34 import java.util.Set; 37 import java.util.Set;
35 import java.util.concurrent.atomic.AtomicBoolean; 38 import java.util.concurrent.atomic.AtomicBoolean;
36 import java.util.concurrent.atomic.AtomicReference; 39 import java.util.concurrent.atomic.AtomicReference;
37 40
41 import javax.annotation.Nullable;
42
38 /** 43 /**
39 * Tests for the {@link InvalidationController}. 44 * Tests for the {@link InvalidationController}.
40 */ 45 */
41 public class InvalidationControllerTest extends InstrumentationTestCase { 46 public class InvalidationControllerTest extends InstrumentationTestCase {
42 private IntentSavingContext mContext; 47 private IntentSavingContext mContext;
43 private InvalidationController mController; 48 private InvalidationController mController;
44 49
45 @Override 50 @Override
46 protected void setUp() throws Exception { 51 protected void setUp() throws Exception {
47 mContext = new IntentSavingContext(getInstrumentation().getTargetContext ()); 52 mContext = new IntentSavingContext(getInstrumentation().getTargetContext ());
48 mController = InvalidationController.get(mContext); 53 mController = InvalidationController.get(mContext);
49 // We don't want to use the system content resolver, so we override it. 54 // We don't want to use the system content resolver, so we override it.
50 MockSyncContentResolverDelegate delegate = new MockSyncContentResolverDe legate(); 55 MockSyncContentResolverDelegate delegate = new MockSyncContentResolverDe legate();
51 // Android master sync can safely always be on. 56 // Android master sync can safely always be on.
52 delegate.setMasterSyncAutomatically(true); 57 delegate.setMasterSyncAutomatically(true);
53 SyncStatusHelper.overrideSyncStatusHelperForTests(mContext, delegate); 58 SyncStatusHelper.overrideSyncStatusHelperForTests(mContext, delegate);
54 } 59 }
55 60
56 @SmallTest 61 @SmallTest
57 @Feature({"Sync"}) 62 @Feature({"Sync"})
58 public void testStart() throws Exception { 63 public void testStart() throws Exception {
59 mController.start(); 64 mController.start();
60 assertEquals(1, mContext.getNumStartedIntents()); 65 assertEquals(1, mContext.getNumStartedIntents());
61 Intent intent = mContext.getStartedIntent(0); 66 Intent intent = mContext.getStartedIntent(0);
62 validateIntentComponent(intent); 67 validateIntentComponent(intent);
63 assertNull(intent.getExtras()); 68 assertTrue(intent.hasExtra(InvalidationIntentProtocol.EXTRA_CLIENT_NAME) );
64 } 69 }
65 70
66 @SmallTest 71 @SmallTest
67 @Feature({"Sync"}) 72 @Feature({"Sync"})
68 public void testStop() throws Exception { 73 public void testStop() throws Exception {
69 mController.stop(); 74 mController.stop();
70 assertEquals(1, mContext.getNumStartedIntents()); 75 assertEquals(1, mContext.getNumStartedIntents());
71 Intent intent = mContext.getStartedIntent(0); 76 Intent intent = mContext.getStartedIntent(0);
72 validateIntentComponent(intent); 77 validateIntentComponent(intent);
73 assertEquals(1, intent.getExtras().size()); 78 assertEquals(2, intent.getExtras().size());
79 assertTrue(intent.hasExtra(InvalidationIntentProtocol.EXTRA_CLIENT_NAME) );
74 assertTrue(intent.hasExtra(InvalidationIntentProtocol.EXTRA_STOP)); 80 assertTrue(intent.hasExtra(InvalidationIntentProtocol.EXTRA_STOP));
75 assertTrue(intent.getBooleanExtra(InvalidationIntentProtocol.EXTRA_STOP, false)); 81 assertTrue(intent.getBooleanExtra(InvalidationIntentProtocol.EXTRA_STOP, false));
76 } 82 }
77 83
78 @SmallTest 84 @SmallTest
79 @Feature({"Sync"}) 85 @Feature({"Sync"})
80 public void testResumingMainActivity() throws Exception { 86 public void testResumingMainActivity() throws Exception {
81 // Resuming main activity should trigger a start if sync is enabled. 87 // Resuming main activity should trigger a start if sync is enabled.
82 setupSync(true); 88 setupSync(true);
83 mController.onActivityStateChange(ActivityStatus.RESUMED); 89 mController.onActivityStateChange(ActivityStatus.RESUMED);
84 assertEquals(1, mContext.getNumStartedIntents()); 90 assertEquals(1, mContext.getNumStartedIntents());
85 Intent intent = mContext.getStartedIntent(0); 91 Intent intent = mContext.getStartedIntent(0);
86 validateIntentComponent(intent); 92 validateIntentComponent(intent);
87 assertNull(intent.getExtras());
88 } 93 }
89 94
90 @SmallTest 95 @SmallTest
91 @Feature({"Sync"}) 96 @Feature({"Sync"})
92 public void testResumingMainActivityWithSyncDisabled() throws Exception { 97 public void testResumingMainActivityWithSyncDisabled() throws Exception {
93 // Resuming main activity should NOT trigger a start if sync is disabled . 98 // Resuming main activity should NOT trigger a start if sync is disabled .
94 setupSync(false); 99 setupSync(false);
95 mController.onActivityStateChange(ActivityStatus.RESUMED); 100 mController.onActivityStateChange(ActivityStatus.RESUMED);
96 assertEquals(0, mContext.getNumStartedIntents()); 101 assertEquals(0, mContext.getNumStartedIntents());
97 } 102 }
98 103
99 @SmallTest 104 @SmallTest
100 @Feature({"Sync"}) 105 @Feature({"Sync"})
101 public void testPausingMainActivity() throws Exception { 106 public void testPausingMainActivity() throws Exception {
102 // Resuming main activity should trigger a stop if sync is enabled. 107 // Resuming main activity should trigger a stop if sync is enabled.
103 setupSync(true); 108 setupSync(true);
104 mController.onActivityStateChange(ActivityStatus.PAUSED); 109 mController.onActivityStateChange(ActivityStatus.PAUSED);
105 assertEquals(1, mContext.getNumStartedIntents()); 110 assertEquals(1, mContext.getNumStartedIntents());
106 Intent intent = mContext.getStartedIntent(0); 111 Intent intent = mContext.getStartedIntent(0);
107 validateIntentComponent(intent); 112 validateIntentComponent(intent);
108 assertEquals(1, intent.getExtras().size()); 113 assertEquals(2, intent.getExtras().size());
114 assertTrue(intent.hasExtra(InvalidationIntentProtocol.EXTRA_CLIENT_NAME) );
109 assertTrue(intent.hasExtra(InvalidationIntentProtocol.EXTRA_STOP)); 115 assertTrue(intent.hasExtra(InvalidationIntentProtocol.EXTRA_STOP));
110 assertTrue(intent.getBooleanExtra(InvalidationIntentProtocol.EXTRA_STOP, false)); 116 assertTrue(intent.getBooleanExtra(InvalidationIntentProtocol.EXTRA_STOP, false));
111 } 117 }
112 118
113 @SmallTest 119 @SmallTest
114 @Feature({"Sync"}) 120 @Feature({"Sync"})
115 public void testPausingMainActivityWithSyncDisabled() throws Exception { 121 public void testPausingMainActivityWithSyncDisabled() throws Exception {
116 // Resuming main activity should NOT trigger a stop if sync is disabled. 122 // Resuming main activity should NOT trigger a stop if sync is disabled.
117 setupSync(false); 123 setupSync(false);
118 mController.onActivityStateChange(ActivityStatus.PAUSED); 124 mController.onActivityStateChange(ActivityStatus.PAUSED);
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 // Validate registered object ids. The bookmark object should not be reg istered since it is 311 // Validate registered object ids. The bookmark object should not be reg istered since it is
306 // a Sync type. 312 // a Sync type.
307 assertNull(intent.getStringArrayListExtra( 313 assertNull(intent.getStringArrayListExtra(
308 InvalidationIntentProtocol.EXTRA_REGISTERED_TYPE S)); 314 InvalidationIntentProtocol.EXTRA_REGISTERED_TYPE S));
309 Set<ObjectId> objectIds = InvalidationIntentProtocol.getRegisteredObject Ids(intent); 315 Set<ObjectId> objectIds = InvalidationIntentProtocol.getRegisteredObject Ids(intent);
310 assertEquals(2, objectIds.size()); 316 assertEquals(2, objectIds.size());
311 assertTrue(objectIds.contains(ObjectId.newInstance(1, "a".getBytes()))); 317 assertTrue(objectIds.contains(ObjectId.newInstance(1, "a".getBytes())));
312 assertTrue(objectIds.contains(ObjectId.newInstance(2, "b".getBytes()))); 318 assertTrue(objectIds.contains(ObjectId.newInstance(2, "b".getBytes())));
313 } 319 }
314 320
321 @SmallTest
322 @Feature({"Sync"})
323 public void testFallbackClientId() {
324 // Test that the InvalidationController consistently returns the same ID e ven when it has to
325 // resort to its "fallback" ID generation code.
326 InvalidationController controller = new InvalidationController(mContext);
327 byte[] id1 = controller.getInvalidatorClientId();
328 byte[] id2 = controller.getInvalidatorClientId();
329
330 assertTrue(Arrays.equals(id1, id2));
331
332 // Even if initialize the generator late, the ID will remain consistent.
333 registerHardCodedIdGenerator();
334
335 byte[] id3 = controller.getInvalidatorClientId();
336 assertTrue(Arrays.equals(id2, id3));
337 }
338
339 @SmallTest
340 @Feature({"Sync"})
341 public void testPreRegisteredClientId() {
342 registerHardCodedIdGenerator();
343
344 UniqueIdentificationGenerator generator =
345 UniqueIdentificationGeneratorFactory.getInstance(InvalidationControll er.ID_GENERATOR);
346 String generatorId = generator.getUniqueId(null);
347
348 InvalidationController controller = new InvalidationController(mContext);
349 byte[] id = controller.getInvalidatorClientId();
350 byte[] id2 = controller.getInvalidatorClientId();
351
352 assertTrue(Arrays.equals(generatorId.getBytes(), id));
353 assertTrue(Arrays.equals(id, id2));
354 }
355
315 /** 356 /**
316 * Asserts that {@code intent} is destined for the correct component. 357 * Asserts that {@code intent} is destined for the correct component.
317 */ 358 */
318 private static void validateIntentComponent(Intent intent) { 359 private static void validateIntentComponent(Intent intent) {
319 assertNotNull(intent.getComponent()); 360 assertNotNull(intent.getComponent());
320 assertEquals(InvalidationService.class.getName(), 361 assertEquals(InvalidationService.class.getName(),
321 intent.getComponent().getClassName()); 362 intent.getComponent().getClassName());
322 } 363 }
323 364
324 /** 365 /**
(...skipping 18 matching lines...) Expand all
343 384
344 Intent getStartedIntent(int idx) { 385 Intent getStartedIntent(int idx) {
345 return startedIntents.get(idx); 386 return startedIntents.get(idx);
346 } 387 }
347 388
348 @Override 389 @Override
349 public PackageManager getPackageManager() { 390 public PackageManager getPackageManager() {
350 return getBaseContext().getPackageManager(); 391 return getBaseContext().getPackageManager();
351 } 392 }
352 } 393 }
394
395 private static void registerHardCodedIdGenerator() {
396 UniqueIdentificationGeneratorFactory.registerGenerator(
397 InvalidationController.ID_GENERATOR,
398 new UniqueIdentificationGenerator() {
399 public String getUniqueId(@Nullable String salt) {
400 return "Testable ID";
401 }
402 },
403 true);
404 }
353 } 405 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698