13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file.
43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)package org.chromium.chrome.browser.identity;
63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import android.test.InstrumentationTestCase;
83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import android.test.suitebuilder.annotation.SmallTest;
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import junit.framework.Assert;
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import org.chromium.base.test.util.AdvancedMockContext;
133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import org.chromium.base.test.util.Feature;
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)public class UuidBasedUniqueIdentificationGeneratorTest extends InstrumentationTestCase {
163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    private static final String FLAG_UUID = "uuid";
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    private AdvancedMockContext mContext;
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    @Override
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    protected void setUp() throws Exception {
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        super.setUp();
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        mContext = new AdvancedMockContext(getInstrumentation().getTargetContext());
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    }
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    @SmallTest
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    @Feature({"Sync"})
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    public void testGenerationAndRestorationOfUuid() {
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        String preferenceKey = "some_preference_key";
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        String expectedUniqueId = "myUuid";
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        TestGenerator generator = new TestGenerator(mContext, preferenceKey, expectedUniqueId);
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        // Get a unique ID and ensure it is as expected.
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        Assert.assertEquals(expectedUniqueId, generator.getUniqueId(null));
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        // Asking for a unique ID again, should not try to regenerate it.
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        mContext.clearFlag(FLAG_UUID);
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        Assert.assertEquals(expectedUniqueId, generator.getUniqueId(null));
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        assertFalse(mContext.isFlagSet(FLAG_UUID));
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        // After a restart, the TestGenerator should read the UUID from a preference, instead of
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        // asking for it.
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        mContext.clearFlag(FLAG_UUID);
443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        generator = new TestGenerator(mContext, preferenceKey, null);
453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        Assert.assertEquals(expectedUniqueId, generator.getUniqueId(null));
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        assertFalse(mContext.isFlagSet(FLAG_UUID));
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    }
483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    @SmallTest
503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    @Feature({"Sync"})
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    public void testTwoDifferentGeneratorsShouldUseDifferentPreferences() {
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        String preferenceKey1 = "some_preference_key";
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        String preferenceKey2 = "some_other_preference_key";
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        String expectedUniqueId1 = "myUuid";
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        String expectedUniqueId2 = "myOtherUuid";
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        TestGenerator generator1 = new TestGenerator(mContext, preferenceKey1, expectedUniqueId1);
573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        TestGenerator generator2 = new TestGenerator(mContext, preferenceKey2, expectedUniqueId2);
583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        // Get a unique ID and ensure it is as expected.
603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        Assert.assertEquals(expectedUniqueId1, generator1.getUniqueId(null));
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        Assert.assertEquals(expectedUniqueId2, generator2.getUniqueId(null));
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        // Asking for a unique ID again, should not try to regenerate it.
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        mContext.clearFlag(FLAG_UUID);
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        Assert.assertEquals(expectedUniqueId1, generator1.getUniqueId(null));
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        assertFalse(mContext.isFlagSet(FLAG_UUID));
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        mContext.clearFlag(FLAG_UUID);
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        Assert.assertEquals(expectedUniqueId2, generator2.getUniqueId(null));
693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        assertFalse(mContext.isFlagSet(FLAG_UUID));
703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)   }
713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    private static class TestGenerator extends UuidBasedUniqueIdentificationGenerator {
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        private final AdvancedMockContext mContext;
743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        private final String mUuid;
753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        TestGenerator(AdvancedMockContext context, String preferenceKey, String uuid) {
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            super(context, preferenceKey);
783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            mContext = context;
793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            mUuid = uuid;
803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        }
813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        @Override
833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        String getUUID() {
843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            mContext.setFlag(FLAG_UUID);
853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            return mUuid;
863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        }
873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    }
883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
89