package org.wildfly.swarm.jaxrs;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.resteasy.client.jaxrs.ResteasyClient;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.wildfly.swarm.Swarm;
import org.wildfly.swarm.arquillian.CreateSwarm;
import org.wildfly.swarm.config.logging.Level;
import org.wildfly.swarm.jaxrs.btm.ZipkinFraction;
import org.wildfly.swarm.jaxrs.btm.zipkin.ClientRequestInterceptor;
import org.wildfly.swarm.jaxrs.btm.zipkin.ClientResponseInterceptor;
import org.wildfly.swarm.logging.LoggingFraction;
/**
* @author Heiko Braun
*/
@RunWith(Arquillian.class)
public class ZipkinJAXRSTest {
private static final String LOG_FILE = System.getProperty("user.dir") + File.separator + "swarm-test.log";
private static final String SERVICE_NAME = "wildfly-swarm-service";
private static final String SPAN_COLLECTOR = "com.github.kristofa.brave.LoggingSpanCollector";
@Deployment
public static Archive createDeployment() throws Exception {
JAXRSArchive deployment = ShrinkWrap.create(JAXRSArchive.class);
deployment.addResource(MyResource.class);
deployment.addAllDependencies();
return deployment;
}
@CreateSwarm
public static Swarm newContainer() throws Exception {
System.out.println("Log file: " + LOG_FILE);
return new Swarm()
.fraction(
new LoggingFraction()
.defaultColorFormatter()
.consoleHandler(Level.INFO, "COLOR_PATTERN")
.fileHandler("FILE", f -> {
Map<String, String> fileProps = new HashMap<>();
fileProps.put("path", LOG_FILE);
f.file(fileProps);
f.level(Level.INFO);
f.formatter("%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n");
})
.rootLogger(Level.INFO, "CONSOLE", "FILE")
)
.fraction(new ZipkinFraction("wildfly-swarm-service"));
}
@Test
public void testSpanLogging() throws Exception {
ResteasyClient client = (ResteasyClient) ResteasyClientBuilder.newClient();
client.register(ClientRequestInterceptor.class);
client.register(ClientResponseInterceptor.class);
Response response = client.target("http://localhost:8080").request(MediaType.TEXT_PLAIN).get();
Assert.assertEquals(200, response.getStatus());
// check log file for span reporting & the specified service name
// the default zipkin fraction logs to system out
List<String> logContent = Files.readAllLines(Paths.get(LOG_FILE));
boolean spanPresent = logContent.stream().anyMatch(line -> line.contains(SPAN_COLLECTOR));
Assert.assertTrue("Span logging missing from log file", spanPresent);
boolean serviceNamePresent = logContent.stream().anyMatch(line -> line.contains(SERVICE_NAME));
Assert.assertTrue("Service name " + SERVICE_NAME + " missing from log file", serviceNamePresent);
}
}