You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by rw...@apache.org on 2012/05/16 14:12:37 UTC

svn commit: r1339130 - in /incubator/stanbol/trunk/commons/web/base/src: main/java/org/apache/stanbol/commons/web/base/ test/java/org/apache/stanbol/commons/web/base/

Author: rwesten
Date: Wed May 16 12:12:37 2012
New Revision: 1339130

URL: http://svn.apache.org/viewvc?rev=1339130&view=rev
Log:
fixes STANBOL-616 and adds a unit test for it.

Added:
    incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java   (with props)
    incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java   (with props)
    incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java   (with props)
Modified:
    incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java

Modified: incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java?rev=1339130&r1=1339129&r2=1339130&view=diff
==============================================================================
--- incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java (original)
+++ incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java Wed May 16 12:12:37 2012
@@ -53,7 +53,7 @@ public final class CorsHelper {
      * The "Access-Control-Request-Method" header
      */
     public static final String REQUEST_METHOD = "Access-Control-Request-Method";
-    
+
     /**
      * The "Access-Control-Request-Headers" header
      */
@@ -64,6 +64,10 @@ public final class CorsHelper {
      */
     public static final String ALLOW_HEADERS = "Access-Control-Allow-Headers";
     
+    /**
+     * The "Access-Control-Allow-Method" header
+     */
+    public static final String ALLOW_METHOD = "Access-Control-Allow-Method";
 
     /**
      * The default methods for the Access-Control-Request-Method header field.
@@ -175,7 +179,7 @@ public final class CorsHelper {
             if(!added){
                 methods.append(CorsHelper.DEFAULT_REQUEST_METHODS);
             }
-            responseBuilder.header(CorsHelper.REQUEST_METHOD, methods.toString());
+            responseBuilder.header(CorsHelper.ALLOW_METHOD, methods.toString());
             //third replay parsed "Access-Control-Request-Headers" values
             //currently there is no need to restrict such headers so the simplest
             //way is to return them as they are parsed

Added: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java?rev=1339130&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java (added)
+++ incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java Wed May 16 12:12:37 2012
@@ -0,0 +1,81 @@
+/*
+* 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.stanbol.commons.web.base;
+
+import static javax.ws.rs.HttpMethod.GET;
+import static javax.ws.rs.HttpMethod.OPTIONS;
+import static javax.ws.rs.HttpMethod.POST;
+import static javax.ws.rs.HttpMethod.PUT;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+import javax.ws.rs.HttpMethod;
+import javax.ws.rs.core.Cookie;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+
+import org.apache.stanbol.commons.web.base.CorsHelper;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.sun.jersey.core.util.MultivaluedMapImpl;
+
+/**
+ * Tests issue reported/fix for STANBOL-616
+ * @author Rupert Westenthaler
+ *
+ */
+public class CorsAccessControlAllowMethodTest {
+    
+    @Test
+    public void testAccessControlAllowMethodTest(){
+        ServletContext context = new MockServletContext();
+        context.setAttribute(JerseyEndpoint.CORS_ORIGIN, Collections.singleton("*"));
+        MultivaluedMap<String,String> header = new MultivaluedMapImpl();
+        header.add("Origin", "https://issues.apache.org/jira/browse/STANBOL-616");
+        header.put("Access-Control-Request-Headers", Arrays.asList("Origin", "Content-Type", "Accept"));
+        header.add("Access-Control-Request-Method", "PUT");
+        HttpHeaders requestHeaders = new MockHttpHeaders(header);
+
+        
+        ResponseBuilder builder = Response.ok("Test");
+        CorsHelper.enableCORS(context, builder, requestHeaders, OPTIONS,GET,POST,PUT);
+        Response response = builder.build();
+        MultivaluedMap<String,Object> metadata = response.getMetadata();
+        Assert.assertTrue("'Access-Control-Allow-Headers' expected", metadata.containsKey("Access-Control-Allow-Headers"));
+        String value = (String)metadata.getFirst("Access-Control-Allow-Headers");
+        Assert.assertTrue("'Access-Control-Allow-Headers' does not contain the expected values",
+            value.contains("Origin") && value.contains("Content-Type") && value.contains("Accept"));
+        Assert.assertTrue("'Access-Control-Allow-Origin' expected", metadata.containsKey("Access-Control-Allow-Origin"));
+        Assert.assertEquals("'Access-Control-Allow-Origin' does not have the expected value '*'",
+            "*", metadata.getFirst("Access-Control-Allow-Origin"));
+        Assert.assertTrue("'Access-Control-Allow-Method' expected", metadata.containsKey("Access-Control-Allow-Method"));
+        value = (String)metadata.getFirst("Access-Control-Allow-Method");
+        Assert.assertTrue("'Access-Control-Allow-Method' does not contain the expected values", 
+            value.contains(OPTIONS) && value.contains(GET) && value.contains(POST) && value.contains(PUT));
+    }
+    
+
+}

Propchange: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java?rev=1339130&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java (added)
+++ incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java Wed May 16 12:12:37 2012
@@ -0,0 +1,78 @@
+/*
+* 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.stanbol.commons.web.base;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.ws.rs.core.Cookie;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+
+/**
+ * Mock {@link HttpHeaders} implementation used to parse request headers for
+ * unit tests
+ * @author Rupert Westenthaler
+ *
+ */
+public class MockHttpHeaders implements HttpHeaders {
+
+    private MultivaluedMap<String,String> headers;
+
+    protected MockHttpHeaders(MultivaluedMap<String,String> headers){
+        this.headers = headers;
+    }
+    
+    @Override
+    public List<String> getRequestHeader(String name) {
+        return headers.get(name);
+    }
+
+    @Override
+    public MultivaluedMap<String,String> getRequestHeaders() {
+        return headers;
+    }
+
+    @Override
+    public List<MediaType> getAcceptableMediaTypes() {
+        return Collections.singletonList(MediaType.WILDCARD_TYPE);
+    }
+
+    @Override
+    public List<Locale> getAcceptableLanguages() {
+        return null;
+    }
+
+    @Override
+    public MediaType getMediaType() {
+        return MediaType.TEXT_PLAIN_TYPE;
+    }
+
+    @Override
+    public Locale getLanguage() {
+        return new Locale("en");
+    }
+
+    @Override
+    public Map<String,Cookie> getCookies() {
+        return Collections.emptyMap();
+    }
+
+}

Propchange: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java?rev=1339130&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java (added)
+++ incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java Wed May 16 12:12:37 2012
@@ -0,0 +1,175 @@
+/*
+* 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.stanbol.commons.web.base;
+
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.Servlet;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+/**
+ * Only implements attribute related methods
+ * @author Rupert Westenthaler
+ *
+ */
+public final class MockServletContext implements ServletContext {
+
+    private final Map<String,Object> attributes = new HashMap<String,Object>();
+    
+    protected MockServletContext() {}
+    
+    @Override
+    public Object getAttribute(String name) {
+        return attributes.get(name);
+    }
+    @Override
+    public Enumeration getAttributeNames() {
+        return new Enumeration<String>() {
+            Iterator<String> it = attributes.keySet().iterator();
+            @Override
+            public boolean hasMoreElements() {
+                // TODO Auto-generated method stub
+                return it.hasNext();
+            }
+
+            @Override
+            public String nextElement() {
+                return it.next();
+            }
+            
+        };
+    }
+
+    @Override
+    public void setAttribute(String name, Object object) {
+        attributes.put(name, object);
+    }
+
+    @Override
+    public void removeAttribute(String name) {
+        attributes.remove(name);
+    }
+
+    
+    
+    @Override
+    public ServletContext getContext(String uripath) {
+        return null;
+    }
+
+    @Override
+    public int getMajorVersion() {
+        return 0;
+    }
+
+    @Override
+    public int getMinorVersion() {
+        return 0;
+    }
+
+    @Override
+    public String getMimeType(String file) {
+        return null;
+    }
+
+    @Override
+    public Set getResourcePaths(String path) {
+        return null;
+    }
+
+    @Override
+    public URL getResource(String path) throws MalformedURLException {
+        return null;
+    }
+
+    @Override
+    public InputStream getResourceAsStream(String path) {
+        return null;
+    }
+
+    @Override
+    public RequestDispatcher getRequestDispatcher(String path) {
+        return null;
+    }
+
+    @Override
+    public RequestDispatcher getNamedDispatcher(String name) {
+        return null;
+    }
+
+    @Override
+    public Servlet getServlet(String name) throws ServletException {
+        return null;
+    }
+
+    @Override
+    public Enumeration getServlets() {
+        return null;
+    }
+
+    @Override
+    public Enumeration getServletNames() {
+        return null;
+    }
+
+    @Override
+    public void log(String msg) {
+    }
+
+    @Override
+    public void log(Exception exception, String msg) {
+    }
+
+    @Override
+    public void log(String message, Throwable throwable) {
+    }
+
+    @Override
+    public String getRealPath(String path) {
+        return null;
+    }
+
+    @Override
+    public String getServerInfo() {
+        return null;
+    }
+
+    @Override
+    public String getInitParameter(String name) {
+        return null;
+    }
+
+    @Override
+    public Enumeration getInitParameterNames() {
+        return null;
+    }
+
+    @Override
+    public String getServletContextName() {
+        return "Mock";
+    }
+
+}

Propchange: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain