From 49b99bac701bafaa3444e9ae673ab5c54ceb0663 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczewski Date: Wed, 4 Aug 2021 00:26:13 +0200 Subject: [PATCH 1/4] Refactored tests to remove repeated setup and assert code. --- log4j2-appender/pom.xml | 1 - .../log4j2/GrafanaCloudAppenderTest.java | 101 ++++----------- .../log4j2/LogLineFragmentationTest.java | 68 ++-------- .../log4j2/LokiAppenderLargeBatchesTest.java | 113 +++++------------ .../tjahzi/log4j2/LokiAppenderReloadTest.java | 60 ++------- .../log4j2/LokiAppenderShutdownTest.java | 86 +++---------- .../tjahzi/log4j2/LokiAppenderTest.java | 116 ++++-------------- .../log4j2/ProgrammaticConfigurationTest.java | 64 ++-------- .../tjahzi/log4j2/infra/IntegrationTest.java | 54 ++++++++ .../tjahzi/log4j2/infra/LokiAssert.java | 97 +++++++++++++++ .../labels/LabelsContextSubstitutionTest.java | 92 +++----------- .../labels/Log4jPatternsInLabelsTest.java | 93 +++----------- .../LogLevelLabelConfigurationTest.java | 116 +++--------------- 13 files changed, 331 insertions(+), 730 deletions(-) create mode 100644 log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/IntegrationTest.java create mode 100644 log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/LokiAssert.java diff --git a/log4j2-appender/pom.xml b/log4j2-appender/pom.xml index a640151..d55d224 100644 --- a/log4j2-appender/pom.xml +++ b/log4j2-appender/pom.xml @@ -46,7 +46,6 @@ test - com.google.code.java-allocation-instrumenter java-allocation-instrumenter diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/GrafanaCloudAppenderTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/GrafanaCloudAppenderTest.java index f9e87af..4ae0031 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/GrafanaCloudAppenderTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/GrafanaCloudAppenderTest.java @@ -1,24 +1,13 @@ package pl.tkowalcz.tjahzi.log4j2; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.commons.lang3.RandomStringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.awaitility.Awaitility; -import org.awaitility.Durations; -import org.hamcrest.BaseMatcher; -import org.hamcrest.Description; import org.junit.jupiter.api.Test; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; -import java.net.URI; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.hasItems; +import static org.hamcrest.CoreMatchers.*; +import static pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest.loadConfig; class GrafanaCloudAppenderTest { @@ -28,74 +17,34 @@ class GrafanaCloudAppenderTest { System.setProperty("loki.host", "logs-prod-us-central1.grafana.net"); System.setProperty("loki.port", "443"); - URI uri = getClass() - .getClassLoader() - .getResource("grafana-cloud-appender-test-configuration.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig("grafana-cloud-appender-test-configuration.xml"); + Logger logger = LogManager.getLogger(GrafanaCloudAppenderTest.class); String expectedLogLine = RandomStringUtils.randomAlphabetic(42); - long expectedTimestamp = System.currentTimeMillis(); // When - Logger logger = LogManager.getLogger(GrafanaCloudAppenderTest.class); logger.info(expectedLogLine); // Then - RestAssured.reset(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.ONE_MINUTE) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Bserver%3D%22127.0.0.1%22%7D") - .auth() - .preemptive() - .basic( - System.getenv("grafana_username"), - System.getenv("grafana_password") - ) - .when() - .get("https://logs-prod-us-central1.grafana.net/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.server", equalTo("127.0.0.1")) - .body("data.result[0].values", hasItems( - new BaseMatcher<>() { - @Override - public boolean matches(Object o) { - List list = (List) o; - if (list.size() != 2) { - return false; - } - - long actualTimestamp = Long.parseLong(list.get(0).toString()); - String actualLogLine = list.get(1).toString(); - - return actualLogLine.contains(expectedLogLine) - && (expectedTimestamp - actualTimestamp) < TimeUnit.MINUTES.toMillis(1); - } - - @Override - public void describeTo(Description description) { - - } - } - - ) - ); - }); + LokiAssert.assertThat() + .calling("https://logs-prod-us-central1.grafana.net/loki/api/v1/query_range") + .withCredentials( + System.getenv("grafana_username"), + System.getenv("grafana_password") + ) + .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(expectedLogLine) + ) + ) + ) + ) + ); } } diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLineFragmentationTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLineFragmentationTest.java index 1ca96ed..92f503f 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLineFragmentationTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLineFragmentationTest.java @@ -1,85 +1,33 @@ package pl.tkowalcz.tjahzi.log4j2; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.commons.lang3.RandomStringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; -import java.net.URI; - -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.hasItems; -@Testcontainers -class LogLineFragmentationTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY - ) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LogLineFragmentationTest extends IntegrationTest { @Test - void shouldFragmentMessageOverLimit() throws Exception { + void shouldFragmentMessageOverLimit() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-large-log-line-fragmentation.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig("appender-test-large-log-line-fragmentation.xml"); + Logger logger = LogManager.getLogger(LogLineFragmentationTest.class); String unfragmentedLogLine = RandomStringUtils.randomAlphanumeric(100 * 1024 - 1); String fragmentedLogLine = RandomStringUtils.randomAlphanumeric(110 * 1024); - long expectedTimestamp = System.currentTimeMillis(); - Logger logger = LogManager.getLogger(LogLineFragmentationTest.class); - // When logger.info(unfragmentedLogLine); logger.info(fragmentedLogLine); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.ONE_MINUTE) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .statusCode(200) - .body("status", equalTo("success")) + 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[0].values.size()", equalTo(3)) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderLargeBatchesTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderLargeBatchesTest.java index 4e1eeda..3b73bd5 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderLargeBatchesTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderLargeBatchesTest.java @@ -1,57 +1,26 @@ package pl.tkowalcz.tjahzi.log4j2; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; -import java.net.URI; import java.util.List; import java.util.concurrent.TimeUnit; -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.hasItems; -@Testcontainers -class LokiAppenderLargeBatchesTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LokiAppenderLargeBatchesTest extends IntegrationTest { @Test - void shouldSendData() throws Exception { + void shouldSendData() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-large-batches.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig("appender-test-large-batches.xml"); + Logger logger = LogManager.getLogger(LokiAppenderLargeBatchesTest.class); String expectedLogLine = "Cupcake ipsum dolor sit amet cake wafer. " + "Souffle jelly beans biscuit topping. " + @@ -64,7 +33,6 @@ class LokiAppenderLargeBatchesTest { "Souffle cake muffin liquorice tart souffle pie sesame snaps."; long expectedTimestamp = System.currentTimeMillis(); - Logger logger = LogManager.getLogger(LokiAppenderLargeBatchesTest.class); // When for (int i = 0; i < 1000; i++) { @@ -72,52 +40,35 @@ class LokiAppenderLargeBatchesTest { } // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); + LokiAssert.assertThat(loki) + .withFormParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") + .returns(response -> response + .body("data.result.size()", equalTo(1)) + .body("data.result[0].stream.server", equalTo("127.0.0.1")) + .body("data.result[0].values.size()", equalTo(1000)) + .body( + "data.result[0].values", + hasItems(new BaseMatcher<>() { + @Override + public boolean matches(Object o) { + List list = (List) o; + if (list.size() != 2) { + return false; + } - Awaitility - .await() - .atMost(Durations.ONE_MINUTE) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.server", equalTo("127.0.0.1")) - .body("data.result[0].values.size()", equalTo(1000)) - .body("data.result[0].values", hasItems(new BaseMatcher<>() { - @Override - public boolean matches(Object o) { - List list = (List) o; - if (list.size() != 2) { - return false; - } + long actualTimestamp = Long.parseLong(list.get(0).toString()); + String actualLogLine = list.get(1).toString(); - long actualTimestamp = Long.parseLong(list.get(0).toString()); - String actualLogLine = list.get(1).toString(); + return actualLogLine.contains(expectedLogLine) + && (expectedTimestamp - actualTimestamp) < TimeUnit.MINUTES.toMillis(1); + } - return actualLogLine.contains(expectedLogLine) - && (expectedTimestamp - actualTimestamp) < TimeUnit.MINUTES.toMillis(1); - } + @Override + public void describeTo(Description description) { - @Override - public void describeTo(Description description) { - - } - } - - )); - }); + } + } + )) + ); } } diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java index c08bdcb..2520492 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java @@ -1,48 +1,23 @@ package pl.tkowalcz.tjahzi.log4j2; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; import java.net.URI; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.*; -@Testcontainers -class LokiAppenderReloadTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LokiAppenderReloadTest extends IntegrationTest { @Test void shouldNotLooseDataWhenConfigChanges() throws Exception { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - URI uriBefore = getClass() .getClassLoader() .getResource("appender-test-reload-before.xml") @@ -56,39 +31,18 @@ class LokiAppenderReloadTest { URI uri = new URI("file://" + Paths.get(uriBefore).toFile().getParent() + "/appender-test-reload.xml"); Files.copy(Paths.get(uriBefore), Paths.get(uri), StandardCopyOption.REPLACE_EXISTING); - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig(uri); + Logger logger = LogManager.getLogger(LokiAppenderReloadTest.class); String expectedLogLine = "Test"; - long expectedTimestamp = System.currentTimeMillis(); - Logger logger = LogManager.getLogger(LokiAppenderReloadTest.class); - // When logger.info(expectedLogLine); Files.copy(Paths.get(uriAfter), Paths.get(uri), StandardCopyOption.REPLACE_EXISTING); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.ONE_MINUTE) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) + 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[0].values.size()", equalTo(1)) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderShutdownTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderShutdownTest.java index 67fbcf9..e1179f1 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderShutdownTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderShutdownTest.java @@ -1,96 +1,44 @@ package pl.tkowalcz.tjahzi.log4j2; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; -import java.net.URI; - -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.*; -@Testcontainers -class LokiAppenderShutdownTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LokiAppenderShutdownTest extends IntegrationTest { @Test - void shouldNotLooseDataWhenShuttingDown() throws Exception { + void shouldNotLooseDataWhenShuttingDown() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-shutdown.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig("appender-test-shutdown.xml"); + Logger logger = LogManager.getLogger(LokiAppenderShutdownTest.class); String expectedLogLine = "Test"; - long expectedTimestamp = System.currentTimeMillis(); - Logger logger = LogManager.getLogger(LokiAppenderShutdownTest.class); - // When logger.info(expectedLogLine); LogManager.shutdown(); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.ONE_MINUTE) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.server", equalTo("127.0.0.1")) - .body("data.result[0].values.size()", equalTo(1)) - .body( - "data.result.values", - hasItems( + 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[0].values.size()", equalTo(1)) + .body( + "data.result.values", hasItems( hasItems( - containsString("INFO LokiAppenderShutdownTest - Test") + hasItems( + containsString("INFO LokiAppenderShutdownTest - Test") + ) ) ) ) - ) ); } } diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderTest.java index baf8834..44b5bc6 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderTest.java @@ -1,111 +1,41 @@ package pl.tkowalcz.tjahzi.log4j2; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.awaitility.Awaitility; -import org.awaitility.Durations; -import org.hamcrest.BaseMatcher; -import org.hamcrest.Description; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; -import java.net.URI; -import java.util.List; -import java.util.concurrent.TimeUnit; +import static org.hamcrest.CoreMatchers.*; -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.hasItems; - -@Testcontainers -class LokiAppenderTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LokiAppenderTest extends IntegrationTest { @Test - void shouldSendData() throws Exception { + void shouldSendData() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); + loadConfig("basic-appender-test-configuration.xml"); + Logger logger = LogManager.getLogger(LokiAppenderTest.class); - URI uri = getClass() - .getClassLoader() - .getResource("basic-appender-test-configuration.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); - - String expectedLogLine = "Test"; - long expectedTimestamp = System.currentTimeMillis(); + String expectedLogLine = "Hello World"; // When - Logger logger = LogManager.getLogger(LokiAppenderTest.class); logger.info(expectedLogLine); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.server", equalTo("127.0.0.1")) - .body("data.result[0].values", hasItems(new BaseMatcher<>() { - @Override - public boolean matches(Object o) { - List list = (List) o; - if (list.size() != 2) { - return false; - } - - long actualTimestamp = Long.parseLong(list.get(0).toString()); - String actualLogLine = list.get(1).toString(); - - return actualLogLine.contains(expectedLogLine) - && (expectedTimestamp - actualTimestamp) < TimeUnit.MINUTES.toMillis(1); - } - - @Override - public void describeTo(Description description) { - - } - } - - )); - }); + 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 LokiAppenderTest - " + expectedLogLine) + ) + ) + ) + ) + ); } } diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/ProgrammaticConfigurationTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/ProgrammaticConfigurationTest.java index 80aa966..565b0d4 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/ProgrammaticConfigurationTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/ProgrammaticConfigurationTest.java @@ -1,8 +1,5 @@ package pl.tkowalcz.tjahzi.log4j2; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -12,72 +9,29 @@ import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder; import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory; import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.Matchers.greaterThan; -@Testcontainers -public class ProgrammaticConfigurationTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY - ) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +public class ProgrammaticConfigurationTest extends IntegrationTest { @Test - void shouldInitializeAppenderProgrammatically() throws Exception { - // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - + void shouldInitializeAppenderProgrammatically() { // When ConfigurationBuilder builder = createConfiguration(); Configurator.reconfigure(builder.build()); - // Then - long expectedTimestamp = System.currentTimeMillis(); - Logger logger = LogManager.getLogger(ProgrammaticConfigurationTest.class); + + // Then logger.warn("Here I come!"); - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted( - () -> given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) + 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[0].values.size()", greaterThan(0)) 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 new file mode 100644 index 0000000..02fcc8c --- /dev/null +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/IntegrationTest.java @@ -0,0 +1,54 @@ +package pl.tkowalcz.tjahzi.log4j2.infra; + +import org.apache.logging.log4j.LogManager; +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.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.net.URI; +import java.net.URISyntaxException; + +@Testcontainers +public class IntegrationTest { + + @Container + public GenericContainer loki = new GenericContainer("grafana/loki:latest") + .withCommand("-config.file=/etc/loki-config.yaml") + .withClasspathResourceMapping("loki-config.yaml", + "/etc/loki-config.yaml", + BindMode.READ_ONLY + ) + .waitingFor( + Wait.forHttp("/ready") + .forPort(3100) + ) + .withExposedPorts(3100); + + @BeforeEach + void setUp() { + System.setProperty("loki.host", loki.getHost()); + System.setProperty("loki.port", loki.getFirstMappedPort().toString()); + } + + public static void loadConfig(String fileName) { + try { + URI uri = IntegrationTest.class + .getClassLoader() + .getResource(fileName) + .toURI(); + + loadConfig(uri); + } catch (URISyntaxException e) { + Assertions.fail(e); + } + } + + public static void loadConfig(URI uri) { + ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) + .setConfigLocation(uri); + } +} diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/LokiAssert.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/LokiAssert.java new file mode 100644 index 0000000..3812186 --- /dev/null +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/infra/LokiAssert.java @@ -0,0 +1,97 @@ +package pl.tkowalcz.tjahzi.log4j2.infra; + +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import io.restassured.parsing.Parser; +import io.restassured.response.ValidatableResponse; +import io.restassured.specification.RequestSpecification; +import org.awaitility.Awaitility; +import org.awaitility.Durations; +import org.testcontainers.containers.GenericContainer; + +import java.util.function.Consumer; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.equalTo; + +@SuppressWarnings("rawtypes") +public class LokiAssert { + + private String url = "/loki/api/v1/query_range"; + private String param = "query=%7Bserver%3D%22127.0.0.1%22%7D"; + + private String username; + private String password; + + public LokiAssert() { + RestAssured.reset(); + RestAssured.registerParser("text/plain", Parser.JSON); + } + + public LokiAssert(GenericContainer loki) { + RestAssured.port = loki.getFirstMappedPort(); + RestAssured.baseURI = "http://" + loki.getHost(); + RestAssured.registerParser("text/plain", Parser.JSON); + } + + public static LokiAssert assertThat() { + return new LokiAssert(); + } + + public LokiAssert withFormParam(String param) { + this.param = param; + return this; + } + + public static LokiAssert assertThat(GenericContainer loki) { + return new LokiAssert(loki); + } + + public void returns(Consumer restOfAssertionsGoHere) { + Awaitility + .await() + .atMost(Durations.ONE_MINUTE) + .pollInterval(Durations.ONE_SECOND) + .ignoreExceptions() + .untilAsserted(() -> { + RequestSpecification requestSpecification = given() + .contentType(ContentType.URLENC) + .urlEncodingEnabled(false) + .formParam(param); + + if (username != null || password != null) { + requestSpecification = requestSpecification + .auth() + .preemptive() + .basic( + username, + password + ); + } + + ValidatableResponse validatableResponse = requestSpecification + .when() + .get(url) + .then() + .log() + .all() + .statusCode(200) + .body("status", equalTo("success")); + + restOfAssertionsGoHere.accept(validatableResponse); + }); + } + + public LokiAssert withCredentials(String username, String password) { + this.username = username; + this.password = password; + + return this; + } + + public LokiAssert calling(String url) { + this.url = url; + + return this; + } +} diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LabelsContextSubstitutionTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LabelsContextSubstitutionTest.java index 56f7f12..3d494e0 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LabelsContextSubstitutionTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LabelsContextSubstitutionTest.java @@ -1,56 +1,23 @@ package pl.tkowalcz.tjahzi.log4j2.labels; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; import org.slf4j.MDC; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; -import java.net.URI; - -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.core.Every.everyItem; -@Testcontainers -class LabelsContextSubstitutionTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LabelsContextSubstitutionTest extends IntegrationTest { @Test - void shouldSendData() throws Exception { + void shouldSendData() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("labels-context-substitution-test-configuration.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig("labels-context-substitution-test-configuration.xml"); Logger logger = LogManager.getLogger(LabelsContextSubstitutionTest.class); @@ -67,39 +34,20 @@ class LabelsContextSubstitutionTest { logger.info("Test3"); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(3)) - .body("data.result.stream.server", everyItem(equalTo("127.0.0.1"))) - .body("data.result.stream.object", contains("prefix_", "prefix_bus_ticket", "prefix_comb")) - .body("data.result.stream.owner", contains("_suffix", "wally_suffix", "jennifer_suffix")) - .body("data.result.stream.default_value_test", contains("use_this_if_missing", "use_this_if_missing", "use_this_if_missing")) - .body("data.result.values", - hasItems( - hasItems(hasItems("LabelsContextSubstitutionTest - Test3")), - hasItems(hasItems("LabelsContextSubstitutionTest - Test1")), - hasItems(hasItems("LabelsContextSubstitutionTest - Test2")) - ) - ); - }); + LokiAssert.assertThat(loki) + .returns(response -> response + .body("data.result.size()", equalTo(3)) + .body("data.result.stream.server", everyItem(equalTo("127.0.0.1"))) + .body("data.result.stream.object", contains("prefix_", "prefix_bus_ticket", "prefix_comb")) + .body("data.result.stream.owner", contains("_suffix", "wally_suffix", "jennifer_suffix")) + .body("data.result.stream.default_value_test", contains("use_this_if_missing", "use_this_if_missing", "use_this_if_missing")) + .body("data.result.values", + hasItems( + hasItems(hasItems("LabelsContextSubstitutionTest - Test3")), + hasItems(hasItems("LabelsContextSubstitutionTest - Test1")), + hasItems(hasItems("LabelsContextSubstitutionTest - Test2")) + ) + ) + ); } } diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/Log4jPatternsInLabelsTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/Log4jPatternsInLabelsTest.java index 50408a4..bdee896 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/Log4jPatternsInLabelsTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/Log4jPatternsInLabelsTest.java @@ -1,59 +1,23 @@ package pl.tkowalcz.tjahzi.log4j2.labels; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; import org.slf4j.MDC; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; -import java.net.URI; - -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.core.Every.everyItem; -@Testcontainers -class Log4jPatternsInLabelsTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping( - "loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY - ) - .waitingFor( - Wait - .forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class Log4jPatternsInLabelsTest extends IntegrationTest { @Test - void shouldSendData() throws Exception { + void shouldSendData() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("log4j-patterns-in-labels-configuration.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig("log4j-patterns-in-labels-configuration.xml"); Logger logger = LogManager.getLogger(Log4jPatternsInLabelsTest.class); @@ -65,38 +29,19 @@ class Log4jPatternsInLabelsTest { logger.info("Test2"); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(2)) - .body("data.result.stream.server", everyItem(equalTo("127.0.0.1"))) - .body("data.result.stream.class_pattern", everyItem(equalTo("p.t.t.l.l.Log4jPatternsInLabelsTest"))) - .body("data.result.stream.sequence_number", contains("2", "1")) - .body("data.result.stream.mdc_tid", contains("", "req-230rq9ubou")) - .body("data.result.values", - hasItems( - hasItems(hasItems("Log4jPatternsInLabelsTest - Test2")), - hasItems(hasItems("Log4jPatternsInLabelsTest - Test1")) - ) - ); - }); + LokiAssert.assertThat(loki) + .returns(response -> response + .body("data.result.size()", equalTo(2)) + .body("data.result.stream.server", everyItem(equalTo("127.0.0.1"))) + .body("data.result.stream.class_pattern", everyItem(equalTo("p.t.t.l.l.Log4jPatternsInLabelsTest"))) + .body("data.result.stream.sequence_number", contains("2", "1")) + .body("data.result.stream.mdc_tid", contains("", "req-230rq9ubou")) + .body("data.result.values", + hasItems( + hasItems(hasItems("Log4jPatternsInLabelsTest - Test2")), + hasItems(hasItems("Log4jPatternsInLabelsTest - Test1")) + ) + ) + ); } } diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LogLevelLabelConfigurationTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LogLevelLabelConfigurationTest.java index beb4e47..1905f15 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LogLevelLabelConfigurationTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LogLevelLabelConfigurationTest.java @@ -1,128 +1,52 @@ package pl.tkowalcz.tjahzi.log4j2.labels; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; -import java.net.URI; import java.net.URISyntaxException; -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; -@Testcontainers -class LogLevelLabelConfigurationTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LogLevelLabelConfigurationTest extends IntegrationTest { @Test - void shouldWorkWithNoLogLevelConfigured() throws Exception { + void shouldWorkWithNoLogLevelConfigured() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-with-log-label-unset.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig("appender-test-with-log-label-unset.xml"); // When Logger logger = LogManager.getLogger(LogLevelLabelConfigurationTest.class); logger.info("Test"); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Btest%3D%22shouldWorkWithNoLogLevelConfigured%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.log_level", nullValue()); - }); + LokiAssert.assertThat(loki) + .withFormParam("query=%7Btest%3D%22shouldWorkWithNoLogLevelConfigured%22%7D") + .returns(response -> response + .body("data.result.size()", equalTo(1)) + .body("data.result[0].stream.log_level", nullValue()) + ); } @Test - void shouldSendLogLevelAsConfigured() throws URISyntaxException { + void shouldSendLogLevelAsConfigured() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-with-log-label-set.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig("appender-test-with-log-label-set.xml"); // When Logger logger = LogManager.getLogger(LogLevelLabelConfigurationTest.class); logger.info("Test"); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Btest%3D%22shouldSendLogLevelAsConfigured%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.log_level", equalTo("INFO")); - }); + LokiAssert.assertThat(loki) + .withFormParam("query=%7Btest%3D%22shouldSendLogLevelAsConfigured%22%7D") + .returns(response -> + response + .body("data.result.size()", equalTo(1)) + .body("data.result[0].stream.log_level", equalTo("INFO")) + ); } } From 35bd48c62cc38f810826aea04ea5a43c802c84e3 Mon Sep 17 00:00:00 2001 From: "tomasz.kowalczewski" Date: Fri, 6 Aug 2021 23:05:28 +0200 Subject: [PATCH 2/4] Reformatting, changing imports etc. --- .../tjahzi/log4j2/AllocationTest.java | 36 +++---------------- .../log4j2/GrafanaCloudAppenderTest.java | 6 ++-- .../log4j2/LokiAppenderMonitoringTest.java | 14 ++------ .../tjahzi/log4j2/LokiAppenderReloadTest.java | 4 +-- .../log4j2/LokiAppenderShutdownTest.java | 4 +-- .../tjahzi/log4j2/LokiAppenderTest.java | 4 +-- .../log4j2/ProgrammaticConfigurationTest.java | 4 +-- .../tjahzi/log4j2/infra/IntegrationTest.java | 15 +++++--- .../labels/LabelsContextSubstitutionTest.java | 4 +-- .../labels/Log4jPatternsInLabelsTest.java | 4 +-- .../LogLevelLabelConfigurationTest.java | 8 ++--- 11 files changed, 35 insertions(+), 68 deletions(-) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/AllocationTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/AllocationTest.java index 5a2d154..50320ef 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/AllocationTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/AllocationTest.java @@ -5,39 +5,20 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.shaded.com.google.common.util.concurrent.Uninterruptibles; +import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; -import java.net.URI; -import java.net.URISyntaxException; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; -@Testcontainers -public class AllocationTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +public class AllocationTest extends IntegrationTest { @Test @Disabled - void shouldSendData() throws URISyntaxException { + void shouldSendData() { AtomicLong totalAllocatedMemory = new AtomicLong(); Map allocatedMemory = new HashMap<>(); Runtime.getRuntime().addShutdownHook(new Thread(() -> { @@ -52,16 +33,7 @@ public class AllocationTest { })); // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("basic-appender-test-configuration.xml") - .toURI(); - - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + loadConfig("basic-appender-test-configuration.xml"); String logLine = "Cupcake ipsum dolor sit amet cake wafer. " + "Souffle jelly beans biscuit topping. " + diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/GrafanaCloudAppenderTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/GrafanaCloudAppenderTest.java index 4ae0031..27dbfde 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/GrafanaCloudAppenderTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/GrafanaCloudAppenderTest.java @@ -4,15 +4,15 @@ import org.apache.commons.lang3.RandomStringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; -import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; import static org.hamcrest.CoreMatchers.*; import static pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest.loadConfig; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; class GrafanaCloudAppenderTest { @Test - void shouldSendData() throws Exception { + void shouldSendData() { // Given System.setProperty("loki.host", "logs-prod-us-central1.grafana.net"); System.setProperty("loki.port", "443"); @@ -26,7 +26,7 @@ class GrafanaCloudAppenderTest { logger.info(expectedLogLine); // Then - LokiAssert.assertThat() + assertThat() .calling("https://logs-prod-us-central1.grafana.net/loki/api/v1/query_range") .withCredentials( System.getenv("grafana_username"), diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderMonitoringTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderMonitoringTest.java index fe26342..f184084 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderMonitoringTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderMonitoringTest.java @@ -8,27 +8,19 @@ import org.apache.logging.log4j.core.LoggerContext; import org.junit.jupiter.api.Test; import pl.tkowalcz.tjahzi.stats.DropwizardMonitoringModule; -import java.net.URI; -import java.net.URISyntaxException; - import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; +import static pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest.loadConfig; class LokiAppenderMonitoringTest { @Test - void shouldInjectMonitoringAndUseIt() throws URISyntaxException { + void shouldInjectMonitoringAndUseIt() { // Given System.setProperty("loki.host", "somewhere"); System.setProperty("loki.port", "42"); - URI uri = getClass() - .getClassLoader() - .getResource("basic-appender-test-configuration.xml") - .toURI(); - - LoggerContext context = (LoggerContext) LogManager.getContext(false); - context.setConfigLocation(uri); + LoggerContext context = loadConfig("basic-appender-test-configuration.xml"); LokiAppender loki = context.getConfiguration().getAppender("Loki"); MetricRegistry metricRegistry = new MetricRegistry(); diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java index 2520492..3f3a800 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java @@ -4,7 +4,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; -import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; import java.net.URI; import java.nio.file.Files; @@ -12,6 +11,7 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import static org.hamcrest.CoreMatchers.*; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; class LokiAppenderReloadTest extends IntegrationTest { @@ -41,7 +41,7 @@ class LokiAppenderReloadTest extends IntegrationTest { Files.copy(Paths.get(uriAfter), Paths.get(uri), StandardCopyOption.REPLACE_EXISTING); // Then - LokiAssert.assertThat(loki) + assertThat(loki) .returns(response -> response .body("data.result.size()", equalTo(1)) .body("data.result[0].stream.server", equalTo("127.0.0.1")) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderShutdownTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderShutdownTest.java index e1179f1..7e5c5db 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderShutdownTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderShutdownTest.java @@ -4,9 +4,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; -import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; import static org.hamcrest.CoreMatchers.*; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; class LokiAppenderShutdownTest extends IntegrationTest { @@ -23,7 +23,7 @@ class LokiAppenderShutdownTest extends IntegrationTest { LogManager.shutdown(); // Then - LokiAssert.assertThat(loki) + assertThat(loki) .returns(response -> response .body("data.result.size()", equalTo(1)) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderTest.java index 44b5bc6..9cb6b09 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderTest.java @@ -4,9 +4,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; -import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; import static org.hamcrest.CoreMatchers.*; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; class LokiAppenderTest extends IntegrationTest { @@ -22,7 +22,7 @@ class LokiAppenderTest extends IntegrationTest { logger.info(expectedLogLine); // Then - LokiAssert.assertThat(loki) + assertThat(loki) .returns(response -> response .body("data.result.size()", equalTo(1)) .body("data.result[0].stream.server", equalTo("127.0.0.1")) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/ProgrammaticConfigurationTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/ProgrammaticConfigurationTest.java index 565b0d4..473979c 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/ProgrammaticConfigurationTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/ProgrammaticConfigurationTest.java @@ -11,10 +11,10 @@ import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFact import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; import org.junit.jupiter.api.Test; import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; -import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.Matchers.greaterThan; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; public class ProgrammaticConfigurationTest extends IntegrationTest { @@ -29,7 +29,7 @@ public class ProgrammaticConfigurationTest extends IntegrationTest { // Then logger.warn("Here I come!"); - LokiAssert.assertThat(loki) + assertThat(loki) .returns(response -> response .body("data.result.size()", equalTo(1)) 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 02fcc8c..2c7f733 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 @@ -1,6 +1,7 @@ package pl.tkowalcz.tjahzi.log4j2.infra; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.LoggerContext; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.testcontainers.containers.BindMode; @@ -34,21 +35,25 @@ public class IntegrationTest { System.setProperty("loki.port", loki.getFirstMappedPort().toString()); } - public static void loadConfig(String fileName) { + public static LoggerContext loadConfig(String fileName) { try { URI uri = IntegrationTest.class .getClassLoader() .getResource(fileName) .toURI(); - loadConfig(uri); + return loadConfig(uri); } catch (URISyntaxException e) { Assertions.fail(e); } + + return null; } - public static void loadConfig(URI uri) { - ((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)) - .setConfigLocation(uri); + public static LoggerContext loadConfig(URI uri) { + LoggerContext context = (LoggerContext) LogManager.getContext(false); + context.setConfigLocation(uri); + + return context; } } diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LabelsContextSubstitutionTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LabelsContextSubstitutionTest.java index 3d494e0..d08ff1f 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LabelsContextSubstitutionTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LabelsContextSubstitutionTest.java @@ -5,12 +5,12 @@ import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import org.slf4j.MDC; import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; -import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.core.Every.everyItem; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; class LabelsContextSubstitutionTest extends IntegrationTest { @@ -34,7 +34,7 @@ class LabelsContextSubstitutionTest extends IntegrationTest { logger.info("Test3"); // Then - LokiAssert.assertThat(loki) + assertThat(loki) .returns(response -> response .body("data.result.size()", equalTo(3)) .body("data.result.stream.server", everyItem(equalTo("127.0.0.1"))) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/Log4jPatternsInLabelsTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/Log4jPatternsInLabelsTest.java index bdee896..44c0be4 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/Log4jPatternsInLabelsTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/Log4jPatternsInLabelsTest.java @@ -5,12 +5,12 @@ import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import org.slf4j.MDC; import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; -import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.core.Every.everyItem; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; class Log4jPatternsInLabelsTest extends IntegrationTest { @@ -29,7 +29,7 @@ class Log4jPatternsInLabelsTest extends IntegrationTest { logger.info("Test2"); // Then - LokiAssert.assertThat(loki) + assertThat(loki) .returns(response -> response .body("data.result.size()", equalTo(2)) .body("data.result.stream.server", everyItem(equalTo("127.0.0.1"))) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LogLevelLabelConfigurationTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LogLevelLabelConfigurationTest.java index 1905f15..a96701c 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LogLevelLabelConfigurationTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/labels/LogLevelLabelConfigurationTest.java @@ -4,12 +4,10 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; -import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; - -import java.net.URISyntaxException; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; class LogLevelLabelConfigurationTest extends IntegrationTest { @@ -23,7 +21,7 @@ class LogLevelLabelConfigurationTest extends IntegrationTest { logger.info("Test"); // Then - LokiAssert.assertThat(loki) + assertThat(loki) .withFormParam("query=%7Btest%3D%22shouldWorkWithNoLogLevelConfigured%22%7D") .returns(response -> response .body("data.result.size()", equalTo(1)) @@ -41,7 +39,7 @@ class LogLevelLabelConfigurationTest extends IntegrationTest { logger.info("Test"); // Then - LokiAssert.assertThat(loki) + assertThat(loki) .withFormParam("query=%7Btest%3D%22shouldSendLogLevelAsConfigured%22%7D") .returns(response -> response From dec21db1c2a7986ff66d28fc971b82f6719e00be Mon Sep 17 00:00:00 2001 From: "tomasz.kowalczewski" Date: Sat, 7 Aug 2021 01:42:17 +0200 Subject: [PATCH 3/4] This time also cleaning up tests on logback side. --- .../log4j2/BufferSizeConfigurationTest.java | 21 +-- .../tjahzi/log4j2/LokiAppenderReloadTest.java | 3 +- .../tjahzi/logback/AllocationTest.java | 44 +----- .../logback/BufferSizeConfigurationTest.java | 35 +---- .../LogLevelLabelConfigurationTest.java | 131 +++--------------- .../logback/LokiAppenderLargeBatchesTest.java | 117 ++++------------ .../logback/LokiAppenderMonitoringTest.java | 24 +--- .../logback/LokiAppenderReloadTest.java | 67 +-------- .../logback/LokiAppenderShutdownTest.java | 92 +++--------- .../tjahzi/logback/LokiAppenderTest.java | 123 +++------------- .../logback/MdcLogLabelConfigurationTest.java | 84 ++--------- .../tjahzi/logback/infra/IntegrationTest.java | 71 ++++++++++ .../tjahzi/logback/infra/LokiAssert.java | 97 +++++++++++++ .../logback/{util => infra}/TestUtil.java | 2 +- 14 files changed, 298 insertions(+), 613 deletions(-) create mode 100644 logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/IntegrationTest.java create mode 100644 logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/LokiAssert.java rename logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/{util => infra}/TestUtil.java (95%) 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 ed5ff2f..ce47eb7 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 @@ -1,27 +1,19 @@ package pl.tkowalcz.tjahzi.log4j2; -import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LoggerContext; import org.junit.jupiter.api.Test; -import java.net.URI; 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 { - // Given - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-with-buffer-size-megabytes-unset.xml") - .toURI(); - // When - LoggerContext context = (LoggerContext) LogManager.getContext(false); - context.setConfigLocation(uri); + LoggerContext context = loadConfig("appender-test-with-buffer-size-megabytes-unset.xml"); // Then LokiAppender loki = context.getConfiguration().getAppender("Loki"); @@ -31,15 +23,8 @@ class BufferSizeConfigurationTest { @Test void shouldSetLogBufferSizeViaConfiguration() throws URISyntaxException { - // Given - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-with-buffer-size-megabytes-set-to-64.xml") - .toURI(); - // When - LoggerContext context = (LoggerContext) LogManager.getContext(false); - context.setConfigLocation(uri); + LoggerContext context = loadConfig("appender-test-with-buffer-size-megabytes-set-to-64.xml"); // Then LokiAppender loki = context.getConfiguration().getAppender("Loki"); diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java index 3f3a800..d6a66af 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderReloadTest.java @@ -5,6 +5,7 @@ import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import pl.tkowalcz.tjahzi.log4j2.infra.IntegrationTest; +import java.io.File; import java.net.URI; import java.nio.file.Files; import java.nio.file.Paths; @@ -28,7 +29,7 @@ class LokiAppenderReloadTest extends IntegrationTest { .getResource("appender-test-reload-after.xml") .toURI(); - URI uri = new URI("file://" + Paths.get(uriBefore).toFile().getParent() + "/appender-test-reload.xml"); + URI uri = new File(Paths.get(uriBefore).toFile().getParent(), "appender-test-reload.xml").toURI(); Files.copy(Paths.get(uriBefore), Paths.get(uri), StandardCopyOption.REPLACE_EXISTING); loadConfig(uri); diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/AllocationTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/AllocationTest.java index 06eb121..1e2d0a3 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/AllocationTest.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/AllocationTest.java @@ -1,44 +1,24 @@ package pl.tkowalcz.tjahzi.logback; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; import com.google.monitoring.runtime.instrumentation.AllocationRecorder; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.shaded.com.google.common.util.concurrent.Uninterruptibles; +import pl.tkowalcz.tjahzi.logback.infra.IntegrationTest; -import java.net.URI; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; -@Testcontainers -public class AllocationTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +public class AllocationTest extends IntegrationTest { @Test @Disabled - void shouldSendData() throws Exception { + void shouldSendData() { AtomicLong totalAllocatedMemory = new AtomicLong(); Map allocatedMemory = new HashMap<>(); Runtime.getRuntime().addShutdownHook(new Thread(() -> { @@ -53,21 +33,7 @@ public class AllocationTest { })); // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("basic-appender-test-configuration.xml") - .toURI(); - - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = loadConfig("basic-appender-test-configuration.xml"); String logLine = "Cupcake ipsum dolor sit amet cake wafer. " + "Souffle jelly beans biscuit topping. " + @@ -99,7 +65,7 @@ public class AllocationTest { return; } - if(desc.contains("LoggingEvent")) { + if (desc.contains("LoggingEvent")) { return; } diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/BufferSizeConfigurationTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/BufferSizeConfigurationTest.java index bacb406..2b4a450 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/BufferSizeConfigurationTest.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/BufferSizeConfigurationTest.java @@ -1,33 +1,18 @@ package pl.tkowalcz.tjahzi.logback; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; -import pl.tkowalcz.tjahzi.logback.util.TestUtil; - -import java.net.URI; +import pl.tkowalcz.tjahzi.logback.infra.TestUtil; import static org.assertj.core.api.Assertions.assertThat; +import static pl.tkowalcz.tjahzi.logback.infra.IntegrationTest.loadConfig; class BufferSizeConfigurationTest { @Test void shouldUseDefaultWhenLogBufferSizeIsNotSetViaConfiguration() throws Exception { - // Given - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-with-buffer-size-megabytes-unset.xml") - .toURI(); - // When - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = loadConfig("appender-test-with-buffer-size-megabytes-unset.xml"); // Then LokiAppender loki = TestUtil.getLokiAppender(context); @@ -36,20 +21,8 @@ class BufferSizeConfigurationTest { @Test void shouldSetLogBufferSizeViaConfiguration() throws Exception { - // Given - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-with-buffer-size-megabytes-set-to-64.xml") - .toURI(); - // When - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = loadConfig("appender-test-with-buffer-size-megabytes-set-to-64.xml"); // Then LokiAppender loki = TestUtil.getLokiAppender(context); diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LogLevelLabelConfigurationTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LogLevelLabelConfigurationTest.java index f058f04..ea731b5 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LogLevelLabelConfigurationTest.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LogLevelLabelConfigurationTest.java @@ -2,139 +2,50 @@ package pl.tkowalcz.tjahzi.logback; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.logback.infra.IntegrationTest; -import java.net.URI; - -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; -import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import static pl.tkowalcz.tjahzi.logback.infra.LokiAssert.assertThat; -@Testcontainers -class LogLevelLabelConfigurationTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LogLevelLabelConfigurationTest extends IntegrationTest { @Test - void shouldWorkWithNoLogLevelConfigured() throws Exception { + void shouldWorkWithNoLogLevelConfigured() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-with-log-label-unset.xml") - .toURI(); - - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = loadConfig("appender-test-with-log-label-unset.xml"); // When Logger logger = context.getLogger(LogLevelLabelConfigurationTest.class); logger.info("Test"); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Btest%3D%22shouldWorkWithNoLogLevelConfigured%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.log_level", nullValue()); - }); + assertThat(loki) + .withFormParam("query=%7Btest%3D%22shouldWorkWithNoLogLevelConfigured%22%7D") + .returns(response -> response + .body("status", equalTo("success")) + .body("data.result.size()", equalTo(1)) + .body("data.result[0].stream.log_level", nullValue()) + ); } @Test - void shouldSendLogLevelAsConfigured() throws Exception { + void shouldSendLogLevelAsConfigured() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-with-log-label-set.xml") - .toURI(); - - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = loadConfig("appender-test-with-log-label-set.xml"); // When Logger logger = context.getLogger(LogLevelLabelConfigurationTest.class); logger.info("Test"); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Btest%3D%22shouldSendLogLevelAsConfigured%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.log_level", equalTo("INFO")); - }); + assertThat(loki) + .withFormParam("query=%7Btest%3D%22shouldSendLogLevelAsConfigured%22%7D") + .returns(response -> response + .body("status", equalTo("success")) + .body("data.result.size()", equalTo(1)) + .body("data.result[0].stream.log_level", equalTo("INFO")) + ); } } diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderLargeBatchesTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderLargeBatchesTest.java index 0e1adc5..e16eb22 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderLargeBatchesTest.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderLargeBatchesTest.java @@ -2,63 +2,25 @@ package pl.tkowalcz.tjahzi.logback; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.logback.infra.IntegrationTest; -import java.net.URI; import java.util.List; import java.util.concurrent.TimeUnit; -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.hasItems; +import static pl.tkowalcz.tjahzi.logback.infra.LokiAssert.assertThat; -@Testcontainers -class LokiAppenderLargeBatchesTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LokiAppenderLargeBatchesTest extends IntegrationTest { @Test - void shouldSendData() throws Exception { + void shouldSendData() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-large-batches.xml") - .toURI(); - - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = loadConfig("appender-test-large-batches.xml"); + Logger logger = context.getLogger(LokiAppenderLargeBatchesTest.class); String expectedLogLine = "Cupcake ipsum dolor sit amet cake wafer. " + "Souffle jelly beans biscuit topping. " + @@ -71,7 +33,6 @@ class LokiAppenderLargeBatchesTest { "Souffle cake muffin liquorice tart souffle pie sesame snaps."; long expectedTimestamp = System.currentTimeMillis(); - Logger logger = context.getLogger(LokiAppenderLargeBatchesTest.class); // When for (int i = 0; i < 1000; i++) { @@ -79,52 +40,34 @@ class LokiAppenderLargeBatchesTest { } // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.ONE_MINUTE) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.server", equalTo("127.0.0.1")) - .body("data.result[0].values.size()", equalTo(1000)) - .body("data.result[0].values", hasItems(new BaseMatcher<>() { - @Override - public boolean matches(Object o) { - List list = (List) o; - if (list.size() != 2) { - return false; - } - - long actualTimestamp = Long.parseLong(list.get(0).toString()); - String actualLogLine = list.get(1).toString(); - - return actualLogLine.contains(expectedLogLine) - && (expectedTimestamp - actualTimestamp) < TimeUnit.MINUTES.toMillis(1); + assertThat(loki) + .withFormParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") + .returns(response -> response + .body("data.result.size()", equalTo(1)) + .body("data.result[0].stream.server", equalTo("127.0.0.1")) + .body("data.result[0].values.size()", equalTo(1000)) + .body("data.result[0].values", hasItems(new BaseMatcher<>() { + @Override + public boolean matches(Object o) { + List list = (List) o; + if (list.size() != 2) { + return false; } - @Override - public void describeTo(Description description) { + long actualTimestamp = Long.parseLong(list.get(0).toString()); + String actualLogLine = list.get(1).toString(); - } + return actualLogLine.contains(expectedLogLine) + && (expectedTimestamp - actualTimestamp) < TimeUnit.MINUTES.toMillis(1); } - )); - }); + @Override + public void describeTo(Description description) { + + } + } + + )) + ); } } diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderMonitoringTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderMonitoringTest.java index 68b28a6..f76bd3d 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderMonitoringTest.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderMonitoringTest.java @@ -2,41 +2,25 @@ package pl.tkowalcz.tjahzi.logback; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; import com.codahale.metrics.Counter; import com.codahale.metrics.MetricRegistry; import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; -import org.testcontainers.junit.jupiter.Testcontainers; -import pl.tkowalcz.tjahzi.logback.util.TestUtil; +import pl.tkowalcz.tjahzi.logback.infra.IntegrationTest; +import pl.tkowalcz.tjahzi.logback.infra.TestUtil; import pl.tkowalcz.tjahzi.stats.DropwizardMonitoringModule; -import java.net.URI; - import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; -@Testcontainers class LokiAppenderMonitoringTest { @Test - void shouldInjectMonitoringAndUseIt() throws Exception { + void shouldInjectMonitoringAndUseIt() { // Given System.setProperty("loki.host", "somewhere"); System.setProperty("loki.port", "42"); - URI uri = getClass() - .getClassLoader() - .getResource("basic-appender-test-configuration.xml") - .toURI(); - - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = IntegrationTest.loadConfig("basic-appender-test-configuration.xml"); LokiAppender loki = TestUtil.getLokiAppender(context); diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderReloadTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderReloadTest.java index a08d9fa..d65c9ae 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderReloadTest.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderReloadTest.java @@ -2,19 +2,8 @@ package pl.tkowalcz.tjahzi.logback; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.logback.infra.IntegrationTest; import java.io.File; import java.net.URI; @@ -22,30 +11,14 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.*; +import static pl.tkowalcz.tjahzi.logback.infra.LokiAssert.assertThat; -@Testcontainers -class LokiAppenderReloadTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LokiAppenderReloadTest extends IntegrationTest { @Test void shouldNotLooseDataWhenConfigChanges() throws Exception { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - URI uriBefore = getClass() .getClassLoader() .getResource("appender-test-reload-before.xml") @@ -59,44 +32,18 @@ class LokiAppenderReloadTest { URI uri = new File(Paths.get(uriBefore).toFile().getParent(), "appender-test-reload.xml").toURI(); Files.copy(Paths.get(uriBefore), Paths.get(uri), StandardCopyOption.REPLACE_EXISTING); - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = loadConfig(uri); + Logger logger = context.getLogger(LokiAppenderReloadTest.class); String expectedLogLine = "Test"; - long expectedTimestamp = System.currentTimeMillis(); - Logger logger = context.getLogger(LokiAppenderReloadTest.class); - // When logger.info(expectedLogLine); Files.copy(Paths.get(uriAfter), Paths.get(uri), StandardCopyOption.REPLACE_EXISTING); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.ONE_MINUTE) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) + 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[0].values.size()", equalTo(1)) diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderShutdownTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderShutdownTest.java index af37ab4..75c0ae8 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderShutdownTest.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderShutdownTest.java @@ -2,102 +2,44 @@ package pl.tkowalcz.tjahzi.logback; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; import org.slf4j.LoggerFactory; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.logback.infra.IntegrationTest; -import java.net.URI; - -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.*; +import static pl.tkowalcz.tjahzi.logback.infra.LokiAssert.assertThat; -@Testcontainers -class LokiAppenderShutdownTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LokiAppenderShutdownTest extends IntegrationTest { @Test - void shouldNotLooseDataWhenShuttingDown() throws Exception { + void shouldNotLooseDataWhenShuttingDown() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-shutdown.xml") - .toURI(); - - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = loadConfig("appender-test-shutdown.xml"); + Logger logger = context.getLogger(LokiAppenderShutdownTest.class); String expectedLogLine = "Test"; - long expectedTimestamp = System.currentTimeMillis(); - Logger logger = context.getLogger(LokiAppenderShutdownTest.class); - // When logger.info(expectedLogLine); ((LoggerContext) LoggerFactory.getILoggerFactory()).stop(); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.ONE_MINUTE) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.server", equalTo("127.0.0.1")) - .body("data.result[0].values.size()", equalTo(1)) - .body( - "data.result.values", - hasItems( + 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[0].values.size()", equalTo(1)) + .body( + "data.result.values", hasItems( hasItems( - containsString("INFO p.t.t.l.LokiAppenderShutdownTest - Test") + hasItems( + containsString("INFO p.t.t.l.LokiAppenderShutdownTest - Test") + ) ) ) ) - ) ); } } diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderTest.java index 0e6dd65..0188e89 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderTest.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/LokiAppenderTest.java @@ -1,118 +1,41 @@ package pl.tkowalcz.tjahzi.logback; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; -import org.awaitility.Awaitility; -import org.awaitility.Durations; -import org.hamcrest.BaseMatcher; -import org.hamcrest.Description; import org.junit.jupiter.api.Test; import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.logback.infra.IntegrationTest; -import java.net.URI; -import java.util.List; -import java.util.concurrent.TimeUnit; +import static org.hamcrest.CoreMatchers.*; +import static pl.tkowalcz.tjahzi.logback.infra.LokiAssert.assertThat; -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.hasItems; - -@Testcontainers -class LokiAppenderTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class LokiAppenderTest extends IntegrationTest { @Test - void shouldSendData() throws Exception { + void shouldSendData() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); + LoggerContext context = loadConfig("basic-appender-test-configuration.xml"); + Logger logger = context.getLogger(LokiAppenderTest.class); - URI uri = getClass() - .getClassLoader() - .getResource("basic-appender-test-configuration.xml") - .toURI(); - - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); - - String expectedLogLine = "Test"; - long expectedTimestamp = System.currentTimeMillis(); + String expectedLogLine = "Hello World"; // When - Logger logger = context.getLogger(LokiAppenderTest.class); logger.info(expectedLogLine); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", equalTo(1)) - .body("data.result[0].stream.server", equalTo("127.0.0.1")) - .body("data.result[0].values", hasItems(new BaseMatcher<>() { - @Override - public boolean matches(Object o) { - List list = (List) o; - if (list.size() != 2) { - return false; - } - - long actualTimestamp = Long.parseLong(list.get(0).toString()); - String actualLogLine = list.get(1).toString(); - - return actualLogLine.contains(expectedLogLine) - && (expectedTimestamp - actualTimestamp) < TimeUnit.MINUTES.toMillis(1); - } - - @Override - public void describeTo(Description description) { - - } - } - - )); - }); + 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("p.t.tjahzi.logback.LokiAppenderTest - " + expectedLogLine) + ) + ) + ) + ) + ); } } diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/MdcLogLabelConfigurationTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/MdcLogLabelConfigurationTest.java index 99a1ddd..f34d88e 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/MdcLogLabelConfigurationTest.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/MdcLogLabelConfigurationTest.java @@ -2,61 +2,23 @@ package pl.tkowalcz.tjahzi.logback; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.parsing.Parser; -import org.awaitility.Awaitility; -import org.awaitility.Durations; import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; import org.slf4j.MDC; -import org.testcontainers.containers.BindMode; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; +import pl.tkowalcz.tjahzi.logback.infra.IntegrationTest; -import java.net.URI; import java.util.UUID; -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import static pl.tkowalcz.tjahzi.logback.infra.LokiAssert.assertThat; -@Testcontainers -class MdcLogLabelConfigurationTest { - - @Container - public GenericContainer loki = new GenericContainer("grafana/loki:latest") - .withCommand("-config.file=/etc/loki-config.yaml") - .withClasspathResourceMapping("loki-config.yaml", - "/etc/loki-config.yaml", - BindMode.READ_ONLY) - .waitingFor( - Wait.forHttp("/ready") - .forPort(3100) - ) - .withExposedPorts(3100); +class MdcLogLabelConfigurationTest extends IntegrationTest { @Test - void shouldSendMdcLogLabelAsConfigured() throws Exception { + void shouldSendMdcLogLabelAsConfigured() { // Given - System.setProperty("loki.host", loki.getHost()); - System.setProperty("loki.port", loki.getFirstMappedPort().toString()); - - URI uri = getClass() - .getClassLoader() - .getResource("appender-test-with-md-log-label-set.xml") - .toURI(); - - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - JoranConfigurator configurator = new JoranConfigurator(); - configurator.setContext(context); - - context.reset(); - configurator.doConfigure(uri.toURL()); + LoggerContext context = loadConfig("appender-test-with-md-log-label-set.xml"); + Logger logger = context.getLogger(LokiAppenderLargeBatchesTest.class); // When String traceIdValue = UUID.randomUUID().toString(); @@ -65,35 +27,15 @@ class MdcLogLabelConfigurationTest { MDC.put("trace_id", traceIdValue); MDC.put("span_id", spanIdValue); - Logger logger = context.getLogger(LokiAppenderLargeBatchesTest.class); logger.info("Test"); // Then - RestAssured.port = loki.getFirstMappedPort(); - RestAssured.baseURI = "http://" + loki.getHost(); - RestAssured.registerParser("text/plain", Parser.JSON); - - Awaitility - .await() - .atMost(Durations.TEN_SECONDS) - .pollInterval(Durations.ONE_SECOND) - .ignoreExceptions() - .untilAsserted(() -> { - given() - .contentType(ContentType.URLENC) - .urlEncodingEnabled(false) - .formParam("query=%7Bserver%3D%22127.0.0.1%22%7D") - .when() - .get("/loki/api/v1/query_range") - .then() - .log() - .all() - .statusCode(200) - .body("status", equalTo("success")) - .body("data.result.size()", greaterThanOrEqualTo(1)) - .body("data.result[0].stream.server", equalTo("127.0.0.1")) - .body("data.result[0].stream.trace_id", equalTo(traceIdValue)) - .body("data.result[0].stream.span_id", equalTo(spanIdValue)); - }); + assertThat(loki) + .returns(response -> response + .body("data.result.size()", greaterThanOrEqualTo(1)) + .body("data.result[0].stream.server", equalTo("127.0.0.1")) + .body("data.result[0].stream.trace_id", equalTo(traceIdValue)) + .body("data.result[0].stream.span_id", equalTo(spanIdValue)) + ); } } diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/IntegrationTest.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/IntegrationTest.java new file mode 100644 index 0000000..a717eb8 --- /dev/null +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/IntegrationTest.java @@ -0,0 +1,71 @@ +package pl.tkowalcz.tjahzi.logback.infra; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.joran.JoranConfigurator; +import ch.qos.logback.core.joran.spi.JoranException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; + +@Testcontainers +public class IntegrationTest { + + @Container + public GenericContainer loki = new GenericContainer("grafana/loki:latest") + .withCommand("-config.file=/etc/loki-config.yaml") + .withClasspathResourceMapping("loki-config.yaml", + "/etc/loki-config.yaml", + BindMode.READ_ONLY + ) + .waitingFor( + Wait.forHttp("/ready") + .forPort(3100) + ) + .withExposedPorts(3100); + + @BeforeEach + void setUp() { + System.setProperty("loki.host", loki.getHost()); + System.setProperty("loki.port", loki.getFirstMappedPort().toString()); + } + + public static LoggerContext loadConfig(String fileName) { + try { + URI uri = IntegrationTest.class + .getClassLoader() + .getResource(fileName) + .toURI(); + + return loadConfig(uri); + } catch (URISyntaxException e) { + Assertions.fail(e); + } + + throw new IllegalStateException(); + } + + public static LoggerContext loadConfig(URI uri) { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + + try { + JoranConfigurator configurator = new JoranConfigurator(); + configurator.setContext(context); + + context.reset(); + configurator.doConfigure(uri.toURL()); + } catch (MalformedURLException | JoranException e) { + Assertions.fail(e); + } + + return context; + } +} diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/LokiAssert.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/LokiAssert.java new file mode 100644 index 0000000..3f81a67 --- /dev/null +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/LokiAssert.java @@ -0,0 +1,97 @@ +package pl.tkowalcz.tjahzi.logback.infra; + +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import io.restassured.parsing.Parser; +import io.restassured.response.ValidatableResponse; +import io.restassured.specification.RequestSpecification; +import org.awaitility.Awaitility; +import org.awaitility.Durations; +import org.testcontainers.containers.GenericContainer; + +import java.util.function.Consumer; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.equalTo; + +@SuppressWarnings("rawtypes") +public class LokiAssert { + + private String url = "/loki/api/v1/query_range"; + private String param = "query=%7Bserver%3D%22127.0.0.1%22%7D"; + + private String username; + private String password; + + public LokiAssert() { + RestAssured.reset(); + RestAssured.registerParser("text/plain", Parser.JSON); + } + + public LokiAssert(GenericContainer loki) { + RestAssured.port = loki.getFirstMappedPort(); + RestAssured.baseURI = "http://" + loki.getHost(); + RestAssured.registerParser("text/plain", Parser.JSON); + } + + public static LokiAssert assertThat() { + return new LokiAssert(); + } + + public LokiAssert withFormParam(String param) { + this.param = param; + return this; + } + + public static LokiAssert assertThat(GenericContainer loki) { + return new LokiAssert(loki); + } + + public void returns(Consumer restOfAssertionsGoHere) { + Awaitility + .await() + .atMost(Durations.ONE_MINUTE) + .pollInterval(Durations.ONE_SECOND) + .ignoreExceptions() + .untilAsserted(() -> { + RequestSpecification requestSpecification = given() + .contentType(ContentType.URLENC) + .urlEncodingEnabled(false) + .formParam(param); + + if (username != null || password != null) { + requestSpecification = requestSpecification + .auth() + .preemptive() + .basic( + username, + password + ); + } + + ValidatableResponse validatableResponse = requestSpecification + .when() + .get(url) + .then() + .log() + .all() + .statusCode(200) + .body("status", equalTo("success")); + + restOfAssertionsGoHere.accept(validatableResponse); + }); + } + + public LokiAssert withCredentials(String username, String password) { + this.username = username; + this.password = password; + + return this; + } + + public LokiAssert calling(String url) { + this.url = url; + + return this; + } +} diff --git a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/util/TestUtil.java b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/TestUtil.java similarity index 95% rename from logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/util/TestUtil.java rename to logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/TestUtil.java index 42abe13..15fa7f7 100644 --- a/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/util/TestUtil.java +++ b/logback-appender/src/test/java/pl/tkowalcz/tjahzi/logback/infra/TestUtil.java @@ -1,4 +1,4 @@ -package pl.tkowalcz.tjahzi.logback.util; +package pl.tkowalcz.tjahzi.logback.infra; import ch.qos.logback.classic.LoggerContext; import pl.tkowalcz.tjahzi.logback.LokiAppender; From 8e00a7e923e68c40ac2c01a35bd692a46e08ede1 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczewski Date: Sat, 7 Aug 2021 09:29:01 +0200 Subject: [PATCH 4/4] Static imports. --- .../pl/tkowalcz/tjahzi/log4j2/LogLineFragmentationTest.java | 3 ++- .../tkowalcz/tjahzi/log4j2/LokiAppenderLargeBatchesTest.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLineFragmentationTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLineFragmentationTest.java index 92f503f..3faa594 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLineFragmentationTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LogLineFragmentationTest.java @@ -9,6 +9,7 @@ import pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.hasItems; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; class LogLineFragmentationTest extends IntegrationTest { @@ -26,7 +27,7 @@ class LogLineFragmentationTest extends IntegrationTest { logger.info(fragmentedLogLine); // Then - LokiAssert.assertThat(loki) + assertThat(loki) .returns(response -> response .body("data.result.size()", equalTo(1)) .body("data.result[0].stream.server", equalTo("127.0.0.1")) diff --git a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderLargeBatchesTest.java b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderLargeBatchesTest.java index 3b73bd5..0f21bce 100644 --- a/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderLargeBatchesTest.java +++ b/log4j2-appender/src/test/java/pl/tkowalcz/tjahzi/log4j2/LokiAppenderLargeBatchesTest.java @@ -13,6 +13,7 @@ import java.util.concurrent.TimeUnit; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.hasItems; +import static pl.tkowalcz.tjahzi.log4j2.infra.LokiAssert.assertThat; class LokiAppenderLargeBatchesTest extends IntegrationTest { @@ -40,7 +41,7 @@ class LokiAppenderLargeBatchesTest extends IntegrationTest { } // Then - LokiAssert.assertThat(loki) + assertThat(loki) .withFormParam("&start=" + expectedTimestamp + "&limit=1000&query=%7Bserver%3D%22127.0.0.1%22%7D") .returns(response -> response .body("data.result.size()", equalTo(1))