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);
+    }
+    
+}