Commit 897fe3be authored by ckitagawa's avatar ckitagawa Committed by Chromium LUCI CQ

[CSN] Re-enable flaky test

This CL re-enables the ContinuousSearchTabHelperTest. To de-flake, the
following actions were taken:
- Change how URLs were loaded.
- Increase time delay for Handler.postDelayed.
- Added more helpful debugging information in the event the loadUrl
  fails.

Tested using run-swarmed on Nexus 5X and appears to no longer be flaky.

Bug: 1157325
Change-Id: I5023c4ef3e3055ac007ac5dfd36577c42dde050f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2626426Reviewed-by: default avatarMehran Mahmoudi <mahmoudi@chromium.org>
Commit-Queue: Calder Kitagawa <ckitagawa@chromium.org>
Cr-Commit-Position: refs/heads/master@{#844799}
parent 90365fc7
...@@ -21,16 +21,16 @@ import org.junit.runner.RunWith; ...@@ -21,16 +21,16 @@ import org.junit.runner.RunWith;
import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabObserver;
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.browser.Features; import org.chromium.chrome.test.util.browser.Features;
import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.content_public.common.ContentSwitches; import org.chromium.content_public.common.ContentSwitches;
import org.chromium.net.test.EmbeddedTestServer; import org.chromium.net.test.EmbeddedTestServer;
import org.chromium.url.GURL; import org.chromium.url.GURL;
...@@ -80,7 +80,7 @@ public class ContinuousSearchTabHelperTest { ...@@ -80,7 +80,7 @@ public class ContinuousSearchTabHelperTest {
new Handler().postDelayed(() -> { new Handler().postDelayed(() -> {
mListener.onResult(new SearchResultMetadata( mListener.onResult(new SearchResultMetadata(
mSearchUrl, mQuery, 0, new ArrayList<SearchResultGroup>())); mSearchUrl, mQuery, 0, new ArrayList<SearchResultGroup>()));
}, 50); }, 100);
} }
@Override @Override
...@@ -132,34 +132,106 @@ public class ContinuousSearchTabHelperTest { ...@@ -132,34 +132,106 @@ public class ContinuousSearchTabHelperTest {
mServer.stopAndDestroyServer(); mServer.stopAndDestroyServer();
} }
/**
* Loads a tab with a provided set of params. Will exit via {@link Assert#fail()} if the tab
* fails to load, crashes, or exceeds the a certain timeout window. Otherwise, the tab will
* be successfully loaded upon returning.
* @param tab The tab to load.
* @param params The URL and loading type for the tab.
*/
private void loadUrl(Tab tab, LoadUrlParams params) {
final CallbackHelper startedCallback = new CallbackHelper();
final CallbackHelper loadedCallback = new CallbackHelper();
final CallbackHelper failedCallback = new CallbackHelper();
final CallbackHelper crashedCallback = new CallbackHelper();
TabObserver observer = new EmptyTabObserver() {
@Override
public void onPageLoadStarted(Tab tab, GURL url) {
startedCallback.notifyCalled();
}
@Override
public void onPageLoadFinished(Tab tab, GURL url) {
loadedCallback.notifyCalled();
}
@Override
public void onPageLoadFailed(Tab tab, int errorCode) {
failedCallback.notifyCalled();
}
@Override
public void onCrash(Tab tab) {
crashedCallback.notifyCalled();
}
};
tab.addObserver(observer);
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { tab.loadUrl(params); });
// Ensure the tab loads.
try {
startedCallback.waitForCallback(0, 1);
} catch (TimeoutException e) {
Assert.fail("Tab never started loading.");
}
boolean timedOut = false;
try {
loadedCallback.waitForCallback(0, 1);
} catch (TimeoutException e) {
timedOut = true;
}
// If the tab doesn't fully load, try to determine what happened for easier debugging.
if (timedOut) {
try {
failedCallback.waitForCallback(0, 1);
Assert.fail("Tab failed to load.");
} catch (TimeoutException e) {
// Tab didn't fail to load so continue.
}
try {
crashedCallback.waitForCallback(0, 1);
Assert.fail("Tab crashed while loading.");
} catch (TimeoutException e) {
// Tab didn't crash so continue.
}
Assert.fail("Tab timed out while loading.");
}
tab.removeObserver(observer);
}
@Test @Test
@MediumTest @MediumTest
@DisabledTest(message = "https://crbug.com/1157325")
public void testContinuousSearchFakeResults() throws TimeoutException { public void testContinuousSearchFakeResults() throws TimeoutException {
WaitableSearchResultUserDataObserver observer = new WaitableSearchResultUserDataObserver(); WaitableSearchResultUserDataObserver observer = new WaitableSearchResultUserDataObserver();
TestThreadUtils.runOnUiThreadBlocking(() -> { // Load a SRP URL.
Tab tab = mActivityTestRule.getActivity().getActivityTab(); final Tab tab = mActivityTestRule.getActivity().getActivityTab();
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
SearchResultUserData searchResultUserData = SearchResultUserData.getForTab(tab); SearchResultUserData searchResultUserData = SearchResultUserData.getForTab(tab);
Assert.assertNotNull(searchResultUserData); Assert.assertNotNull(searchResultUserData);
searchResultUserData.addObserver(observer); searchResultUserData.addObserver(observer);
tab.loadUrl(new LoadUrlParams(
mServer.getURLWithHostName("www.google.com", TEST_URL + "?q=cat+dog")));
}); });
loadUrl(tab,
new LoadUrlParams(
mServer.getURLWithHostName("www.google.com", TEST_URL + "?q=cat+dog")));
observer.mOnUpdateCallbackHelper.waitForFirst(5000, TimeUnit.MILLISECONDS); observer.mOnUpdateCallbackHelper.waitForFirst(5000, TimeUnit.MILLISECONDS);
Assert.assertEquals("cat dog", observer.mMetadata.getQuery());
TestThreadUtils.runOnUiThreadBlocking(() -> { // Check the retuned data.
Tab tab = mActivityTestRule.getActivity().getActivityTab(); Assert.assertEquals("cat dog", observer.mMetadata.getQuery());
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
SearchResultUserData searchResultUserData = SearchResultUserData.getForTab(tab); SearchResultUserData searchResultUserData = SearchResultUserData.getForTab(tab);
Assert.assertTrue(searchResultUserData.isValid()); Assert.assertTrue(searchResultUserData.isValid());
String url = mServer.getURLWithHostName("www.google.com", TEST_URL + "?q=cat+dog"); String url = mServer.getURLWithHostName("www.google.com", TEST_URL + "?q=cat+dog");
Assert.assertTrue(observer.mMetadata.getResultUrl().getSpec().startsWith(url)); Assert.assertTrue(observer.mMetadata.getResultUrl().getSpec().startsWith(url));
Assert.assertTrue(observer.mUrl.getSpec().startsWith(url)); Assert.assertTrue(observer.mUrl.getSpec().startsWith(url));
tab.loadUrl(new LoadUrlParams(UrlConstants.ABOUT_URL));
}); });
// Invalidate the data.
loadUrl(tab, new LoadUrlParams(UrlConstants.ABOUT_URL));
observer.mInvalidateCallbackHelper.waitForFirst(5000, TimeUnit.MILLISECONDS); observer.mInvalidateCallbackHelper.waitForFirst(5000, TimeUnit.MILLISECONDS);
} }
} }
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