diff --git a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/ElasticsearchOperatorApplication.java b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/ElasticsearchOperatorApplication.java index 5a4aa26ef1fe288844bff34ff33d1965a887d115..dde6f8261a674f6afd0d21ce3b395116dfa5acdd 100644 --- a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/ElasticsearchOperatorApplication.java +++ b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/ElasticsearchOperatorApplication.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung diff --git a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OperatorConfig.java b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OperatorConfig.java index 88044785406f57bbd730238694b40b9655f7d3d2..02d81e473448151ee2cbbb9cd0e6050107042dbf 100644 --- a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OperatorConfig.java +++ b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OperatorConfig.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung diff --git a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchCustomResource.java b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchCustomResource.java index efc7b303ec1e4a98148aeda5fb11c42df120d282..933d76e0263fc49587c1a0a12b903eb2d54978e5 100644 --- a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchCustomResource.java +++ b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchCustomResource.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung diff --git a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchCustomResourceStatus.java b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchCustomResourceStatus.java index a6c0d28c255870b29b6bb28ea4127d14e8a1368e..39b7f8f38d0e608870556f3f9f4e7aaeadba7c42 100644 --- a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchCustomResourceStatus.java +++ b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchCustomResourceStatus.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung diff --git a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchSpec.java b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchSpec.java index eb622b13e91c206da326948673a402dac2b2638f..dd5d0ac27dc8922e049a9a2f469969a003e56840 100644 --- a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchSpec.java +++ b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchSpec.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung diff --git a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/ElasticsearchCustomResourceTestFactory.java b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/ElasticsearchCustomResourceTestFactory.java index 0fd331661da3b583401a11c1c9d3ba1c979c90e1..3f4a5402b2a8dcce256cb3ca50906ef830986aff 100644 --- a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/ElasticsearchCustomResourceTestFactory.java +++ b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/ElasticsearchCustomResourceTestFactory.java @@ -1,9 +1,7 @@ package de.ozgcloud.operator; -import de.ozgcloud.operator.OzgCloudElasticsearchCustomResource; - public class ElasticsearchCustomResourceTestFactory { - + public static OzgCloudElasticsearchCustomResource create() { var resource = new OzgCloudElasticsearchCustomResource(); resource.setStatus(ElasticsearchCustomResourceStatusTestFactory.create()); diff --git a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/OzgCloudElasticsearchServiceTest.java b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/OzgCloudElasticsearchServiceTest.java index d872a0c7be1c4d6bf5c92adefbdec00a26c4de0b..8d0c3734879f08925a6dce3fa0fcc6ee97dc711d 100644 --- a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/OzgCloudElasticsearchServiceTest.java +++ b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/OzgCloudElasticsearchServiceTest.java @@ -6,7 +6,6 @@ import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -28,7 +27,7 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import lombok.SneakyThrows; class OzgCloudElasticsearchServiceTest { - + @Spy @InjectMocks private OzgCloudElasticsearchService service; @@ -44,332 +43,332 @@ class OzgCloudElasticsearchServiceTest { @DisplayName("Get or create secret") @Nested class TestGetOrCreateSecret { - + @Mock private Context<OzgCloudElasticsearchCustomResource> context; @Mock private ResourceAdapter<Secret> resourceAdapter; @Mock private Resource<Secret> secretResource; - + private final Secret secret = SecretTestFactory.create(); - - private final OzgCloudElasticsearchCustomResource resource = ElasticsearchCustomResourceTestFactory.create(); - + + private final OzgCloudElasticsearchCustomResource resource = ElasticsearchCustomResourceTestFactory.create(); + @BeforeEach void mock() { when(kubernetesService.getSecretResource(any(), any())).thenReturn(secretResource); when(secretResource.get()).thenReturn(secret); when(properties.getSecretCredentialsName()).thenReturn(IndicesPrivilegesDataTestFactory.PRIVILEGES); } - + @Test void shouldGetSecret() { service.getOrCreateCredentialSecret(resource, context); - + verify(kubernetesService).getSecretResource(NamespaceTestFactory.NAMESPACE, IndicesPrivilegesDataTestFactory.PRIVILEGES); } - + @DisplayName("on existing") @Nested class TestOnExisting { - + @Test void shouldReturnSecret() { var secret = service.getOrCreateCredentialSecret(resource, context); - + assertThat(secret).isNotNull(); } } - + @DisplayName("on missing secret") @Nested class TestOnMissingSecret { - + @BeforeEach void mock() { when(secretResource.get()).thenReturn(null); - + doReturn(resourceAdapter).when(service).createAdapter(any()); } - + @Test void shouldBuildSecret() { service.getOrCreateCredentialSecret(resource, context); - + verify(secretHelper).buildCredentialSecret(NamespaceTestFactory.NAMESPACE, IndicesPrivilegesDataTestFactory.PRIVILEGES); } - + @Test void shouldCreateSecret() { when(secretHelper.buildCredentialSecret(any(), any())).thenReturn(secret); - + service.getOrCreateCredentialSecret(resource, context); - + verify(resourceAdapter).create(secret); } } } - + @DisplayName("Create index if missing") @Nested class TestCreateIndexIfMissing { - + @SneakyThrows @Test void shouldCheckIfIndexExists() { service.createIndexIfMissing(NAMESPACE); - + verify(remoteService).existsIndex(NAMESPACE); } - + @SneakyThrows @Test void shouldCreateIndexIfMissing() { when(remoteService.existsIndex(any())).thenReturn(false); - + service.createIndexIfMissing(NAMESPACE); - + verify(remoteService).createIndex(NAMESPACE); } } - + @DisplayName("Check security role if missing") @Nested class TestCheckSecurityRoleIfMissing { - + private final PutRoleRequestData putRoleRequest = PutRoleRequestDataTestFactory.create(); - + @SneakyThrows @Test void shouldCheckIfSecurityRoleExists() { service.createSecurityRoleIfMissing(NAMESPACE); - + verify(remoteService).existsSecurityRole(NAMESPACE); } - + @SneakyThrows @Test void shouldCreateSecurityRoleIfMissing() { when(remoteService.existsSecurityRole(any())).thenReturn(false); doReturn(putRoleRequest).when(service).buildPutRoleRequestData(any()); - + service.createSecurityRoleIfMissing(NAMESPACE); - + verify(remoteService).createSecurityRole(putRoleRequest); } - + @DisplayName("create put role request data") @Nested class TestCreatePutRoleRequestData { - + @Test void shouldContainName() { var requestData = buildPutRoleRequestData(); - + assertThat(requestData.getName()).isEqualTo(NAMESPACE); } - + @DisplayName("indices privileges data") @Nested class TestIndicesPrivilegesData { - + @Test void shouldContainName() { var requestData = buildPutRoleRequestData(); - - assertThat(requestData.getIndivesPrivilegesData().getNames()).isEqualTo(NAMESPACE); + + assertThat(requestData.getIndivesPrivilegesData().getNames()).isEqualTo(NAMESPACE); } - + @Test void shouldContainPrivileges() { var requestData = buildPutRoleRequestData(); - - assertThat(requestData.getIndivesPrivilegesData().getPrivileges()).isEqualTo(IndicesPrivilegesDataTestFactory.PRIVILEGES); + + assertThat(requestData.getIndivesPrivilegesData().getPrivileges()).isEqualTo(IndicesPrivilegesDataTestFactory.PRIVILEGES); } } - + private PutRoleRequestData buildPutRoleRequestData() { return service.buildPutRoleRequestData(NAMESPACE); } } } - + @DisplayName("Create security user if missing") @Nested class TestCheckSecurityUserIfMissing { - + private final PutUserRequestData putUserRequestData = PutUserRequestDataTestFactory.create(); - + @SneakyThrows @Test void shouldCheckIfSecurityUserExists() { service.createSecurityUserIfMissing(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD); - + verify(remoteService).existsSecurityUser(NAMESPACE); } - + @SneakyThrows @Test void shouldCreateSecurityUserIfMissing() { when(remoteService.existsSecurityUser(any())).thenReturn(false); doReturn(putUserRequestData).when(service).buildPutUserRequestData(any(), any()); - + service.createSecurityUserIfMissing(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD); - + verify(remoteService).createSecurityUser(putUserRequestData); } - + @DisplayName("create put user request data") @Nested class TestCreatePutUserRequestData { - + @Test void shouldContainUsername() { var requestData = buildPutUserRequestData(); - + assertThat(requestData.getUsername()).isEqualTo(NAMESPACE); } - + @Test void shouldContainRoles() { var requestData = buildPutUserRequestData(); - + assertThat(requestData.getRoles()).isEqualTo(NAMESPACE); } - + @Test void shouldContainPassword() { var requestData = buildPutUserRequestData(); - + assertThat(requestData.getPassword()).isEqualTo(PutUserRequestDataTestFactory.PASSWORD); } - + private PutUserRequestData buildPutUserRequestData() { return service.buildPutUserRequestData(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD); } } } - + @DisplayName("Delete security user if exists") @Nested class TestDeleteSecurityUserIfExists { - + @SneakyThrows @Test void shouldCheckIfSecurityUserExists() { service.deleteSecurityUserIfExists(PutUserRequestDataTestFactory.USERNAME); - + verify(remoteService).existsSecurityUser(PutUserRequestDataTestFactory.USERNAME); } - + @SneakyThrows @Test void shouldDeleteSecurityUserIfExists() { when(remoteService.existsSecurityUser(any())).thenReturn(true); - + service.deleteSecurityUserIfExists(PutUserRequestDataTestFactory.USERNAME); - + verify(remoteService).deleteSecurityUser(PutUserRequestDataTestFactory.USERNAME); } } - + @DisplayName("Delete security role if exists") @Nested class TestDeleteSecurityRoleIfExists { - + @SneakyThrows @Test void shouldCheckIfSecurityRoleExists() { service.deleteSecurityRoleIfExists(PutRoleRequestDataTestFactory.NAME); - + verify(remoteService).existsSecurityRole(PutRoleRequestDataTestFactory.NAME); } - + @SneakyThrows @Test void shouldDeleteSecurityRoleIfExists() { when(remoteService.existsSecurityRole(any())).thenReturn(true); - + service.deleteSecurityRoleIfExists(PutRoleRequestDataTestFactory.NAME); - + verify(remoteService).deleteSecurityRole(PutRoleRequestDataTestFactory.NAME); } } - + @DisplayName("Delete index if exists") @Nested class TestDeleteIndexIfExists { - + private static final String INDEX_NAME = NAMESPACE; - + @SneakyThrows @Test void shouldCheckIfIndexExists() { service.deleteIndexIfExists(INDEX_NAME); - + verify(remoteService).existsIndex(INDEX_NAME); } - + @SneakyThrows @Test void shouldDeleteSecurityRoleIfExists() { when(remoteService.existsIndex(any())).thenReturn(true); - + service.deleteIndexIfExists(INDEX_NAME); - + verify(remoteService).deleteIndex(INDEX_NAME); } } - + @DisplayName("Create certificate if missing") @Nested class TestCreateCertificateIfMissing { - + private static final String CERTIFICATE_NAME = "dummySecretName"; - + @Mock private Resource<Secret> secretResource; - + @DisplayName("process flow") @Nested class TestProcessFlow { - + @Mock private OzgCloudElasticsearchServerProperties serverProperties; - + @BeforeEach void mock() { when(kubernetesService.getSecretResource(any(), any())).thenReturn(secretResource); when(properties.getCertificateSecretName()).thenReturn(CERTIFICATE_NAME); } - + @Test void shouldGetCertificateSecret() { when(secretResource.get()).thenReturn(SecretTestFactory.create()); - + service.createCertificateIfMissing(NAMESPACE); - + verify(kubernetesService).getSecretResource(NAMESPACE, CERTIFICATE_NAME); } - + @Test void shouldCreateIfMissing() { when(secretResource.get()).thenReturn(null); doNothing().when(service).createCredentialSecret(any(), any()); - + service.createCertificateIfMissing(NAMESPACE); - + verify(service).createCredentialSecret(NAMESPACE, secretResource); } } - + @DisplayName("create credential secret") @Nested class TestCreateCredentialSecret { - + private static final String SERVER_CERTIFICATE_SECRET_NAME = LoremIpsum.getInstance().getWords(1); - + private static final String SERVER_CERTIFICATE_SECRET_DATA_KEY = LoremIpsum.getInstance().getWords(1); private static final String SERVER_CERTIFICATE_SECRET_DATA = LoremIpsum.getInstance().getWords(1); private static final String SERVER_CERTIFICATE_NAMESPACE = LoremIpsum.getInstance().getWords(1); @@ -381,7 +380,7 @@ class OzgCloudElasticsearchServiceTest { private OzgCloudElasticsearchServerProperties serverProperties; @Mock private ResourceAdapter<Secret> resourceAdapter; - + @BeforeEach void mock() { when(properties.getServer()).thenReturn(serverProperties); @@ -393,25 +392,25 @@ class OzgCloudElasticsearchServiceTest { doReturn(resourceAdapter).when(service).createAdapter(any()); when(secretHelper.buildCertificateSecret(any(), any())).thenReturn(CREDENTIAL_SECRET); } - + @Test void shouldGetCertificateSecret() { service.createCredentialSecret(NAMESPACE, secretResource); - + verify(kubernetesService).getSecretResource(SERVER_CERTIFICATE_NAMESPACE, SERVER_CERTIFICATE_SECRET_NAME); } - + @Test void shouldBuildSecret() { service.createCredentialSecret(NAMESPACE, secretResource); - + verify(secretHelper).buildCertificateSecret(NAMESPACE, SERVER_CERTIFICATE_SECRET_DATA); } - + @Test void shouldCreate() { service.createCredentialSecret(NAMESPACE, secretResource); - + verify(resourceAdapter).create(CREDENTIAL_SECRET); } } diff --git a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/PutRoleRequestDataTestFactory.java b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/PutRoleRequestDataTestFactory.java index b190f6b80f179d06264c7d7445a24ad738689352..3950d7f545ad1e1aa95cbacc70abfefa0df3059e 100644 --- a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/PutRoleRequestDataTestFactory.java +++ b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/PutRoleRequestDataTestFactory.java @@ -2,17 +2,15 @@ package de.ozgcloud.operator; import com.thedeanda.lorem.LoremIpsum; -import de.ozgcloud.operator.PutRoleRequestData; - public class PutRoleRequestDataTestFactory { - + public static final String NAME = LoremIpsum.getInstance().getFirstName(); - public static PutRoleRequestData create() { + public static PutRoleRequestData create() { return createBuilder().build(); } - - public static PutRoleRequestData.PutRoleRequestDataBuilder createBuilder(){ + + public static PutRoleRequestData.PutRoleRequestDataBuilder createBuilder() { return PutRoleRequestData.builder() .name(NAME) .indivesPrivilegesData(IndicesPrivilegesDataTestFactory.create());