Run Play's TestBrowser with SSL connection?-Collection of common programming errors
Is it possible to write a test with Play’s built-in testing for an SSL page? I use the example Integration test:
import org.junit.*;
import play.mvc.*;
import play.test.*;
import play.libs.F.*;
import static play.test.Helpers.*;
import static org.fest.assertions.Assertions.*;
import static org.fluentlenium.core.filter.FilterConstructor.*;
public class IntegrationTest {
/**
* add your integration test here
* in this example we just check if the welcome page is being shown
*/
@Test
public void test() {
running(testServer(3333, fakeApplication(inMemoryDatabase())), HTMLUNIT, new Callback() {
public void invoke(TestBrowser browser) {
browser.goTo("http://localhost:3333");
assertThat(browser.pageSource()).contains("My text");
}
});
}
}
But after my redirect to https, I get:
[error] Test IntegrationTest.test failed: org.openqa.selenium.WebDriverException: com.gargoylesoftware.htmlunit.ScriptException: Exception invoking replace
[error] Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28'
[error] System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.3', java.version: '1.6.0_51'
[error] Driver info: driver.version: HtmlUnitDriver
[error] at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:367)
[error] at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:346)
[error] at org.fluentlenium.core.Fluent.goTo(Fluent.java:228)
[error] at IntegrationTest$1.invoke(IntegrationTest.java:22)
[error] at IntegrationTest$1.invoke(IntegrationTest.java:20)
[error] at play.test.Helpers.running(Helpers.java:433)
[error] at IntegrationTest.test(IntegrationTest.java:20)
[error] ...
[error] Caused by: com.gargoylesoftware.htmlunit.ScriptException: Exception invoking replace
[error] at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
[error] at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
[error] at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
[error] at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:555)
[error] at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:530)
[error] at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptIfPossible(HtmlPage.java:979)
[error] at com.gargoylesoftware.htmlunit.html.HtmlScript.executeInlineScriptIfNeeded(HtmlScript.java:337)
[error] at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:415)
[error] at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:260)
[error] at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:276)
[error] at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:676)
[error] at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
[error] at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:635)
[error] at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170)
[error] at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072)
[error] at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
[error] at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330)
[error] at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3074)
[error] at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2041)
[error] at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:918)
[error] at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
[error] at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
[error] at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
[error] at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:892)
[error] at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:241)
[error] at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:187)
[error] at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:268)
[error] at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:156)
[error] at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:434)
[error] at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:309)
[error] at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374)
[error] at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:359)
[error] ... 41 more
[error] Caused by: java.lang.RuntimeException: Exception invoking replace
[error] at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:148)
[error] at net.sourceforge.htmlunit.corejs.javascript.FunctionObject.call(FunctionObject.java:448)
[error] at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1531)
[error] at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)
[error] at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)
[error] at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)
[error] at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:275)
[error] at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)
[error] at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115)
[error] at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:546)
[error] at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:654)
[error] ... 72 more
[error] Caused by: java.lang.RuntimeException: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
[error] at com.gargoylesoftware.htmlunit.WebClient.download(WebClient.java:2233)
[error] at com.gargoylesoftware.htmlunit.javascript.host.Location.setHref(Location.java:226)
[error] at com.gargoylesoftware.htmlunit.javascript.host.Location.replace(Location.java:146)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[error] at java.lang.reflect.Method.invoke(Method.java:597)
[error] at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:120)
[error] ... 82 more
[error] Caused by: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
[error] at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
[error] at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
[error] at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)
[error] at com.gargoylesoftware.htmlunit.HtmlUnitSSLSocketFactory.connectSocket(HtmlUnitSSLSocketFactory.java:171)
[error] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
[error] at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
[error] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
[error] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
[error] at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
[error] at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:827)
[error] at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:178)
[error] at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1486)
[error] at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1403)
[error] at com.gargoylesoftware.htmlunit.WebClient.download(WebClient.java:2226)
When I search for Play! tests using SSL, they all seem to be using PhantomJS- is it possible to do this by simply modifying the original test?