diff --git a/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtMapper.java b/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtMapper.java index 9c818ed736440b54d1abf8ea015c18b761c87497..d4797e5cf3039dbb8917f7d619af740d163bfec6 100644 --- a/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtMapper.java +++ b/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtMapper.java @@ -32,8 +32,9 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor class NachrichtMapper { static final String LOCAL_PROFILE = "local"; - private static final String NACHRICHTEN_LIST_URL_REGEX = "^[A-Za-z\\d-]+(\\.[A-Za-z\\d-]+){0,512}:\\d{1,5}$"; - static final String NACHRICHTEN_LIST_URL_FORMAT = "dns:///%s"; + private static final String NACHRICHTEN_LIST_URL_REGEX = "^(dns:///)?[A-Za-z\\d-]+(\\.[A-Za-z\\d-]+){0,512}:\\d{1,5}$"; + static final String DNS_PREFIX = "dns:///"; + static final String NACHRICHTEN_LIST_URL_FORMAT = DNS_PREFIX + "%s"; private final Environment environment; @@ -54,6 +55,6 @@ class NachrichtMapper { throw new InvalidNachrichtenListUrlException(nachrichtenListUrl); } - return String.format(NACHRICHTEN_LIST_URL_FORMAT, nachrichtenListUrl); + return nachrichtenListUrl.startsWith(DNS_PREFIX) ? nachrichtenListUrl : NACHRICHTEN_LIST_URL_FORMAT.formatted(nachrichtenListUrl); } } diff --git a/info-manager-server/src/test/java/de/ozgcloud/info/NachrichtEventTestFactory.java b/info-manager-server/src/test/java/de/ozgcloud/info/NachrichtEventTestFactory.java index cc970234f680bb3a18cdd9fe5fe31e159accf513..2e8e4632e2ca7298c6c8773f27732ae92fdedd47 100644 --- a/info-manager-server/src/test/java/de/ozgcloud/info/NachrichtEventTestFactory.java +++ b/info-manager-server/src/test/java/de/ozgcloud/info/NachrichtEventTestFactory.java @@ -34,6 +34,7 @@ public class NachrichtEventTestFactory { public static final String POSTKORB_HANDLE = UserTestFactory.POSTKORB_HANDLE; public static final String EMPTY_POSTFACH_HANDLE = "73228744-a28a-4485-845b-d8cc02422760"; public static final String URL = "localhost:6789"; + public static final String URL_WITH_DNS = "dns:///" + URL; public static NachrichtEvent createNachrichtEvent() { return createNachrichtEventBuilder().build(); diff --git a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenMapperTest.java b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenMapperTest.java index 958b0233da5868c6224ee81741fa915e463fa388..0d9be84c0c221ff1304ca00a0150598379a74c61 100644 --- a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenMapperTest.java +++ b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenMapperTest.java @@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -93,32 +94,39 @@ class NachrichtenMapperTest { assertThat(result).isEqualTo(NachrichtEventTestFactory.URL); } - @Test - void shouldHaveValidFormat() { - var grpcNachricht = NachrichtEventTestFactory.createGrpcNachricht(); - var expectedNachrichtenListUrl = String.format(NACHRICHTEN_LIST_URL_FORMAT, NachrichtEventTestFactory.URL); - var result = nachrichtenMapper.getNachrichtenListUrl(grpcNachricht); - - assertThat(result).isEqualTo(expectedNachrichtenListUrl); - } - - @Test - void shouldHaveValidSubdomainFormat() { - var url = "test.example.com:20"; + @DisplayName("should have valid format when") + @ParameterizedTest(name = "url: {0}") + @ValueSource(strings = { NachrichtEventTestFactory.URL, NachrichtEventTestFactory.URL_WITH_DNS, "test.example.com:20" }) + void shouldHaveValidFormat(String url) { var grpcNachricht = NachrichtEventTestFactory.createGrpcNachrichtBuilder().setNachrichtenListUrl(url).build(); - var expectedNachrichtenListUrl = String.format(NACHRICHTEN_LIST_URL_FORMAT, url); - var result = nachrichtenMapper.getNachrichtenListUrl(grpcNachricht); - assertThat(result).isEqualTo(expectedNachrichtenListUrl); + assertThatNoException().isThrownBy(() -> nachrichtenMapper.getNachrichtenListUrl(grpcNachricht)); } @ParameterizedTest - @ValueSource(strings = { "invalidUrl", "%test%:2345", "localhost:234567" }) + @ValueSource(strings = { "invalidUrl", "%test%:2345", "localhost:234567", "dns://host:9090" }) void shouldHaveInvalidFormat(String url) { var grpcNachricht = NachrichtEventTestFactory.createGrpcNachrichtBuilder().setNachrichtenListUrl(url).build(); assertThatExceptionOfType(InvalidNachrichtenListUrlException.class).isThrownBy( () -> nachrichtenMapper.getNachrichtenListUrl(grpcNachricht)); } + + @Test + void shouldAddDnsPrefix() { + var result = nachrichtenMapper.getNachrichtenListUrl(NachrichtEventTestFactory.createGrpcNachricht()); + + assertThat(result).isEqualTo(NachrichtEventTestFactory.URL_WITH_DNS); + } + + @Test + void shouldNotAddDnsPrefix() { + var grpcNachricht = NachrichtEventTestFactory.createGrpcNachrichtBuilder().setNachrichtenListUrl(NachrichtEventTestFactory.URL_WITH_DNS) + .build(); + + var result = nachrichtenMapper.getNachrichtenListUrl(grpcNachricht); + + assertThat(result).isEqualTo(NachrichtEventTestFactory.URL_WITH_DNS); + } } } \ No newline at end of file