Author: ngn
Date: Fri Jul 30 21:39:54 2010
New Revision: 980975

URL: http://svn.apache.org/viewvc?rev=980975&view=rev
Log:
Implemented session termination (VYSPER-222 and VYSPER-223, by Bogdan Pistol)
Normalized handling of allowed origin domains
Improved description of the problems with Easymock in Harmony

Added:
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/AllowedOriginIntegrationTest.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/DefaultAllowedOriginIntegrationTest.java
Removed:
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/resources/crossdomain.xml
Modified:
    mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/pom.xml
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshEndpoint.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/BoshIntegrationTest.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/IntegrationTestTemplate.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/MethodsNotAllowedIntegrationTest.java

Modified: mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/pom.xml
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/pom.xml?rev=980975&r1=980974&r2=980975&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/pom.xml (original)
+++ mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/pom.xml Fri Jul 30 
21:39:54 2010
@@ -93,7 +93,11 @@
 
        <profiles>
                <profile>
-                       <!-- Used to skip unit tests for BOSH. Useful in 
Harmony, which currently not supported by Easymock (and Objenesis) -->
+                       <!-- Used to skip unit tests for BOSH. Useful in 
Harmony, which currently not supported by Easymock (and Objenesis) 
+                                  Tracked in 
https://issues.apache.org/jira/browse/VYSPER-224
+                                Also, Vysper currently assumes support for JKS 
keystores, something which Harmony does not support 
+                                  
(https://issues.apache.org/jira/browse/VYSPER-188). Needs to be fixed.
+                       -->
                        <id>skipboshtests</id>
                        <build>
                                <plugins>

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java?rev=980975&r1=980974&r2=980975&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
 Fri Jul 30 21:39:54 2010
@@ -133,8 +133,19 @@ public class BoshBackedSessionContext ex
         continuation.resume();
     }
 
+    /*
+     * Terminates the BOSH session
+     */
     public void close() {
-        LOGGER.info("session will be closed now");
+        // respond to all the queued HTTP requests with empty responses
+        while (!requestQueue.isEmpty()) {
+            write0(boshHandler.getEmptyResponse());
+        }
+        
+        serverRuntimeContext.getResourceRegistry().unbindSession(this);
+        sessionStateHolder.setState(SessionState.CLOSED);
+        
+        LOGGER.info("BOSH session {} closed", getSessionId());
     }
 
     public void switchToTLS() {

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshEndpoint.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshEndpoint.java?rev=980975&r1=980974&r2=980975&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshEndpoint.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshEndpoint.java
 Fri Jul 30 21:39:54 2010
@@ -20,6 +20,7 @@
 package org.apache.vysper.xmpp.extension.xep0124;
 
 import java.io.IOException;
+import java.util.List;
 
 import org.apache.vysper.xmpp.server.Endpoint;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
@@ -56,7 +57,7 @@ public class BoshEndpoint implements End
 
     private String sslKeystorePassword;
 
-    private String flashCrossDomainPolicy;
+    private List<String> accessControlAllowOrigin;
 
     public void setServerRuntimeContext(ServerRuntimeContext 
serverRuntimeContext) {
         this.serverRuntimeContext = serverRuntimeContext;
@@ -99,11 +100,19 @@ public class BoshEndpoint implements End
     }
 
     /**
-     * Setter for the Flash cross-domain policy file location
-     * @param policyPath
+     * Get the list of domains allowed to access this endpoint
+     * @return The list of allowed domains
      */
-    public void setFlashCrossDomainPolicy(String policyPath) {
-        flashCrossDomainPolicy = policyPath;
+    public List<String> getAccessControlAllowOrigin() {
+        return accessControlAllowOrigin;
+    }
+
+    /**
+     * Set the list of domains allowed to access this endpoint
+     * @param accessControlAllowOrigin The list of allowed domains
+     */
+    public void setAccessControlAllowOrigin(List<String> 
accessControlAllowOrigin) {
+        this.accessControlAllowOrigin = accessControlAllowOrigin;
     }
 
     /**
@@ -133,10 +142,7 @@ public class BoshEndpoint implements End
 
         BoshServlet boshServlet = new BoshServlet();
         boshServlet.setServerRuntimeContext(serverRuntimeContext);
-        
-        if(flashCrossDomainPolicy != null) {
-            boshServlet.setFlashCrossDomainPolicy(flashCrossDomainPolicy);
-        }
+        boshServlet.setAccessControlAllowOrigin(accessControlAllowOrigin);
         context.addServlet(new ServletHolder(boshServlet), "/");
 
         try {

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java?rev=980975&r1=980974&r2=980975&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
 Fri Jul 30 21:39:54 2010
@@ -135,10 +135,21 @@ public class BoshHandler {
                 for (XMLElement element : boshRequest.getInnerElements()) {
                     processStanza(session, element);
                 }
+                
+                // if the client solicited the session termination
+                if ("terminate".equals(boshRequest.getAttributeValue("type"))) 
{
+                    terminateSession(session);
+                }
             }
         }
     }
 
+    private void terminateSession(BoshBackedSessionContext session) {
+        sessions.remove(session.getSessionId());
+        session.write0(getTerminateResponse());
+        session.close();
+    }
+
     private void processStanza(BoshBackedSessionContext session, XMLElement 
element) {
         Stanza stanza;
         if (element instanceof Stanza) {
@@ -244,5 +255,11 @@ public class BoshHandler {
         Stanza features = new ServerResponses().getFeaturesForSession();
         return wrapStanza(features);
     }
+    
+    private Stanza getTerminateResponse() {
+        StanzaBuilder stanzaBuilder = new StanzaBuilder("body", 
NamespaceURIs.XEP0124_BOSH);
+        stanzaBuilder.addAttribute("type", "terminate");
+        return stanzaBuilder.build();
+    }
 
 }

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java?rev=980975&r1=980974&r2=980975&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
 Fri Jul 30 21:39:54 2010
@@ -24,6 +24,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.util.List;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -60,10 +61,7 @@ public class BoshServlet extends HttpSer
 
     private final BoshHandler boshHandler = new BoshHandler();
 
-    private byte[] flashCrossDomainPolicy;
-
-    // TODO we should be secure by default, allowing all domains by default is 
probably not the best thing
-    private String accessControlAllowOrigin = "*";
+    private List<String> accessControlAllowOrigin;
 
     private String accessControlMaxAge = "86400"; // one day in seconds
 
@@ -76,53 +74,65 @@ public class BoshServlet extends HttpSer
     public void setServerRuntimeContext(ServerRuntimeContext 
serverRuntimeContext) {
         boshHandler.setServerRuntimeContext(serverRuntimeContext);
     }
+    
+    
+    
+    public List<String> getAccessControlAllowOrigin() {
+        return accessControlAllowOrigin;
+    }
 
-    /**
-     * Configures the Flash cross-domain policy
-     * @param policyPath
-     * @throws IOException 
-     */
-    public void setFlashCrossDomainPolicy(String policyPath) throws 
IOException {
-        BufferedInputStream bis = new BufferedInputStream(new 
FileInputStream(policyPath));
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        byte[] buf = new byte[1024];
-        for (;;) {
-            int i = bis.read(buf);
-            if (i == -1) {
-                break;
-            }
-            baos.write(buf, 0, i);
-        }
-        bis.close();
-        flashCrossDomainPolicy = baos.toByteArray();
+
+
+    public void setAccessControlAllowOrigin(List<String> 
accessControlAllowOrigin) {
+        this.accessControlAllowOrigin = accessControlAllowOrigin;
     }
-    
-    private byte[] createDefaultFlashCrossDomainPolicy() {
-        String crossDomain = "<?xml version='1.0'?>" 
-            + "<!DOCTYPE cross-domain-policy SYSTEM 
'http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd'>"
-            + "<cross-domain-policy>"
-            + "<allow-access-from domain='" + 
boshHandler.getServerRuntimeContext().getServerEnitity().getDomain() + "' />"
-            + "</cross-domain-policy>"; 
+
+
+
+    private byte[] createFlashCrossDomainPolicy() {
+        StringBuffer crossDomain = new StringBuffer();
+        crossDomain.append("<?xml version='1.0'?>"); 
+        crossDomain.append("<!DOCTYPE cross-domain-policy SYSTEM 
'http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd'>");
+        crossDomain.append("<cross-domain-policy>");
+            for(String domain : accessControlAllowOrigin) {
+                crossDomain.append("<allow-access-from domain='");
+                crossDomain.append(domain);
+                crossDomain.append("' />");
+            }
+            crossDomain.append("</cross-domain-policy>"); 
         try {
-            return crossDomain.getBytes("UTF-8");
+            return crossDomain.toString().getBytes("UTF-8");
         } catch (UnsupportedEncodingException shouldNotHappen) {
             throw new RuntimeException(shouldNotHappen);
         }
     }
 
+    private String createAccessControlAllowOrigin() {
+        StringBuffer crossDomain = new StringBuffer();
+        boolean first = true;
+        for(String domain : accessControlAllowOrigin) {
+            if(!first) {
+                crossDomain.append(',');
+            }
+            crossDomain.append(domain);
+            first = false;
+        }
+        return crossDomain.toString();
+    }
+
+    
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
         resp.addDateHeader("Date", System.currentTimeMillis());
         resp.addHeader("Server", SERVER_IDENTIFICATION);
         if (FLASH_CROSS_DOMAIN_POLICY_URI.equals(req.getRequestURI())){
-            resp.setContentType(XML_CONTENT_TYPE);
-            if(flashCrossDomainPolicy != null) {
+            if(accessControlAllowOrigin != null) {
+                resp.setContentType(XML_CONTENT_TYPE);
+                byte[] flashCrossDomainPolicy = createFlashCrossDomainPolicy();
                 resp.setContentLength(flashCrossDomainPolicy.length);
                 resp.getOutputStream().write(flashCrossDomainPolicy);
             } else {
-                byte[] tempFlashCrossDomainPolicy = 
createDefaultFlashCrossDomainPolicy();
-                resp.setContentLength(tempFlashCrossDomainPolicy.length);
-                resp.getOutputStream().write(tempFlashCrossDomainPolicy);
+                resp.sendError(HttpServletResponse.SC_NOT_FOUND);
             }
         } else {
             resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, 
INFO_GET);
@@ -137,9 +147,11 @@ public class BoshServlet extends HttpSer
         resp.addHeader("Server", SERVER_IDENTIFICATION);
         resp.setContentType(TXT_CONTENT_TYPE);
         resp.setContentLength(0);
-        resp.addHeader("Access-Control-Allow-Origin", 
accessControlAllowOrigin);
-        resp.addHeader("Access-Control-Allow-Methods", 
accessControlAllowMethods);
-        resp.addHeader("Access-Control-Max-Age", accessControlMaxAge);
+        if(accessControlAllowOrigin != null) {
+            resp.addHeader("Access-Control-Allow-Origin", 
createAccessControlAllowOrigin());
+            resp.addHeader("Access-Control-Allow-Methods", 
accessControlAllowMethods);
+            resp.addHeader("Access-Control-Max-Age", accessControlMaxAge);
+        }
         resp.flushBuffer();
     }
 
@@ -177,7 +189,9 @@ public class BoshServlet extends HttpSer
         resp.addHeader("Server", SERVER_IDENTIFICATION);
         resp.setContentType(respData.getContentType());
         resp.setContentLength(respData.getContent().length);
-        resp.addHeader("Access-Control-Allow-Origin", 
accessControlAllowOrigin);
+        if(accessControlAllowOrigin != null) {
+            resp.addHeader("Access-Control-Allow-Origin", 
createAccessControlAllowOrigin());
+        }
         resp.getOutputStream().write(respData.getContent());
         resp.flushBuffer();
     }

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java?rev=980975&r1=980974&r2=980975&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java
 Fri Jul 30 21:39:54 2010
@@ -85,7 +85,6 @@ public class ServerMain {
         server.addEndpoint(new TCPEndpoint());
 
         BoshEndpoint boshEndpoint = new BoshEndpoint();
-        boshEndpoint.setFlashCrossDomainPolicy("src/main/resources/" + 
"crossdomain.xml");
         //        boshEndpoint.setSSLEnabled(true);
         //        
boshEndpoint.setSSLCertificateInfo("src/main/resources/keystore",
         //                "password");

Added: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/AllowedOriginIntegrationTest.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/AllowedOriginIntegrationTest.java?rev=980975&view=auto
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/AllowedOriginIntegrationTest.java
 (added)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/AllowedOriginIntegrationTest.java
 Fri Jul 30 21:39:54 2010
@@ -0,0 +1,99 @@
+/*
+ *  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.xep0124.inttests;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpOptions;
+import org.apache.vysper.xml.fragment.XMLElement;
+import org.apache.vysper.xmpp.extension.xep0124.BoshEndpoint;
+import org.apache.vysper.xmpp.extension.xep0124.XMLUtil;
+import org.junit.Test;
+
+
+
+public class AllowedOriginIntegrationTest extends IntegrationTestTemplate {
+
+    protected BoshEndpoint processBoshEndpoint(BoshEndpoint endpoint) {
+        List<String> allowedDomains = new ArrayList<String>();
+        allowedDomains.add("example.com");
+        allowedDomains.add("foo.example.com");
+        endpoint.setAccessControlAllowOrigin(allowedDomains);
+        
+        return endpoint;
+    }
+    
+    private String parseFully(InputStream stream) throws IOException {
+        StringBuffer sb = new StringBuffer();
+        BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream));
+        String line = reader.readLine();
+        while(line != null) {
+            sb.append(line);
+            line = reader.readLine();
+        }
+        return sb.toString();
+    }
+    
+    @Test
+    public void flashCrossdomain() throws Exception {
+        HttpResponse response = httpclient.execute(new HttpGet(getServerUrl() 
+ "crossdomain.xml"));
+
+        String declaration = "<?xml version='1.0'?><!DOCTYPE 
cross-domain-policy SYSTEM 
'http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd'>";
+        
+        // XML parser does not support DOCTYPE declarations, so we hack around 
that here
+        String xml = parseFully(response.getEntity().getContent());
+        Assert.assertTrue(xml.startsWith(declaration));
+        
+        xml = xml.substring(declaration.length());
+        
+        XMLElement elm = new XMLUtil(xml).parse();
+        Assert.assertEquals("cross-domain-policy", elm.getName());
+        
+        Assert.assertEquals(2, elm.getInnerElements().size());
+        
+        XMLElement firstChild = elm.getInnerElements().get(0);
+        XMLElement secondChild = elm.getInnerElements().get(1);
+        
+        Assert.assertEquals("allow-access-from", firstChild.getName());
+        Assert.assertEquals("example.com", 
firstChild.getAttributeValue("domain"));
+        
+        Assert.assertEquals("allow-access-from", secondChild.getName());
+        Assert.assertEquals("foo.example.com", 
secondChild.getAttributeValue("domain"));
+    }
+    
+    @Test
+    public void optionsAccessControlAllowOrigin() throws Exception {
+        HttpResponse response = httpclient.execute(new 
HttpOptions(getServerUrl()));
+
+        Assert.assertEquals(1, 
response.getHeaders("Access-Control-Allow-Origin").length);
+        String accessControlAllowOriginHeader = 
response.getHeaders("Access-Control-Allow-Origin")[0].getValue();
+
+        Assert.assertEquals("example.com,foo.example.com", 
accessControlAllowOriginHeader);
+    }
+}

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/BoshIntegrationTest.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/BoshIntegrationTest.java?rev=980975&r1=980974&r2=980975&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/BoshIntegrationTest.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/BoshIntegrationTest.java
 Fri Jul 30 21:39:54 2010
@@ -130,6 +130,11 @@ public class BoshIntegrationTest extends
         assertTrue(jid.matches("[email protected]/.+"));
         
         System.out.println("JID " + jid + " is connected to the Vysper 
server");
+        
+     // session termination
+        boshResponse = sendRequest("<body rid='104' 
xmlns='http://jabber.org/protocol/httpbind' sid='" + sid + "' 
type='terminate'><presence type='unavailable' from='" + jid + "' 
xmlns='jabber:client'/></body>");
+        assertTrue(boshResponse.getInnerElements().isEmpty());
+        assertEquals("terminate", boshResponse.getAttributeValue("type"));
     }
 
     private String getPlainAuth(String user, String pass) {

Added: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/DefaultAllowedOriginIntegrationTest.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/DefaultAllowedOriginIntegrationTest.java?rev=980975&view=auto
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/DefaultAllowedOriginIntegrationTest.java
 (added)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/DefaultAllowedOriginIntegrationTest.java
 Fri Jul 30 21:39:54 2010
@@ -0,0 +1,51 @@
+/*
+ *  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.xep0124.inttests;
+
+import junit.framework.Assert;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpOptions;
+import org.junit.Test;
+
+
+/**
+ * Test allowed origin when none are set for the endpoint. Should 
+ * default to only allow the called domain, which is what will
+ * be allowed if no crossdomain.xml or header is returned.
+ *
+ */
+public class DefaultAllowedOriginIntegrationTest extends 
IntegrationTestTemplate {
+
+    @Test
+    public void flashCrossdomain() throws Exception {
+        HttpResponse response = httpclient.execute(new HttpGet(getServerUrl() 
+ "crossdomain.xml"));
+
+        Assert.assertEquals(404, response.getStatusLine().getStatusCode());
+    }
+    
+    @Test
+    public void optionsAccessControlAllowOrigin() throws Exception {
+        HttpResponse response = httpclient.execute(new 
HttpOptions(getServerUrl()));
+
+        Assert.assertEquals(0, 
response.getHeaders("Access-Control-Allow-Origin").length);
+    }
+}

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/IntegrationTestTemplate.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/IntegrationTestTemplate.java?rev=980975&r1=980974&r2=980975&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/IntegrationTestTemplate.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/IntegrationTestTemplate.java
 Fri Jul 30 21:39:54 2010
@@ -85,6 +85,10 @@ public class IntegrationTestTemplate {
         return boshResponse;
     }
 
+    protected BoshEndpoint processBoshEndpoint(BoshEndpoint endpoint) {
+        // default, do nothing
+        return endpoint;
+    }
     
     @Before
     public void startServer() throws Exception {
@@ -104,10 +108,13 @@ public class IntegrationTestTemplate {
         
         BoshEndpoint boshEndpoint = new BoshEndpoint();
         int port = findFreePort();
-        
         boshEndpoint.setPort(port);
+        
+        boshEndpoint = processBoshEndpoint(boshEndpoint);
+        
         server.addEndpoint(boshEndpoint);
         
+        
         server.start();
         System.out.println("Vysper BOSH server running on port " + port);
 
@@ -116,8 +123,8 @@ public class IntegrationTestTemplate {
     
     @After
     public void tearDown() throws Exception {
-        httpclient.getConnectionManager().shutdown();
         server.stop();
+        httpclient.getConnectionManager().shutdown();
     }
 
 }

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/MethodsNotAllowedIntegrationTest.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/MethodsNotAllowedIntegrationTest.java?rev=980975&r1=980974&r2=980975&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/MethodsNotAllowedIntegrationTest.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/inttests/MethodsNotAllowedIntegrationTest.java
 Fri Jul 30 21:39:54 2010
@@ -41,14 +41,6 @@ public class MethodsNotAllowedIntegratio
     }
 
     @Test
-    public void allowGettingCrossdomain() throws Exception {
-        HttpResponse response = httpclient.execute(new HttpGet(getServerUrl() 
+ "crossdomain.xml"));
-
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-    }
-
-    
-    @Test
     public void doNotAllowPut() throws Exception {
         HttpResponse response = httpclient.execute(new 
HttpPut(getServerUrl()));
 


Reply via email to