Home | History | Annotate | Download | only in identity
      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
      3 // found in the LICENSE file.
      4 
      5 package org.chromium.chrome.browser.identity;
      6 
      7 import android.test.InstrumentationTestCase;
      8 import android.test.suitebuilder.annotation.SmallTest;
      9 
     10 import junit.framework.Assert;
     11 
     12 import org.chromium.base.test.util.AdvancedMockContext;
     13 import org.chromium.base.test.util.Feature;
     14 
     15 public class UuidBasedUniqueIdentificationGeneratorTest extends InstrumentationTestCase {
     16     private static final String FLAG_UUID = "uuid";
     17 
     18     private AdvancedMockContext mContext;
     19 
     20     @Override
     21     protected void setUp() throws Exception {
     22         super.setUp();
     23         mContext = new AdvancedMockContext(getInstrumentation().getTargetContext());
     24     }
     25 
     26     @SmallTest
     27     @Feature({"Sync"})
     28     public void testGenerationAndRestorationOfUuid() {
     29         String preferenceKey = "some_preference_key";
     30         String expectedUniqueId = "myUuid";
     31         TestGenerator generator = new TestGenerator(mContext, preferenceKey, expectedUniqueId);
     32 
     33         // Get a unique ID and ensure it is as expected.
     34         Assert.assertEquals(expectedUniqueId, generator.getUniqueId(null));
     35 
     36         // Asking for a unique ID again, should not try to regenerate it.
     37         mContext.clearFlag(FLAG_UUID);
     38         Assert.assertEquals(expectedUniqueId, generator.getUniqueId(null));
     39         assertFalse(mContext.isFlagSet(FLAG_UUID));
     40 
     41         // After a restart, the TestGenerator should read the UUID from a preference, instead of
     42         // asking for it.
     43         mContext.clearFlag(FLAG_UUID);
     44         generator = new TestGenerator(mContext, preferenceKey, null);
     45         Assert.assertEquals(expectedUniqueId, generator.getUniqueId(null));
     46         assertFalse(mContext.isFlagSet(FLAG_UUID));
     47     }
     48 
     49     @SmallTest
     50     @Feature({"Sync"})
     51     public void testTwoDifferentGeneratorsShouldUseDifferentPreferences() {
     52         String preferenceKey1 = "some_preference_key";
     53         String preferenceKey2 = "some_other_preference_key";
     54         String expectedUniqueId1 = "myUuid";
     55         String expectedUniqueId2 = "myOtherUuid";
     56         TestGenerator generator1 = new TestGenerator(mContext, preferenceKey1, expectedUniqueId1);
     57         TestGenerator generator2 = new TestGenerator(mContext, preferenceKey2, expectedUniqueId2);
     58 
     59         // Get a unique ID and ensure it is as expected.
     60         Assert.assertEquals(expectedUniqueId1, generator1.getUniqueId(null));
     61         Assert.assertEquals(expectedUniqueId2, generator2.getUniqueId(null));
     62 
     63         // Asking for a unique ID again, should not try to regenerate it.
     64         mContext.clearFlag(FLAG_UUID);
     65         Assert.assertEquals(expectedUniqueId1, generator1.getUniqueId(null));
     66         assertFalse(mContext.isFlagSet(FLAG_UUID));
     67         mContext.clearFlag(FLAG_UUID);
     68         Assert.assertEquals(expectedUniqueId2, generator2.getUniqueId(null));
     69         assertFalse(mContext.isFlagSet(FLAG_UUID));
     70    }
     71 
     72     private static class TestGenerator extends UuidBasedUniqueIdentificationGenerator {
     73         private final AdvancedMockContext mContext;
     74         private final String mUuid;
     75 
     76         TestGenerator(AdvancedMockContext context, String preferenceKey, String uuid) {
     77             super(context, preferenceKey);
     78             mContext = context;
     79             mUuid = uuid;
     80         }
     81 
     82         @Override
     83         String getUUID() {
     84             mContext.setFlag(FLAG_UUID);
     85             return mUuid;
     86         }
     87     }
     88 }
     89