{"id":6227,"date":"2014-04-13T23:31:36","date_gmt":"2014-04-13T23:31:36","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2014\/04\/13\/run-plays-testbrowser-with-ssl-connection-collection-of-common-programming-errors\/"},"modified":"2014-04-13T23:31:36","modified_gmt":"2014-04-13T23:31:36","slug":"run-plays-testbrowser-with-ssl-connection-collection-of-common-programming-errors","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2014\/04\/13\/run-plays-testbrowser-with-ssl-connection-collection-of-common-programming-errors\/","title":{"rendered":"Run Play&#39;s TestBrowser with SSL connection?-Collection of common programming errors"},"content":{"rendered":"<p>Is it possible to write a test with Play&#8217;s built-in testing for an SSL page? I use the example Integration test:<\/p>\n<pre><code>import org.junit.*;\n\nimport play.mvc.*;\nimport play.test.*;\nimport play.libs.F.*;\n\nimport static play.test.Helpers.*;\nimport static org.fest.assertions.Assertions.*;\n\nimport static org.fluentlenium.core.filter.FilterConstructor.*;\n\npublic class IntegrationTest {\n\n    \/**\n     * add your integration test here\n     * in this example we just check if the welcome page is being shown\n     *\/\n    @Test\n    public void test() {\n        running(testServer(3333, fakeApplication(inMemoryDatabase())), HTMLUNIT, new Callback() {\n            public void invoke(TestBrowser browser) {\n\n                browser.goTo(\"http:\/\/localhost:3333\");\n                assertThat(browser.pageSource()).contains(\"My text\");\n            }\n        });\n    }\n}\n<\/code><\/pre>\n<p>But after my redirect to https, I get:<\/p>\n<pre><code>    [error] Test IntegrationTest.test failed: org.openqa.selenium.WebDriverException: com.gargoylesoftware.htmlunit.ScriptException: Exception invoking replace\n[error] Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28'\n[error] System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.3', java.version: '1.6.0_51'\n[error] Driver info: driver.version: HtmlUnitDriver\n[error]     at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:367)\n[error]     at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:346)\n[error]     at org.fluentlenium.core.Fluent.goTo(Fluent.java:228)\n[error]     at IntegrationTest$1.invoke(IntegrationTest.java:22)\n[error]     at IntegrationTest$1.invoke(IntegrationTest.java:20)\n[error]     at play.test.Helpers.running(Helpers.java:433)\n[error]     at IntegrationTest.test(IntegrationTest.java:20)\n[error]     ...\n[error] Caused by: com.gargoylesoftware.htmlunit.ScriptException: Exception invoking replace\n[error]     at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)\n[error]     at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:555)\n[error]     at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:530)\n[error]     at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptIfPossible(HtmlPage.java:979)\n[error]     at com.gargoylesoftware.htmlunit.html.HtmlScript.executeInlineScriptIfNeeded(HtmlScript.java:337)\n[error]     at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:415)\n[error]     at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:260)\n[error]     at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:276)\n[error]     at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:676)\n[error]     at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)\n[error]     at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:635)\n[error]     at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170)\n[error]     at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072)\n[error]     at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)\n[error]     at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330)\n[error]     at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3074)\n[error]     at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2041)\n[error]     at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:918)\n[error]     at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)\n[error]     at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)\n[error]     at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)\n[error]     at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:892)\n[error]     at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:241)\n[error]     at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:187)\n[error]     at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:268)\n[error]     at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:156)\n[error]     at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:434)\n[error]     at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:309)\n[error]     at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374)\n[error]     at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:359)\n[error]     ... 41 more\n[error] Caused by: java.lang.RuntimeException: Exception invoking replace\n[error]     at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:148)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.FunctionObject.call(FunctionObject.java:448)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1531)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)\n[error]     at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:275)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115)\n[error]     at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:546)\n[error]     at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:654)\n[error]     ... 72 more\n[error] Caused by: java.lang.RuntimeException: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated\n[error]     at com.gargoylesoftware.htmlunit.WebClient.download(WebClient.java:2233)\n[error]     at com.gargoylesoftware.htmlunit.javascript.host.Location.setHref(Location.java:226)\n[error]     at com.gargoylesoftware.htmlunit.javascript.host.Location.replace(Location.java:146)\n[error]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n[error]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n[error]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n[error]     at java.lang.reflect.Method.invoke(Method.java:597)\n[error]     at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:120)\n[error]     ... 82 more\n[error] Caused by: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated\n[error]     at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)\n[error]     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)\n[error]     at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)\n[error]     at com.gargoylesoftware.htmlunit.HtmlUnitSSLSocketFactory.connectSocket(HtmlUnitSSLSocketFactory.java:171)\n[error]     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)\n[error]     at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)\n[error]     at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)\n[error]     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)\n[error]     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)\n[error]     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:827)\n[error]     at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:178)\n[error]     at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1486)\n[error]     at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1403)\n[error]     at com.gargoylesoftware.htmlunit.WebClient.download(WebClient.java:2226)\n<\/code><\/pre>\n<p>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?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Is it possible to write a test with Play&#8217;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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-6227","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/6227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=6227"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/6227\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=6227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=6227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=6227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}