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

OZG-6177 add junittests

parent e7809bec
Branches
Tags
No related merge requests found
...@@ -137,7 +137,7 @@ pipeline { ...@@ -137,7 +137,7 @@ pipeline {
FAILED_STAGE=env.STAGE_NAME FAILED_STAGE=env.STAGE_NAME
HELM_CHART_VERSION = generateHelmChartVersion() HELM_CHART_VERSION = generateHelmChartVersion()
//sh "./run_helm_test.sh" sh "./run_helm_test.sh"
dir('src/main/helm') { dir('src/main/helm') {
...@@ -175,23 +175,20 @@ pipeline { ...@@ -175,23 +175,20 @@ pipeline {
} }
} }
} }
stage ('Deploy SBOM to DependencyTrack') {
stage ('OWASP Dependency-Check Vulnerabilities') {
steps { steps {
dependencyCheck additionalArguments: ''' script {
-o "./" IMAGE_TAG = generateImageTag()
-s "./"
-f "ALL" configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
-d /dependency-check-data withCredentials([string(credentialsId: 'dependency-track-api-key', variable: 'API_KEY')]) {
--suppression dependency-check-supressions.xml
--disableKnownExploited catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') {
--noupdate sh "mvn --no-transfer-progress -s $MAVEN_SETTINGS io.github.pmckeown:dependency-track-maven-plugin:upload-bom -Ddependency-track.apiKey=$API_KEY -Ddependency-track.projectVersion=${IMAGE_TAG} -Ddependency-track.dependencyTrackBaseUrl=https://dependency-track.ozg-sh.de"
--disableArchive }
--prettyPrint''', odcInstallation: 'dependency-check-owasp' }
}
dependencyCheckPublisher( }
pattern: 'dependency-check-report.xml'
)
} }
} }
} }
......
package de.ozgcloud.operator.elstertransfer.user; package de.ozgcloud.operator.elstertransfer.user;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import lombok.Builder;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@Builder
public class ConfigMapUserList { public class ConfigMapUserList {
private List<Map<String, Object>> usersList; private List<Map<String, Object>> usersList;
...@@ -12,7 +18,6 @@ public class ConfigMapUserList { ...@@ -12,7 +18,6 @@ public class ConfigMapUserList {
this.usersList = usersList; this.usersList = usersList;
} }
boolean existsUser(String login){ boolean existsUser(String login){
for (Map<String, Object> existingUser : usersList) { for (Map<String, Object> existingUser : usersList) {
if (login.equals(existingUser.get("login"))) { if (login.equals(existingUser.get("login"))) {
......
...@@ -20,10 +20,6 @@ import lombok.extern.log4j.Log4j2; ...@@ -20,10 +20,6 @@ import lombok.extern.log4j.Log4j2;
public class OzgCloudElsterTransferUserReconciler implements Reconciler<OzgCloudElsterTransferUser>, Cleaner<OzgCloudElsterTransferUser> { public class OzgCloudElsterTransferUserReconciler implements Reconciler<OzgCloudElsterTransferUser>, Cleaner<OzgCloudElsterTransferUser> {
private final OzgCloudElsterTransferUserService elsterTransferUserService; private final OzgCloudElsterTransferUserService elsterTransferUserService;
private static final String CONFIG_MAP_NAME = "etr-user-config";
private static final String ETR_DEPLOYMENT_NAME = "elster-transfer";
// todo
private static final String ETR_NAMESPACE = "etr-user-creation";
@Override @Override
public UpdateControl<OzgCloudElsterTransferUser> reconcile(OzgCloudElsterTransferUser elsterTransferUser, public UpdateControl<OzgCloudElsterTransferUser> reconcile(OzgCloudElsterTransferUser elsterTransferUser,
......
...@@ -9,7 +9,6 @@ import org.springframework.stereotype.Component; ...@@ -9,7 +9,6 @@ import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.Yaml;
import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ConfigMap;
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
...@@ -20,6 +19,7 @@ public class OzgCloudElsterTransferUserService { ...@@ -20,6 +19,7 @@ public class OzgCloudElsterTransferUserService {
private final OzgCloudElsterTransferUserRemoteService remoteService; private final OzgCloudElsterTransferUserRemoteService remoteService;
private static final String USERS_KEY = "users.yaml"; private static final String USERS_KEY = "users.yaml";
// todo
private static final String ETR_NAMESPACE = "etr-user-creation"; private static final String ETR_NAMESPACE = "etr-user-creation";
public static final String USER_ROLE = "USER"; public static final String USER_ROLE = "USER";
private static final String CONFIG_MAP_NAME = "etr-user-config"; private static final String CONFIG_MAP_NAME = "etr-user-config";
...@@ -28,16 +28,12 @@ public class OzgCloudElsterTransferUserService { ...@@ -28,16 +28,12 @@ public class OzgCloudElsterTransferUserService {
public void updateConfigMapAndRestartDeploymentAndCreateSecret(String namespace) { public void updateConfigMapAndRestartDeploymentAndCreateSecret(String namespace) {
LOG.info("Updating Configmap"); LOG.info("Updating Configmap");
String userPassword = updateConfigMap(namespace, ETR_NAMESPACE, CONFIG_MAP_NAME); String userPassword = generateUsersYamlAndUpdateConfigMap(namespace, ETR_NAMESPACE, CONFIG_MAP_NAME);
// userPassword will not be generated if the user "login" already exist in configmap
if (!userPassword.isEmpty()) {
LOG.info("Restarting Deployment"); LOG.info("Restarting Deployment");
restartDeployment(ETR_NAMESPACE, ETR_DEPLOYMENT_NAME); restartDeployment(ETR_NAMESPACE, ETR_DEPLOYMENT_NAME);
LOG.info("Creating Secret"); LOG.info("Creating Secret");
createOrUpdateSecret(namespace, userPassword, MUK_USER_SECRET_NAME); createOrUpdateSecret(namespace, userPassword, MUK_USER_SECRET_NAME);
} }
}
public void deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(OzgCloudElsterTransferUser user) { public void deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(OzgCloudElsterTransferUser user) {
String namespace = user.getMetadata().getNamespace(); String namespace = user.getMetadata().getNamespace();
...@@ -54,33 +50,37 @@ public class OzgCloudElsterTransferUserService { ...@@ -54,33 +50,37 @@ public class OzgCloudElsterTransferUserService {
restartDeployment(ETR_NAMESPACE, ETR_DEPLOYMENT_NAME); restartDeployment(ETR_NAMESPACE, ETR_DEPLOYMENT_NAME);
} }
String generateUsersYamlAndUpdateConfigMap(String namespace, String configmapNamespace, String configMapName) {
String updateConfigMap(String namespace, String configmapNamespace, String configMapName) { String userPassword = generatePassword();
String userPassword = "";
ConfigMap configMap = remoteService.getConfigMap(configmapNamespace, configMapName); ConfigMap configMap = remoteService.getConfigMap(configmapNamespace, configMapName);
if (configMap == null) { String usersYaml = addUserToUserYaml(namespace, configMap, userPassword);
LOG.debug("Creating ConfigMap '{}' in namespace '{}'", configMapName, namespace);
configMap = remoteService.createConfigMap(configmapNamespace, configMapName); createOrUpdateConfigMap(configmapNamespace, configMapName, configMap, usersYaml);
return userPassword;
} }
ConfigMapUserList users = getUsersFromYaml(configMap); String addUserToUserYaml(String namespace, ConfigMap configMap, String userPassword) {
String usersYaml = "";
ConfigMapUserList users = getUsersFromConfigMap(configMap);
// use namespace as user "login" and "group" // use namespace as user "login" and "group"
if (userExistsInList(users, namespace)) { if (userExistsInList(users, namespace)) {
LOG.warn("User with login '{}' already exists in ConfigMap '{}'.", namespace, configMapName); LOG.warn("User with login '{}' already exists in ConfigMap.", namespace);
} else { } else {
userPassword = generatePassword(); addNewUserToList(users, namespace, hashPassword(userPassword));
String passwordHash = hashPassword(userPassword); usersYaml = constructYamlEntries(users);
addUserToList(users, namespace, passwordHash); }
return usersYaml;
String usersYaml = constructYamlEntries(users); }
void createOrUpdateConfigMap(String configmapNamespace, String configMapName, ConfigMap configMap, String usersYaml) {
if (configMap == null) {
LOG.debug("Creating ConfigMap '{}' in namespace '{}'", configMapName, configmapNamespace);
configMap = remoteService.createConfigMap(configmapNamespace, configMapName);
}
remoteService.updateConfigMapData(configMap, USERS_KEY, usersYaml); remoteService.updateConfigMapData(configMap, USERS_KEY, usersYaml);
LOG.debug("ConfigMap updated successfully: {}", configMapName); LOG.debug("ConfigMap updated successfully: {}", configMapName);
}
return userPassword;
} }
void restartDeployment(String etrNamespace, String deploymentName) { void restartDeployment(String etrNamespace, String deploymentName) {
...@@ -90,48 +90,21 @@ public class OzgCloudElsterTransferUserService { ...@@ -90,48 +90,21 @@ public class OzgCloudElsterTransferUserService {
boolean userExists(String userLogin, String configMapNamespace, String configMapName) { boolean userExists(String userLogin, String configMapNamespace, String configMapName) {
ConfigMap configMap = remoteService.getConfigMap(configMapNamespace, configMapName); ConfigMap configMap = remoteService.getConfigMap(configMapNamespace, configMapName);
ConfigMapUserList users = getUsersFromConfigMap(configMap);
if (configMap == null) { boolean userExists = users.existsUser(userLogin);
LOG.warn("ConfigMap '{}' not found", configMapName);
return false;
}
if (!configMap.getData().containsKey(USERS_KEY)) {
LOG.warn("Key '{}' not found in ConfigMap '{}'", USERS_KEY, configMapName);
return false;
}
ConfigMapUserList users1 = getUsersFromYaml(configMap);
boolean userExists = users1.existsUser(userLogin);
LOG.info("User with login '{}' exists in ConfigMap '{}'", userLogin, configMapName); LOG.info("User with login '{}' exists in ConfigMap '{}'", userLogin, configMapName);
return userExists; return userExists;
} }
void deleteUser(String userLogin, String configMapName) { void deleteUser(String userLogin, String configMapName) {
try {
ConfigMap configMap = remoteService.getConfigMap(ETR_NAMESPACE, configMapName); ConfigMap configMap = remoteService.getConfigMap(ETR_NAMESPACE, configMapName);
if (configMap == null) { ConfigMapUserList usersList = getUsersFromConfigMap(configMap);
LOG.debug("ConfigMap '{}' not found in namespace '{}'", configMapName, ETR_NAMESPACE);
return;
}
if (!configMap.getData().containsKey(USERS_KEY)) {
LOG.warn("Key '{}' not found in ConfigMap '{}'", USERS_KEY, configMapName);
return;
}
ConfigMapUserList usersList = getUsersFromYaml(configMap);
usersList.removeDeleted(userLogin); usersList.removeDeleted(userLogin);
String updatedUsersYaml = constructYamlEntries(usersList); String updatedUsersYaml = constructYamlEntries(usersList);
remoteService.updateConfigMapData(configMap, USERS_KEY, updatedUsersYaml); remoteService.updateConfigMapData(configMap, USERS_KEY, updatedUsersYaml);
LOG.info("User with login '{}' removed from configmap successfully", userLogin); LOG.info("User with login '{}' removed from configmap successfully", userLogin);
} catch (Exception e) {
LOG.error("Error while deleting user", e);
}
} }
void createOrUpdateSecret(String namespace, String userPassword, String secretName) { void createOrUpdateSecret(String namespace, String userPassword, String secretName) {
...@@ -139,8 +112,7 @@ public class OzgCloudElsterTransferUserService { ...@@ -139,8 +112,7 @@ public class OzgCloudElsterTransferUserService {
LOG.info("Secret for user in namespace '{}' created successfully", namespace); LOG.info("Secret for user in namespace '{}' created successfully", namespace);
} }
ConfigMapUserList getUsersFromConfigMap(ConfigMap configMap) {
ConfigMapUserList getUsersFromYaml(ConfigMap configMap) {
String usersYaml = configMap.getData().get(USERS_KEY); String usersYaml = configMap.getData().get(USERS_KEY);
Map<String, Object> load = new Yaml().load(usersYaml); Map<String, Object> load = new Yaml().load(usersYaml);
List<Map<String, Object>> usersList = (List<Map<String, Object>>) load.get("users"); List<Map<String, Object>> usersList = (List<Map<String, Object>>) load.get("users");
...@@ -151,18 +123,10 @@ public class OzgCloudElsterTransferUserService { ...@@ -151,18 +123,10 @@ public class OzgCloudElsterTransferUserService {
return usersList.existsUser(login); return usersList.existsUser(login);
} }
void addUserToList(ConfigMapUserList usersList, String login, String passwordHash) { void addNewUserToList(ConfigMapUserList usersList, String login, String passwordHash) {
usersList.addUserToList(login, passwordHash, USER_ROLE); usersList.addUserToList(login, passwordHash, USER_ROLE);
} }
private String generatePassword() {
return UUID.randomUUID().toString();
}
private String hashPassword(String password) {
return BCrypt.hashpw(password, BCrypt.gensalt());
}
String constructYamlEntries(ConfigMapUserList userList) { String constructYamlEntries(ConfigMapUserList userList) {
List<Map<String, Object>> usersList = userList.getUsersList(); List<Map<String, Object>> usersList = userList.getUsersList();
StringBuilder usersYaml = new StringBuilder(); StringBuilder usersYaml = new StringBuilder();
...@@ -184,4 +148,12 @@ public class OzgCloudElsterTransferUserService { ...@@ -184,4 +148,12 @@ public class OzgCloudElsterTransferUserService {
return sb.toString(); return sb.toString();
} }
private String generatePassword() {
return UUID.randomUUID().toString();
}
private String hashPassword(String password) {
return BCrypt.hashpw(password, BCrypt.gensalt());
}
} }
package de.ozgcloud.operator.elstertransfer.user; package de.ozgcloud.operator.elstertransfer.user;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*; import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
...@@ -72,6 +71,7 @@ class OzgCloudElsterTransferUserRemoteServiceTest { ...@@ -72,6 +71,7 @@ class OzgCloudElsterTransferUserRemoteServiceTest {
private static final String configMapName = OzgCloudElsterTransferUserTestFactory.CONFIG_MAP_NAME; private static final String configMapName = OzgCloudElsterTransferUserTestFactory.CONFIG_MAP_NAME;
private static final String deploymentName = OzgCloudElsterTransferUserTestFactory.ETR_DEPLOYMENT_NAME; private static final String deploymentName = OzgCloudElsterTransferUserTestFactory.ETR_DEPLOYMENT_NAME;
private static final String secretName = OzgCloudElsterTransferUserTestFactory.MUK_USER_SECRET_NAME; private static final String secretName = OzgCloudElsterTransferUserTestFactory.MUK_USER_SECRET_NAME;
//todo
private static final String configmapNamespace = "etr-user-creation"; private static final String configmapNamespace = "etr-user-creation";
@DisplayName("test ConfigMap") @DisplayName("test ConfigMap")
......
package de.ozgcloud.operator.elstertransfer.user; package de.ozgcloud.operator.elstertransfer.user;
public class OzgCloudElsterTransferUserServiceTest { import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
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;
class OzgCloudElsterTransferUserServiceTest {
@Mock
private OzgCloudElsterTransferUserRemoteService remoteService;
@Spy
@InjectMocks
private OzgCloudElsterTransferUserService service;
@Mock
private ConfigMap configMap;
@Mock
private ConfigMapUserList users;
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";
private static final String usersKey = "users.yaml";
@Nested
class TestUpdateConfigMapAndRestartDeploymentAndCreateSecret {
@BeforeEach
void setUp() {
String mockedUsersYaml = "fileFormat: 1\nusers:\n - login: testUser\n";
when(configMap.getData()).thenReturn(Map.of(usersKey, mockedUsersYaml));
when(remoteService.getConfigMap(anyString(), anyString())).thenReturn(configMap);
when(users.getUsersList()).thenReturn(List.of(Map.of(
"login", "testUser",
"rolle", "USER",
"credentials", Map.of("passwortHash", "hashedPassword"),
"gruppe", "testGroup")));
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
}
@Test
void shouldCallGenerateUsersYamlAndUpdateConfigMap() {
service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
verify(service).generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
}
@Test
void shouldCallRestartDeployment() {
service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
verify(service).restartDeployment(configMapNamespace, deploymentName);
}
@Test
void shouldCallCreateOrUpdateSecret() {
String psw = "password";
when(service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName)).thenReturn(psw);
service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
verify(service).createOrUpdateSecret(namespace, psw, secretName);
}
}
@Nested
class TestDeleteUserAndRestartDeploymentIfNotKeepUserAndUserExists {
@Test
void keepAfterDeleteShouldReturnFalseAsDefault() {
String mockedUsersYaml = "fileFormat: 1\nusers:\n - login: testUser\n";
when(configMap.getData()).thenReturn(Map.of("users.yaml", mockedUsersYaml));
when(remoteService.getConfigMap(anyString(), anyString())).thenReturn(configMap);
OzgCloudElsterTransferUser user = OzgCloudElsterTransferUserTestFactory.create();
service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
assertFalse(user.getSpec().isKeepAfterDelete());
}
@Test
void shouldCallUserExists() {
String mockedUsersYaml = "fileFormat: 1\nusers:\n - login: testUser\n";
when(configMap.getData()).thenReturn(Map.of("users.yaml", mockedUsersYaml));
when(remoteService.getConfigMap(anyString(), anyString())).thenReturn(configMap);
OzgCloudElsterTransferUser user = OzgCloudElsterTransferUserTestFactory.create();
service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
verify(service).userExists(namespace, configMapNamespace, configMapName);
}
@Test
void shouldNotCallUserExists() {
OzgCloudElsterTransferUser user = OzgCloudElsterTransferUserTestFactory.create();
user.getSpec().setKeepAfterDelete(true);
service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
verify(service, never()).userExists(any(), any(), any());
}
@Test
void shouldCallDeleteUser() {
String mockedUsersYaml = "fileFormat: 1\nusers:\n - login: testUser\n";
when(configMap.getData()).thenReturn(Map.of("users.yaml", mockedUsersYaml));
when(remoteService.getConfigMap(anyString(), anyString())).thenReturn(configMap);
when(users.getUsersList()).thenReturn(List.of(Map.of(
"login", "testUser",
"rolle", "USER",
"credentials", Map.of("passwortHash", "hashedPassword"),
"gruppe", "testGroup")));
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
OzgCloudElsterTransferUser user = OzgCloudElsterTransferUserTestFactory.create();
when(service.userExists(namespace, configMapNamespace, configMapName)).thenReturn(true);
service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
verify(service).deleteUser(user.getMetadata().getNamespace(), configMapName);
}
@Test
void shouldNotCallDeleteUserOrRestartDeploymentIfKeepAfterDelete() {
OzgCloudElsterTransferUser user = OzgCloudElsterTransferUserTestFactory.create();
user.getSpec().setKeepAfterDelete(true);
service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
verify(service, never()).deleteUser(any(), any());
verify(service, never()).restartDeployment(any(), any());
}
@Test
void shouldNotCallDeleteUserOrRestartDeploymentIfUserNotExists() {
String mockedUsersYaml = "fileFormat: 1\nusers:\n - login: testUser\n";
when(configMap.getData()).thenReturn(Map.of("users.yaml", mockedUsersYaml));
when(remoteService.getConfigMap(anyString(), anyString())).thenReturn(configMap);
OzgCloudElsterTransferUser user = OzgCloudElsterTransferUserTestFactory.create();
when(service.userExists(namespace, configMapNamespace, configMapName)).thenReturn(false);
service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
verify(service, never()).deleteUser(any(), any());
verify(service, never()).restartDeployment(any(), any());
}
@Test
void shouldCallRestartDeployment() {
String mockedUsersYaml = "fileFormat: 1\nusers:\n - login: testUser\n";
when(configMap.getData()).thenReturn(Map.of("users.yaml", mockedUsersYaml));
when(remoteService.getConfigMap(anyString(), anyString())).thenReturn(configMap);
when(users.getUsersList()).thenReturn(List.of(Map.of(
"login", "testUser",
"rolle", "USER",
"credentials", Map.of("passwortHash", "hashedPassword"),
"gruppe", "testGroup")));
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
OzgCloudElsterTransferUser user = OzgCloudElsterTransferUserTestFactory.create();
when(service.userExists(namespace, configMapNamespace, configMapName)).thenReturn(true);
service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
verify(service).restartDeployment(configMapNamespace, deploymentName);
}
}
@Nested
@DisplayName("generateUsersYamlAndUpdateConfigMap")
class TestGenerateUsersYamlAndUpdateConfigMap {
@BeforeEach
public void setUp() {
Map<String, String> mockData = new HashMap<>();
mockData.put("users.yaml", "users: []");
when(configMap.getData()).thenReturn(mockData);
when(remoteService.getConfigMap(anyString(), anyString())).thenReturn(configMap);
}
@Test
void shouldCallGetConfigMap() {
service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
verify(remoteService).getConfigMap(configMapNamespace, configMapName);
}
@Test
void shouldReturnGeneratedPassword() {
String userPassword = service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
assertNotNull(userPassword);
}
@Test
void shouldCallCreateOrUpdateConfigMap() {
service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
verify(service).createOrUpdateConfigMap(eq(configMapNamespace), eq(configMapName), eq(configMap), anyString());
}
@Test
void shouldCalladdUserToUserYaml() {
service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
verify(service).addUserToUserYaml(eq(namespace), eq(configMap), anyString());
}
}
@Nested
class addUserToUserYamlTests {
@BeforeEach
public void setUp() {
Map<String, String> mockData = new HashMap<>();
mockData.put("users.yaml", "users: []");
when(configMap.getData()).thenReturn(mockData);
}
@Test
void shouldCallgetUsersFromConfigMap() {
service.addUserToUserYaml(namespace, configMap, "password");
verify(service).getUsersFromConfigMap(configMap);
}
@Test
void shouldCallUserExistsInList() {
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
when(users.getUsersList()).thenReturn(List.of(Map.of(
"login", "testUser",
"rolle", "USER",
"credentials", Map.of("passwortHash", "hashedPassword"),
"gruppe", "testGroup")));
service.addUserToUserYaml(namespace, configMap, "password");
verify(service).userExistsInList(users, namespace);
}
@Test
void shouldCallAddNewUserToListWhenUserNotExists() {
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
service.addUserToUserYaml(namespace, configMap, "password");
verify(service).addNewUserToList(eq(users), eq(namespace), anyString());
}
@Test
void shouldCallconstructYamlEntries() {
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
service.addUserToUserYaml(namespace, configMap, "password");
verify(service).constructYamlEntries(users);
}
@Test
void TestUserYamlShouldNotBeEmpty() {
// when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
String userYaml = service.addUserToUserYaml(namespace, configMap, "password");
assertFalse(userYaml.isEmpty());
}
@Test
void TestUserYamlShouldBeEmpty() {
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
when(service.userExistsInList(users, namespace)).thenReturn(true);
String userYaml = service.addUserToUserYaml(namespace, configMap, "password");
assertTrue(userYaml.isEmpty());
}
}
@Nested
class CreateOrUpdateConfigMapTests {
@Test
void shouldCallCreateConfigMap() {
ConfigMap configMap = null;
service.createOrUpdateConfigMap(configMapNamespace, configMapName, configMap, "mockedUsersYaml");
verify(remoteService).createConfigMap(configMapNamespace, configMapName);
}
@Test
void shouldCallUpdateConfigMapData() {
service.createOrUpdateConfigMap(configMapNamespace, configMapName, configMap, "mockedUsersYaml");
verify(remoteService).updateConfigMapData(configMap, usersKey, "mockedUsersYaml");
verify(remoteService, never()).createConfigMap(any(), any());
}
}
@Nested
class RestartDeploymentTests {
@Test
void shouldCallCreateConfigMap() {
service.restartDeployment(configMapNamespace, deploymentName);
verify(remoteService).restartDeployment(configMapNamespace, deploymentName);
}
}
@Nested
class UserExistsTests {
@BeforeEach
public void setUp() {
Map<String, String> mockData = new HashMap<>();
mockData.put("users.yaml", "users: []");
when(configMap.getData()).thenReturn(mockData);
when(remoteService.getConfigMap(configMapNamespace, configMapName)).thenReturn(configMap);
}
@Test
void shouldCallGetConfigMap() {
//
service.userExists(namespace, configMapNamespace, configMapName);
verify(remoteService).getConfigMap(configMapNamespace, configMapName);
}
@Test
void shouldReturnUserExistsTrueIfUserExists() {
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
when(users.existsUser(namespace)).thenReturn(true);
boolean userExists = service.userExists(namespace, configMapNamespace, configMapName);
assertTrue(userExists);
}
@Test
void shouldReturnUserExistsTrueIfUserNotExists() {
boolean userExists = service.userExists(namespace, configMapNamespace, configMapName);
assertFalse(userExists);
}
@Test
void shouldCallgetUsersFromConfigMap() {
service.userExists(namespace, configMapNamespace, configMapName);
verify(service).getUsersFromConfigMap(configMap);
}
@Test
void shouldCallExistsUser() {
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
service.userExists(namespace, configMapNamespace, configMapName);
verify(users).existsUser(namespace);
}
}
@Nested
class DeleteUserTests {
@BeforeEach
public void setUp() {
Map<String, String> mockData = new HashMap<>();
mockData.put("users.yaml", "users: []");
when(configMap.getData()).thenReturn(mockData);
when(remoteService.getConfigMap(configMapNamespace, configMapName)).thenReturn(configMap);
}
@Test
void shouldCallGetConfigMap() {
service.deleteUser(namespace, configMapName);
verify(remoteService).getConfigMap(configMapNamespace, configMapName);
}
@Test
void shouldCallGetUsersFromConfigMap() {
service.deleteUser(namespace, configMapName);
verify(service).getUsersFromConfigMap(configMap);
}
@Test
void shouldCallremoveDeleted() {
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
service.deleteUser(namespace, configMapName);
verify(users).removeDeleted(namespace);
}
@Test
void ShouldCallConstructYamlEntries() {
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
service.deleteUser(namespace, configMapName);
verify(service).constructYamlEntries(users);
}
@Test
void ShouldCallUpdateConfigMapData() {
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
when(service.constructYamlEntries(users)).thenReturn("updatedUsersYaml");
service.deleteUser(namespace, configMapName);
verify(remoteService).updateConfigMapData(configMap, usersKey, "updatedUsersYaml");
}
}
@Nested
class CreateOrUpdateSecretTests {
@Test
void shouldCallCreateOrUpdateSecret() {
service.createOrUpdateSecret(namespace, "psw", secretName);
verify(remoteService).createOrUpdateSecret(namespace, "psw", secretName);
}
}
@Nested
class GetUsersFromConfigMapTests {
@BeforeEach
public void setUp() {
String usersYaml = "fileFormat: 1\n" +
"users:\n" +
" - login: \"admin\"\n" +
" rolle: \"ADMIN\"\n" +
" credentials:\n" +
" passwortHash: \"$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a\"\n" +
" gruppe: \"Administratoren\"\n";
Map<String, String> mockData = new HashMap<>();
mockData.put(usersKey, usersYaml);
when(configMap.getData()).thenReturn(mockData);
}
@Test
void shouldReturnObjectConfigMapUserList() {
ConfigMapUserList result = service.getUsersFromConfigMap(configMap);
assertNotNull(result);
assertInstanceOf(ConfigMapUserList.class, result);
}
@Test
void shouldReturnConfigMapUserListWithContent() {
ConfigMapUserList result = service.getUsersFromConfigMap(configMap);
List<Map<String, Object>> usersList = result.getUsersList();
assertEquals(1, usersList.size());
}
}
@Nested
class UserExistsInListTests {
@Test
void shouldCallExistsUser() {
service.userExistsInList(users, namespace);
verify(users).existsUser(namespace);
}
}
@Nested
class AddNewUserToListTests {
@Test
void shouldCallAddUserToList() {
service.addNewUserToList(users, namespace, "pswHash");
verify(users).addUserToList(namespace, "pswHash", "USER");
}
}
@Nested
class ConstructYamlEntriesTests {
@Test
void shouldHaveResultWithCorrectContentStart() {
String result = service.constructYamlEntries(users);
assertTrue(result.startsWith("fileFormat: 1\nusers:\n"));
}
@Test
void shouldHaveResultWithCorrectContent() {
Map<String, Object> user1 = new HashMap<>();
user1.put("login", "admin");
user1.put("rolle", "ADMIN");
Map<String, Object> user2 = new HashMap<>();
user2.put("login", "user");
user2.put("rolle", "USER");
List<Map<String, Object>> usersList = Arrays.asList(user1, user2);
when(users.getUsersList()).thenReturn(usersList);
doReturn(" - login: admin\n rolle: ADMIN\n").when(service).getYamlForUser(user1);
doReturn(" - login: user\n rolle: USER\n").when(service).getYamlForUser(user2);
String result = service.constructYamlEntries(users);
String expectedYaml = "fileFormat: 1\n" +
"users:\n" +
" - login: admin\n" +
" rolle: ADMIN\n" +
" - login: user\n" +
" rolle: USER\n";
assertEquals(expectedYaml, result);
}
}
@Nested
class GetYamlForUserTests {
@Test
void shouldReturnExpectedYamlForUser() {
Map<String, Object> userEntry = new HashMap<>();
userEntry.put("login", "admin");
userEntry.put("rolle", "ADMIN");
userEntry.put("gruppe", "Administratoren");
Map<String, String> credentials = new HashMap<>();
credentials.put("passwortHash", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a");
userEntry.put("credentials", credentials);
String result = service.getYamlForUser(userEntry);
String expectedYaml = " - { login: \"admin\", rolle: \"ADMIN\", credentials: { passwortHash: \"$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a\" }, gruppe: \"Administratoren\" }\n";
assertEquals(expectedYaml, result);
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment