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

OZG-6177 improve junittests

parent dc6521a4
No related branches found
No related tags found
No related merge requests found
......@@ -55,12 +55,10 @@ public class OzgCloudElsterTransferUserReconciler implements Reconciler<OzgCloud
try {
elsterTransferUserService.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
return DeleteControl.defaultDelete();
}
catch (Exception e) {
} catch (Exception e) {
LOG.warn(namespace + " could not delete.", e);
return DeleteControl.noFinalizerRemoval().rescheduleAfter(Config.RECONCILER_RETRY_SECONDS_ON_ERROR);
}
}
}
......@@ -20,13 +20,10 @@ public class OzgCloudElsterTransferUserRemoteService {
private final KubernetesClient client;
public ConfigMap getConfigMap(String configmapNamespace, String configMapName) {
return client.configMaps().inNamespace(configmapNamespace).withName(configMapName).get();
}
public ConfigMap createConfigMap(String configmapNamespace, String configMapName) {
ConfigMap configMap = new ConfigMapBuilder()
.withNewMetadata()
......@@ -60,7 +57,6 @@ public class OzgCloudElsterTransferUserRemoteService {
.put("kubectl.kubernetes.io/restartedAt", String.valueOf(System.currentTimeMillis()));
}
public void createOrUpdateSecret(String namespace, String userPassword, String secretName) {
Secret secret = new SecretBuilder()
.withNewMetadata()
......
......@@ -14,10 +14,7 @@ import org.mockito.Spy;
import de.ozgcloud.operator.Config;
import de.ozgcloud.operator.elstertransfer.OzgCloudCustomResourceStatus;
import io.fabric8.kubernetes.api.model.KubernetesResourceList;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.Resource;
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
class OzgCloudElsterTransferUserReconcilerTest {
......@@ -29,9 +26,6 @@ class OzgCloudElsterTransferUserReconcilerTest {
@Mock
private OzgCloudElsterTransferUserService service;
//@Mock
//private MixedOperation<OzgCloudElsterTransferUser, KubernetesResourceList<OzgCloudElsterTransferUser>, Resource<OzgCloudElsterTransferUser>> mixedOperation;
@Mock
private KubernetesClient client;
......@@ -47,6 +41,7 @@ class OzgCloudElsterTransferUserReconcilerTest {
verify(service).updateConfigMapAndRestartDeploymentAndCreateSecret(OzgCloudElsterTransferUserTestFactory.METADATA_NAMESPACE);
}
@Test
void shouldReturnUpdateStatus() {
var response = reconciler.reconcile(OzgCloudElsterTransferUserTestFactory.create(), null);
......@@ -68,6 +63,7 @@ class OzgCloudElsterTransferUserReconcilerTest {
assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCloudCustomResourceStatus.OK);
}
@DisplayName("test getElsterTransferUserStatus")
@Nested
class TestGetElsterTransferUserStatus {
......@@ -124,7 +120,6 @@ class OzgCloudElsterTransferUserReconcilerTest {
.isEqualTo(DeleteControl.noFinalizerRemoval().rescheduleAfter(Config.RECONCILER_RETRY_SECONDS_ON_ERROR));
}
}
}
package de.ozgcloud.operator.elstertransfer.user;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
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.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
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.ObjectMeta;
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.*;
import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
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 RollableScalableResource<Deployment> deploymentResource;
@Mock
private MixedOperation<ConfigMap, ConfigMapList, Resource<ConfigMap>> configMapOperation;
......@@ -77,10 +65,8 @@ class OzgCloudElsterTransferUserRemoteServiceTest {
@Mock
private MixedOperation<Secret, SecretList, Resource<Secret>> secretOperation;
@Mock
private ConfigMap configMap;
private Resource<Secret> secretResource;
private static final String namespace = OzgCloudElsterTransferUserTestFactory.METADATA_NAMESPACE;
private static final String configMapName = OzgCloudElsterTransferUserTestFactory.CONFIG_MAP_NAME;
......@@ -88,34 +74,55 @@ class OzgCloudElsterTransferUserRemoteServiceTest {
private static final String secretName = OzgCloudElsterTransferUserTestFactory.MUK_USER_SECRET_NAME;
private static final String configmapNamespace = "etr-user-creation";
@DisplayName("test configmap")
@DisplayName("test ConfigMap")
@Nested
class TestConfigMap {
@BeforeEach
void setUp() {
// MockitoAnnotations.openMocks(this);
void init() {
when(client.configMaps()).thenReturn(configMapOperation);
when(configMapOperation.inNamespace(configmapNamespace)).thenReturn(nonNamespaceOperation);
}
@DisplayName("get configmap")
@Nested
class TestGetConfigMap {
@Test
void testCallGetConfigMap() {
void shouldCallGetConfigMap() {
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() {
void shouldGetConfigMap() {
when(nonNamespaceOperation.withName(configMapName)).thenReturn(configMapResource);
ConfigMap configMap = new ConfigMapBuilder()
.withNewMetadata()
.withName(configMapName)
.endMetadata()
.build();
when(configMapResource.get()).thenReturn(configMap);
ConfigMap result = remoteService.getConfigMap(configmapNamespace, configMapName);
assertNotNull(result);
assert configMapName.equals(result.getMetadata().getName());
}
}
@DisplayName("create configmap")
@Nested
class TestCreateConfigMap {
ConfigMap configMap;
@BeforeEach
void init() {
when(nonNamespaceOperation.resource(any(ConfigMap.class))).thenReturn(configMapResource);
configMap = new ConfigMapBuilder()
.withNewMetadata()
......@@ -125,78 +132,119 @@ class OzgCloudElsterTransferUserRemoteServiceTest {
.build();
when(configMapResource.create()).thenReturn(configMap);
}
@Test
void shouldCreateConfigMap() {
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);
void shouldCallCreateConfigMap() {
ConfigMap result = remoteService.createConfigMap(configmapNamespace, configMapName);
verify(client.configMaps().inNamespace(configmapNamespace).resource(result)).create();
}
}
@DisplayName("update configmap")
@Nested
class TestUpdateConfigMap {
ConfigMap configMap = new ConfigMap();
String key = "test-key";
String data = "new-data";
Map<String, String> mapData = new HashMap<>();
mapData.put("initial-key", "initial-value");
@BeforeEach
void init() {
ConfigMap configMap = new ConfigMap();
when(nonNamespaceOperation.resource(any(ConfigMap.class))).thenReturn(configMapResource);
configMap.setMetadata(new io.fabric8.kubernetes.api.model.ObjectMeta());
configMap.getMetadata().setNamespace(configmapNamespace);
configMap.setData(mapData);
}
@Test
void shouldCallUpdateConfigMapData() {
remoteService.updateConfigMapData(configMap, key, data);
verify(client.configMaps().inNamespace(configmapNamespace).resource(configMap)).update();
}
@Test
void shouldUpdateConfigMapData() {
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() {
@DisplayName("replace deployment")
@Nested
class TestReplaceDeployment {
@BeforeEach
void setUp() {
when(client.apps()).thenReturn(appsAPIGroupDSL);
when(appsAPIGroupDSL.deployments()).thenReturn(deploymentOperation);
when(deploymentOperation.inNamespace(anyString())).thenReturn(deploymentOperation);
when(deploymentOperation.withName(anyString())).thenReturn(deploymentResource);
}
@Test
void shouldCallReplaceDeployment() {
when(deploymentResource.get()).thenReturn(deployment);
remoteService.restartDeployment(namespace, deploymentName);
verify(deploymentResource).get();
verify(deploymentResource).replace(deployment);
}
@Test
void shouldCallSetRestartFlag() {
when(deploymentResource.get()).thenReturn(deployment);
remoteService.restartDeployment(namespace, deploymentName);
verify(remoteService).setRestartFlag(deployment);
}
@Test
void testSetRestartFlag() {
void shouldCallGetDeployment() {
remoteService.restartDeployment(namespace, deploymentName);
verify(deploymentResource).get();
}
}
@DisplayName("set restart flag")
@Nested
class TestSetRestartFlag {
@Test
void shouldSetRestartedAtAnnotation() {
Map<String, String> annotations = new HashMap<>();
deployment.getSpec().getTemplate().getMetadata().setAnnotations(annotations);
......@@ -206,6 +254,7 @@ class OzgCloudElsterTransferUserRemoteServiceTest {
assert annotations.get("kubectl.kubernetes.io/restartedAt") != null;
}
}
}
@Test
void shouldCallCreateOrUpdateSecret() {
......@@ -224,12 +273,8 @@ class OzgCloudElsterTransferUserRemoteServiceTest {
remoteService.createOrUpdateSecret(namespace, userPassword, secretName);
//verify(secretOperation).inNamespace(namespace);
//verify(secretOperation).resource(secret);
// verify(secretResource).createOrReplace();
verify(client.secrets().inNamespace(namespace).resource(secret)).createOrReplace();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment