From dc6521a4548192ea55ba23b2ec5d086eb4ee6d0e Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Tue, 27 Aug 2024 22:30:28 +0200 Subject: [PATCH] OZG-6177 add junittests --- ...udElsterTransferUserRemoteServiceTest.java | 235 ++++++++++++++++++ ...OzgCloudElsterTransferUserServiceTest.java | 5 + 2 files changed, 240 insertions(+) create mode 100644 src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java create mode 100644 src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java new file mode 100644 index 0000000..4972d12 --- /dev/null +++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java @@ -0,0 +1,235 @@ +package de.ozgcloud.operator.elstertransfer.user; + +import io.fabric8.kubernetes.api.model.ConfigMap; +import io.fabric8.kubernetes.api.model.ConfigMapBuilder; +import io.fabric8.kubernetes.api.model.ConfigMapList; +import io.fabric8.kubernetes.api.model.KubernetesResourceList; +import io.fabric8.kubernetes.api.model.PodTemplateSpec; +import io.fabric8.kubernetes.api.model.Secret; +import io.fabric8.kubernetes.api.model.SecretBuilder; +import io.fabric8.kubernetes.api.model.SecretList; +import io.fabric8.kubernetes.api.model.apps.Deployment; +import io.fabric8.kubernetes.api.model.apps.DeploymentList; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.Resource; +import io.fabric8.kubernetes.client.dsl.RollableScalableResource; +import io.fabric8.kubernetes.api.model.ObjectMeta; +import io.fabric8.kubernetes.api.model.apps.Deployment; +import io.fabric8.kubernetes.api.model.apps.DeploymentSpec; +import io.fabric8.kubernetes.api.model.PodTemplateSpec; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.AppsAPIGroupDSL; +import io.fabric8.kubernetes.client.dsl.MixedOperation; +import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.mockito.Spy; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class OzgCloudElsterTransferUserRemoteServiceTest { + + @Mock + private KubernetesClient client; + + @Mock + private RollableScalableResource<Deployment> deploymentResource; + + + @Mock + private AppsAPIGroupDSL appsAPIGroupDSL; + @Mock + private Resource<Secret> secretResource; + + @Spy + @InjectMocks + private OzgCloudElsterTransferUserRemoteService remoteService; + + + @Mock + private MixedOperation<Deployment, DeploymentList, RollableScalableResource<Deployment>> deploymentOperation; + @Mock + private MixedOperation<ConfigMap, ConfigMapList, Resource<ConfigMap>> configMapOperation; + + @Mock + private NonNamespaceOperation<ConfigMap, ConfigMapList, Resource<ConfigMap>> nonNamespaceOperation; + + @Mock + private Resource<ConfigMap> configMapResource; + + @Mock + private MixedOperation<Secret, SecretList, Resource<Secret>> secretOperation; + + + @Mock + private ConfigMap configMap; + + + private static final String namespace = OzgCloudElsterTransferUserTestFactory.METADATA_NAMESPACE; + private static final String configMapName = OzgCloudElsterTransferUserTestFactory.CONFIG_MAP_NAME; + private static final String deploymentName = OzgCloudElsterTransferUserTestFactory.ETR_DEPLOYMENT_NAME; + private static final String secretName = OzgCloudElsterTransferUserTestFactory.MUK_USER_SECRET_NAME; + private static final String configmapNamespace = "etr-user-creation"; + + @DisplayName("test configmap") + @Nested + class TestConfigMap { + @BeforeEach + void setUp() { + // MockitoAnnotations.openMocks(this); + when(client.configMaps()).thenReturn(configMapOperation); + when(configMapOperation.inNamespace(configmapNamespace)).thenReturn(nonNamespaceOperation); + } + @Test + void testCallGetConfigMap() { + + when(nonNamespaceOperation.withName(configMapName)).thenReturn(configMapResource); + when(configMapResource.get()).thenReturn(configMap); + + remoteService.getConfigMap(configmapNamespace, configMapName); + + //verify(configMapOperation.inNamespace(namespace).withName(configMapName)).get(); + + //verify(configMapOperation).inNamespace(configmapNamespace); + //verify(nonNamespaceOperation).withName(configMapName); + //verify(configMapResource).get(); + verify(client.configMaps().inNamespace(configmapNamespace).withName(configMapName)).get(); + } + + + @Test + void testCreateConfigMap() { + when(nonNamespaceOperation.resource(any(ConfigMap.class))).thenReturn(configMapResource); + configMap = new ConfigMapBuilder() + .withNewMetadata() + .withName(configMapName) + .endMetadata() + .addToData("key", "value") + .build(); + when(configMapResource.create()).thenReturn(configMap); + + + ConfigMap result = remoteService.createConfigMap(configmapNamespace, configMapName); + + assertNotNull(result); + assert configMapName.equals(result.getMetadata().getName()); + + // + // verify(client).configMaps(); + //verify(configMapOperation).inNamespace(configmapNamespace); + // verify(nonNamespaceOperation).resource(any(ConfigMap.class)); + // verify(configMapResource).create(); + verify(client.configMaps().inNamespace(configmapNamespace).resource(result)).create(); + } + + @Test + void testUpdateConfigMapData() { + when(nonNamespaceOperation.resource(any(ConfigMap.class))).thenReturn(configMapResource); + + String key = "test-key"; + String data = "new-data"; + + Map<String, String> mapData = new HashMap<>(); + mapData.put("initial-key", "initial-value"); + + ConfigMap configMap = new ConfigMap(); + configMap.setMetadata(new io.fabric8.kubernetes.api.model.ObjectMeta()); + configMap.getMetadata().setNamespace(configmapNamespace); + configMap.setData(mapData); + + remoteService.updateConfigMapData(configMap, key, data); + + // Assert: Verify the data is updated in the ConfigMap + assert configMap.getData().containsKey(key); + assert "new-data".equals(configMap.getData().get(key)); + + // Verify interactions with Kubernetes client + verify(client).configMaps(); + verify(configMapOperation).inNamespace(configmapNamespace); + verify(nonNamespaceOperation).resource(configMap); + verify(configMapResource).update(); + } +} + + @DisplayName("restart deployment") + @Nested + class TestRestartDeployment { + Deployment deployment= new Deployment(); + @BeforeEach + void setUp() { + + deployment.setSpec(new DeploymentSpec()); + deployment.getSpec().setTemplate(new PodTemplateSpec()); + deployment.getSpec().getTemplate().setMetadata(new ObjectMeta()); + } + @Test + void testRestartDeployment() { + when(client.apps()).thenReturn(appsAPIGroupDSL); + when(appsAPIGroupDSL.deployments()).thenReturn(deploymentOperation); + when(deploymentOperation.inNamespace(anyString())).thenReturn(deploymentOperation); + when(deploymentOperation.withName(anyString())).thenReturn(deploymentResource); + when(deploymentResource.get()).thenReturn(deployment); + + remoteService.restartDeployment(namespace, deploymentName); + + + verify(deploymentResource).get(); + verify(deploymentResource).replace(deployment); + verify(remoteService).setRestartFlag(deployment); + } + + @Test + void testSetRestartFlag() { + Map<String, String> annotations = new HashMap<>(); + deployment.getSpec().getTemplate().getMetadata().setAnnotations(annotations); + + remoteService.setRestartFlag(deployment); + + assert annotations.containsKey("kubectl.kubernetes.io/restartedAt"); + assert annotations.get("kubectl.kubernetes.io/restartedAt") != null; + } +} + + @Test + void shouldCallCreateOrUpdateSecret() { + when(client.secrets()).thenReturn(secretOperation); + when(secretOperation.inNamespace(anyString())).thenReturn(secretOperation); + when(secretOperation.resource(any(Secret.class))).thenReturn(secretResource); + + String userPassword = "test-password"; + Secret secret = new SecretBuilder() + .withNewMetadata() + .withName(secretName) + .endMetadata() + .addToData("login", Base64.getEncoder().encodeToString(namespace.getBytes())) + .addToData("password", Base64.getEncoder().encodeToString(userPassword.getBytes())) + .build(); + + remoteService.createOrUpdateSecret(namespace, userPassword, secretName); + + //verify(secretOperation).inNamespace(namespace); + //verify(secretOperation).resource(secret); + // verify(secretResource).createOrReplace(); + verify(client.secrets().inNamespace(namespace).resource(secret)).createOrReplace(); + + + } + +} diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java new file mode 100644 index 0000000..ad2e148 --- /dev/null +++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java @@ -0,0 +1,5 @@ +package de.ozgcloud.operator.elstertransfer.user; + +public class OzgCloudElsterTransferUserServiceTest { + +} -- GitLab