cors test
Signed-off-by: Raymond Auge <rotty3000@apache.org>
diff --git a/jax-rs.itests/itest.bndrun b/jax-rs.itests/itest.bndrun
index 9aa3231..b73a8bc 100644
--- a/jax-rs.itests/itest.bndrun
+++ b/jax-rs.itests/itest.bndrun
@@ -48,6 +48,7 @@
org.apache.aries.spifly.auto.providers=com.sun.*
-runbundles: \
+ assertj-core;version='[3.17.2,3.17.3)',\
com.fasterxml.woodstox.woodstox-core;version='[6.2.3,6.2.4)',\
com.sun.xml.bind.jaxb-osgi;version='[2.3.3,2.3.4)',\
jakarta.xml.bind-api;version='[2.3.3,2.3.4)',\
@@ -57,6 +58,7 @@
org.apache.cxf.cxf-core;version='[3.4.2,3.4.3)',\
org.apache.cxf.cxf-rt-frontend-jaxrs;version='[3.4.2,3.4.3)',\
org.apache.cxf.cxf-rt-rs-client;version='[3.4.2,3.4.3)',\
+ org.apache.cxf.cxf-rt-rs-security-cors;version='[3.4.2,3.4.3)',\
org.apache.cxf.cxf-rt-rs-sse;version='[3.4.2,3.4.3)',\
org.apache.cxf.cxf-rt-security;version='[3.4.2,3.4.3)',\
org.apache.cxf.cxf-rt-transports-http;version='[3.4.2,3.4.3)',\
@@ -68,12 +70,11 @@
org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
org.apache.geronimo.specs.geronimo-annotation_1.3_spec;version='[1.3.0,1.3.1)',\
org.apache.geronimo.specs.geronimo-jaxrs_2.1_spec;version='[1.1.0,1.1.1)',\
+ org.apache.servicemix.bundles.junit;version='[4.13.0,4.13.1)',\
org.apache.ws.xmlschema.core;version='[2.2.5,2.2.6)',\
org.osgi.service.jaxrs;version='[1.0.0,1.0.1)',\
org.osgi.util.function;version='[1.1.0,1.1.1)',\
org.osgi.util.promise;version='[1.1.1,1.1.2)',\
- osgi.enroute.hamcrest.wrapper;version='[1.3.0,1.3.1)',\
- osgi.enroute.junit.wrapper;version='[4.12.0,4.12.1)',\
stax2-api;version='[4.2.1,4.2.2)'
-runstartlevel: \
diff --git a/jax-rs.itests/pom.xml b/jax-rs.itests/pom.xml
index 58d2dcd..5b29791 100644
--- a/jax-rs.itests/pom.xml
+++ b/jax-rs.itests/pom.xml
@@ -96,5 +96,30 @@
<groupId>org.osgi</groupId>
<artifactId>osgi.enroute.hamcrest.wrapper</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.test.assertj.framework</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.test.junit4</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-rs-security-cors</artifactId>
+ <version>${cxf.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-core</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
</dependencies>
</project>
diff --git a/jax-rs.itests/src/main/java/test/CorsTest.java b/jax-rs.itests/src/main/java/test/CorsTest.java
new file mode 100644
index 0000000..3905051
--- /dev/null
+++ b/jax-rs.itests/src/main/java/test/CorsTest.java
@@ -0,0 +1,117 @@
+package test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.data.MapEntry.entry;
+import static org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants.JAX_RS_APPLICATION_SELECT;
+import static org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants.JAX_RS_NAME;
+
+import java.util.Collections;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ContainerResponseFilter;
+import javax.ws.rs.core.Response;
+
+import org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter;
+import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.PrototypeServiceFactory;
+import org.osgi.framework.ServiceRegistration;
+
+import test.types.TestAddon;
+import test.types.TestApplication;
+import test.types.TestHelper;
+
+public class CorsTest extends TestHelper {
+
+ @Test
+ public void basicCors() throws Exception {
+ AtomicBoolean calledFilterBefore = new AtomicBoolean();
+ AtomicBoolean calledFilterAfter = new AtomicBoolean();
+
+ registerExtension(
+ new String[] {
+ ContainerRequestFilter.class.getName(),
+ ContainerResponseFilter.class.getName()},
+ new PrototypeServiceFactory<Object>() {
+ @Override
+ public Object getService(
+ Bundle bundle, ServiceRegistration<Object> registration) {
+ return new CrossOriginResourceSharingFilter() {
+
+ @Override
+ public void filter(
+ ContainerRequestContext requestContext,
+ ContainerResponseContext responseContext) {
+
+ super.filter(requestContext, responseContext);
+ calledFilterAfter.set(true);
+ }
+ @Override
+ public void filter(ContainerRequestContext context) {
+ super.filter(context);
+ calledFilterBefore.set(true);
+ }
+ };
+ }
+ @Override
+ public void ungetService(
+ Bundle bundle, ServiceRegistration<Object> registration,
+ Object service) {
+ }
+ },
+ "FOO",
+ JAX_RS_NAME, CrossOriginResourceSharingFilter.class.getSimpleName());
+
+ registerAddon(
+ new TestAddon(),
+ JAX_RS_APPLICATION_SELECT, String.format("(%s=%s)", JAX_RS_NAME, "FOO"));
+
+ registerApplication(
+ new TestApplication(),
+ JAX_RS_NAME, "FOO");
+
+ WebTarget target = createDefaultTarget();
+
+ try {
+ System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
+
+ Response response = target.path(
+ "/test-application"
+ ).path(
+ "/test"
+ ).request().header(
+ "Origin", "http://foo.com"
+ ).get();
+
+ String result = response.readEntity(String.class);
+
+ assertThat(result).isEqualTo("Hello test");
+
+ assertThat(calledFilterBefore).isTrue();
+ assertThat(calledFilterAfter).isTrue();
+
+ assertThat(response.getStatus()).isEqualTo(200);
+
+ assertThat(calledFilterBefore).isTrue();
+ assertThat(calledFilterAfter).isTrue();
+
+ assertThat(response.getStringHeaders()).contains(
+ entry(
+ "Access-Control-Allow-Origin",
+ Collections.singletonList("*")
+ )
+ );
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ finally {
+ System.setProperty("sun.net.http.allowRestrictedHeaders", "flase");
+ }
+ }
+
+}
diff --git a/jax-rs.itests/src/main/java/test/types/TestHelper.java b/jax-rs.itests/src/main/java/test/types/TestHelper.java
index 7dc069f..f3da5d6 100644
--- a/jax-rs.itests/src/main/java/test/types/TestHelper.java
+++ b/jax-rs.itests/src/main/java/test/types/TestHelper.java
@@ -416,6 +416,28 @@
return serviceRegistration;
}
+ protected ServiceRegistration<?> registerExtension(
+ String[] serviceTypes, Object extension, String name, Object... keyValues) {
+
+ Hashtable<String, Object> properties = new Hashtable<>();
+
+ properties.put(JAX_RS_EXTENSION, true);
+ properties.put(JAX_RS_NAME, name);
+ properties.putIfAbsent(
+ JAX_RS_APPLICATION_SELECT, "(osgi.jaxrs.name=*)");
+
+ for (int i = 0; i < keyValues.length; i = i + 2) {
+ properties.put(keyValues[i].toString(), keyValues[i + 1]);
+ }
+
+ ServiceRegistration<?> serviceRegistration =
+ bundleContext.registerService(serviceTypes, extension, properties);
+
+ _registrations.add(serviceRegistration);
+
+ return serviceRegistration;
+ }
+
protected ServiceRegistration<?> registerInvalidExtension(
String name, Object... keyValues) {
diff --git a/pom.xml b/pom.xml
index 674bdc7..e8b4615 100644
--- a/pom.xml
+++ b/pom.xml
@@ -319,6 +319,16 @@
</dependency>
<dependency>
<groupId>org.osgi</groupId>
+ <artifactId>org.osgi.test.assertj.framework</artifactId>
+ <version>0.10.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.test.junit4</artifactId>
+ <version>0.10.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
<artifactId>osgi.enroute.junit.wrapper</artifactId>
<version>4.12.0</version>
</dependency>