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