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