Skip to content
Snippets Groups Projects
Commit 3a393be1 authored by OZGCloud's avatar OZGCloud
Browse files

Merge branch 'master' into OZG-6710-Update-common-lib

parents 980f454f 3d6e2a92
No related branches found
No related tags found
No related merge requests found
Showing
with 136 additions and 27 deletions
...@@ -21,14 +21,19 @@ ...@@ -21,14 +21,19 @@
package de.ozgcloud.info.information; package de.ozgcloud.info.information;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
@Getter @Getter
@Setter
@Configuration @Configuration
@ConfigurationProperties(prefix = InfoManagerProperties.PREFIX) @ConfigurationProperties(prefix = InfoManagerProperties.PREFIX)
@ConfigurationPropertiesScan
public class InfoManagerProperties { public class InfoManagerProperties {
static final String PREFIX = "ozgcloud.infomanager"; static final String PREFIX = "ozgcloud.infomanager";
private final String postfachIdKeyName = "postkorbhandle"; public static final String POSTKORBHANDLE = "postkorbhandle";
private String postfachIdKeyName = POSTKORBHANDLE;
} }
...@@ -57,18 +57,16 @@ public class NachrichtGrpcService extends NachrichtServiceGrpc.NachrichtServiceI ...@@ -57,18 +57,16 @@ public class NachrichtGrpcService extends NachrichtServiceGrpc.NachrichtServiceI
private void saveNachricht(GrpcNewNachrichtRequest request) { private void saveNachricht(GrpcNewNachrichtRequest request) {
var nachricht = nachrichtenMapper.fromGrpcNachricht(request.getNachricht()); var nachricht = nachrichtenMapper.fromGrpcNachricht(request.getNachricht());
if (isValid(nachricht)) { checkForValidity(nachricht);
nachrichtService.save(nachricht); nachrichtService.save(nachricht);
} }
}
private boolean isValid(NachrichtEvent nachrichtEvent) { private void checkForValidity(NachrichtEvent nachrichtEvent) {
Set<ConstraintViolation<NachrichtEvent>> violations = validator.validate(nachrichtEvent); Set<ConstraintViolation<NachrichtEvent>> violations = validator.validate(nachrichtEvent);
if (!violations.isEmpty()) { if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations); throw new ConstraintViolationException(violations);
} }
return true;
} }
@Override @Override
......
...@@ -32,8 +32,9 @@ import lombok.RequiredArgsConstructor; ...@@ -32,8 +32,9 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
class NachrichtMapper { class NachrichtMapper {
static final String LOCAL_PROFILE = "local"; 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}$"; 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 NACHRICHTEN_LIST_URL_FORMAT = "dns:///%s"; static final String DNS_PREFIX = "dns:///";
static final String NACHRICHTEN_LIST_URL_FORMAT = DNS_PREFIX + "%s";
private final Environment environment; private final Environment environment;
...@@ -54,6 +55,6 @@ class NachrichtMapper { ...@@ -54,6 +55,6 @@ class NachrichtMapper {
throw new InvalidNachrichtenListUrlException(nachrichtenListUrl); throw new InvalidNachrichtenListUrlException(nachrichtenListUrl);
} }
return String.format(NACHRICHTEN_LIST_URL_FORMAT, nachrichtenListUrl); return nachrichtenListUrl.startsWith(DNS_PREFIX) ? nachrichtenListUrl : NACHRICHTEN_LIST_URL_FORMAT.formatted(nachrichtenListUrl);
} }
} }
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
*/ */
package de.ozgcloud.info; package de.ozgcloud.info;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Spy; import org.mockito.Spy;
...@@ -29,4 +30,9 @@ class InfoManagerApplicationTest { ...@@ -29,4 +30,9 @@ class InfoManagerApplicationTest {
@Spy @Spy
@InjectMocks @InjectMocks
private InfoManagerApplication application; private InfoManagerApplication application;
@Test
void shouldLoadContext() { //NOSONAR
// empty
}
} }
\ No newline at end of file
...@@ -34,6 +34,7 @@ public class NachrichtEventTestFactory { ...@@ -34,6 +34,7 @@ public class NachrichtEventTestFactory {
public static final String POSTKORB_HANDLE = UserTestFactory.POSTKORB_HANDLE; 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 EMPTY_POSTFACH_HANDLE = "73228744-a28a-4485-845b-d8cc02422760";
public static final String URL = "localhost:6789"; public static final String URL = "localhost:6789";
public static final String URL_WITH_DNS = "dns:///" + URL;
public static NachrichtEvent createNachrichtEvent() { public static NachrichtEvent createNachrichtEvent() {
return createNachrichtEventBuilder().build(); return createNachrichtEventBuilder().build();
...@@ -47,7 +48,11 @@ public class NachrichtEventTestFactory { ...@@ -47,7 +48,11 @@ public class NachrichtEventTestFactory {
} }
public static GrpcNewNachrichtRequest createNewNachrichtRequest() { public static GrpcNewNachrichtRequest createNewNachrichtRequest() {
return GrpcNewNachrichtRequest.newBuilder().setNachricht(createGrpcNachricht()).build(); return createNewNachrichtRequestBuilder().setNachricht(createGrpcNachricht()).build();
}
public static GrpcNewNachrichtRequest.Builder createNewNachrichtRequestBuilder() {
return GrpcNewNachrichtRequest.newBuilder().setNachricht(createGrpcNachricht());
} }
public static GrpcFinishedNachrichtRequest createFinishNachrichtRequest() { public static GrpcFinishedNachrichtRequest createFinishNachrichtRequest() {
......
package de.ozgcloud.info.information;
import static de.ozgcloud.info.information.InfoManagerProperties.*;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import de.ozgcloud.common.test.ITCase;
@SpringBootTest(classes = { InfoManagerProperties.class })
@ITCase
class InfoManagerPropertiesITCase {
@TestPropertySource(properties = {
InfoManagerProperties.PREFIX + ".postfachIdKeyName" + "=" + TestLoadingConfiguration.OTHER_POSTFACH_KEY,
})
@Nested
class TestLoadingConfiguration {
static final String OTHER_POSTFACH_KEY = "otherPostfachKey";
@Autowired
private InfoManagerProperties infoManagerProperties;
@Test
void shouldHaveProperties() {
assertThat(infoManagerProperties).isNotNull();
}
@Test
void testPostfachHandleKey() {
assertThat(infoManagerProperties.getPostfachIdKeyName()).isEqualTo(OTHER_POSTFACH_KEY);
}
}
@Nested
class TestLoadingDefaultConfiguration {
@Autowired
private InfoManagerProperties infoManagerProperties;
@Test
void shouldHaveProperties() {
assertThat(infoManagerProperties).isNotNull();
}
@Test
void testPostfachHandleKey() {
assertThat(infoManagerProperties.getPostfachIdKeyName()).isEqualTo(POSTKORBHANDLE);
}
}
}
\ No newline at end of file
...@@ -25,6 +25,7 @@ import static org.mockito.Mockito.*; ...@@ -25,6 +25,7 @@ import static org.mockito.Mockito.*;
import java.util.Set; import java.util.Set;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException; import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Validator; import jakarta.validation.Validator;
...@@ -129,6 +130,33 @@ class NachrichtenGrpcServiceTest { ...@@ -129,6 +130,33 @@ class NachrichtenGrpcServiceTest {
} }
} }
@Nested
class TestSaveInvalidNewNachrichtEvent {
@Mock
private StreamObserver<GrpcNewNachrichtReply> newNachrichtStreamObserver;
private final GrpcNachricht invalidNachricht = NachrichtEventTestFactory.createGrpcNachrichtBuilder().setNachrichtenListUrl("invalid")
.build();
private final GrpcNewNachrichtRequest invalidNachrichtRequest = NachrichtEventTestFactory.createNewNachrichtRequestBuilder()
.setNachricht(invalidNachricht).build();
@BeforeEach
@SuppressWarnings("unchecked")
void init() {
when(nachrichtenMapper.fromGrpcNachricht(any())).thenReturn(
NachrichtEventTestFactory.createNachrichtEventBuilder().id(null).nachrichtenListUrl("invalid").build());
var constraintViolation = mock(ConstraintViolation.class);
when(validator.validate(any(NachrichtEvent.class))).thenReturn(Set.of(constraintViolation));
}
@Test
void shouldNotCreateNachrichtBecauseInvalidNachrichtenListUrl() {
nachrichtenGrpcService.saveNewNachricht(invalidNachrichtRequest, newNachrichtStreamObserver);
verify(nachrichtenService, never()).save(any());
}
}
@Nested @Nested
class TestFinishNachrichtEvent { class TestFinishNachrichtEvent {
@Mock @Mock
......
...@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.*; ...@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
...@@ -93,32 +94,39 @@ class NachrichtenMapperTest { ...@@ -93,32 +94,39 @@ class NachrichtenMapperTest {
assertThat(result).isEqualTo(NachrichtEventTestFactory.URL); assertThat(result).isEqualTo(NachrichtEventTestFactory.URL);
} }
@Test @DisplayName("should have valid format when")
void shouldHaveValidFormat() { @ParameterizedTest(name = "url: {0}")
var grpcNachricht = NachrichtEventTestFactory.createGrpcNachricht(); @ValueSource(strings = { NachrichtEventTestFactory.URL, NachrichtEventTestFactory.URL_WITH_DNS, "test.example.com:20" })
var expectedNachrichtenListUrl = String.format(NACHRICHTEN_LIST_URL_FORMAT, NachrichtEventTestFactory.URL); void shouldHaveValidFormat(String url) {
var result = nachrichtenMapper.getNachrichtenListUrl(grpcNachricht);
assertThat(result).isEqualTo(expectedNachrichtenListUrl);
}
@Test
void shouldHaveValidSubdomainFormat() {
var url = "test.example.com:20";
var grpcNachricht = NachrichtEventTestFactory.createGrpcNachrichtBuilder().setNachrichtenListUrl(url).build(); 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 @ParameterizedTest
@ValueSource(strings = { "invalidUrl", "%test%:2345", "localhost:234567" }) @ValueSource(strings = { "invalidUrl", "%test%:2345", "localhost:234567", "dns://host:9090" })
void shouldHaveInvalidFormat(String url) { void shouldHaveInvalidFormat(String url) {
var grpcNachricht = NachrichtEventTestFactory.createGrpcNachrichtBuilder().setNachrichtenListUrl(url).build(); var grpcNachricht = NachrichtEventTestFactory.createGrpcNachrichtBuilder().setNachrichtenListUrl(url).build();
assertThatExceptionOfType(InvalidNachrichtenListUrlException.class).isThrownBy( assertThatExceptionOfType(InvalidNachrichtenListUrlException.class).isThrownBy(
() -> nachrichtenMapper.getNachrichtenListUrl(grpcNachricht)); () -> 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
...@@ -94,6 +94,10 @@ class NachrichtenServiceTest { ...@@ -94,6 +94,10 @@ class NachrichtenServiceTest {
class TestFinishNachrichtEvent { class TestFinishNachrichtEvent {
@Test @Test
void shouldCallDelete() { void shouldCallDelete() {
when(
repository.findByPostfachIdAndNachrichtenListUrl(NachrichtEventTestFactory.POSTKORB_HANDLE, NachrichtEventTestFactory.URL)).thenReturn(
Optional.of(NachrichtEventTestFactory.createNachrichtEvent()));
service.finish(NachrichtEventTestFactory.createNachrichtEvent()); service.finish(NachrichtEventTestFactory.createNachrichtEvent());
verify(repository, atMostOnce()).findByPostfachIdAndNachrichtenListUrl(NachrichtEventTestFactory.POSTKORB_HANDLE, verify(repository, atMostOnce()).findByPostfachIdAndNachrichtenListUrl(NachrichtEventTestFactory.POSTKORB_HANDLE,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment