package org.jboss.resteasy.test.client; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.junit.Arquillian; import org.jboss.dmr.ModelNode; import org.jboss.resteasy.test.client.resource.TraceResource; import org.jboss.resteasy.util.HttpResponseCodes; import org.jboss.resteasy.utils.TestUtil; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Test; import org.junit.Before; import org.junit.After; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.AfterClass; import org.junit.runner.RunWith; import org.wildfly.extras.creaper.core.online.OnlineManagementClient; import org.wildfly.extras.creaper.core.online.operations.Address; import org.wildfly.extras.creaper.core.online.operations.Operations; import org.wildfly.extras.creaper.core.online.operations.admin.Administration; import javax.ws.rs.HttpMethod; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.Response; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @tpSubChapter Resteasy-client * @tpChapter Client tests * @tpSince RESTEasy 3.0.16 */ @RunWith(Arquillian.class) @RunAsClient public class TraceTest extends ClientTestBase{ private static ModelNode origDisallowedMethodsValue; private static Address address = Address.subsystem("undertow").and("server", "default-server").and("http-listener", "default"); protected static final Logger logger = LogManager.getLogger(TraceTest.class.getName()); private static Client client; @HttpMethod("TRACE") @Target(value = ElementType.METHOD) @Retention(value = RetentionPolicy.RUNTIME) public @interface TRACE { } @BeforeClass public static void setMaxPostSize() throws Exception { OnlineManagementClient client = TestUtil.clientInit(); Administration admin = new Administration(client); Operations ops = new Operations(client); // get original 'disallowed methods' value origDisallowedMethodsValue = ops.readAttribute(address, "disallowed-methods").value(); // set 'disallowed methods' to empty list to allow TRACE ops.writeAttribute(address, "disallowed-methods", new ModelNode().setEmptyList()); // reload server admin.reload(); client.close(); } @AfterClass public static void resetToDefault() throws Exception { OnlineManagementClient client = TestUtil.clientInit(); Administration admin = new Administration(client); Operations ops = new Operations(client); // write original 'disallowed methods' value ops.writeAttribute(address, "disallowed-methods", origDisallowedMethodsValue); // reload server admin.reload(); client.close(); } @Deployment public static Archive<?> deploy() { WebArchive war = TestUtil.prepareArchive(TraceTest.class.getSimpleName()); war.addClass(TraceTest.class); return TestUtil.finishContainerPrepare(war, null, TraceResource.class); } @Before public void init() { client = ClientBuilder.newClient(); } @After public void after() throws Exception { client.close(); } /** * @tpTestDetails Client sends request for custom defined http method 'TRACE' * @tpPassCrit Successful response is returned * @tpSince RESTEasy 3.0.16 */ @Test public void TraceTest() { Response response = client.target(generateURL("/resource/trace")).request().trace(Response.class); Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); } }