-
Feature Request
-
Resolution: Unresolved
-
Major
-
warp_1.0.0.Alpha2
When web pages are protected by a security-constraint (web.xml) that requires authentication, Warp JSF runs into a SynchronizationPoint$ServerResponseTimeoutException while executing server-side tests using inspect(), like the second one below. Standard FORM authentication (via j_security_check) and Web Driver's htmlunit browser are used in this case.
More observations:
- Client-side tests work just fine (first test below)
- Disabling the security-constraint (no authentication) allows the server-side test to finish successfully
@Test @RunAsClient public void testOnClient() { browser.get(deploymentUrl + "index.xhtml"); doLoginIfNeeded(browser); // this works just fine! Assert.assertEquals("INDEX", browser.getTitle()); } @Test @RunAsClient public void testOnServer() { Warp.initiate(new Activity() { @Override public void perform() { browser.get(deploymentUrl + "index.xhtml"); doLoginIfNeeded(browser); // this works just fine! Assert.assertEquals("INDEX", browser.getTitle()); } }) .group() .observe(request().uri().contains("index.xhtml")) .inspect(new Inspection() { private static final long serialVersionUID = 1L; @ArquillianResource private FacesContext facesContext; @AfterPhase(RENDER_RESPONSE) @SuppressWarnings("unused") public void testNavigation() { // timeout exception before we reach this Assert.assertTrue(facesContext.getViewRoot().getViewId().contains("index.xhtml")); } }) .execute(); }
Note: doLoginIfNeeded() is just a helper method that enters user name and password and hits the login button if the login form popped-up (in case there's no active session) following the initial browser.get() request in the test.
Exception:
org.jboss.arquillian.warp.impl.client.execution.SynchronizationPoint$ServerResponseTimeoutException at org.jboss.arquillian.warp.impl.client.execution.SynchronizationPoint.awaitResponses(SynchronizationPoint.java:155) at org.jboss.arquillian.warp.impl.client.execution.DefaultExecutionSynchronizer.waitForResponse(DefaultExecutionSynchronizer.java:60) at org.jboss.arquillian.warp.impl.client.execution.WarpExecutionObserver.awaitResponse(WarpExecutionObserver.java:64) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135) at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115) at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67) at org.jboss.arquillian.warp.impl.client.execution.DefaultWarpExecutor.awaitServerExecution(DefaultWarpExecutor.java:95) at org.jboss.arquillian.warp.impl.client.execution.DefaultWarpExecutor.execute(DefaultWarpExecutor.java:65) at org.jboss.arquillian.warp.impl.client.execution.WarpExecutionObserver.executeWarp(WarpExecutionObserver.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597)