package org.jboss.resteasy.test.interceptor; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.logging.Logger; import org.jboss.resteasy.spi.ResteasyProviderFactory; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientRequestFilter1; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientRequestFilter2; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientRequestFilter3; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientRequestFilterMax; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientRequestFilterMin; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientResponseFilter1; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientResponseFilter2; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientResponseFilter3; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientResponseFilterMax; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionClientResponseFilterMin; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerRequestFilter1; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerRequestFilter2; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerRequestFilter3; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerRequestFilterMax; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerRequestFilterMin; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerResponseFilter1; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerResponseFilter2; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerResponseFilter3; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerResponseFilterMax; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionContainerResponseFilterMin; import org.jboss.resteasy.test.interceptor.resource.PriorityExecutionResource; import org.jboss.resteasy.util.HttpResponseCodes; import org.jboss.resteasy.utils.PermissionUtil; import org.jboss.resteasy.utils.PortProviderUtil; import org.jboss.resteasy.utils.TestUtil; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.Response; import java.lang.reflect.ReflectPermission; import java.util.ArrayList; import java.util.List; import java.util.PropertyPermission; /** * @tpSubChapter Interceptors * @tpChapter Integration tests * @tpSince RESTEasy 3.0.16 * @tpTestCaseDetails Regression test for RESTEASY-1294 */ @RunWith(Arquillian.class) public class PriorityExecutionTest { public static List<String> interceptors = new ArrayList<String>(); public static Logger logger = Logger.getLogger(PriorityExecutionTest.class); private static final String WRONG_ORDER_ERROR_MSG = "Wrong order of interceptor execution"; @Deployment public static Archive<?> deploy() { WebArchive war = TestUtil.prepareArchive(PriorityExecutionTest.class.getSimpleName()); war.addClasses(TestUtil.class, PortProviderUtil.class); war.addClasses(PriorityExecutionClientResponseFilterMin.class, PriorityExecutionContainerRequestFilter1.class, PriorityExecutionClientResponseFilter1.class, PriorityExecutionContainerRequestFilterMin.class, PriorityExecutionClientRequestFilter2.class, PriorityExecutionClientRequestFilterMax.class, PriorityExecutionClientRequestFilter1.class, PriorityExecutionClientResponseFilter2.class, PriorityExecutionClientRequestFilter3.class, PriorityExecutionContainerRequestFilter2.class, PriorityExecutionContainerResponseFilter3.class, PriorityExecutionContainerRequestFilter3.class, PriorityExecutionClientResponseFilter3.class, PriorityExecutionContainerResponseFilter2.class, PriorityExecutionContainerResponseFilterMax.class, PriorityExecutionContainerRequestFilterMax.class, PriorityExecutionClientResponseFilterMax.class, PriorityExecutionContainerResponseFilter1.class, PriorityExecutionContainerResponseFilterMin.class, PriorityExecutionClientRequestFilterMin.class); // Arquillian in the deployment war.addAsManifestResource(PermissionUtil.createPermissionsXmlAsset(new ReflectPermission("suppressAccessChecks"), new RuntimePermission("accessDeclaredMembers"), new PropertyPermission("arquillian.*", "read")), "permissions.xml"); return TestUtil.finishContainerPrepare(war, null, PriorityExecutionResource.class); } private String generateURL(String path) { return PortProviderUtil.generateURL(path, PriorityExecutionTest.class.getSimpleName()); } static Client client; @Before public void setup() { client = ClientBuilder.newClient(); } @After public void cleanup() { client.close(); } /** * @tpTestDetails Check order of client and server filters * @tpSince RESTEasy 3.0.16 */ @Test public void testPriority() throws Exception { ResteasyProviderFactory factory = ResteasyProviderFactory.getInstance(); factory.register(PriorityExecutionContainerResponseFilter2.class); factory.register(PriorityExecutionContainerResponseFilter1.class); factory.register(PriorityExecutionContainerResponseFilter3.class); factory.register(PriorityExecutionContainerResponseFilterMin.class); factory.register(PriorityExecutionContainerResponseFilterMax.class); factory.register(PriorityExecutionContainerRequestFilter2.class); factory.register(PriorityExecutionContainerRequestFilter1.class); factory.register(PriorityExecutionContainerRequestFilter3.class); factory.register(PriorityExecutionContainerRequestFilterMin.class); factory.register(PriorityExecutionContainerRequestFilterMax.class); client.register(PriorityExecutionClientResponseFilter3.class); client.register(PriorityExecutionClientResponseFilter1.class); client.register(PriorityExecutionClientResponseFilter2.class); client.register(PriorityExecutionClientResponseFilterMin.class); client.register(PriorityExecutionClientResponseFilterMax.class); client.register(PriorityExecutionClientRequestFilter3.class); client.register(PriorityExecutionClientRequestFilter1.class); client.register(PriorityExecutionClientRequestFilter2.class); client.register(PriorityExecutionClientRequestFilterMin.class); client.register(PriorityExecutionClientRequestFilterMax.class); Response response = client.target(generateURL("/test")).request().get(); response.bufferEntity(); logger.info(response.readEntity(String.class)); Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); Assert.assertEquals("Wrong content of response", "test", response.getEntity()); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientRequestFilterMin", interceptors.get(0)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientRequestFilter1", interceptors.get(1)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientRequestFilter2", interceptors.get(2)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientRequestFilter3", interceptors.get(3)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientRequestFilterMax", interceptors.get(4)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerRequestFilterMin", interceptors.get(5)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerRequestFilter1", interceptors.get(6)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerRequestFilter2", interceptors.get(7)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerRequestFilter3", interceptors.get(8)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerRequestFilterMax", interceptors.get(9)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerResponseFilterMax", interceptors.get(10)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerResponseFilter3", interceptors.get(11)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerResponseFilter2", interceptors.get(12)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerResponseFilter1", interceptors.get(13)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionContainerResponseFilterMin", interceptors.get(14)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientResponseFilterMax", interceptors.get(15)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientResponseFilter3", interceptors.get(16)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientResponseFilter2", interceptors.get(17)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientResponseFilter1", interceptors.get(18)); Assert.assertEquals(WRONG_ORDER_ERROR_MSG, "PriorityExecutionClientResponseFilterMin", interceptors.get(19)); } }