package org.jboss.resteasy.test.core.logging;
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.resteasy.client.jaxrs.ResteasyClient;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
import org.jboss.resteasy.test.core.logging.resource.DebugLoggingEndPoint;
import org.jboss.resteasy.test.core.logging.resource.DebugLoggingReaderInterceptorCustom;
import org.jboss.resteasy.test.core.logging.resource.DebugLoggingWriterInterceptorCustom;
import org.jboss.resteasy.test.core.logging.resource.DebugLoggingCustomReaderAndWriter;
import org.jboss.resteasy.util.HttpResponseCodes;
import org.jboss.resteasy.utils.LogCounter;
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.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.wildfly.extras.creaper.core.online.OnlineManagementClient;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.core.Is.is;
/**
* @tpSubChapter Interceptors
* @tpChapter Integration tests
* @tpTestCaseDetails Test debug messages for used Interceptors and Providers.
* Regression test for RESTEASY-1415 and RESTEASY-1558.
* @tpSince RESTEasy 3.1.0
*/
@RunWith(Arquillian.class)
@RunAsClient
public class DebugLoggingTest {
static ResteasyClient client;
protected static final Logger logger = LogManager.getLogger(DebugLoggingTest.class.getName());
private static final String BUILD_IN = "build-in";
private static final String CUSTOM = "custom";
@Deployment(name = BUILD_IN, order = 1)
public static Archive<?> createTestArchive1() {
WebArchive war = TestUtil.prepareArchive(BUILD_IN);
return TestUtil.finishContainerPrepare(war, null, DebugLoggingEndPoint.class);
}
@Deployment(name = CUSTOM, order = 2)
public static Archive<?> createTestArchive2() {
WebArchive war = TestUtil.prepareArchive(CUSTOM);
return TestUtil.finishContainerPrepare(war, null, DebugLoggingEndPoint.class, DebugLoggingReaderInterceptorCustom.class,
DebugLoggingWriterInterceptorCustom.class, DebugLoggingCustomReaderAndWriter.class);
}
@BeforeClass
public static void initLogging() throws Exception {
OnlineManagementClient client = TestUtil.clientInit();
// enable RESTEasy debug logging
TestUtil.runCmd(client, "/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=ALL)");
TestUtil.runCmd(client, "/subsystem=logging/logger=org.jboss.resteasy:add(level=ALL)");
TestUtil.runCmd(client, "/subsystem=logging/logger=javax.xml.bind:add(level=ALL)");
TestUtil.runCmd(client, "/subsystem=logging/logger=com.fasterxml.jackson:add(level=ALL)");
client.close();
}
@AfterClass
public static void removeLogging() throws Exception {
OnlineManagementClient client = TestUtil.clientInit();
// enable RESTEasy debug logging
TestUtil.runCmd(client, "/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=INFO)");
TestUtil.runCmd(client, "/subsystem=logging/logger=org.jboss.resteasy:remove()");
TestUtil.runCmd(client, "/subsystem=logging/logger=javax.xml.bind:remove()");
TestUtil.runCmd(client, "/subsystem=logging/logger=com.fasterxml.jackson:remove()");
client.close();
}
@Before
public void init() {
client = new ResteasyClientBuilder().build();
}
@After
public void after() throws Exception {
client.close();
}
/**
* @tpTestDetails Check build-in providers and interceptors
* @tpSince RESTEasy 3.1.0
*/
@Test
public void testBuildIn() throws Exception {
// count log messages before request
LogCounter bodyReaderStringLog = new LogCounter("MessageBodyReader: org.jboss.resteasy.plugins.providers.StringTextStar", false);
LogCounter bodyWriterStringLog = new LogCounter("MessageBodyWriter: org.jboss.resteasy.plugins.providers.StringTextStar", false);
LogCounter readerInterceptorLog = new LogCounter("ReaderInterceptor: org.jboss.resteasy.security.doseta.DigitalVerificationInterceptor", false);
LogCounter writerInterceptorLog = new LogCounter("WriterInterceptor: org.jboss.resteasy.security.doseta.DigitalSigningInterceptor", false);
// perform request
WebTarget base = client.target(PortProviderUtil.generateURL("/build/in", BUILD_IN));
Response response = base.request().post(Entity.text("data"));
Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus());
String strResponse = response.readEntity(String.class);
Assert.assertEquals("Wrong response", "data", strResponse);
// assert log messages after request
Assert.assertThat("Correct body reader was not used/logged", bodyReaderStringLog.count(), greaterThan(0));
Assert.assertThat("Correct body writer was not used/logged", bodyWriterStringLog.count(), greaterThan(0));
Assert.assertThat("Correct reader interceptor was not used/logged", readerInterceptorLog.count(), greaterThan(0));
Assert.assertThat("Correct writer interceptor was not used/logged", writerInterceptorLog.count(), greaterThan(0));
}
/**
* @tpTestDetails Check user's custom providers and interceptors
* @tpSince RESTEasy 3.1.0
*/
@Test
public void testCustom() throws Exception {
// count log messages before request
LogCounter bodyReaderStringLog = new LogCounter("MessageBodyReader: org.jboss.resteasy.plugins.providers.StringTextStar", false);
LogCounter bodyWriterStringLog = new LogCounter("MessageBodyWriter: org.jboss.resteasy.plugins.providers.StringTextStar", false);
LogCounter readerInterceptorLog = new LogCounter("ReaderInterceptor: org.jboss.resteasy.test.core.logging.resource.DebugLoggingReaderInterceptorCustom", false);
LogCounter writerInterceptorLog = new LogCounter("WriterInterceptor: org.jboss.resteasy.test.core.logging.resource.DebugLoggingWriterInterceptorCustom", false);
LogCounter bodyReaderCustomLog = new LogCounter("MessageBodyReader: org.jboss.resteasy.test.core.logging.resource.DebugLoggingCustomReaderAndWriter", false);
LogCounter bodyWriterCustomLog = new LogCounter("MessageBodyWriter: org.jboss.resteasy.test.core.logging.resource.DebugLoggingCustomReaderAndWriter", false);
// perform request
TestUtil.getWarningCount("MessageBodyReader: org.jboss.resteasy.plugins.providers.StringTextStar", false);
TestUtil.getWarningCount("MessageBodyWriter: org.jboss.resteasy.plugins.providers.StringTextStar", false);
WebTarget base = client.target(PortProviderUtil.generateURL("/custom", CUSTOM));
Response response = base.request().post(Entity.entity("data", "aaa/bbb"));
Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus());
String strResponse = response.readEntity(String.class);
Assert.assertEquals("Wrong response", "wi_datadata", strResponse);
// assert log messages after request
Assert.assertThat("Incorrect body reader was used/logged", bodyReaderStringLog.count(), is(0));
Assert.assertThat("Incorrect body writer was used/logged", bodyWriterStringLog.count(), is(0));
Assert.assertThat("Correct readerInterceptor was not used/logged", readerInterceptorLog.count(), greaterThan(0));
Assert.assertThat("Correct writerInterceptor was not used/logged", writerInterceptorLog.count(), greaterThan(0));
Assert.assertThat("Correct body reader was not used/logged", bodyReaderCustomLog.count(), greaterThan(0));
Assert.assertThat("Correct body writer was not used/logged", bodyWriterCustomLog.count(), greaterThan(0));
}
}