| Index: chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..86454049aa440be8ee9ad3deebc121a2cd3b8a16
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java
|
| @@ -0,0 +1,188 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.sync;
|
| +
|
| +import android.accounts.Account;
|
| +import android.app.Activity;
|
| +import android.content.Context;
|
| +import android.util.Log;
|
| +
|
| +import org.chromium.base.ThreadUtils;
|
| +import org.chromium.base.test.util.HostDrivenTest;
|
| +import org.chromium.chrome.browser.identity.UniqueIdentificationGenerator;
|
| +import org.chromium.chrome.browser.identity.UniqueIdentificationGeneratorFactory;
|
| +import org.chromium.chrome.browser.identity.UuidBasedUniqueIdentificationGenerator;
|
| +import org.chromium.chrome.test.util.browser.sync.SyncTestUtil;
|
| +import org.chromium.chrome.testshell.ChromiumTestShellActivity;
|
| +import org.chromium.chrome.testshell.ChromiumTestShellTestBase;
|
| +import org.chromium.chrome.testshell.sync.SyncController;
|
| +import org.chromium.content.browser.BrowserStartupController;
|
| +import org.chromium.content.browser.ContentView;
|
| +import org.chromium.content.browser.ContentViewCore;
|
| +import org.chromium.content.browser.test.util.Criteria;
|
| +import org.chromium.content.browser.test.util.CriteriaHelper;
|
| +import org.chromium.content.browser.test.util.JavaScriptUtils;
|
| +import org.chromium.content.browser.test.util.TestCallbackHelperContainer;
|
| +import org.chromium.content.common.CommandLine;
|
| +import org.chromium.sync.notifier.SyncStatusHelper;
|
| +import org.chromium.sync.signin.AccountManagerHelper;
|
| +import org.chromium.sync.signin.ChromeSigninController;
|
| +import org.chromium.sync.test.util.MockAccountManager;
|
| +import org.chromium.sync.test.util.MockSyncContentResolverDelegate;
|
| +
|
| +import java.lang.Override;
|
| +import java.lang.Runnable;
|
| +import java.util.concurrent.TimeoutException;
|
| +
|
| +/**
|
| + * Test suite for Sync.
|
| + */
|
| +public class SyncTest extends ChromiumTestShellTestBase {
|
| + private static final String TAG = "SyncTest";
|
| +
|
| + private static final String FOREIGN_SESSION_TEST_MACHINE_ID =
|
| + "DeleteForeignSessionTest_Machine_1";
|
| +
|
| + private SyncTestUtil.SyncTestContext mContext;
|
| + private MockAccountManager mAccountManager;
|
| + private SyncController mSyncController;
|
| +
|
| + @Override
|
| + protected void setUp() throws Exception {
|
| + super.setUp();
|
| +
|
| + clearAppData();
|
| +
|
| + // Mock out the account manager on the device.
|
| + mContext = new SyncTestUtil.SyncTestContext(getInstrumentation().getTargetContext());
|
| + mAccountManager = new MockAccountManager(mContext, getInstrumentation().getContext());
|
| + AccountManagerHelper.overrideAccountManagerHelperForTests(mContext, mAccountManager);
|
| + MockSyncContentResolverDelegate syncContentResolverDelegate =
|
| + new MockSyncContentResolverDelegate();
|
| + syncContentResolverDelegate.setMasterSyncAutomatically(true);
|
| + SyncStatusHelper.overrideSyncStatusHelperForTests(mContext, syncContentResolverDelegate);
|
| + // This call initializes the ChromeSigninController to use our test context.
|
| + ChromeSigninController.get(mContext);
|
| + startChromeBrowserProcessSync(getInstrumentation().getTargetContext());
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + mSyncController = SyncController.get(mContext);
|
| + }
|
| + });
|
| + SyncTestUtil.verifySyncServerIsRunning();
|
| + }
|
| +
|
| + private static void startChromeBrowserProcessSync(final Context targetContext) {
|
| + ThreadUtils.runOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + CommandLine.initFromFile("/data/local/tmp/chromium-testshell-command-line");
|
| + BrowserStartupController.get(targetContext).startBrowserProcessesSync(
|
| + BrowserStartupController.MAX_RENDERERS_LIMIT);
|
| + }
|
| + });
|
| + }
|
| +
|
| + @HostDrivenTest
|
| + public void testGetAboutSyncInfoYieldsValidData() throws Throwable {
|
| + setupTestAccountAndSignInToSync(FOREIGN_SESSION_TEST_MACHINE_ID);
|
| +
|
| + final SyncTestUtil.AboutSyncInfoGetter syncInfoGetter =
|
| + new SyncTestUtil.AboutSyncInfoGetter(getActivity());
|
| + runTestOnUiThread(syncInfoGetter);
|
| +
|
| + boolean gotInfo = CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return !syncInfoGetter.getAboutInfo().isEmpty();
|
| + }
|
| + }, SyncTestUtil.UI_TIMEOUT_MS, SyncTestUtil.CHECK_INTERVAL_MS);
|
| +
|
| + assertTrue("Couldn't get about info.", gotInfo);
|
| + }
|
| +
|
| + @HostDrivenTest
|
| + public void testAboutSyncPageDisplaysCurrentSyncStatus() throws InterruptedException {
|
| + setupTestAccountAndSignInToSync(FOREIGN_SESSION_TEST_MACHINE_ID);
|
| +
|
| + loadUrlWithSanitization("chrome://sync");
|
| + SyncTestUtil.AboutSyncInfoGetter aboutInfoGetter =
|
| + new SyncTestUtil.AboutSyncInfoGetter(getActivity());
|
| + try {
|
| + runTestOnUiThread(aboutInfoGetter);
|
| + } catch (Throwable t) {
|
| + Log.w(TAG,
|
| + "Exception while trying to fetch about sync info from ProfileSyncService.", t);
|
| + fail("Unable to fetch sync info from ProfileSyncService.");
|
| + }
|
| + assertFalse("About sync info should not be empty.",
|
| + aboutInfoGetter.getAboutInfo().isEmpty());
|
| + assertTrue("About sync info should have sync summary status.",
|
| + aboutInfoGetter.getAboutInfo().containsKey(SyncTestUtil.SYNC_SUMMARY_STATUS));
|
| + final String expectedSyncSummary =
|
| + aboutInfoGetter.getAboutInfo().get(SyncTestUtil.SYNC_SUMMARY_STATUS);
|
| +
|
| + Criteria checker = new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + final ContentViewCore contentViewCore = getContentViewCore(getActivity());
|
| + String innerHtml = "";
|
| + try {
|
| + final TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper helper =
|
| + new TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper();
|
| + innerHtml = JavaScriptUtils.executeJavaScriptAndWaitForResult(
|
| + contentViewCore, helper, "document.documentElement.innerHTML");
|
| + } catch (InterruptedException e) {
|
| + Log.w(TAG, "Interrupted while polling about:sync page for sync status.", e);
|
| + } catch (TimeoutException e) {
|
| + Log.w(TAG, "Interrupted while polling about:sync page for sync status.", e);
|
| + }
|
| + return innerHtml.contains(expectedSyncSummary);
|
| + }
|
| +
|
| + };
|
| + boolean hadExpectedStatus = CriteriaHelper.pollForCriteria(
|
| + checker, SyncTestUtil.UI_TIMEOUT_MS, SyncTestUtil.CHECK_INTERVAL_MS);
|
| + assertTrue("Sync status not present on about sync page: " + expectedSyncSummary,
|
| + hadExpectedStatus);
|
| + }
|
| +
|
| + private void setupTestAccountAndSignInToSync(
|
| + final String syncClientIdentifier)
|
| + throws InterruptedException {
|
| + Account defaultTestAccount = SyncTestUtil.setupTestAccount(mAccountManager,
|
| + SyncTestUtil.DEFAULT_TEST_ACCOUNT, SyncTestUtil.DEFAULT_PASSWORD,
|
| + SyncTestUtil.CHROME_SYNC_OAUTH2_SCOPE, SyncTestUtil.LOGIN_OAUTH2_SCOPE,
|
| + SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC);
|
| +
|
| + UniqueIdentificationGeneratorFactory.registerGenerator(
|
| + UuidBasedUniqueIdentificationGenerator.GENERATOR_ID,
|
| + new UniqueIdentificationGenerator() {
|
| + @Override
|
| + public String getUniqueId(String salt) {
|
| + return syncClientIdentifier;
|
| + }
|
| + }, true);
|
| +
|
| + SyncTestUtil.verifySyncIsSignedOut(getActivity());
|
| +
|
| + final Activity activity = launchChromiumTestShellWithBlankPage();
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + mSyncController.signIn(activity, SyncTestUtil.DEFAULT_TEST_ACCOUNT);
|
| + }
|
| + });
|
| +
|
| + SyncTestUtil.verifySyncIsSignedIn(mContext, defaultTestAccount);
|
| + }
|
| +
|
| + private static ContentViewCore getContentViewCore(ChromiumTestShellActivity activity) {
|
| + ContentView contentView = activity.getActiveContentView();
|
| + if (contentView == null) return null;
|
| + return contentView.getContentViewCore();
|
| + }
|
| +}
|
|
|