diff --git a/.github/project.yaml b/.github/project.yaml index 0b40189..8d17764 100644 --- a/.github/project.yaml +++ b/.github/project.yaml @@ -1,5 +1,6 @@ name: Quarkus Commons release: - current-version: "1.0.8" - next-version: "1.0.9-SNAPSHOT" + current-version: "1.0.4" + next-version: "1.0.5-SNAPSHOT" + diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 1272b20..b32c3db 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -4,8 +4,6 @@ on: push: branches: - "main" - tags: - - '[0-9]+.[0-9]+.[0-9]+' paths-ignore: - '.gitattributes' - '.gitignore' @@ -14,7 +12,6 @@ on: - 'docs/**' - 'README.md' pull_request: - workflow_dispatch: env: COMMON_MAVEN_OPTS: "-e -B --fae" @@ -63,24 +60,19 @@ jobs: servers: | [{ "id": "phoenix-oss", - "username": "${{ vars.ORG_PACKAGE_WRITER_USERNAME }}", - "password": "${{ secrets.ORG_PACKAGE_WRITER_TOKEN }}" + "configuration": { + "httpHeaders": { + "property": { + "name": "Authorization", + "value": "token ${{ secrets.ORG_PACKAGE_WRITER_TOKEN }}" + } + } + } }] - name: Make maven wrapper executable run: chmod +x mvnw - - name: Validate tag - if: startsWith(github.ref, 'refs/tags/') - run: | - TAG_NAME="${GITHUB_REF#refs/tags/}" - PROJECT_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout) - - if [[ "$PROJECT_VERSION" != "$TAG_NAME" ]]; then - echo "::error::pom.xml version '$PROJECT_VERSION' does not match tag '$TAG_NAME'" - exit 1 - fi - - name: Download dependencies run: ./mvnw $COMMON_MAVEN_OPTS quarkus:go-offline @@ -95,5 +87,5 @@ jobs: run: ./mvnw $COMMON_MAVEN_OPTS org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=quarkus-commons -Dsonar.projectName='quarkus-commons' -Dsonar.coverage.jacoco.xmlReportPaths=../**/target/jacoco-report/jacoco.xml - name: Publish jars - if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') + if: github.ref == 'refs/heads/main' run: ./mvnw $COMMON_MAVEN_OPTS deploy -Dmaven.test.skip=true -Dmaven.javadoc.skip=true \ No newline at end of file diff --git a/README.md b/README.md index 1cfb1f7..6f32452 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ Quarkus Commons =============== [![Java version](https://img.shields.io/badge/Java%20version-21-brightgreen)](https://openjdk.org/projects/jdk/21/) -[![Coverage](https://sonarqube.pub.basel.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=coverage&token=sqb_b56d9ea175c7f51f522ce63acd7fe7807643ac9e)](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons) -[![Duplicated Lines (%)](https://sonarqube.pub.basel.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=duplicated_lines_density&token=sqb_b56d9ea175c7f51f522ce63acd7fe7807643ac9e)](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons) -[![Quality Gate Status](https://sonarqube.pub.basel.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=alert_status&token=sqb_b56d9ea175c7f51f522ce63acd7fe7807643ac9e)](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons) -[![Security Rating](https://sonarqube.pub.basel.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=security_rating&token=sqb_b56d9ea175c7f51f522ce63acd7fe7807643ac9e)](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons) -[![Reliability Rating](https://sonarqube.pub.basel.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=reliability_rating&token=sqb_b56d9ea175c7f51f522ce63acd7fe7807643ac9e)](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons) -[![Maintainability Rating](https://sonarqube.pub.basel.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=sqale_rating&token=sqb_b56d9ea175c7f51f522ce63acd7fe7807643ac9e)](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons) +[![Coverage](https://sonarqube.pub.production.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=coverage&token=sqb_b39e0a05145228a10eb07d8771fd073297800645)](https://sonarqube.pub.production.kvant.cloud/dashboard?id=quarkus-commons) +[![Duplicated Lines (%)](https://sonarqube.pub.production.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=duplicated_lines_density&token=sqb_b39e0a05145228a10eb07d8771fd073297800645)](https://sonarqube.pub.production.kvant.cloud/dashboard?id=quarkus-commons) +[![Quality Gate Status](https://sonarqube.pub.production.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=alert_status&token=sqb_b39e0a05145228a10eb07d8771fd073297800645)](https://sonarqube.pub.production.kvant.cloud/dashboard?id=quarkus-commons) +[![Security Rating](https://sonarqube.pub.production.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=security_rating&token=sqb_b39e0a05145228a10eb07d8771fd073297800645)](https://sonarqube.pub.production.kvant.cloud/dashboard?id=quarkus-commons) +[![Reliability Rating](https://sonarqube.pub.production.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=reliability_rating&token=sqb_b39e0a05145228a10eb07d8771fd073297800645)](https://sonarqube.pub.production.kvant.cloud/dashboard?id=quarkus-commons) +[![Maintainability Rating](https://sonarqube.pub.production.kvant.cloud/api/project_badges/measure?project=quarkus-commons&metric=sqale_rating&token=sqb_b39e0a05145228a10eb07d8771fd073297800645)](https://sonarqube.pub.production.kvant.cloud/dashboard?id=quarkus-commons) # Introduction diff --git a/pom.xml b/pom.xml index 3b61944..2814070 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 ch.phoenix.oss quarkus-commons - 1.0.9-SNAPSHOT + 1.0.4 pom @@ -21,15 +21,15 @@ quarkus-bom io.quarkus.platform - 3.25.0 + 3.24.2 3.14.0 3.5.3 - 2.46.1 - 2.72.0 + 2.44.4 + 2.66.0 0.8.13 - 3.4.0 + 3.3.1 3.1.1 3.3.1 @@ -73,7 +73,7 @@ scm:git:ssh://git@git-ssh.kvant.cloud:2222/phoenix-oss/quarkus-commons.git scm:git:ssh://git@git-ssh.kvant.cloud:2222/phoenix-oss/quarkus-commons.git https://git.kvant.cloud/phoenix-oss/quarkus-commons.git - HEAD + 1.0.4 @@ -196,7 +196,7 @@ @{project.version} mvnw chore: release @{releaseLabel} - chore: prepare for next development iteration + chore: prepare for next development iteration [skip ci] true diff --git a/quarkus-audit-tools/pom.xml b/quarkus-audit-tools/pom.xml index 1a01d07..e4c9f0d 100644 --- a/quarkus-audit-tools/pom.xml +++ b/quarkus-audit-tools/pom.xml @@ -5,7 +5,7 @@ ch.phoenix.oss quarkus-commons - 1.0.9-SNAPSHOT + 1.0.4 quarkus-audit-tools @@ -51,38 +51,38 @@ - - - - org.jacoco - jacoco-maven-plugin - ${jacoco-plugin.version} - - - jacoco-check - - check - - test - - ${project.build.directory}/jacoco-quarkus.exec - - - BUNDLE - - - INSTRUCTION - COVEREDRATIO - 1 - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/quarkus-audit-tools/src/test/java/ch/phoenix/oss/quarkus/commons/audit/DefaultRevisionContextProviderTest.java b/quarkus-audit-tools/src/test/java/ch/phoenix/oss/quarkus/commons/audit/DefaultRevisionContextProviderTest.java index 8ef3a73..5ad9ff7 100644 --- a/quarkus-audit-tools/src/test/java/ch/phoenix/oss/quarkus/commons/audit/DefaultRevisionContextProviderTest.java +++ b/quarkus-audit-tools/src/test/java/ch/phoenix/oss/quarkus/commons/audit/DefaultRevisionContextProviderTest.java @@ -1,6 +1,7 @@ package ch.phoenix.oss.quarkus.commons.audit; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.mockStatic; import io.quarkus.test.junit.QuarkusTest; diff --git a/quarkus-audit-tools/src/test/java/ch/phoenix/oss/quarkus/commons/audit/RevisionTest.java b/quarkus-audit-tools/src/test/java/ch/phoenix/oss/quarkus/commons/audit/RevisionTest.java index d0f5d1f..1b08c56 100644 --- a/quarkus-audit-tools/src/test/java/ch/phoenix/oss/quarkus/commons/audit/RevisionTest.java +++ b/quarkus-audit-tools/src/test/java/ch/phoenix/oss/quarkus/commons/audit/RevisionTest.java @@ -1,6 +1,7 @@ package ch.phoenix.oss.quarkus.commons.audit; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; import io.quarkus.test.junit.QuarkusTest; import org.junit.jupiter.api.Test; @@ -16,36 +17,12 @@ class RevisionTest { var r2 = new Revision(); r2.rev = 1; - var r3 = new Revision(); - r3.rev = 2; - - assertThat(r1) - .as("Revisions equality should should match expected value") - .isEqualTo(r1) - .isEqualTo(r2) - .isNotEqualTo(r3) - .isNotEqualTo(new Object()); + assertThat(r1).as("Revisions should be equal").isEqualTo(r2); } @Test - void testHashCode() { - var r1 = new Revision(); - r1.rev = 123; - - var r2 = new Revision(); - r2.rev = 123; - - var r3 = new Revision(); - r3.rev = 2; - - assertThat(r1.hashCode()).isEqualTo(123).isEqualTo(r2.hashCode()).isNotEqualTo(r3.hashCode()); - } + void testHashCode() {} @Test - void testToString() { - var rev = new Revision(); - rev.rev = 1; - - assertThat(rev).as("Revision's toString should match expected value").hasToString("Revision{rev=1}"); - } + void testToString() {} } diff --git a/quarkus-client-logger/pom.xml b/quarkus-client-logger/pom.xml index 3095369..d9a3e4d 100644 --- a/quarkus-client-logger/pom.xml +++ b/quarkus-client-logger/pom.xml @@ -5,7 +5,7 @@ ch.phoenix.oss quarkus-commons - 1.0.9-SNAPSHOT + 1.0.4 quarkus-client-logger @@ -16,16 +16,6 @@ io.quarkus quarkus-rest-client - - io.quarkus - quarkus-config-yaml - test - - - io.quarkus - quarkus-rest-jackson - test - @@ -50,7 +40,7 @@ INSTRUCTION COVEREDRATIO - 0.92 + 1 diff --git a/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/LowerCaseStringConverter.java b/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/LowerCaseStringConverter.java deleted file mode 100644 index 498e318..0000000 --- a/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/LowerCaseStringConverter.java +++ /dev/null @@ -1,10 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.client.logger; - -import org.eclipse.microprofile.config.spi.Converter; - -public class LowerCaseStringConverter implements Converter { - @Override - public String convert(String value) throws IllegalArgumentException, NullPointerException { - return value.toLowerCase(); - } -} diff --git a/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLogger.java b/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLogger.java index cb2b63b..3061c09 100644 --- a/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLogger.java +++ b/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLogger.java @@ -6,36 +6,23 @@ import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpClientRequest; import io.vertx.core.http.HttpClientResponse; import jakarta.enterprise.context.Dependent; -import jakarta.inject.Inject; +import jakarta.ws.rs.core.HttpHeaders; import java.util.Map; -import java.util.Set; import org.jboss.logging.Logger; import org.jboss.resteasy.reactive.client.api.ClientLogger; /** * This is based on org.jboss.resteasy.reactive.client.logging.DefaultClientLogger, - * with the only change being that headers are redacted based on the Set provided - * by the configuration. + * with the only change being that the value of "Authorization" header, when present, + * is redacted. */ @Dependent public class RedactingClientLogger implements ClientLogger { private static final Logger log = Logger.getLogger(RedactingClientLogger.class); - private static final String REDACTED_VALUE = "*****"; - - private final Set redactedHeaders; - private int bodySize; - @Inject - public RedactingClientLogger(RedactingClientLoggerConfiguration configuration) { - this.redactedHeaders = configuration - .headers() - .redact() - .orElse(RedactingClientLoggerConfiguration.Headers.DEFAULT_REDACTED_HEADERS); - } - @Override public void setBodySize(int bodySize) { this.bodySize = bodySize; @@ -110,7 +97,7 @@ public class RedactingClientLogger implements ClientLogger { } var key = entry.getKey(); - var value = redactedHeaders.contains(key.toLowerCase()) ? REDACTED_VALUE : entry.getValue(); + var value = HttpHeaders.AUTHORIZATION.equalsIgnoreCase(key) ? "*****" : entry.getValue(); sb.append(key).append('=').append(value); } diff --git a/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLoggerConfiguration.java b/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLoggerConfiguration.java deleted file mode 100644 index 24fa05f..0000000 --- a/quarkus-client-logger/src/main/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLoggerConfiguration.java +++ /dev/null @@ -1,20 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.client.logger; - -import io.smallrye.config.ConfigMapping; -import io.smallrye.config.WithConverter; -import jakarta.ws.rs.core.HttpHeaders; -import java.util.Optional; -import java.util.Set; - -@ConfigMapping(prefix = "phoenix.client-logger") -public interface RedactingClientLoggerConfiguration { - - Headers headers(); - - interface Headers { - - Set DEFAULT_REDACTED_HEADERS = Set.of(HttpHeaders.AUTHORIZATION.toLowerCase()); - - Optional> redact(); - } -} diff --git a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/InfoLevelProfile.java b/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/InfoLevelProfile.java deleted file mode 100644 index 35acb14..0000000 --- a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/InfoLevelProfile.java +++ /dev/null @@ -1,12 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.client.logger; - -import io.quarkus.test.junit.QuarkusTestProfile; -import java.util.Map; - -public class InfoLevelProfile implements QuarkusTestProfile { - - @Override - public Map getConfigOverrides() { - return Map.of("quarkus.log.category.\"ch.phoenix.oss.quarkus.commons.client.logger\".level", "INFO"); - } -} diff --git a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/InfoLevelTest.java b/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/InfoLevelTest.java deleted file mode 100644 index c6b27ef..0000000 --- a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/InfoLevelTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.client.logger; - -import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder; -import io.quarkus.test.junit.QuarkusTest; -import io.quarkus.test.junit.TestProfile; -import jakarta.inject.Inject; -import java.net.URI; -import java.util.Optional; -import org.eclipse.microprofile.rest.client.inject.RestClient; -import org.junit.jupiter.api.Test; - -@QuarkusTest -@TestProfile(InfoLevelProfile.class) -class InfoLevelTest { - - @Inject - @RestClient - TestClient injectedClient; - - TestClient builtClient = QuarkusRestClientBuilder.newBuilder() - .clientLogger(new RedactingClientLogger(() -> Optional::empty)) - .baseUri(URI.create("http://localhost:8087")) - .build(TestClient.class); - - @Test - void getWithInjectedClient() { - injectedClient.get("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "also redacted"); - } - - @Test - void getWithBuiltClientAndEmptyConfig() { - builtClient.get("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "not redacted"); - } - - @Test - void postWithInjectedClient() { - injectedClient.post("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "also redacted", "body"); - } - - @Test - void postWithBuiltClientAndEmptyConfig() { - builtClient.post("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "not redacted", ""); - } -} diff --git a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLoggerTest.java b/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLoggerTest.java deleted file mode 100644 index 01e9389..0000000 --- a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/RedactingClientLoggerTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.client.logger; - -import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder; -import io.quarkus.test.junit.QuarkusTest; -import jakarta.inject.Inject; -import java.net.URI; -import java.util.Optional; -import org.eclipse.microprofile.rest.client.inject.RestClient; -import org.junit.jupiter.api.Test; - -@QuarkusTest -class RedactingClientLoggerTest { - - @Inject - @RestClient - TestClient injectedClient; - - TestClient builtClient = QuarkusRestClientBuilder.newBuilder() - .clientLogger(new RedactingClientLogger(() -> Optional::empty)) - .baseUri(URI.create("http://localhost:8087")) - .build(TestClient.class); - - @Test - void getWithInjectedClient() { - injectedClient.get("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "also redacted"); - } - - @Test - void getWithBuiltClientAndEmptyConfig() { - builtClient.get("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "not redacted"); - } - - @Test - void postWithInjectedClient() { - injectedClient.post("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "also redacted", "body"); - } - - @Test - void postWithInjectedClientAndNullBody() { - injectedClient.post("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "also redacted", null); - } - - @Test - void postWithBuiltClientAndEmptyConfig() { - builtClient.post("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "not redacted", ""); - } -} diff --git a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/ScopeNoneProfile.java b/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/ScopeNoneProfile.java deleted file mode 100644 index 42daa28..0000000 --- a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/ScopeNoneProfile.java +++ /dev/null @@ -1,12 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.client.logger; - -import io.quarkus.test.junit.QuarkusTestProfile; -import java.util.Map; - -public class ScopeNoneProfile implements QuarkusTestProfile { - - @Override - public Map getConfigOverrides() { - return Map.of("quarkus.rest-client.logging.scope", "none"); - } -} diff --git a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/ScopeNoneTest.java b/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/ScopeNoneTest.java deleted file mode 100644 index 14538b2..0000000 --- a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/ScopeNoneTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.client.logger; - -import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder; -import io.quarkus.test.junit.QuarkusTest; -import io.quarkus.test.junit.TestProfile; -import jakarta.inject.Inject; -import java.net.URI; -import java.util.Optional; -import org.eclipse.microprofile.rest.client.inject.RestClient; -import org.junit.jupiter.api.Test; - -@QuarkusTest -@TestProfile(ScopeNoneProfile.class) -class ScopeNoneTest { - - @Inject - @RestClient - TestClient injectedClient; - - TestClient builtClient = QuarkusRestClientBuilder.newBuilder() - .clientLogger(new RedactingClientLogger(() -> Optional::empty)) - .baseUri(URI.create("http://localhost:8087")) - .build(TestClient.class); - - @Test - void getWithInjectedClient() { - injectedClient.get("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "also redacted"); - } - - @Test - void getWithBuiltClientAndEmptyConfig() { - builtClient.get("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "not redacted"); - } - - @Test - void postWithInjectedClient() { - injectedClient.post("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "also redacted", "body"); - } - - @Test - void postWithBuiltClientAndEmptyConfig() { - builtClient.post("this will be redacted", "5c0d8e45-e402-4b71-8f84-24cc0cfd7eec", "not redacted", ""); - } -} diff --git a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/TestClient.java b/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/TestClient.java deleted file mode 100644 index 79769ac..0000000 --- a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/TestClient.java +++ /dev/null @@ -1,28 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.client.logger; - -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; - -@SuppressWarnings("UastIncorrectHttpHeaderInspection") -@RegisterRestClient(configKey = "test") -public interface TestClient { - - @GET - @Path("/") - @Produces(MediaType.TEXT_PLAIN) - String get( - @HeaderParam("Authorization") String authorization, - @HeaderParam("X-Request-ID") String requestId, - @HeaderParam("X-Something-Else") String somethingElse); - - @POST - @Path("/") - @Consumes(MediaType.TEXT_PLAIN) - @Produces(MediaType.TEXT_PLAIN) - String post( - @HeaderParam("Authorization") String authorization, - @HeaderParam("X-Request-ID") String requestId, - @HeaderParam("X-Something-Else") String somethingElse, - String body); -} diff --git a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/TestResource.java b/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/TestResource.java deleted file mode 100644 index c83bdd0..0000000 --- a/quarkus-client-logger/src/test/java/ch/phoenix/oss/quarkus/commons/client/logger/TestResource.java +++ /dev/null @@ -1,21 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.client.logger; - -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; - -@Path("/") -public class TestResource { - - @GET - @Produces(MediaType.TEXT_PLAIN) - public String get() { - return "get"; - } - - @POST - @Consumes(MediaType.TEXT_PLAIN) - @Produces(MediaType.TEXT_PLAIN) - public String post(String body) { - return body; - } -} diff --git a/quarkus-client-logger/src/test/resources/application.yaml b/quarkus-client-logger/src/test/resources/application.yaml deleted file mode 100644 index a02f41d..0000000 --- a/quarkus-client-logger/src/test/resources/application.yaml +++ /dev/null @@ -1,20 +0,0 @@ -quarkus: - http: - test-port: 8087 - rest-client: - logging: - scope: request-response - body-limit: 10000 - test: - url: http://localhost:${quarkus.http.test-port} - log: - category: - "ch.phoenix.oss.quarkus.commons.client.logger": - level: DEBUG - -phoenix: - client-logger: - headers: - redact: - - AUTHORIZATION - - X-SOMETHING-ELSE diff --git a/quarkus-clock-service/pom.xml b/quarkus-clock-service/pom.xml index aaab0c1..16bd522 100644 --- a/quarkus-clock-service/pom.xml +++ b/quarkus-clock-service/pom.xml @@ -5,7 +5,7 @@ ch.phoenix.oss quarkus-commons - 1.0.9-SNAPSHOT + 1.0.4 quarkus-clock-service diff --git a/quarkus-json-service/pom.xml b/quarkus-json-service/pom.xml index 717c39f..a1706a3 100644 --- a/quarkus-json-service/pom.xml +++ b/quarkus-json-service/pom.xml @@ -5,7 +5,7 @@ ch.phoenix.oss quarkus-commons - 1.0.9-SNAPSHOT + 1.0.4 quarkus-json-service diff --git a/quarkus-message-digest-service/pom.xml b/quarkus-message-digest-service/pom.xml index c5d2c2d..99857d0 100644 --- a/quarkus-message-digest-service/pom.xml +++ b/quarkus-message-digest-service/pom.xml @@ -5,7 +5,7 @@ ch.phoenix.oss quarkus-commons - 1.0.9-SNAPSHOT + 1.0.4 quarkus-message-digest-service diff --git a/quarkus-random-number-generator/pom.xml b/quarkus-random-number-generator/pom.xml index 940f965..ec5ccf8 100644 --- a/quarkus-random-number-generator/pom.xml +++ b/quarkus-random-number-generator/pom.xml @@ -5,7 +5,7 @@ ch.phoenix.oss quarkus-commons - 1.0.9-SNAPSHOT + 1.0.4 quarkus-random-number-generator diff --git a/quarkus-tracing-service/pom.xml b/quarkus-tracing-service/pom.xml index 214e936..2d4e33e 100644 --- a/quarkus-tracing-service/pom.xml +++ b/quarkus-tracing-service/pom.xml @@ -5,7 +5,7 @@ ch.phoenix.oss quarkus-commons - 1.0.9-SNAPSHOT + 1.0.4 quarkus-tracing-service @@ -41,38 +41,4 @@ - - - - org.jacoco - jacoco-maven-plugin - ${jacoco-plugin.version} - - - jacoco-check - - check - - test - - ${project.build.directory}/jacoco-quarkus.exec - - - BUNDLE - - - INSTRUCTION - COVEREDRATIO - 0.95 - - - - - - - - - - - diff --git a/quarkus-tracing-service/src/main/java/ch/phoenix/oss/quarkus/commons/tracing/TracingService.java b/quarkus-tracing-service/src/main/java/ch/phoenix/oss/quarkus/commons/tracing/TracingService.java index 812867d..2b1ac38 100644 --- a/quarkus-tracing-service/src/main/java/ch/phoenix/oss/quarkus/commons/tracing/TracingService.java +++ b/quarkus-tracing-service/src/main/java/ch/phoenix/oss/quarkus/commons/tracing/TracingService.java @@ -8,7 +8,7 @@ public interface TracingService { String getActor(); - String getRequestPathRaw(); + String getRequestPath(); String getRequestMethod(); diff --git a/quarkus-tracing-service/src/main/java/ch/phoenix/oss/quarkus/commons/tracing/TracingServiceImpl.java b/quarkus-tracing-service/src/main/java/ch/phoenix/oss/quarkus/commons/tracing/TracingServiceImpl.java index d46f684..b5f295b 100644 --- a/quarkus-tracing-service/src/main/java/ch/phoenix/oss/quarkus/commons/tracing/TracingServiceImpl.java +++ b/quarkus-tracing-service/src/main/java/ch/phoenix/oss/quarkus/commons/tracing/TracingServiceImpl.java @@ -33,7 +33,7 @@ class TracingServiceImpl implements TracingService { } @Override - public String getRequestPathRaw() { + public String getRequestPath() { return (String) MDC.get(TracingConstants.REQUEST_PATH_RAW); } diff --git a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/ActorTest.java b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/ActorTest.java index 8ab52eb..a173b72 100644 --- a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/ActorTest.java +++ b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/ActorTest.java @@ -12,7 +12,7 @@ import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; @QuarkusTest -class ActorTest { +public class ActorTest { @InjectSpy TracingService tracingService; diff --git a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/QueryParamTest.java b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/QueryParamTest.java index 10b3894..7378040 100644 --- a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/QueryParamTest.java +++ b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/QueryParamTest.java @@ -12,7 +12,7 @@ import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; @QuarkusTest -class QueryParamTest { +public class QueryParamTest { @InjectSpy TracingService tracingService; diff --git a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RawPathTest.java b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RawPathTest.java index e3579ba..96d8956 100644 --- a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RawPathTest.java +++ b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RawPathTest.java @@ -14,7 +14,7 @@ import org.junit.jupiter.api.Test; @QuarkusTest @TestProfile(Test2Profile.class) -class RawPathTest { +public class RawPathTest { @InjectSpy TracingService tracingService; diff --git a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RedactedTest.java b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RedactedTest.java index c928917..34658e2 100644 --- a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RedactedTest.java +++ b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RedactedTest.java @@ -14,7 +14,7 @@ import org.junit.jupiter.api.Test; @QuarkusTest @TestProfile(Test2Profile.class) -class RedactedTest { +public class RedactedTest { @InjectSpy TracingService tracingService; diff --git a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RoutePatternTest.java b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RoutePatternTest.java index 156c0a4..11f1689 100644 --- a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RoutePatternTest.java +++ b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/RoutePatternTest.java @@ -1,6 +1,5 @@ package ch.phoenix.oss.quarkus.commons.tracing; -import static org.junit.jupiter.params.provider.Arguments.arguments; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.startsWith; import static org.mockito.Mockito.verify; @@ -11,11 +10,7 @@ import io.quarkus.test.junit.mockito.InjectSpy; import io.restassured.RestAssured; import io.restassured.http.ContentType; import java.util.Map; -import java.util.stream.Stream; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; @QuarkusTest class RoutePatternTest { @@ -23,46 +18,12 @@ class RoutePatternTest { @InjectSpy TracingService tracingService; - static Stream get() { - return Stream.of( - arguments("/", Map.of()), - arguments("/leading-and-no-trailing", Map.of()), - arguments("/leading/{param}/{param2}", Map.of("param", "1", "param2", "2")), - arguments("/{param}/{param2}/trailing", Map.of("param", "1", "param2", "2")), - arguments("/leading-and-no-trailing/{param}", Map.of("param", "1")), - arguments("/leading-and-no-trailing/{param}/{param2}", Map.of("param", "1", "param2", "2")), - arguments("/leading-and-trailing", Map.of()), - arguments("/leading-and-trailing/{param}", Map.of("param", "1")), - arguments("/leading-and-trailing/{param}/{param2}", Map.of("param", "1", "param2", "2")), - arguments("/no-leading-and-no-trailing", Map.of()), - arguments("/no-leading-and-no-trailing/{param}", Map.of("param", "1")), - arguments("/no-leading-and-no-trailing/{param}/{param2}", Map.of("param", "1", "param2", "2")), - arguments("/no-leading-and-trailing", Map.of()), - arguments("/no-leading-and-trailing/{param}", Map.of("param", "1")), - arguments("/no-leading-and-trailing/{param}/{param2}", Map.of("param", "1", "param2", "2"))); - } + @Test + void getBlankResource() { + var route = "/"; + RestAssured.given().accept(ContentType.TEXT).when().get(route).then().statusCode(200); - @MethodSource - @ParameterizedTest - void get(String route, Map pathParams) { - RestAssured.given() - .accept(ContentType.TEXT) - .when() - .get(route, pathParams) - .then() - .statusCode(200); - - verify(tracingService).trace("actor", "anonymous"); - verify(tracingService).trace("request.method", "GET"); - verify(tracingService).trace("request.route", route); - pathParams.forEach((key, value) -> verify(tracingService).trace("request.path.params." + key, value)); - verify(tracingService).trace("request.headers.accept", "text/plain"); - verify(tracingService).trace("request.headers.accept-encoding", "gzip,deflate"); - verify(tracingService).trace("request.headers.connection", "Keep-Alive"); - verify(tracingService).trace(eq("request.headers.host"), startsWith("localhost:")); - verify(tracingService).trace(eq("request.headers.user-agent"), startsWith("Apache-HttpClient")); - verify(tracingService).trace("request.client.ip", "127.0.0.1"); - verifyNoMoreInteractions(tracingService); + verifyGetTracing(route, Map.of()); } @Test @@ -84,4 +45,160 @@ class RoutePatternTest { verify(tracingService).trace("request.client.ip", "127.0.0.1"); verifyNoMoreInteractions(tracingService); } + + @Test + void getLeadingResource() { + var route = "/leading/{id}/{anotherId}"; + RestAssured.given() + .accept(ContentType.TEXT) + .when() + .get(route, 1, 2) + .then() + .statusCode(200); + + verifyGetTracing(route, Map.of("id", "1", "anotherId", "2")); + } + + @Test + void getTrailingResource() { + var route = "/{id}/{anotherId}/trailing"; + RestAssured.given() + .accept(ContentType.TEXT) + .when() + .get(route, 1, 2) + .then() + .statusCode(200); + + verifyGetTracing(route, Map.of("id", "1", "anotherId", "2")); + } + + @Test + void getLeadingAndNoTrailingResource() { + var route = "/leading-and-no-trailing"; + RestAssured.given().accept(ContentType.TEXT).when().get(route).then().statusCode(200); + + verifyGetTracing(route, Map.of()); + } + + @Test + void getLeadingAndNoTrailingWithSingleParamResource() { + var route = "/leading-and-no-trailing/{param}"; + RestAssured.given().accept(ContentType.TEXT).when().get(route, 1).then().statusCode(200); + + verifyGetTracing(route, Map.of("param", "1")); + } + + @Test + void getLeadingAndNoTrailingWithMultiParamResource() { + var route = "/leading-and-no-trailing/{param}/{param2}"; + RestAssured.given() + .accept(ContentType.TEXT) + .when() + .get(route, 1, 2) + .then() + .statusCode(200); + + verifyGetTracing(route, Map.of("param", "1", "param2", "2")); + } + + @Test + void getLeadingAndTrailingResource() { + var route = "/leading-and-trailing"; + RestAssured.given().accept(ContentType.TEXT).when().get(route).then().statusCode(200); + + verifyGetTracing(route, Map.of()); + } + + @Test + void getLeadingAndTrailingWithSingleParamResource() { + var route = "/leading-and-trailing/{param}"; + RestAssured.given().accept(ContentType.TEXT).when().get(route, 1).then().statusCode(200); + + verifyGetTracing(route, Map.of("param", "1")); + } + + @Test + void getLeadingAndTrailingWithMultiParamResource() { + var route = "/leading-and-trailing/{param}/{param2}"; + RestAssured.given() + .accept(ContentType.TEXT) + .when() + .get(route, 1, 2) + .then() + .statusCode(200); + + verifyGetTracing(route, Map.of("param", "1", "param2", "2")); + } + + @Test + void getNoLeadingAndNoTrailingResource() { + var route = "/no-leading-and-no-trailing"; + RestAssured.given().accept(ContentType.TEXT).when().get(route).then().statusCode(200); + + verifyGetTracing(route, Map.of()); + } + + @Test + void geNoLeadingAndNoTrailingWithSingleParamResource() { + var route = "/no-leading-and-no-trailing/{param}"; + RestAssured.given().accept(ContentType.TEXT).when().get(route, 1).then().statusCode(200); + + verifyGetTracing(route, Map.of("param", "1")); + } + + @Test + void getNoLeadingAndNoTrailingWithMultiParamResource() { + var route = "/no-leading-and-no-trailing/{param}/{param2}"; + RestAssured.given() + .accept(ContentType.TEXT) + .when() + .get(route, 1, 2) + .then() + .statusCode(200); + + verifyGetTracing(route, Map.of("param", "1", "param2", "2")); + } + + @Test + void getNoLeadingAndTrailingResource() { + var route = "/no-leading-and-trailing"; + RestAssured.given().accept(ContentType.TEXT).when().get(route).then().statusCode(200); + + verifyGetTracing(route, Map.of()); + } + + @Test + void getNoLeadingAndTrailingWithSingleParamResource() { + var route = "/no-leading-and-trailing/{param}"; + RestAssured.given().accept(ContentType.TEXT).when().get(route, 1).then().statusCode(200); + + verifyGetTracing(route, Map.of("param", "1")); + } + + @Test + void getNoLeadingAndTrailingWithMultiParamResource() { + var route = "/no-leading-and-trailing/{param}/{param2}"; + RestAssured.given() + .accept(ContentType.TEXT) + .when() + .get(route, 1, 2) + .then() + .statusCode(200); + + verifyGetTracing(route, Map.of("param", "1", "param2", "2")); + } + + private void verifyGetTracing(String route, Map pathParams) { + verify(tracingService).trace("actor", "anonymous"); + verify(tracingService).trace("request.method", "GET"); + verify(tracingService).trace("request.route", route); + pathParams.forEach((key, value) -> verify(tracingService).trace("request.path.params." + key, value)); + verify(tracingService).trace("request.headers.accept", "text/plain"); + verify(tracingService).trace("request.headers.accept-encoding", "gzip,deflate"); + verify(tracingService).trace("request.headers.connection", "Keep-Alive"); + verify(tracingService).trace(eq("request.headers.host"), startsWith("localhost:")); + verify(tracingService).trace(eq("request.headers.user-agent"), startsWith("Apache-HttpClient")); + verify(tracingService).trace("request.client.ip", "127.0.0.1"); + verifyNoMoreInteractions(tracingService); + } } diff --git a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/TracingServiceImplTest.java b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/TracingServiceImplTest.java deleted file mode 100644 index f728e14..0000000 --- a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/TracingServiceImplTest.java +++ /dev/null @@ -1,98 +0,0 @@ -package ch.phoenix.oss.quarkus.commons.tracing; - -import static org.assertj.core.api.Assertions.assertThat; - -import io.opentelemetry.api.trace.Span; -import io.opentelemetry.instrumentation.annotations.WithSpan; -import io.quarkus.test.junit.QuarkusTest; -import jakarta.inject.Inject; -import org.jboss.logging.MDC; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -@QuarkusTest -class TracingServiceImplTest { - - @Inject - TracingService tracingService; - - @Inject - Span span; - - @BeforeEach - void setUp() { - MDC.clear(); - } - - @Test - void getActor() { - tracingService.trace("actor", "abc"); - assertThat(tracingService.getActor()) - .as("Actor should match expected value") - .isEqualTo("abc"); - } - - @Test - void getRequestPathRaw() { - tracingService.trace("request.path.raw", "/foo/bar"); - assertThat(tracingService.getRequestPathRaw()) - .as("Request Path Raw should match expected value") - .isEqualTo("/foo/bar"); - } - - @Test - void getRequestMethod() { - tracingService.trace("request.method", "GET"); - assertThat(tracingService.getRequestMethod()) - .as("Request Method should match expected value") - .isEqualTo("GET"); - } - - @Test - void getRequestId() { - tracingService.trace("request.headers.x-request-id", "ba458367-bfeb-46ba-87da-50b9343be8f9"); - assertThat(tracingService.getRequestId()) - .as("Request Id should match expected value") - .isEqualTo("ba458367-bfeb-46ba-87da-50b9343be8f9"); - } - - @Test - @WithSpan - void getTraceId() { - assertThat(tracingService.getTraceId()) - .as("Request Trace Id should match expected value") - .isEqualTo(span.getSpanContext().getTraceId()); - } - - @Test - @WithSpan - void getSpanId() { - assertThat(tracingService.getSpanId()) - .as("Request Span Id should match expected value") - .isEqualTo(span.getSpanContext().getSpanId()); - } - - @Test - void getClientIp() { - tracingService.trace("request.client.ip", "127.0.0.1"); - assertThat(tracingService.getClientIp()) - .as("Request Client Iü should match expected value") - .isEqualTo("127.0.0.1"); - } - - @Test - void getSchedulerJob() { - tracingService.trace("scheduler.job.name", "scheduler/abc"); - assertThat(tracingService.getSchedulerJob()) - .as("Scheduler Job Name should match expected value") - .isEqualTo("scheduler/abc"); - } - - @Test - void clearAll() { - tracingService.trace("aaa", "bbb"); - assertThat(MDC.get("aaa")).isEqualTo("bbb"); - tracingService.clearAll(); - assertThat(MDC.get("aaa")).isNull(); - } -} diff --git a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/resource/SlashResource.java b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/resource/SlashResource.java index 8c8bdc7..690c84a 100644 --- a/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/resource/SlashResource.java +++ b/quarkus-tracing-service/src/test/java/ch/phoenix/oss/quarkus/commons/tracing/resource/SlashResource.java @@ -10,14 +10,14 @@ import jakarta.ws.rs.core.MediaType; public class SlashResource { @GET - @Path("/leading/{param}/{param2}") - public String doubleLeading(int param, int param2) { - return "leading/" + param + "/" + param2; + @Path("/leading/{id}/{anotherId}") + public String doubleLeading(int id, int anotherId) { + return "leading/" + id + "/" + anotherId; } @GET - @Path("{param}/{param2}/trailing/") - public String doubleTrailing(int param, int param2) { - return param + "/" + param2 + "/trailing"; + @Path("{id}/{anotherId}/trailing/") + public String doubleTrailing(int id, int anotherId) { + return id + "/" + anotherId + "/trailing"; } } diff --git a/quarkus-uuid-generator/pom.xml b/quarkus-uuid-generator/pom.xml index a6c395c..bb65687 100644 --- a/quarkus-uuid-generator/pom.xml +++ b/quarkus-uuid-generator/pom.xml @@ -5,7 +5,7 @@ ch.phoenix.oss quarkus-commons - 1.0.9-SNAPSHOT + 1.0.4 quarkus-uuid-generator