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

Merge branch 'OZG-4453-SearchIndexOperator' of...

Merge branch 'OZG-4453-SearchIndexOperator' of git.ozg-sh.de:ozgcloud-devops/operator into OZG-4453-SearchIndexOperator
parents 3e45d8d3 f8bc70e6
Branches
Tags
No related merge requests found
Showing
with 109 additions and 114 deletions
/*
* 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
......
/*
* 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
......
/*
* 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
......
/*
* 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
......
/*
* 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
......
package de.ozgcloud.operator;
import de.ozgcloud.operator.OzgCloudElasticsearchCustomResource;
public class ElasticsearchCustomResourceTestFactory {
public static OzgCloudElasticsearchCustomResource create() {
var resource = new OzgCloudElasticsearchCustomResource();
resource.setStatus(ElasticsearchCustomResourceStatusTestFactory.create());
......
......@@ -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);
}
}
......
......@@ -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());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment