Commit 0234b06a authored by Boris Sazonov's avatar Boris Sazonov Committed by Commit Bot

[Signin][Android] Revise SigninTest

Fixes a timeout in SigninTest by changing how the test waits for the
bookmark model to be loaded. It also cleans up the test and removes some
outdated chunks.

Bug: 1036532
Change-Id: Ic7124a46eea6d3088ebfbb921f13f735460a7d44
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1982544
Auto-Submit: Boris Sazonov <bsazonov@chromium.org>
Commit-Queue: Theresa  <twellington@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#727586}
parent 63d3885c
...@@ -4,8 +4,14 @@ ...@@ -4,8 +4,14 @@
package org.chromium.chrome.browser.signin; package org.chromium.chrome.browser.signin;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.matcher.RootMatchers.isDialog;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static org.hamcrest.Matchers.sameInstance;
import android.app.Instrumentation.ActivityMonitor; import android.app.Instrumentation.ActivityMonitor;
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
...@@ -28,7 +34,6 @@ import org.chromium.base.test.util.CommandLineFlags; ...@@ -28,7 +34,6 @@ import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Restriction; import org.chromium.base.test.util.Restriction;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.SyncFirstSetupCompleteSource;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge; import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.PrefServiceBridge; import org.chromium.chrome.browser.preferences.PrefServiceBridge;
...@@ -37,18 +42,17 @@ import org.chromium.chrome.browser.settings.MainPreferences; ...@@ -37,18 +42,17 @@ import org.chromium.chrome.browser.settings.MainPreferences;
import org.chromium.chrome.browser.settings.SettingsActivity; import org.chromium.chrome.browser.settings.SettingsActivity;
import org.chromium.chrome.browser.settings.sync.AccountManagementFragment; import org.chromium.chrome.browser.settings.sync.AccountManagementFragment;
import org.chromium.chrome.browser.settings.sync.SignInPreference; import org.chromium.chrome.browser.settings.sync.SignInPreference;
import org.chromium.chrome.browser.sync.ProfileSyncService;
import org.chromium.chrome.browser.tab.TabImpl; import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ActivityUtils; import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.chrome.test.util.BookmarkTestUtil;
import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeRestriction;
import org.chromium.chrome.test.util.browser.signin.SigninTestUtil; import org.chromium.chrome.test.util.browser.signin.SigninTestUtil;
import org.chromium.components.bookmarks.BookmarkId; import org.chromium.components.bookmarks.BookmarkId;
import org.chromium.components.signin.ChromeSigninController; import org.chromium.components.signin.ChromeSigninController;
import org.chromium.components.signin.metrics.SignoutReason; import org.chromium.components.signin.metrics.SignoutReason;
import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.content_public.browser.test.util.TestTouchUtils;
/** /**
* Test suite for sign in tests. * Test suite for sign in tests.
...@@ -150,27 +154,13 @@ public class SigninTest { ...@@ -150,27 +154,13 @@ public class SigninTest {
*/ */
private static class TestBookmarkModelObserver extends BookmarkBridge.BookmarkModelObserver { private static class TestBookmarkModelObserver extends BookmarkBridge.BookmarkModelObserver {
private final Object mLock = new Object(); private final Object mLock = new Object();
private boolean mIsLoaded;
private boolean mAdded; private boolean mAdded;
public TestBookmarkModelObserver(BookmarkBridge bookmarks) { TestBookmarkModelObserver() {
mIsLoaded = bookmarks.isBookmarkModelLoaded();
mAdded = false; mAdded = false;
} }
public void waitForBookmarkModelToLoad() { void waitForBookmarkAdded() {
synchronized (mLock) {
while (!mIsLoaded) {
try {
mLock.wait();
} catch (InterruptedException exception) {
// Ignore.
}
}
}
}
public void waitForBookmarkAdded() {
synchronized (mLock) { synchronized (mLock) {
while (!mAdded) { while (!mAdded) {
try { try {
...@@ -182,14 +172,6 @@ public class SigninTest { ...@@ -182,14 +172,6 @@ public class SigninTest {
} }
} }
@Override
public void bookmarkModelLoaded() {
synchronized (mLock) {
mIsLoaded = true;
mLock.notify();
}
}
@Override @Override
public void bookmarkNodeAdded(BookmarkBridge.BookmarkItem parent, int index) { public void bookmarkNodeAdded(BookmarkBridge.BookmarkItem parent, int index) {
synchronized (mLock) { synchronized (mLock) {
...@@ -211,7 +193,6 @@ public class SigninTest { ...@@ -211,7 +193,6 @@ public class SigninTest {
} }
} }
private Context mContext;
private SigninManager mSigninManager; private SigninManager mSigninManager;
private PrefServiceBridge mPrefService; private PrefServiceBridge mPrefService;
private BookmarkBridge mBookmarks; private BookmarkBridge mBookmarks;
...@@ -224,7 +205,6 @@ public class SigninTest { ...@@ -224,7 +205,6 @@ public class SigninTest {
SigninTestUtil.setUpAuthForTest(); SigninTestUtil.setUpAuthForTest();
mActivityTestRule.startMainActivityOnBlankPage(); mActivityTestRule.startMainActivityOnBlankPage();
mContext = InstrumentationRegistry.getTargetContext();
final TestSignInAllowedObserver signinAllowedObserver = new TestSignInAllowedObserver(); final TestSignInAllowedObserver signinAllowedObserver = new TestSignInAllowedObserver();
TestThreadUtils.runOnUiThreadBlocking(() -> { TestThreadUtils.runOnUiThreadBlocking(() -> {
...@@ -241,11 +221,13 @@ public class SigninTest { ...@@ -241,11 +221,13 @@ public class SigninTest {
Profile profile = Profile profile =
((TabImpl) mActivityTestRule.getActivity().getActivityTab()).getProfile(); ((TabImpl) mActivityTestRule.getActivity().getActivityTab()).getProfile();
mBookmarks = new BookmarkBridge(profile); mBookmarks = new BookmarkBridge(profile);
mBookmarks.loadFakePartnerBookmarkShimForTesting();
});
BookmarkTestUtil.waitForBookmarkModelLoaded();
TestThreadUtils.runOnUiThreadBlocking(() -> {
// Add a test bookmark, to verify later if sign out cleared the bookmarks. // Add a test bookmark, to verify later if sign out cleared the bookmarks.
mTestBookmarkModelObserver = new TestBookmarkModelObserver(mBookmarks); mTestBookmarkModelObserver = new TestBookmarkModelObserver();
mBookmarks.addObserver(mTestBookmarkModelObserver); mBookmarks.addObserver(mTestBookmarkModelObserver);
mTestBookmarkModelObserver.waitForBookmarkModelToLoad();
Assert.assertEquals(0, mBookmarks.getChildCount(mBookmarks.getMobileFolderId())); Assert.assertEquals(0, mBookmarks.getChildCount(mBookmarks.getMobileFolderId()));
BookmarkId mTestBookmark = mBookmarks.addBookmark( BookmarkId mTestBookmark = mBookmarks.addBookmark(
mBookmarks.getMobileFolderId(), 0, "Test Bookmark", "http://google.com"); mBookmarks.getMobileFolderId(), 0, "Test Bookmark", "http://google.com");
...@@ -335,22 +317,8 @@ public class SigninTest { ...@@ -335,22 +317,8 @@ public class SigninTest {
SigninActivity signinActivity = SigninActivity signinActivity =
(SigninActivity) InstrumentationRegistry.getInstrumentation().waitForMonitor( (SigninActivity) InstrumentationRegistry.getInstrumentation().waitForMonitor(
monitor); monitor);
Button positiveButton = (Button) signinActivity.findViewById(R.id.positive_button); onView(withId(R.id.positive_button)).perform(click());
// Press 'sign in'.
TestTouchUtils.performClickOnMainSync(
InstrumentationRegistry.getInstrumentation(), positiveButton);
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
// Press 'ok, got it' (the same button is reused).
TestTouchUtils.performClickOnMainSync(
InstrumentationRegistry.getInstrumentation(), positiveButton);
// Sync doesn't actually start up until we finish the sync setup. This usually happens
// in the resume of the Main activity, but we forcefully do this here.
InstrumentationRegistry.getInstrumentation().waitForIdleSync(); InstrumentationRegistry.getInstrumentation().waitForIdleSync();
TestThreadUtils.runOnUiThreadBlocking(
()
-> ProfileSyncService.get().setFirstSetupComplete(
SyncFirstSetupCompleteSource.BASIC_FLOW));
settingsActivity.finish(); settingsActivity.finish();
// Verify that signin succeeded. // Verify that signin succeeded.
...@@ -417,10 +385,10 @@ public class SigninTest { ...@@ -417,10 +385,10 @@ public class SigninTest {
InstrumentationRegistry.getInstrumentation().waitForIdleSync(); InstrumentationRegistry.getInstrumentation().waitForIdleSync();
DialogFragment fragment = ActivityUtils.waitForFragment(activity, tag); DialogFragment fragment = ActivityUtils.waitForFragment(activity, tag);
AlertDialog dialog = (AlertDialog) fragment.getDialog(); AlertDialog dialog = (AlertDialog) fragment.getDialog();
Assert.assertTrue(dialog != null); Assert.assertNotNull(dialog);
Assert.assertTrue(dialog.isShowing()); Assert.assertTrue(dialog.isShowing());
Button button = dialog.getButton(DialogInterface.BUTTON_POSITIVE); Button button = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
Assert.assertNotNull("Could not find the accept button.", button); Assert.assertNotNull("Could not find the accept button.", button);
TestTouchUtils.performClickOnMainSync(InstrumentationRegistry.getInstrumentation(), button); onView(sameInstance(button)).inRoot(isDialog()).perform(click());
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment