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()));