package biz.paluch.logging.gelf.wildfly; import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import org.apache.log4j.LogManager; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.as.arquillian.api.ServerSetup; import org.jboss.as.arquillian.api.ServerSetupTask; import org.jboss.as.arquillian.container.ManagementClient; import org.jboss.as.cli.CommandContext; import org.jboss.as.cli.CommandContextFactory; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.junit.Test; import org.junit.runner.RunWith; import biz.paluch.logging.gelf.netty.GelfInboundHandler; import biz.paluch.logging.gelf.netty.NettyLocalServer; import io.netty.channel.socket.nio.NioDatagramChannel; /** * Test for the GelfLogHandler of the logstash-gelf module in WildFly. * * @author Mark Paluch * @since 11.08.14 08:36 */ @RunWith(Arquillian.class) @ServerSetup({ WildFlyHandlerIntegrationTests.LoggerSetup.class }) public class WildFlyHandlerIntegrationTests { static class LoggerSetup implements ServerSetupTask { @Override public void setup(ManagementClient managementClient, String containerId) throws Exception { CommandContext commandContext = CommandContextFactory.getInstance().newCommandContext(); commandContext.bindClient(managementClient.getControllerClient()); commandContext .handle("/subsystem=logging/custom-handler=GelfLogger/:add(module=biz.paluch.logging,class=biz.paluch.logging.gelf.wildfly.WildFlyGelfLogHandler,properties={ \\\n" + " host=\"udp:localhost\", \\\n" + " port=\"19392\", \\\n" + " version=\"1.0\", \\\n" + "\t\t facility=\"java-test\", \\\n" + "\t\t extractStackTrace=true, \\\n" + "\t\t filterStackTrace=true, \\\n" + "\t\t mdcProfiling=true, \\\n" + "\t\t timestampPattern=\"yyyy-MM-dd HH:mm:ss,SSSS\", \\\n" + "\t\t maximumMessageSize=8192, \\\n" + "\t\t additionalFields=\"fieldName1=fieldValue1,fieldName2=fieldValue2\", \\\n" + "\t\t mdcFields=\"mdcField1,mdcField2\" \\\n" + "\t\t dynamicMdcFields=\"mdc.*,(mdc|MDC)fields\" \\\n" + "\t\t includeFullMdc=true \\\n" + " })"); commandContext.handle( "/subsystem=logging/root-logger=ROOT/:write-attribute(name=handlers,value=[\"FILE\",\"CONSOLE\",\"GelfLogger\"])"); } @Override public void tearDown(ManagementClient managementClient, String containerId) throws Exception { CommandContext commandContext = CommandContextFactory.getInstance().newCommandContext(); commandContext.bindClient(managementClient.getControllerClient()); commandContext .handle("/subsystem=logging/root-logger=ROOT/:write-attribute(name=handlers,value=[\"FILE\",\"CONSOLE\"])"); commandContext.handle("/subsystem=logging/custom-handler=GelfLogger/:remove()"); } } @Deployment public static Archive<?> createTestArchive() { File[] files = Maven.resolver().loadPomFromFile("pom.xml").resolve("io.netty:netty-all", "org.assertj:assertj-core") .withoutTransitivity().asFile(); return ShrinkWrap.create(WebArchive.class, "logstash-gelf.war").addAsLibraries(files).addClasses(NettyLocalServer.class, GelfInboundHandler.class); } @Test public void testGelfSubmissionToEmbeddedNettyGelfServer() throws Exception { NettyLocalServer nettyLocalServer = new NettyLocalServer(NioDatagramChannel.class); nettyLocalServer.run(); String logMessage = "some log event"; int iterations = 0; while (nettyLocalServer.getJsonValues().isEmpty() && iterations < 10) { LogManager.getLogger(getClass()).info(logMessage); Thread.sleep(100); iterations++; } assertThat(nettyLocalServer.getJsonValues()).isNotEmpty(); boolean foundSomeLogEvent = false; for (Object o : nettyLocalServer.getJsonValues()) { if (o.toString().contains(logMessage)) { foundSomeLogEvent = true; } } assertThat(foundSomeLogEvent).isTrue(); nettyLocalServer.close(); } }