1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)package org.chromium.sync.notifier; 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import android.test.InstrumentationTestCase; 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import android.test.suitebuilder.annotation.SmallTest; 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.chromium.base.test.util.Feature; 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import java.util.Arrays; 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** Tests for the {@link InvalidationClientNameProvider} */ 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)public class InvalidationClientNameProviderTest extends InstrumentationTestCase { 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private InvalidationClientNameProvider mProvider; 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @Override 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected void setUp() { 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mProvider = new InvalidationClientNameProvider(); 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @SmallTest 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @Feature({"Sync"}) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public void testFallbackClientId() { 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Test that the InvalidationController consistently returns the same ID even when it has to 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // resort to its "fallback" ID generation code. 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) byte[] id1 = mProvider.getInvalidatorClientName(); 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) byte[] id2 = mProvider.getInvalidatorClientName(); 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // We expect the returned IDs to be consistent in every call. 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assertTrue("Expected returned IDs to be consistent", Arrays.equals(id1, id2)); 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Even if initialize the generator late, the ID will remain consistent. 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registerHardCodedGenerator(mProvider); 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // IDs should still be consistent, even if we change the generator. 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // (In the real program, the generator should be set before anyone invokes the 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // getInvalidatorClientName() and never change afterwards. We test this anyway to make sure 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // nothing will blow up if someone accidentally violates that constraint.) 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) byte[] id3 = mProvider.getInvalidatorClientName(); 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assertTrue("Changing generators should not affect returned ID consistency", 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Arrays.equals(id2, id3)); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @SmallTest 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @Feature({"Sync"}) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public void testPreRegisteredGenerator() { 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registerHardCodedGenerator(mProvider); 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) byte[] id = mProvider.getInvalidatorClientName(); 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) byte[] id2 = mProvider.getInvalidatorClientName(); 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Expect that consistent IDs are maintained when using a custom generator, too. 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assertTrue("Custom generators should return consistent IDs", Arrays.equals(id, id2)); 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private static void registerHardCodedGenerator(InvalidationClientNameProvider provider) { 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) provider.setPreferredClientNameGenerator( 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new InvalidationClientNameGenerator() { 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public byte[] generateInvalidatorClientName() { 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return "Testable ID".getBytes(); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }); 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 67