bug 463163: Test case for websocket server enpoint packed in an ordered web fragment.
diff --git a/build-web-container/build.xml b/build-web-container/build.xml
index 59a0611..857cccd 100644
--- a/build-web-container/build.xml
+++ b/build-web-container/build.xml
@@ -36,6 +36,7 @@
<pathelement location="../test-bundles/war-with-context-xml-cross-context"/>
<pathelement location="../test-bundles/war-with-annotations"/>
<pathelement location="../test-bundles/war-with-resource-references"/>
+ <pathelement location="../test-bundles/websocket"/>
</path>
<path id="doc.bundles">
diff --git a/org.eclipse.gemini.web.test/.classpath b/org.eclipse.gemini.web.test/.classpath
index 2bbadaf..ca7184c 100644
--- a/org.eclipse.gemini.web.test/.classpath
+++ b/org.eclipse.gemini.web.test/.classpath
@@ -20,6 +20,7 @@
<classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.catalina.tribes/8.0.21/org.apache.catalina.tribes-8.0.21.jar" sourcepath="/IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.catalina.tribes/8.0.21/org.apache.catalina.tribes.source-8.0.21.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.coyote/8.0.21/org.apache.coyote-8.0.21.jar" sourcepath="/IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.coyote/8.0.21/org.apache.coyote.source-8.0.21.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/javax.servlet/3.1.0.20150414/javax.servlet-3.1.0.20150414.jar" sourcepath="/IVY_CACHE/org.eclipse.virgo.mirrored/javax.servlet/3.1.0.20150414/javax.servlet-sources-3.1.0.20150414.jar"/>
+ <classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/javax.websocket/1.1.0.v201401130840/javax.websocket-1.1.0.v201401130840.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.easymock/com.springsource.org.easymock/2.3.0/com.springsource.org.easymock-2.3.0.jar" sourcepath="/IVY_CACHE/org.easymock/com.springsource.org.easymock/2.3.0/com.springsource.org.easymock-sources-2.3.0.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.gemini.web.tomcat"/>
<classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.test/org.eclipse.virgo.test.framework/3.7.0.BUILD-20150104200311/org.eclipse.virgo.test.framework-3.7.0.BUILD-20150104200311.jar" sourcepath="/IVY_CACHE/org.eclipse.virgo.test/org.eclipse.virgo.test.framework/3.7.0.BUILD-20150104200311/org.eclipse.virgo.test.framework-sources-3.7.0.BUILD-20150104200311.jar"/>
diff --git a/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java b/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java
index bc61361..fae160f 100644
--- a/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java
+++ b/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java
@@ -31,6 +31,7 @@
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.Socket;
+import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
@@ -38,8 +39,17 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContext;
+import javax.websocket.ClientEndpointConfig;
+import javax.websocket.ContainerProvider;
+import javax.websocket.Endpoint;
+import javax.websocket.EndpointConfig;
+import javax.websocket.MessageHandler;
+import javax.websocket.Session;
+import javax.websocket.WebSocketContainer;
import org.eclipse.gemini.web.core.spi.ServletContainer;
import org.eclipse.gemini.web.core.spi.WebApplicationHandle;
@@ -96,6 +106,8 @@
private static final String LOCATION_WAR_WITH_RESOURCE_REFERENCES = "../org.eclipse.gemini.web.test/target/resources/war-with-resource-references.war?Web-ContextPath=/war-with-resource-references";
+ private static final String LOCATION_WEBSOCKET = "../org.eclipse.gemini.web.test/target/resources/websocket.war?Web-ContextPath=/websocket";
+
private BundleContext bundleContext;
private ServletContainer container;
@@ -611,6 +623,57 @@
}
}
+ /**
+ * Test case for https://bugs.eclipse.org/bugs/show_bug.cgi?id=463163
+ */
+ @Test
+ public void testServerEndpointInOrderedWebFragment() throws Exception {
+ Object[] result = startWebApplicationWith(LOCATION_PREFIX + LOCATION_WEBSOCKET, "/websocket");
+
+ try {
+ validateURL("http://localhost:8080/websocket/index.html");
+
+ try (Session wsSession = connectToServer("ws://localhost:8080/websocket/endpoint");) {
+ final CountDownLatch latch = new CountDownLatch(1);
+ final String expectedMessage = "Return: text";
+ wsSession.addMessageHandler(new MessageHandler.Whole<String>() {
+
+ @Override
+ public void onMessage(String message) {
+ System.out.println("Message received: " + message);
+ assertEquals(expectedMessage, message);
+ latch.countDown();
+ }
+
+ });
+ wsSession.getBasicRemote().sendText("text");
+ boolean latchResult = latch.await(10, TimeUnit.SECONDS);
+ assertTrue(latchResult);
+ }
+ } finally {
+ this.container.stopWebApplication((WebApplicationHandle) result[1]);
+ ((Bundle) result[0]).uninstall();
+ }
+ }
+
+ private Session connectToServer(String uri) throws Exception {
+ WebSocketContainer wsContainer = ContainerProvider.getWebSocketContainer();
+ Session wsSession = wsContainer.connectToServer(new Endpoint() {
+
+ @Override
+ public void onError(Session session, Throwable t) {
+ System.err.println("onError: " + t);
+ }
+
+ @Override
+ public void onOpen(Session session, EndpointConfig config) {
+ session.getUserProperties().put("endpoint", this);
+ }
+
+ }, ClientEndpointConfig.Builder.create().build(), new URI(uri));
+ return wsSession;
+ }
+
private void createFileWithContent(Path file, String content) throws Exception {
if (Files.notExists(file.getParent())) {
Files.createDirectories(file.getParent());
diff --git a/test-bundles/websocket/build.xml b/test-bundles/websocket/build.xml
new file mode 100644
index 0000000..d946c4e
--- /dev/null
+++ b/test-bundles/websocket/build.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="websocket">
+
+ <property file="${basedir}/../../build.properties"/>
+ <property file="${basedir}/../../build.versions"/>
+ <property name="war.output.dir" value="${basedir}/../../org.eclipse.gemini.web.test/target/resources"/>
+ <property name="disable.bundlor" value="true"/>
+ <import file="${basedir}/../../virgo-build/war/default.xml"/>
+
+</project>
diff --git a/test-bundles/websocket/ivy.xml b/test-bundles/websocket/ivy.xml
new file mode 100644
index 0000000..4f75c93
--- /dev/null
+++ b/test-bundles/websocket/ivy.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?>
+<ivy-module
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd"
+ version="1.3">
+
+ <info organisation="${project.organisation}" module="${ant.project.name}"/>
+
+ <configurations>
+ <include file="${virgo.build.dir}/common/default-ivy-configurations.xml"/>
+ </configurations>
+
+ <publications>
+ <artifact name="${ant.project.name}" type="war" ext="war"/>
+ <artifact name="${ant.project.name}-sources" type="src" ext="jar"/>
+ </publications>
+
+</ivy-module>
diff --git a/test-bundles/websocket/src/main/java/.gitignore b/test-bundles/websocket/src/main/java/.gitignore
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test-bundles/websocket/src/main/java/.gitignore
diff --git a/test-bundles/websocket/src/main/webapp/WEB-INF/lib/endpoint.jar b/test-bundles/websocket/src/main/webapp/WEB-INF/lib/endpoint.jar
new file mode 100644
index 0000000..060ace8
--- /dev/null
+++ b/test-bundles/websocket/src/main/webapp/WEB-INF/lib/endpoint.jar
Binary files differ
diff --git a/test-bundles/websocket/src/main/webapp/WEB-INF/web.xml b/test-bundles/websocket/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..8807e10
--- /dev/null
+++ b/test-bundles/websocket/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
+ http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
+ version="3.1">
+
+</web-app>
diff --git a/test-bundles/websocket/src/main/webapp/index.html b/test-bundles/websocket/src/main/webapp/index.html
new file mode 100644
index 0000000..b0faa51
--- /dev/null
+++ b/test-bundles/websocket/src/main/webapp/index.html
@@ -0,0 +1 @@
+Hello Page
\ No newline at end of file