From cdbf9e46bc7f328bc127818e72e28df651577f00 Mon Sep 17 00:00:00 2001 From: "tomasz.kowalczewski" Date: Wed, 4 May 2022 23:07:04 +0200 Subject: [PATCH] Re #87: Mirroring tests from logback side. --- log4j2-appender/pom.xml | 6 ++ .../tjahzi/log4j2/LokiAppenderBuilder.java | 45 ++++++++++- .../log4j2/BufferSizeConfigurationTest.java | 6 +- .../LokiAppenderHttpsCustomEndpointTest.java | 75 +++++++++++++++++++ ...derHttpsUrlConnectionReverseProxyTest.java | 75 +++++++++++++++++++ .../tjahzi/log4j2/infra/IntegrationTest.java | 7 +- ...der-test-custom-endpoint-configuration.xml | 33 ++++++++ .../appender-test-url-configuration.xml | 28 +++++++ .../test/resources/loki.reverse.nginx.conf | 12 +++ .../test/resources/nginx/nginx-selfsigned.crt | 16 ++++ .../test/resources/nginx/nginx-selfsigned.key | 28 +++++++ .../src/test/resources/nginx/passwords | 1 + 12 files changed, 326 insertions(+), 6 deletions(-) create mode 100644 log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderHttpsCustomEndpointTest.java create mode 100644 log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderHttpsUrlConnectionReverseProxyTest.java create mode 100644 log4j2-appender/src/test/resources/appender-test-custom-endpoint-configuration.xml create mode 100644 log4j2-appender/src/test/resources/appender-test-url-configuration.xml create mode 100644 log4j2-appender/src/test/resources/loki.reverse.nginx.conf create mode 100644 log4j2-appender/src/test/resources/nginx/nginx-selfsigned.crt create mode 100644 log4j2-appender/src/test/resources/nginx/nginx-selfsigned.key create mode 100644 log4j2-appender/src/test/resources/nginx/passwords diff --git a/log4j2-appender/pom.xml b/log4j2-appender/pom.xml index 1165b64..1010ed7 100644 --- a/log4j2-appender/pom.xml +++ b/log4j2-appender/pom.xml @@ -102,6 +102,12 @@ 1.14.3 test + + org.testcontainers + nginx + 1.14.3 + test + diff --git a/log4j2-appender/src/main/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderBuilder.java b/log4j2-appender/src/main/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderBuilder.java index e194e30..1518fe1 100644 --- a/log4j2-appender/src/main/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderBuilder.java +++ b/log4j2-appender/src/main/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderBuilder.java @@ -4,7 +4,6 @@ import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.appender.AbstractAppender; import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute; import org.apache.logging.log4j.core.config.plugins.PluginElement; -import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required; import org.apache.logging.log4j.status.StatusLogger; import pl.tkowalcz.tjahzi.LoggingSystem; import pl.tkowalcz.tjahzi.TjahziInitializer; @@ -48,6 +47,9 @@ public class LokiAppenderBuilder> extends Abstr @PluginBuilderAttribute private int port; + @PluginBuilderAttribute + private boolean useSSL; + @PluginBuilderAttribute private String username; @@ -103,6 +105,7 @@ public class LokiAppenderBuilder> extends Abstr .withLogEndpoint(logEndpoint) .withHost(host) .withPort(port) + .withUseSSL(useSSL) .withUsername(username) .withPassword(password) .withConnectionTimeoutMillis(connectTimeoutMillis) @@ -174,6 +177,46 @@ public class LokiAppenderBuilder> extends Abstr return host; } + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getLogEndpoint() { + return logEndpoint; + } + + public void setLogEndpoint(String logEndpoint) { + this.logEndpoint = logEndpoint; + } + + public boolean isUseSSL() { + return useSSL; + } + + public void setUseSSL(boolean useSSL) { + this.useSSL = useSSL; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + public int getConnectTimeoutMillis() { return connectTimeoutMillis; } diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/BufferSizeConfigurationTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/BufferSizeConfigurationTest.java index ce47eb7..91cd288 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/BufferSizeConfigurationTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/BufferSizeConfigurationTest.java @@ -3,15 +3,13 @@ package pl.tkowalcz.tjahzi.log4j2; import org.apache.logging.log4j.core.LoggerContext; import org.junit.jupiter.api.Test; -import java.net.URISyntaxException; - import static org.assertj.core.api.Assertions.assertThat; import static pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest.loadConfig; class BufferSizeConfigurationTest { @Test - void shouldUseDefaultWhenLogBufferSizeIsNotSetViaConfiguration() throws URISyntaxException { + void shouldUseDefaultWhenLogBufferSizeIsNotSetViaConfiguration() { // When LoggerContext context = loadConfig("appender-test-with-buffer-size-megabytes-unset.xml"); @@ -22,7 +20,7 @@ class BufferSizeConfigurationTest { } @Test - void shouldSetLogBufferSizeViaConfiguration() throws URISyntaxException { + void shouldSetLogBufferSizeViaConfiguration() { // When LoggerContext context = loadConfig("appender-test-with-buffer-size-megabytes-set-to-64.xml"); diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderHttpsCustomEndpointTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderHttpsCustomEndpointTest.java new file mode 100644 index 0000000..12cd200 --- /dev/null +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderHttpsCustomEndpointTest.java @@ -0,0 +1,75 @@ +package pl.tkowalcz.tjahzi.log4j2; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.NginxContainer; +import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; +import org.testcontainers.junit.jupiter.Container; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; + +import static org.hamcrest.CoreMatchers.*; + +class LokiAppenderHttpsCustomEndpointTest extends IntegrationTest { + + @Container + public NginxContainer nginx = new NginxContainer<>("nginx:latest") + .withNetwork(network) + .withClasspathResourceMapping("loki.reverse.nginx.conf", + "/etc/nginx/conf.d/loki.reverse.conf", + BindMode.READ_ONLY + ) + .withClasspathResourceMapping("nginx/nginx-selfsigned.crt", + "/etc/nginx/nginx-selfsigned.crt", + BindMode.READ_ONLY + ) + .withClasspathResourceMapping("nginx/nginx-selfsigned.key", + "/etc/nginx/nginx-selfsigned.key", + BindMode.READ_ONLY + ) + .withClasspathResourceMapping("nginx/passwords", + "/etc/nginx/passwords", + BindMode.READ_ONLY + ) + .waitingFor(new HttpWaitStrategy()) + .withExposedPorts(81); + + @Override + @BeforeEach + public void setUp() { + System.setProperty("loki.host", nginx.getHost()); + System.setProperty("loki.port", nginx.getFirstMappedPort().toString()); + } + + @Test + void shouldSendData() { + // Given + loadConfig("appender-test-custom-endpoint-configuration.xml"); + Logger logger = LogManager.getLogger(LokiAppenderHttpsCustomEndpointTest.class); + + String expectedLogLine = "Hello World"; + + // When + logger.info(expectedLogLine); + + // Then + LokiAssert.assertThat(loki) + .returns(response -> response + .body("data.result.size()", equalTo(1)) + .body("data.result[0].stream.server", equalTo("127.0.0.1")) + .body( + "data.result.values", + hasItems( + hasItems( + hasItems( + containsString("INFO LokiAppenderHttpsCustomEndpointTest - " + expectedLogLine) + ) + ) + ) + ) + ); + } +} diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderHttpsUrlConnectionReverseProxyTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderHttpsUrlConnectionReverseProxyTest.java new file mode 100644 index 0000000..d5d2dd3 --- /dev/null +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderHttpsUrlConnectionReverseProxyTest.java @@ -0,0 +1,75 @@ +package pl.tkowalcz.tjahzi.log4j2; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.NginxContainer; +import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; +import org.testcontainers.junit.jupiter.Container; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; + +import static org.hamcrest.CoreMatchers.*; + +class LokiAppenderHttpsUrlConnectionReverseProxyTest extends IntegrationTest { + + @Container + public NginxContainer nginx = new NginxContainer<>("nginx:latest") + .withNetwork(network) + .withClasspathResourceMapping("loki.reverse.nginx.conf", + "/etc/nginx/conf.d/loki.reverse.conf", + BindMode.READ_ONLY + ) + .withClasspathResourceMapping("nginx/nginx-selfsigned.crt", + "/etc/nginx/nginx-selfsigned.crt", + BindMode.READ_ONLY + ) + .withClasspathResourceMapping("nginx/nginx-selfsigned.key", + "/etc/nginx/nginx-selfsigned.key", + BindMode.READ_ONLY + ) + .withClasspathResourceMapping("nginx/passwords", + "/etc/nginx/passwords", + BindMode.READ_ONLY + ) + .waitingFor(new HttpWaitStrategy()) + .withExposedPorts(81); + + @Override + @BeforeEach + public void setUp() { + System.setProperty("loki.host", nginx.getHost()); + System.setProperty("loki.port", nginx.getFirstMappedPort().toString()); + } + + @Test + void shouldSendData() { + // Given + loadConfig("appender-test-url-configuration.xml"); + Logger logger = LogManager.getLogger(LokiAppenderHttpsUrlConnectionReverseProxyTest.class); + + String expectedLogLine = "Hello World"; + + // When + logger.info(expectedLogLine); + + // Then + LokiAssert.assertThat(loki) + .returns(response -> response + .body("data.result.size()", equalTo(1)) + .body("data.result[0].stream.server", equalTo("127.0.0.1")) + .body( + "data.result.values", + hasItems( + hasItems( + hasItems( + containsString("INFO LokiAppenderHttpsUrlConnectionReverseProxyTest - " + expectedLogLine) + ) + ) + ) + ) + ); + } +} diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/IntegrationTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/IntegrationTest.java index b2cf198..e6e1055 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/IntegrationTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/IntegrationTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -17,8 +18,12 @@ import java.net.URL; @Testcontainers public class IntegrationTest { + public static Network network = Network.newNetwork(); + @Container public GenericContainer loki = new GenericContainer("grafana/loki:2.3.0") + .withNetwork(network) + .withNetworkAliases("loki") .withCommand("-config.file=/etc/loki-config.yaml") .withClasspathResourceMapping("loki-config.yaml", "/etc/loki-config.yaml", @@ -31,7 +36,7 @@ public class IntegrationTest { .withExposedPorts(3100); @BeforeEach - void setUp() { + public void setUp() { System.setProperty("loki.host", loki.getHost()); System.setProperty("loki.port", loki.getFirstMappedPort().toString()); } diff --git a/log4j2-appender/src/test/resources/appender-test-custom-endpoint-configuration.xml b/log4j2-appender/src/test/resources/appender-test-custom-endpoint-configuration.xml new file mode 100644 index 0000000..0024917 --- /dev/null +++ b/log4j2-appender/src/test/resources/appender-test-custom-endpoint-configuration.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + ${sys:loki.host} + ${sys:loki.port} + + true + /monitoring/loki/api/v1/push + + tjahzi + tjahzi + + + + + [%t] %d{DEFAULT} %5p %c{1} - %m%n%exception{full} + + +
+