ChromiumSyncAdapterTest.java revision 58537e28ecd584eab876aee8be7156509866d23a
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.chrome.browser.sync;
6
7import android.accounts.Account;
8import android.app.Application;
9import android.content.Context;
10import android.content.SyncResult;
11import android.os.Bundle;
12import android.test.suitebuilder.annotation.MediumTest;
13
14import com.google.protos.ipc.invalidation.Types;
15
16import org.chromium.base.test.util.Feature;
17import org.chromium.chrome.testshell.ChromiumTestShellTestBase;
18import org.chromium.sync.notifier.SyncStatusHelper;
19import org.chromium.sync.signin.AccountManagerHelper;
20
21public class ChromiumSyncAdapterTest extends ChromiumTestShellTestBase {
22
23    private static final Account TEST_ACCOUNT =
24            AccountManagerHelper.createAccountFromName("test@gmail.com");
25
26    private TestChromiumSyncAdapter mSyncAdapter;
27
28    private static class TestChromiumSyncAdapter extends ChromiumSyncAdapter {
29        private boolean mCommandlineInitialized;
30        private boolean mSyncRequested;
31        private boolean mSyncRequestedForAllTypes;
32        private int mObjectSource;
33        private String mObjectId;
34        private long mVersion;
35        private String mPayload;
36
37        public TestChromiumSyncAdapter(Context context, Application application) {
38            super(context, application);
39        }
40
41        @Override
42        protected boolean useAsyncStartup() {
43            return true;
44        }
45
46        @Override
47        protected void initCommandLine() {
48            mCommandlineInitialized = true;
49        }
50
51        @Override
52        public void requestSync(int objectSource, String objectId, long version, String payload) {
53            mObjectSource = objectSource;
54            mObjectId = objectId;
55            mVersion = version;
56            mPayload = payload;
57            mSyncRequested = true;
58        }
59
60        @Override
61        public void requestSyncForAllTypes() {
62            mSyncRequestedForAllTypes = true;
63        }
64    }
65
66    @Override
67    protected void setUp() throws Exception {
68        super.setUp();
69        launchChromiumTestShellWithBlankPage();
70        mSyncAdapter = new TestChromiumSyncAdapter(getInstrumentation().getTargetContext(),
71                getActivity().getApplication());
72    }
73
74    @MediumTest
75    @Feature({"Sync"})
76    public void testRequestSyncNoInvalidationData() {
77        SyncResult syncResult = new SyncResult();
78        mSyncAdapter.onPerformSync(TEST_ACCOUNT, new Bundle(),
79                SyncStatusHelper.get(getActivity()).getContractAuthority(), null, syncResult);
80        assertTrue(mSyncAdapter.mSyncRequestedForAllTypes);
81        assertFalse(mSyncAdapter.mSyncRequested);
82        assertTrue(mSyncAdapter.mCommandlineInitialized);
83    }
84
85    private void testRequestSyncSpecificDataType(boolean withObjectSource) {
86        SyncResult syncResult = new SyncResult();
87        Bundle extras = new Bundle();
88        if (withObjectSource) {
89            extras.putInt(ChromiumSyncAdapter.INVALIDATION_OBJECT_SOURCE_KEY, 61);
90        }
91        extras.putString(ChromiumSyncAdapter.INVALIDATION_OBJECT_ID_KEY, "objectid_value");
92        extras.putLong(ChromiumSyncAdapter.INVALIDATION_VERSION_KEY, 42);
93        extras.putString(ChromiumSyncAdapter.INVALIDATION_PAYLOAD_KEY, "payload_value");
94        mSyncAdapter.onPerformSync(TEST_ACCOUNT, extras,
95                SyncStatusHelper.get(getActivity()).getContractAuthority(), null, syncResult);
96        assertFalse(mSyncAdapter.mSyncRequestedForAllTypes);
97        assertTrue(mSyncAdapter.mSyncRequested);
98        if (withObjectSource) {
99            assertEquals(61, mSyncAdapter.mObjectSource);
100        } else {
101            assertEquals(Types.ObjectSource.Type.CHROME_SYNC.getNumber(),
102                    mSyncAdapter.mObjectSource);
103        }
104        assertEquals("objectid_value", mSyncAdapter.mObjectId);
105        assertEquals(42, mSyncAdapter.mVersion);
106        assertEquals("payload_value", mSyncAdapter.mPayload);
107        assertTrue(mSyncAdapter.mCommandlineInitialized);
108    }
109
110    @MediumTest
111    @Feature({"Sync"})
112    public void testRequestSyncSpecificDataType() {
113      testRequestSyncSpecificDataType(true /* withObjectSource */);
114    }
115
116    @MediumTest
117    @Feature({"Sync"})
118    public void testRequestSyncSpecificDataType_withoutObjectSource() {
119      testRequestSyncSpecificDataType(false /* withObjectSource */);
120    }
121
122    @MediumTest
123    @Feature({"Sync"})
124    public void testRequestSyncWhenChromeInBackground() throws InterruptedException {
125        DelayedSyncControllerTest.sendChromeToBackground(getActivity());
126        SyncResult syncResult = new SyncResult();
127        mSyncAdapter.onPerformSync(TEST_ACCOUNT, new Bundle(),
128                SyncStatusHelper.get(getActivity()).getContractAuthority(), null, syncResult);
129        assertFalse(mSyncAdapter.mSyncRequestedForAllTypes);
130        assertFalse(mSyncAdapter.mSyncRequested);
131        assertFalse(mSyncAdapter.mCommandlineInitialized);
132    }
133}
134