blob: 39050515605c4c5dbe46893edd5efe18eadee149 [file] [log] [blame]
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");
}
}
}