package biz.paluch.logging.gelf.jul;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import org.apache.log4j.MDC;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import biz.paluch.logging.gelf.GelfTestSender;
import biz.paluch.logging.gelf.JsonUtil;
import biz.paluch.logging.gelf.Sockets;
import biz.paluch.logging.gelf.intern.GelfMessage;
import biz.paluch.logging.gelf.intern.GelfSender;
import biz.paluch.logging.gelf.intern.sender.RedisGelfSenderProvider;
import biz.paluch.logging.gelf.standalone.DefaultGelfSenderConfiguration;
import redis.clients.jedis.Jedis;
/**
* @author Mark Paluch
* @since 27.09.13 08:25
*/
public class GelfLogHandlerRedisIntegrationTests {
private Jedis jedis;
@BeforeEach
public void before() throws Exception {
// enable the test with -Dtest.withRedis=true
assumeTrue(Sockets.isOpen("localhost", 6479));
GelfTestSender.getMessages().clear();
MDC.remove("mdcField1");
jedis = new Jedis("localhost", 6479);
jedis.flushDB();
jedis.flushAll();
}
@Test
public void testStandalone() throws Exception {
LogManager.getLogManager().readConfiguration(getClass().getResourceAsStream("/jul/test-redis-logging.properties"));
Logger logger = Logger.getLogger(getClass().getName());
String expectedMessage = "message1";
logger.log(Level.INFO, expectedMessage);
List<String> list = jedis.lrange("list", 0, jedis.llen("list"));
assertThat(list).hasSize(1);
Map<String, Object> map = JsonUtil.parseToMap(list.get(0));
assertThat(map.get("full_message")).isEqualTo(expectedMessage);
assertThat(map.get("short_message")).isEqualTo(expectedMessage);
assertThat(map.get("fieldName1")).isEqualTo("fieldValue1");
}
@Test
public void testSentinel() throws Exception {
assumeTrue(Sockets.isOpen("localhost", 26379));
LogManager.getLogManager()
.readConfiguration(getClass().getResourceAsStream("/jul/test-redis-sentinel-logging.properties"));
Logger logger = Logger.getLogger(getClass().getName());
String expectedMessage = "message1";
logger.log(Level.INFO, expectedMessage);
List<String> list = jedis.lrange("list", 0, jedis.llen("list"));
assertThat(list).hasSize(1);
Map<String, Object> map = JsonUtil.parseToMap(list.get(0));
assertThat(map.get("full_message")).isEqualTo(expectedMessage);
assertThat(map.get("short_message")).isEqualTo(expectedMessage);
assertThat(map.get("fieldName1")).isEqualTo("fieldValue1");
}
@Test
public void testMinimalRedisUri() throws Exception {
assumeTrue(Sockets.isOpen("localhost", 6379));
String uri = "redis://localhost/#list";
RedisGelfSenderProvider provider = new RedisGelfSenderProvider();
DefaultGelfSenderConfiguration configuration = new DefaultGelfSenderConfiguration();
configuration.setHost(uri);
GelfSender gelfSender = provider.create(configuration);
gelfSender.sendMessage(new GelfMessage());
}
@Test
public void testRedisWithPortUri() throws Exception {
String uri = "redis://localhost:6479/#list";
RedisGelfSenderProvider provider = new RedisGelfSenderProvider();
DefaultGelfSenderConfiguration configuration = new DefaultGelfSenderConfiguration();
configuration.setHost(uri);
GelfSender gelfSender = provider.create(configuration);
gelfSender.sendMessage(new GelfMessage());
gelfSender.close();
}
@Test
public void uriWithoutHost() throws Exception {
String uri = "redis:///#list";
final DefaultGelfSenderConfiguration configuration = new DefaultGelfSenderConfiguration();
configuration.setHost(uri);
assertThrows(IllegalArgumentException.class, new Executable() {
@Override
public void execute() throws Throwable {
new RedisGelfSenderProvider().create(configuration);
}
});
}
@Test
public void uriWithoutFragment() throws Exception {
String uri = "redis://host/";
final DefaultGelfSenderConfiguration configuration = new DefaultGelfSenderConfiguration();
configuration.setHost(uri);
assertThrows(IllegalArgumentException.class, new Executable() {
@Override
public void execute() throws Throwable {
new RedisGelfSenderProvider().create(configuration);
}
});
}
@Test
public void uriWithoutFragment2() throws Exception {
String uri = "redis://host";
final DefaultGelfSenderConfiguration configuration = new DefaultGelfSenderConfiguration();
configuration.setHost(uri);
assertThrows(IllegalArgumentException.class, new Executable() {
@Override
public void execute() throws Throwable {
new RedisGelfSenderProvider().create(configuration);
}
});
}
@Test
public void uriWithoutFragment3() throws Exception {
String uri = "redis://host#";
final DefaultGelfSenderConfiguration configuration = new DefaultGelfSenderConfiguration();
configuration.setHost(uri);
assertThrows(IllegalArgumentException.class, new Executable() {
@Override
public void execute() throws Throwable {
new RedisGelfSenderProvider().create(configuration);
}
});
}
@Test
public void testRedisNotAvailable() throws Exception {
LogManager.getLogManager()
.readConfiguration(getClass().getResourceAsStream("/jul/test-redis-not-available.properties"));
Logger logger = Logger.getLogger(getClass().getName());
String expectedMessage = "message1";
logger.log(Level.INFO, expectedMessage);
}
}