Commit 14c4fb3b authored by bsheedy's avatar bsheedy Committed by Commit Bot

Reland "Cleanup XR usage of EmbeddedTestServer"

This is a reland of a8f4b170

No changes from original CL (erroneously reverted)

Original change's description:
> Cleanup XR usage of EmbeddedTestServer
>
> Cleans up manual usage of EmbeddedTestServer in XR tests, which was both
> adding a lot of duplicate code and had the potential to fail to clean up
> the server if the test failed, which could then affect other tests.
>
> This is achieved by making EmbeddedTestServerRule lazy and applying it
> to all ChromeActivityTestRules, not just WebappActivityTestRule.
>
> Bug: 901923
> Change-Id: I431dac3ce2488a1a5762a1ab1f5ec68aea16c9f5
> Reviewed-on: https://chromium-review.googlesource.com/c/1320024
> Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
> Reviewed-by: Tommy Nyquist <nyquist@chromium.org>
> Reviewed-by: Paul Jensen <pauljensen@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#609556}

TBR=nyquist@chromium.org, pauljensen@chromium.org

Bug: 901923
Change-Id: I1d538672fc6b67d97a47f4bd165c4169e9b3f37c
Reviewed-on: https://chromium-review.googlesource.com/c/1344550Reviewed-by: default avatarBrian Sheedy <bsheedy@chromium.org>
Reviewed-by: default avatarTommy Nyquist <nyquist@chromium.org>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609767}
parent cb65f600
...@@ -13,10 +13,8 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V ...@@ -13,10 +13,8 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.PointF; import android.graphics.PointF;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.LargeTest; import android.support.test.filters.LargeTest;
import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
...@@ -35,7 +33,6 @@ import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils; ...@@ -35,7 +33,6 @@ import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.RenderTestRule; import org.chromium.chrome.test.util.RenderTestRule;
import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.net.test.EmbeddedTestServer;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
...@@ -71,7 +68,6 @@ public class VrBrowserDialogTest { ...@@ -71,7 +68,6 @@ public class VrBrowserDialogTest {
new RenderTestRule("components/test/data/permission_dialogs/render_tests"); new RenderTestRule("components/test/data/permission_dialogs/render_tests");
private VrBrowserTestFramework mVrBrowserTestFramework; private VrBrowserTestFramework mVrBrowserTestFramework;
private EmbeddedTestServer mServer;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
...@@ -81,13 +77,7 @@ public class VrBrowserDialogTest { ...@@ -81,13 +77,7 @@ public class VrBrowserDialogTest {
if (!sBaseDirectory.exists() && !sBaseDirectory.isDirectory()) { if (!sBaseDirectory.exists() && !sBaseDirectory.isDirectory()) {
Assert.assertTrue("Failed to make image capture directory", sBaseDirectory.mkdirs()); Assert.assertTrue("Failed to make image capture directory", sBaseDirectory.mkdirs());
} }
} mVrTestRule.getEmbeddedTestServerRule().setServerPort(SERVER_PORT);
@After
public void tearDown() throws Exception {
if (mServer != null) {
mServer.stopAndDestroyServer();
}
} }
private void captureScreen(String filenameBase) throws InterruptedException { private void captureScreen(String filenameBase) throws InterruptedException {
...@@ -115,12 +105,9 @@ public class VrBrowserDialogTest { ...@@ -115,12 +105,9 @@ public class VrBrowserDialogTest {
throws InterruptedException, TimeoutException { throws InterruptedException, TimeoutException {
// Trying to grant permissions on file:// URLs ends up hitting DCHECKS, so load from a local // Trying to grant permissions on file:// URLs ends up hitting DCHECKS, so load from a local
// server instead. // server instead.
if (mServer == null) {
mServer = EmbeddedTestServer.createAndStartServerWithPort(
InstrumentationRegistry.getContext(), SERVER_PORT);
}
mVrBrowserTestFramework.loadUrlAndAwaitInitialization( mVrBrowserTestFramework.loadUrlAndAwaitInitialization(
mServer.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(page)), mVrTestRule.getTestServer().getURL(
VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(page)),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
// Display the given permission prompt. // Display the given permission prompt.
......
...@@ -11,7 +11,6 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V ...@@ -11,7 +11,6 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V
import android.graphics.PointF; import android.graphics.PointF;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import org.junit.Assert; import org.junit.Assert;
...@@ -31,7 +30,6 @@ import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils; ...@@ -31,7 +30,6 @@ import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils;
import org.chromium.chrome.browser.vr.util.VrShellDelegateUtils; import org.chromium.chrome.browser.vr.util.VrShellDelegateUtils;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
...@@ -93,11 +91,10 @@ public class VrBrowserNativeUiTest { ...@@ -93,11 +91,10 @@ public class VrBrowserNativeUiTest {
@MediumTest @MediumTest
public void testPaymentRequest() throws InterruptedException { public void testPaymentRequest() throws InterruptedException {
// We can't request payment on file:// URLs, so use a local server. // We can't request payment on file:// URLs, so use a local server.
EmbeddedTestServer server =
EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
mVrBrowserTestFramework.loadUrlAndAwaitInitialization( mVrBrowserTestFramework.loadUrlAndAwaitInitialization(
server.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile( mVrTestRule.getTestServer().getURL(
"test_payment_request")), VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(
"test_payment_request")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
// Set up an observer so we'll know if the payment request is shown. // Set up an observer so we'll know if the payment request is shown.
AtomicBoolean requestShown = new AtomicBoolean(false); AtomicBoolean requestShown = new AtomicBoolean(false);
...@@ -124,7 +121,6 @@ public class VrBrowserNativeUiTest { ...@@ -124,7 +121,6 @@ public class VrBrowserNativeUiTest {
Assert.assertTrue("Payment request caused VR exit", Assert.assertTrue("Payment request caused VR exit",
VrShellDelegateUtils.getDelegateInstance().isVrEntryComplete()); VrShellDelegateUtils.getDelegateInstance().isVrEntryComplete());
mVrBrowserTestFramework.endTest(); mVrBrowserTestFramework.endTest();
server.stopAndDestroyServer();
} }
/** /**
......
...@@ -51,7 +51,6 @@ import org.chromium.chrome.test.util.ActivityUtils; ...@@ -51,7 +51,6 @@ import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.DOMUtils; import org.chromium.content_public.browser.test.util.DOMUtils;
import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
...@@ -542,11 +541,10 @@ public class VrBrowserTransitionTest { ...@@ -542,11 +541,10 @@ public class VrBrowserTransitionTest {
@MediumTest @MediumTest
public void testPermissionsPersistWhenEnteringVrBrowser() throws InterruptedException { public void testPermissionsPersistWhenEnteringVrBrowser() throws InterruptedException {
// Permissions don't work on file:// URLs, so use a local server. // Permissions don't work on file:// URLs, so use a local server.
EmbeddedTestServer server =
EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
mVrBrowserTestFramework.loadUrlAndAwaitInitialization( mVrBrowserTestFramework.loadUrlAndAwaitInitialization(
server.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile( mTestRule.getTestServer().getURL(
"test_permissions_persist_when_entering_vr_browser")), VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(
"test_permissions_persist_when_entering_vr_browser")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
// Ensure that permission requests initially trigger a prompt. // Ensure that permission requests initially trigger a prompt.
Assert.assertTrue("Camera permission would not trigger prompt", Assert.assertTrue("Camera permission would not trigger prompt",
...@@ -562,8 +560,9 @@ public class VrBrowserTransitionTest { ...@@ -562,8 +560,9 @@ public class VrBrowserTransitionTest {
mVrBrowserTestFramework.waitOnJavaScriptStep(); mVrBrowserTestFramework.waitOnJavaScriptStep();
// Reload the page and ensure that the permissions are still granted. // Reload the page and ensure that the permissions are still granted.
mVrBrowserTestFramework.loadUrlAndAwaitInitialization( mVrBrowserTestFramework.loadUrlAndAwaitInitialization(
server.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile( mTestRule.getTestServer().getURL(
"test_permissions_persist_when_entering_vr_browser")), VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(
"test_permissions_persist_when_entering_vr_browser")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
Assert.assertFalse("Camera permission would trigger prompt after reload", Assert.assertFalse("Camera permission would trigger prompt after reload",
mVrBrowserTestFramework.permissionRequestWouldTriggerPrompt("camera")); mVrBrowserTestFramework.permissionRequestWouldTriggerPrompt("camera"));
...@@ -573,7 +572,6 @@ public class VrBrowserTransitionTest { ...@@ -573,7 +572,6 @@ public class VrBrowserTransitionTest {
VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS); VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS);
mVrBrowserTestFramework.executeStepAndWait("stepRequestPermission()"); mVrBrowserTestFramework.executeStepAndWait("stepRequestPermission()");
mVrBrowserTestFramework.endTest(); mVrBrowserTestFramework.endTest();
server.stopAndDestroyServer();
} }
/** /**
......
...@@ -8,10 +8,8 @@ import static org.chromium.chrome.browser.vr.WebXrArTestFramework.PAGE_LOAD_TIME ...@@ -8,10 +8,8 @@ import static org.chromium.chrome.browser.vr.WebXrArTestFramework.PAGE_LOAD_TIME
import static org.chromium.chrome.browser.vr.WebXrArTestFramework.POLL_TIMEOUT_LONG_MS; import static org.chromium.chrome.browser.vr.WebXrArTestFramework.POLL_TIMEOUT_LONG_MS;
import android.os.Build; import android.os.Build;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
...@@ -30,7 +28,6 @@ import org.chromium.chrome.browser.vr.rules.XrActivityRestriction; ...@@ -30,7 +28,6 @@ import org.chromium.chrome.browser.vr.rules.XrActivityRestriction;
import org.chromium.chrome.browser.vr.util.XrTestRuleUtils; import org.chromium.chrome.browser.vr.util.XrTestRuleUtils;
import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
...@@ -52,9 +49,6 @@ public class WebXrArSessionTest { ...@@ -52,9 +49,6 @@ public class WebXrArSessionTest {
private ChromeActivityTestRule mTestRule; private ChromeActivityTestRule mTestRule;
private WebXrArTestFramework mWebXrArTestFramework; private WebXrArTestFramework mWebXrArTestFramework;
private EmbeddedTestServer mServer;
private boolean mShouldCreateServer;
public WebXrArSessionTest(Callable<ChromeActivityTestRule> callable) throws Exception { public WebXrArSessionTest(Callable<ChromeActivityTestRule> callable) throws Exception {
mTestRule = callable.call(); mTestRule = callable.call();
...@@ -64,21 +58,6 @@ public class WebXrArSessionTest { ...@@ -64,21 +58,6 @@ public class WebXrArSessionTest {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
mWebXrArTestFramework = new WebXrArTestFramework(mTestRule); mWebXrArTestFramework = new WebXrArTestFramework(mTestRule);
// WebappActivityTestRule automatically creates a test server, and creating multiple causes
// it to crash hitting a DCHECK. So, only handle the server ourselves if whatever test rule
// we're using doesn't create one itself.
mServer = mTestRule.getTestServer();
if (mServer == null) {
mShouldCreateServer = true;
mServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
}
}
@After
public void tearDown() throws Exception {
if (mServer != null && mShouldCreateServer) {
mServer.stopAndDestroyServer();
}
} }
/** /**
...@@ -89,8 +68,9 @@ public class WebXrArSessionTest { ...@@ -89,8 +68,9 @@ public class WebXrArSessionTest {
@XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL}) @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
public void testArRequestSessionSucceeds() throws InterruptedException { public void testArRequestSessionSucceeds() throws InterruptedException {
mWebXrArTestFramework.loadUrlAndAwaitInitialization( mWebXrArTestFramework.loadUrlAndAwaitInitialization(
mServer.getURL(WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile( mTestRule.getTestServer().getURL(
"test_ar_request_session_succeeds")), WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile(
"test_ar_request_session_succeeds")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
mWebXrArTestFramework.enterSessionWithUserGestureOrFail(); mWebXrArTestFramework.enterSessionWithUserGestureOrFail();
mWebXrArTestFramework.assertNoJavaScriptErrors(); mWebXrArTestFramework.assertNoJavaScriptErrors();
...@@ -105,8 +85,9 @@ public class WebXrArSessionTest { ...@@ -105,8 +85,9 @@ public class WebXrArSessionTest {
@XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL}) @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
public void testRepeatedArSessionsSucceed() throws InterruptedException { public void testRepeatedArSessionsSucceed() throws InterruptedException {
mWebXrArTestFramework.loadUrlAndAwaitInitialization( mWebXrArTestFramework.loadUrlAndAwaitInitialization(
mServer.getURL(WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile( mTestRule.getTestServer().getURL(
"test_ar_request_session_succeeds")), WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile(
"test_ar_request_session_succeeds")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
mWebXrArTestFramework.enterSessionWithUserGestureOrFail(); mWebXrArTestFramework.enterSessionWithUserGestureOrFail();
...@@ -124,8 +105,9 @@ public class WebXrArSessionTest { ...@@ -124,8 +105,9 @@ public class WebXrArSessionTest {
@XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL}) @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
public void testRepeatedArSessionsOnlyPromptPermissionsOnce() throws InterruptedException { public void testRepeatedArSessionsOnlyPromptPermissionsOnce() throws InterruptedException {
mWebXrArTestFramework.loadUrlAndAwaitInitialization( mWebXrArTestFramework.loadUrlAndAwaitInitialization(
mServer.getURL(WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile( mTestRule.getTestServer().getURL(
"test_ar_request_session_succeeds")), WebXrArTestFramework.getEmbeddedServerPathForHtmlTestFile(
"test_ar_request_session_succeeds")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
Assert.assertTrue("First AR session request did not trigger permission prompt", Assert.assertTrue("First AR session request did not trigger permission prompt",
mWebXrArTestFramework.permissionRequestWouldTriggerPrompt("camera")); mWebXrArTestFramework.permissionRequestWouldTriggerPrompt("camera"));
......
...@@ -15,7 +15,6 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V ...@@ -15,7 +15,6 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_V
import android.graphics.PointF; import android.graphics.PointF;
import android.os.Build; import android.os.Build;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.LargeTest; import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import android.view.MotionEvent; import android.view.MotionEvent;
...@@ -52,7 +51,6 @@ import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; ...@@ -52,7 +51,6 @@ import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.content_public.browser.ViewEventSink; import org.chromium.content_public.browser.ViewEventSink;
import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.TouchCommon; import org.chromium.content_public.browser.test.util.TouchCommon;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
...@@ -738,15 +736,10 @@ public class WebXrVrInputTest { ...@@ -738,15 +736,10 @@ public class WebXrVrInputTest {
private void testAppButtonLongPressDisplaysPermissionsImpl() throws InterruptedException { private void testAppButtonLongPressDisplaysPermissionsImpl() throws InterruptedException {
// Note that we need to pass in the WebContents to use throughout this because automatically // Note that we need to pass in the WebContents to use throughout this because automatically
// using the first tab's WebContents doesn't work in Incognito. // using the first tab's WebContents doesn't work in Incognito.
EmbeddedTestServer server = mTestRule.getTestServer();
boolean teardownServer = false;
if (server == null) {
server = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
teardownServer = true;
}
mWebXrVrTestFramework.loadUrlAndAwaitInitialization( mWebXrVrTestFramework.loadUrlAndAwaitInitialization(
server.getURL(WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile( mTestRule.getTestServer().getURL(
"generic_webxr_permission_page")), WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile(
"generic_webxr_permission_page")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
WebXrVrTestFramework.runJavaScriptOrFail("requestPermission({audio:true})", WebXrVrTestFramework.runJavaScriptOrFail("requestPermission({audio:true})",
POLL_TIMEOUT_SHORT_MS, mTestRule.getWebContents()); POLL_TIMEOUT_SHORT_MS, mTestRule.getWebContents());
...@@ -785,9 +778,6 @@ public class WebXrVrInputTest { ...@@ -785,9 +778,6 @@ public class WebXrVrInputTest {
UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, true /* visible */, () -> {}); UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, true /* visible */, () -> {});
NativeUiUtils.performActionAndWaitForVisibilityStatus( NativeUiUtils.performActionAndWaitForVisibilityStatus(
UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, false /* visible */, () -> {}); UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, false /* visible */, () -> {});
if (teardownServer) {
server.stopAndDestroyServer();
}
} }
/** /**
...@@ -825,16 +815,10 @@ public class WebXrVrInputTest { ...@@ -825,16 +815,10 @@ public class WebXrVrInputTest {
private void testInSessionPermissionRequestsImpl() throws InterruptedException { private void testInSessionPermissionRequestsImpl() throws InterruptedException {
// Note that we need to pass in the WebContents to use throughout this because automatically // Note that we need to pass in the WebContents to use throughout this because automatically
// using the first tab's WebContents doesn't work in Incognito. // using the first tab's WebContents doesn't work in Incognito.
EmbeddedTestServer server = mTestRule.getTestServer();
boolean teardownServer = false;
if (server == null) {
server = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
teardownServer = true;
}
mWebXrVrTestFramework.loadUrlAndAwaitInitialization( mWebXrVrTestFramework.loadUrlAndAwaitInitialization(
server.getURL(WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile( mTestRule.getTestServer().getURL(
"generic_webxr_permission_page")), WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile(
"generic_webxr_permission_page")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
mWebXrVrTestFramework.enterSessionWithUserGestureOrFail(mTestRule.getWebContents()); mWebXrVrTestFramework.enterSessionWithUserGestureOrFail(mTestRule.getWebContents());
NativeUiUtils.performActionAndWaitForVisibilityStatus( NativeUiUtils.performActionAndWaitForVisibilityStatus(
...@@ -861,9 +845,5 @@ public class WebXrVrInputTest { ...@@ -861,9 +845,5 @@ public class WebXrVrInputTest {
.runJavaScriptOrFail("lastPermissionRequestSucceeded", .runJavaScriptOrFail("lastPermissionRequestSucceeded",
POLL_TIMEOUT_SHORT_MS, mTestRule.getWebContents()) POLL_TIMEOUT_SHORT_MS, mTestRule.getWebContents())
.equals("true")); .equals("true"));
if (teardownServer) {
server.stopAndDestroyServer();
}
} }
} }
...@@ -9,7 +9,6 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_ ...@@ -9,7 +9,6 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_
import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM_OR_STANDALONE; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM_OR_STANDALONE;
import android.os.Build; import android.os.Build;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import org.junit.Before; import org.junit.Before;
...@@ -33,7 +32,6 @@ import org.chromium.chrome.browser.vr.util.PermissionUtils; ...@@ -33,7 +32,6 @@ import org.chromium.chrome.browser.vr.util.PermissionUtils;
import org.chromium.chrome.browser.vr.util.VrTestRuleUtils; import org.chromium.chrome.browser.vr.util.VrTestRuleUtils;
import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
...@@ -128,16 +126,10 @@ public class WebXrVrTabTest { ...@@ -128,16 +126,10 @@ public class WebXrVrTabTest {
} }
private void testPermissionsInOtherTabImpl(boolean incognito) throws InterruptedException { private void testPermissionsInOtherTabImpl(boolean incognito) throws InterruptedException {
EmbeddedTestServer server = mTestRule.getTestServer();
boolean teardownServer = false;
if (server == null) {
server = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
teardownServer = true;
}
mWebXrVrTestFramework.loadUrlAndAwaitInitialization( mWebXrVrTestFramework.loadUrlAndAwaitInitialization(
server.getURL(WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile( mTestRule.getTestServer().getURL(
"generic_webxr_permission_page")), WebXrVrTestFramework.getEmbeddedServerPathForHtmlTestFile(
"generic_webxr_permission_page")),
PAGE_LOAD_TIMEOUT_S); PAGE_LOAD_TIMEOUT_S);
// Be sure to store the stream we're given so that the permission is actually in use, as // Be sure to store the stream we're given so that the permission is actually in use, as
// otherwise the toast doesn't show up since another tab isn't actually using the // otherwise the toast doesn't show up since another tab isn't actually using the
...@@ -165,9 +157,5 @@ public class WebXrVrTabTest { ...@@ -165,9 +157,5 @@ public class WebXrVrTabTest {
mWebXrVrTestFramework.enterSessionWithUserGestureOrFail(mTestRule.getWebContents()); mWebXrVrTestFramework.enterSessionWithUserGestureOrFail(mTestRule.getWebContents());
NativeUiUtils.performActionAndWaitForVisibilityStatus( NativeUiUtils.performActionAndWaitForVisibilityStatus(
UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, true /* visible */, () -> {}); UserFriendlyElementName.WEB_XR_AUDIO_INDICATOR, true /* visible */, () -> {});
if (teardownServer) {
server.stopAndDestroyServer();
}
} }
} }
...@@ -13,7 +13,6 @@ import android.support.test.InstrumentationRegistry; ...@@ -13,7 +13,6 @@ import android.support.test.InstrumentationRegistry;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Rule;
import org.junit.runner.Description; import org.junit.runner.Description;
import org.junit.runners.model.Statement; import org.junit.runners.model.Statement;
...@@ -27,8 +26,6 @@ import org.chromium.content_public.browser.test.util.Criteria; ...@@ -27,8 +26,6 @@ import org.chromium.content_public.browser.test.util.Criteria;
import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.DOMUtils; import org.chromium.content_public.browser.test.util.DOMUtils;
import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.net.test.EmbeddedTestServer;
import org.chromium.net.test.EmbeddedTestServerRule;
/** /**
* Custom {@link ChromeActivityTestRule} for tests using {@link WebappActivity}. * Custom {@link ChromeActivityTestRule} for tests using {@link WebappActivity}.
...@@ -73,18 +70,10 @@ public class WebappActivityTestRule extends ChromeActivityTestRule<WebappActivit ...@@ -73,18 +70,10 @@ public class WebappActivityTestRule extends ChromeActivityTestRule<WebappActivit
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAOA3AvAAAdln8YgAAAAASUVORK5CYII="; + "AAAAAAAAAOA3AvAAAdln8YgAAAAASUVORK5CYII=";
@Rule
private EmbeddedTestServerRule mTestServerRule = new EmbeddedTestServerRule();
public WebappActivityTestRule() { public WebappActivityTestRule() {
super(WebappActivity0.class); super(WebappActivity0.class);
} }
@Override
public EmbeddedTestServer getTestServer() {
return mTestServerRule.getServer();
}
/** /**
* Creates the Intent that starts the WebAppActivity. This is meant to be overriden by other * Creates the Intent that starts the WebAppActivity. This is meant to be overriden by other
* tests in order for them to pass some specific values, but it defaults to a web app that just * tests in order for them to pass some specific values, but it defaults to a web app that just
...@@ -151,8 +140,7 @@ public class WebappActivityTestRule extends ChromeActivityTestRule<WebappActivit ...@@ -151,8 +140,7 @@ public class WebappActivityTestRule extends ChromeActivityTestRule<WebappActivit
} }
}; };
Statement testServerStatement = mTestServerRule.apply(webappTestRuleStatement, description); return super.apply(webappTestRuleStatement, description);
return super.apply(testServerStatement, description);
} }
/** /**
......
...@@ -19,6 +19,7 @@ import android.text.TextUtils; ...@@ -19,6 +19,7 @@ import android.text.TextUtils;
import android.view.Menu; import android.view.Menu;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Rule;
import org.junit.runner.Description; import org.junit.runner.Description;
import org.junit.runners.model.Statement; import org.junit.runners.model.Statement;
...@@ -60,6 +61,7 @@ import org.chromium.content_public.browser.test.util.CriteriaHelper; ...@@ -60,6 +61,7 @@ import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.content_public.browser.test.util.RenderProcessLimit; import org.chromium.content_public.browser.test.util.RenderProcessLimit;
import org.chromium.net.test.EmbeddedTestServer; import org.chromium.net.test.EmbeddedTestServer;
import org.chromium.net.test.EmbeddedTestServerRule;
import org.chromium.ui.KeyboardVisibilityDelegate; import org.chromium.ui.KeyboardVisibilityDelegate;
import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.PageTransition;
...@@ -92,6 +94,9 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe ...@@ -92,6 +94,9 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe
private T mSetActivity; private T mSetActivity;
private String mCurrentTestName; private String mCurrentTestName;
@Rule
private EmbeddedTestServerRule mTestServerRule = new EmbeddedTestServerRule();
public ChromeActivityTestRule(Class<T> activityClass) { public ChromeActivityTestRule(Class<T> activityClass) {
this(activityClass, false); this(activityClass, false);
} }
...@@ -104,7 +109,7 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe ...@@ -104,7 +109,7 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe
@Override @Override
public Statement apply(final Statement base, Description description) { public Statement apply(final Statement base, Description description) {
mCurrentTestName = description.getMethodName(); mCurrentTestName = description.getMethodName();
final Statement superBase = super.apply(new Statement() { Statement chromeActivityStatement = new Statement() {
@Override @Override
public void evaluate() throws Throwable { public void evaluate() throws Throwable {
mDefaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); mDefaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
...@@ -123,8 +128,9 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe ...@@ -123,8 +128,9 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe
base.evaluate(); base.evaluate();
} }
}, description); };
return superBase; Statement testServerStatement = mTestServerRule.apply(chromeActivityStatement, description);
return super.apply(testServerStatement, description);
} }
/** /**
...@@ -651,7 +657,14 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe ...@@ -651,7 +657,14 @@ public class ChromeActivityTestRule<T extends ChromeActivity> extends ActivityTe
* Gets the ChromeActivityTestRule's EmbeddedTestServer instance if it has one. * Gets the ChromeActivityTestRule's EmbeddedTestServer instance if it has one.
*/ */
public EmbeddedTestServer getTestServer() { public EmbeddedTestServer getTestServer() {
return null; return mTestServerRule.getServer();
}
/**
* Gets the underlying EmbeddedTestServerRule for getTestServer().
*/
public EmbeddedTestServerRule getEmbeddedTestServerRule() {
return mTestServerRule;
} }
/** /**
......
...@@ -9,39 +9,66 @@ import android.support.test.InstrumentationRegistry; ...@@ -9,39 +9,66 @@ import android.support.test.InstrumentationRegistry;
import org.junit.rules.TestWatcher; import org.junit.rules.TestWatcher;
import org.junit.runner.Description; import org.junit.runner.Description;
import javax.annotation.concurrent.GuardedBy;
/** /**
* Junit4 rule for starting embedded test server before a test starts, and shutting it down when it * Junit4 rule for starting embedded test server when necessary (i.e. when accessed via
* finishes. * {@link #getServer()}), and shutting it down when the test finishes.
*/ */
public class EmbeddedTestServerRule extends TestWatcher { public class EmbeddedTestServerRule extends TestWatcher {
EmbeddedTestServer mServer; private final Object mLock = new Object();
@GuardedBy("mLock")
private EmbeddedTestServer mServer;
@Override // The default value of 0 will result in the same behavior as createAndStartServer
protected void starting(Description description) { // (auto-selected port).
try { @GuardedBy("mLock")
mServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); private int mServerPort;
} catch (InterruptedException e) {
throw new EmbeddedTestServer.EmbeddedTestServerFailure("Test server didn't start");
}
super.starting(description);
}
@Override @Override
protected void finished(Description description) { protected void finished(Description description) {
super.finished(description); super.finished(description);
mServer.stopAndDestroyServer(); synchronized (mLock) {
if (mServer != null) {
mServer.stopAndDestroyServer();
}
}
} }
/** /**
* Get the test server. * Get the test server, creating and starting it if it doesn't exist yet.
* *
* @return the test server. * @return the test server.
*/ */
public EmbeddedTestServer getServer() { public EmbeddedTestServer getServer() {
return mServer; synchronized (mLock) {
if (mServer == null) {
try {
mServer = EmbeddedTestServer.createAndStartServerWithPort(
InstrumentationRegistry.getContext(), mServerPort);
} catch (InterruptedException e) {
throw new EmbeddedTestServer.EmbeddedTestServerFailure(
"Test server didn't start");
}
}
return mServer;
}
} }
public String getOrigin() { public String getOrigin() {
return mServer.getURL("/"); return getServer().getURL("/");
}
/**
* Sets the port that the server will be started with. Must be called before the first
* {@link #getServer()} call.
*
* @param port the port to start the server with, or 0 for an automatically selected one.
*/
public void setServerPort(int port) {
synchronized (mLock) {
assert mServer == null;
mServerPort = port;
}
} }
} }
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