diff --git a/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManagerTest.java b/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManagerTest.java index e731123936fbfa7898f805c50e70e49dbe1d8ce1..71dfd8bbe46d70db352e86aa141dea8486767566 100644 --- a/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManagerTest.java +++ b/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManagerTest.java @@ -2,6 +2,7 @@ package net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes; import com.google.common.collect.Sets; import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterIngressManager; +import net.geant.nmaas.externalservices.kubernetes.RemoteClusterManager; import net.geant.nmaas.externalservices.kubernetes.entities.IngressControllerConfigOption; import net.geant.nmaas.gitlab.GitLabManager; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.components.cluster.DefaultKClusterValidator; @@ -69,6 +70,7 @@ public class KubernetesManagerTest { private final KubernetesClusterIngressManager ingressManager = mock(KubernetesClusterIngressManager.class); private final GitLabManager gitLabManager = mock(GitLabManager.class); private final JanitorService janitorService = mock(JanitorService.class); + private final RemoteClusterManager remoteClusterManager = mock(RemoteClusterManager.class); private static final Identifier DEPLOYMENT_ID = Identifier.newInstance("deploymentId"); @@ -82,7 +84,8 @@ public class KubernetesManagerTest { ingressResourceManager, ingressManager, gitLabManager, - janitorService + janitorService, + remoteClusterManager ); @BeforeEach diff --git a/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandPreparationTest.java b/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandPreparationTest.java index 74b90525221a703be60760041acfa9ccb517c425..9bd0e19eb80a4419e723e216700fddcc7187bc41 100644 --- a/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandPreparationTest.java +++ b/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandPreparationTest.java @@ -57,7 +57,7 @@ public class HelmCommandPreparationTest { RELEASE_NAME, null, CHART_NAME_WITH_REPO, - null, false).asString(), + null, false, null).asString(), equalTo(CORRECT_HELM_INSTALL_COMMAND_USING_CHART_FROM_REPO)); assertThat( HelmInstallCommand.commandWithRepo( @@ -66,7 +66,7 @@ public class HelmCommandPreparationTest { RELEASE_NAME, null, CHART_NAME_WITH_REPO, - CHART_VERSION, false).asString(), + CHART_VERSION, false, null).asString(), equalTo(CORRECT_HELM_INSTALL_COMMAND_USING_CHART_FROM_REPO_WITH_VERSION)); } @@ -79,7 +79,7 @@ public class HelmCommandPreparationTest { RELEASE_NAME, null, CHART_NAME_WITH_REPO, - null, false).asString(), + null, false, null).asString(), equalTo(CORRECT_HELM_INSTALL_COMMAND_FOR_v3_USING_CHART_FROM_REPO)); assertThat( HelmInstallCommand.commandWithRepo( @@ -88,7 +88,7 @@ public class HelmCommandPreparationTest { RELEASE_NAME, null, CHART_NAME_WITH_REPO, - CHART_VERSION, false).asString(), + CHART_VERSION, false, null).asString(), equalTo(CORRECT_HELM_INSTALL_COMMAND_FOR_V3_USING_CHART_FROM_REPO_WITH_VERSION)); } @@ -101,7 +101,7 @@ public class HelmCommandPreparationTest { RELEASE_NAME, null, CHART_NAME_WITH_REPO, - null, true).asString(), + null, true, null).asString(), equalTo(CORRECT_HELM_INSTALL_COMMAND_USING_CHART_FROM_REPO + TLS)); assertThat( HelmInstallCommand.commandWithRepo( @@ -110,7 +110,7 @@ public class HelmCommandPreparationTest { RELEASE_NAME, null, CHART_NAME_WITH_REPO, - CHART_VERSION, true).asString(), + CHART_VERSION, true, null).asString(), equalTo(CORRECT_HELM_INSTALL_COMMAND_USING_CHART_FROM_REPO_WITH_VERSION + TLS)); } @@ -127,7 +127,7 @@ public class HelmCommandPreparationTest { arguments, CHART_NAME_WITH_REPO, CHART_VERSION, - false).asString(), + false, null).asString(), allOf(containsString(CORRECT_HELM_INSTALL_COMMAND_FIRST_PART), containsString("testPersistenceName"), containsString("testStorageClass")) @@ -147,7 +147,7 @@ public class HelmCommandPreparationTest { arguments, CHART_NAME_WITH_REPO, CHART_VERSION, - true).asString(), + true, null).asString(), allOf(containsString(CORRECT_HELM_INSTALL_COMMAND_FIRST_PART), containsString("testPersistenceName"), containsString("testStorageClass"), diff --git a/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManagerTest.java b/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManagerTest.java index b3e27ed59448daf424638912499f0d4a3de3f265..f743955611888d0dc852135850bdb170cf8e77df 100644 --- a/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManagerTest.java +++ b/src/test/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManagerTest.java @@ -5,6 +5,11 @@ import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterIngressManag import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterNamespaceService; import net.geant.nmaas.externalservices.kubernetes.entities.IngressCertificateConfigOption; import net.geant.nmaas.externalservices.kubernetes.entities.IngressResourceConfigOption; +import net.geant.nmaas.externalservices.kubernetes.entities.KCluster; +import net.geant.nmaas.externalservices.kubernetes.entities.KClusterDeployment; +import net.geant.nmaas.externalservices.kubernetes.entities.KClusterIngress; +import net.geant.nmaas.externalservices.kubernetes.entities.KClusterState; +import net.geant.nmaas.externalservices.kubernetes.entities.NamespaceConfigOption; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KubernetesRepositoryManager; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.entities.KubernetesNmServiceInfo; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.entities.KubernetesTemplate; @@ -18,6 +23,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; +import java.time.OffsetDateTime; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -119,7 +125,8 @@ public class HelmKServiceManagerTest { eq("namespace"), eq("descriptiveDeploymentId"), k8sTemplateArg.capture(), - argumentsArg.capture(), null + argumentsArg.capture(), + eq(null) ); assertThat(argumentsArg.getValue()).isNotEmpty(); assertThat(argumentsArg.getValue().size()).isEqualTo(11); @@ -142,8 +149,9 @@ public class HelmKServiceManagerTest { verify(helmCommandExecutor, times(1)).executeHelmInstallCommand( eq("namespace"), eq("descriptiveDeploymentId"), - any(), - any(), null + any(KubernetesTemplate.class), + any(Map.class), + eq(null) ); } @@ -228,4 +236,63 @@ public class HelmKServiceManagerTest { ); } + @Test + void shouldDeployServiceWithKubeconfigPath() { + when(namespaceService.namespace("domain")).thenReturn("namespace"); + when(ingressManager.getResourceConfigOption()).thenReturn(IngressResourceConfigOption.DEPLOY_FROM_CHART); + when(ingressManager.getIngressPerDomain()).thenReturn(false); + when(ingressManager.getSupportedIngressClass()).thenReturn("testIngressClass"); + when(ingressManager.getTlsSupported()).thenReturn(true); + when(ingressManager.getIssuerOrWildcardName()).thenReturn("testIssuerName"); + when(ingressManager.getCertificateConfigOption()).thenReturn(IngressCertificateConfigOption.USE_LETSENCRYPT); + + + KClusterDeployment mockDeployment = KClusterDeployment.builder() + .namespaceConfigOption(NamespaceConfigOption.CREATE_NAMESPACE) + .defaultNamespace("default-namespace") + .defaultStorageClass("default-storage-class") + .smtpServerHostname("smtp.example.com") + .smtpServerPort(587) + .smtpServerUsername("user@example.com") + .smtpServerPassword("password") + .smtpFromDefaultDomain("example.com") + .forceDedicatedWorkers(true) + .build(); + + KClusterIngress mockIngress = KClusterIngress.builder().resourceConfigOption(IngressResourceConfigOption.NOT_USED).build(); + + + KCluster mockCluster = KCluster.builder() + .id(1L) + .name("TestCluster") + .codename("test-cluster") + .description("Mocked Kubernetes Cluster") + .creationDate(OffsetDateTime.now()) + .modificationDate(OffsetDateTime.now()) + .clusterConfigFile("mock-cluster-config") + .pathConfigFile("mock/path/to/kubeconfig") + .state(KClusterState.UNKNOWN) + .currentStateSince(OffsetDateTime.now()) + .contactEmail("test@example.com") + .deployment(mockDeployment) + .ingress(mockIngress) + .build(); + + KubernetesNmServiceInfo service = repositoryManager.loadService(deploymentId); + service.setRemoteCluster(mockCluster); + when(repositoryManager.loadService(deploymentId)).thenReturn(service); + + manager.deployService(deploymentId); + + ArgumentCaptor<String> kubeconfigPathArg = ArgumentCaptor.forClass(String.class); + verify(helmCommandExecutor, times(1)).executeHelmInstallCommand( + eq("namespace"), + eq("descriptiveDeploymentId"), + any(KubernetesTemplate.class), + any(Map.class), + kubeconfigPathArg.capture() + ); + assertThat(kubeconfigPathArg.getValue()).isEqualTo("mock/path/to/kubeconfig"); + } + }