Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(931)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java

Issue 22914014: Add more control over sync for Chromium testshell. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added comments for ProfileSyncServiceAndroid Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698