You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2011/01/08 10:56:33 UTC
svn commit: r1056681 - in /mina/vysper/trunk: ./ dist/ server/core/
server/core/src/main/java/org/apache/vysper/xmpp/server/
server/extensions/websockets/
server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/
server/ex...
Author: ngn
Date: Sat Jan 8 09:56:33 2011
New Revision: 1056681
URL: http://svn.apache.org/viewvc?rev=1056681&view=rev
Log:
Upgrade to Spring 3.0.5 (VYSPER-263)
Adding tests for websocket implementation
Added:
mina/vysper/trunk/server/extensions/websockets/src/test/java/org/
mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/
mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/
mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/
mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/
mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/
mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java
mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServletTest.java
Modified:
mina/vysper/trunk/dist/pom.xml
mina/vysper/trunk/pom.xml
mina/vysper/trunk/server/core/pom.xml
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java
mina/vysper/trunk/server/extensions/websockets/pom.xml
mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java
mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
Modified: mina/vysper/trunk/dist/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/dist/pom.xml?rev=1056681&r1=1056680&r2=1056681&view=diff
==============================================================================
--- mina/vysper/trunk/dist/pom.xml (original)
+++ mina/vysper/trunk/dist/pom.xml Sat Jan 8 09:56:33 2011
@@ -57,7 +57,7 @@
<dependency>
<groupId>org.springframework</groupId>
- <artifactId>spring</artifactId>
+ <artifactId>spring-context</artifactId>
<optional>true</optional>
</dependency>
Modified: mina/vysper/trunk/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/pom.xml?rev=1056681&r1=1056680&r2=1056681&view=diff
==============================================================================
--- mina/vysper/trunk/pom.xml (original)
+++ mina/vysper/trunk/pom.xml Sat Jan 8 09:56:33 2011
@@ -83,8 +83,8 @@
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
- <artifactId>spring</artifactId>
- <version>2.5.6</version>
+ <artifactId>spring-context</artifactId>
+ <version>3.0.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
Modified: mina/vysper/trunk/server/core/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/pom.xml?rev=1056681&r1=1056680&r2=1056681&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/pom.xml (original)
+++ mina/vysper/trunk/server/core/pom.xml Sat Jan 8 09:56:33 2011
@@ -58,7 +58,7 @@
<dependency>
<groupId>org.springframework</groupId>
- <artifactId>spring</artifactId>
+ <artifactId>spring-context</artifactId>
<optional>true</optional>
</dependency>
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java?rev=1056681&r1=1056680&r2=1056681&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java Sat Jan 8 09:56:33 2011
@@ -27,6 +27,7 @@ import org.apache.vysper.xmpp.addressing
import org.apache.vysper.xmpp.protocol.ProtocolException;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
+import org.apache.vysper.xmpp.server.SessionContext.SessionTerminationCause;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
import org.apache.vysper.xmpp.state.resourcebinding.BindException;
Modified: mina/vysper/trunk/server/extensions/websockets/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/pom.xml?rev=1056681&r1=1056680&r2=1056681&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/pom.xml (original)
+++ mina/vysper/trunk/server/extensions/websockets/pom.xml Sat Jan 8 09:56:33 2011
@@ -1,19 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
- <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to you under the Apache License, Version
- 2.0 (the "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0 Unless required by
- applicable law or agreed to in writing, software distributed under the
- License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- CONDITIONS OF ANY KIND, either express or implied. See the License for
- the specific language governing permissions and limitations under the
- License.
- -->
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership. The ASF licenses this file to
+ you under the Apache License, Version 2.0 (the "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of
+ the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+ by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ OF ANY KIND, either express or implied. See the License for the specific
+ language governing permissions and limitations under the License. -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
@@ -69,6 +64,12 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
Modified: mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java?rev=1056681&r1=1056680&r2=1056681&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java Sat Jan 8 09:56:33 2011
@@ -59,10 +59,8 @@ public class WebSocketBackedSessionConte
private Outbound outbound;
private NonBlockingXMLReader xmlReader = new DefaultNonBlockingXMLReader();
- public WebSocketBackedSessionContext(ServerRuntimeContext serverRuntimeContext,
- SessionStateHolder sessionStateHolder) {
- super(serverRuntimeContext, sessionStateHolder);
-
+ public WebSocketBackedSessionContext(ServerRuntimeContext serverRuntimeContext) {
+ super(serverRuntimeContext, new SessionStateHolder());
XMPPContentHandler contentHandler = new XMPPContentHandler(new StanzaBuilderFactory());
contentHandler.setListener(this);
@@ -157,6 +155,6 @@ public class WebSocketBackedSessionConte
}
public void onFragment(boolean more, byte opcode, byte[] data, int offset, int length) {
- System.out.println("onFragment");
+ // binary data, should not happen, ignore
}
}
Modified: mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java?rev=1056681&r1=1056680&r2=1056681&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java Sat Jan 8 09:56:33 2011
@@ -96,7 +96,7 @@ public class WebSocketEndpoint implement
}
/**
- * Determines the context URI where the BOSH transport will be accessible.
+ * Determines the context URI where the websocket transport will be accessible.
* The default is as 'root context' under '/'.
* @param contextPath
*/
@@ -137,20 +137,20 @@ public class WebSocketEndpoint implement
}
/**
- * create handler for BOSH.
+ * create handler for XMPP over websockets.
* for a different handler setup, override in a subclass.
* for more than one handler, add them to a org.eclipse.jetty.server.handler.ContextHandlerCollection
* and return the collection
* @return
*/
protected Handler createHandler() {
- ServletContextHandler boshContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
- boshContext.setContextPath(contextPath);
+ ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
+ servletContext.setContextPath(contextPath);
- XmppWebSocketServlet boshServlet = new XmppWebSocketServlet(serverRuntimeContext);
- boshContext.addServlet(new ServletHolder(boshServlet), "/ws");
+ XmppWebSocketServlet wsServlet = new XmppWebSocketServlet(serverRuntimeContext);
+ servletContext.addServlet(new ServletHolder(wsServlet), "/ws");
- return boshContext;
+ return servletContext;
}
/**
Modified: mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java?rev=1056681&r1=1056680&r2=1056681&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java Sat Jan 8 09:56:33 2011
@@ -66,8 +66,7 @@ public class XmppWebSocketServlet extend
protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
if(SUB_PROTOCOL.equals(protocol)) {
- SessionStateHolder sessionStateHolder = new SessionStateHolder();
- WebSocketBackedSessionContext sessionContext = new WebSocketBackedSessionContext(serverRuntimeContext, sessionStateHolder);
+ WebSocketBackedSessionContext sessionContext = new WebSocketBackedSessionContext(serverRuntimeContext);
return sessionContext;
} else {
LOG.warn("Unsupported WebSocket sub protocol, must be \"xmpp\"");
Added: mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java?rev=1056681&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java (added)
+++ mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java Sat Jan 8 09:56:33 2011
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.vysper.xmpp.extension.websockets;
+
+import java.io.IOException;
+
+import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
+import org.apache.vysper.xmpp.server.ServerRuntimeContext;
+import org.apache.vysper.xmpp.server.SessionContext;
+import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.eclipse.jetty.websocket.WebSocket.Outbound;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+/**
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class XmppWebSocketBackedSessionContextTest {
+
+ private StanzaProcessor stanzaProcessor = Mockito.mock(StanzaProcessor.class);
+ private ServerRuntimeContext serverRuntimeContext = Mockito.mock(ServerRuntimeContext.class);
+ private Outbound outbound = Mockito.mock(Outbound.class);
+
+ @Before
+ public void before() {
+ Mockito.when(serverRuntimeContext.getStanzaProcessor()).thenReturn(stanzaProcessor);
+ }
+
+ @Test
+ public void onMessage() {
+ WebSocketBackedSessionContext context = new WebSocketBackedSessionContext(serverRuntimeContext);
+ context.onMessage((byte)1, "<test></test>");
+
+ Stanza expected = new StanzaBuilder("test").build();
+ Mockito.verify(stanzaProcessor).processStanza(Mockito.eq(serverRuntimeContext), Mockito.any(SessionContext.class), Mockito.eq(expected), Mockito.any(SessionStateHolder.class));
+ }
+
+ @Test
+ public void write() throws IOException {
+ WebSocketBackedSessionContext context = new WebSocketBackedSessionContext(serverRuntimeContext);
+ context.onConnect(outbound);
+
+ Stanza stanza = new StanzaBuilder("test").build();
+ context.write(stanza);
+
+ Mockito.verify(outbound).sendMessage("<test></test>");
+ }
+
+}
Added: mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServletTest.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServletTest.java?rev=1056681&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServletTest.java (added)
+++ mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServletTest.java Sat Jan 8 09:56:33 2011
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.vysper.xmpp.extension.websockets;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+import org.apache.vysper.xmpp.server.ServerRuntimeContext;
+import org.eclipse.jetty.websocket.WebSocket;
+import org.junit.Assert;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+/**
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class XmppWebSocketServletTest {
+
+ private ServerRuntimeContext serverRuntimeContext = Mockito.mock(ServerRuntimeContext.class);
+
+ @Test
+ public void doWebSocketConnectWithDefaultCstr() throws ServletException {
+ ServletContext servletContext = Mockito.mock(ServletContext.class);
+ Mockito.when(servletContext.getAttribute(XmppWebSocketServlet.SERVER_RUNTIME_CONTEXT_ATTRIBUTE)).thenReturn(serverRuntimeContext);
+
+ ServletConfig servletConfig = Mockito.mock(ServletConfig.class);
+ Mockito.when(servletConfig.getServletContext()).thenReturn(servletContext);
+
+ XmppWebSocketServlet servlet = new XmppWebSocketServlet();
+ servlet.init(servletConfig);
+
+ WebSocket webSocket = servlet.doWebSocketConnect(null, "xmpp");
+ Assert.assertTrue(webSocket instanceof WebSocketBackedSessionContext);
+ }
+
+ @Test
+ public void doWebSocketConnectWithDirectCstr() throws ServletException {
+ XmppWebSocketServlet servlet = new XmppWebSocketServlet(serverRuntimeContext);
+
+ WebSocket webSocket = servlet.doWebSocketConnect(null, "xmpp");
+ Assert.assertTrue(webSocket instanceof WebSocketBackedSessionContext);
+ }
+
+ @Test
+ public void doWebSocketConnectWithInvalidSubprotocl() throws ServletException {
+ XmppWebSocketServlet servlet = new XmppWebSocketServlet(serverRuntimeContext);
+
+ WebSocket webSocket = servlet.doWebSocketConnect(null, "dummy");
+ Assert.assertNull(webSocket);
+ }
+
+ @Test(expected=RuntimeException.class)
+ public void doWebSocketConnectMissingAttribute() throws ServletException {
+ ServletContext servletContext = Mockito.mock(ServletContext.class);
+
+ ServletConfig servletConfig = Mockito.mock(ServletConfig.class);
+ Mockito.when(servletConfig.getServletContext()).thenReturn(servletContext);
+
+ XmppWebSocketServlet servlet = new XmppWebSocketServlet();
+ servlet.init(servletConfig);
+ }
+
+}