package org.jboss.resteasy.test.client; import org.jboss.resteasy.test.client.resource.NullStringBeanRuntimeDelegate; import org.jboss.resteasy.test.client.resource.StringBean; import org.jboss.resteasy.test.client.resource.ClientResponseFilterAbortWith; import org.jboss.resteasy.test.client.resource.ClientResponseFilterNullHeaderString; import org.jboss.resteasy.test.client.resource.StringBeanRuntimeDelegate; import org.jboss.resteasy.test.client.resource.ClientResponseFilterLength; import org.jboss.resteasy.test.client.resource.ClientResponseFilterAllowed; import org.jboss.resteasy.test.client.resource.ClientResponseFilterHeaders; import org.jboss.resteasy.test.client.resource.ClientResponseFilterStatusOverride; import org.jboss.resteasy.test.client.resource.ClientResponseFilterInterceptorReaderOne; import org.jboss.resteasy.test.client.resource.ClientResponseFilterInterceptorReaderTwo; import org.jboss.resteasy.util.HttpResponseCodes; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.ext.RuntimeDelegate; /** * @tpSubChapter Resteasy-client * @tpChapter Client tests * @tpSince RESTEasy 3.0.16 */ public class ClientResponseFilterTest { static Client client; String dummyUrl = "dummyUrl"; @BeforeClass public static void setupClient() { client = ClientBuilder.newClient(); } @AfterClass public static void close() { client.close(); } /** * @tpTestDetails Client registers ClientRequestFilter and ClientResponseFilter. The first returns Response provided * as argument. The latter processes the response and checks that the header of the response is not null. * Note: This test uses custom implementation of RuntimeDelegate, allowing to customize conversion between String * representation of HTTP header and the corresponding JAX-RS type (StringBean in this case) * @tpPassCrit Successful response is returned and response header is not null * @tpSince RESTEasy 3.0.16 */ @Test public void emptyHeaderStringTest() { RuntimeDelegate original = RuntimeDelegate.getInstance(); RuntimeDelegate.setInstance(new NullStringBeanRuntimeDelegate(original)); try { Response abortWith = Response.ok().header("header1", new StringBean("aa")) .build(); Response response = client.target(dummyUrl).register(new ClientResponseFilterAbortWith(abortWith)) .register(ClientResponseFilterNullHeaderString.class).request().get(); Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); } finally { RuntimeDelegate.setInstance(original); StringBeanRuntimeDelegate.assertNotStringBeanRuntimeDelegate(); } } /** * @tpTestDetails Client registers ClientRequestFilter and ClientResponseFilter. The first returns Response provided * as argument. The latter processes the response and checks that the length of the response is same * as in the original response * @tpPassCrit Successful response is returned and response length is same as original response * @tpSince RESTEasy 3.0.16 */ @Test public void lengthTest() { Response abortWith = Response.ok() .header(HttpHeaders.CONTENT_LENGTH, 10).build(); Response response = client.target(dummyUrl).register(new ClientResponseFilterAbortWith(abortWith)) .register(ClientResponseFilterLength.class).request().get(); Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); } /** * @tpTestDetails Client registers ClientRequestFilter and ClientResponseFilter. The first returns Response provided * as argument. The latter processes the response and checks that response contains header 'OPTIONS' as allowed method * @tpPassCrit Successful response is returned and 'OPTIONS' method is allowed header * @tpSince RESTEasy 3.0.16 */ @Test public void allowedTest() { Response abortWith = Response.ok().header(HttpHeaders.ALLOW, "get") .header(HttpHeaders.ALLOW, "options").build(); Response response = client.target(dummyUrl).register(new ClientResponseFilterAbortWith(abortWith)) .register(ClientResponseFilterAllowed.class).request().get(); Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); } /** * @tpTestDetails Client registers ClientRequestFilter and ClientResponseFilter. The first returns Response provided * as argument. The latter processes the response and changes the response code to 'FORBIDDEN' * @tpPassCrit Response with status code 'FORBIDDEN' is returned * @tpSince RESTEasy 3.0.16 */ @Test public void statusOverrideTest() { Response response = client.target(dummyUrl).register(new ClientResponseFilterAbortWith(Response.ok().build())) .register(ClientResponseFilterStatusOverride.class).request().get(); Assert.assertEquals(HttpResponseCodes.SC_FORBIDDEN, response.getStatus()); } /** * @tpTestDetails Client registers ClientRequestFilter and ClientResponseFilter. The first returns Response provided * as argument. The latter processes the response and prints all headers in the response * @tpPassCrit The response with reponse code success is expected * @tpSince RESTEasy 3.0.16 */ @Test public void headersTest() { Response.ResponseBuilder builder = Response.ok() .header("header", MediaType.APPLICATION_ATOM_XML_TYPE) .entity("entity"); Response abortWith = builder.build(); Response response = client.target(dummyUrl).register(new ClientResponseFilterAbortWith(abortWith)) .register(ClientResponseFilterHeaders.class).request().get(); Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); } /** * @tpTestDetails Client registers ClientRequestFilter and two ReaderInterceptors. The first returns Response provided * as argument. The ReaderInterceptorOne calls ReaderInterceptorTwo and catches IOException raised by ReaderInterceptorTwo * @tpPassCrit The ReaderInterceptorOne catches IOException and sends successful response * @tpSince RESTEasy 3.0.16 */ @Test public void interceptorOrderTest() { Response.ResponseBuilder builder = Response.ok() .header("header", MediaType.APPLICATION_ATOM_XML_TYPE) .entity("entity"); Response abortWith = builder.build(); Response response = client.target(dummyUrl).register(new ClientResponseFilterAbortWith(abortWith)) .register(ClientResponseFilterInterceptorReaderTwo.class) .register(ClientResponseFilterInterceptorReaderOne.class) .request().get(); String str = response.readEntity(String.class); Assert.assertEquals("First ReaderInterceptor one didn't catch exception raised by ReaderInterceptor two", "OK", str); } }