diff --git a/gradle-plugin/kubernetes/pom.xml b/gradle-plugin/kubernetes/pom.xml index 022a011145..89cd2880df 100644 --- a/gradle-plugin/kubernetes/pom.xml +++ b/gradle-plugin/kubernetes/pom.xml @@ -167,6 +167,14 @@ + + io.fabric8 + mockwebserver + + + io.fabric8 + openshift-server-mock + org.junit.jupiter junit-jupiter-engine diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java index 5e59f97917..ffaa5c0f2f 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java @@ -29,7 +29,7 @@ import org.eclipse.jkube.kit.common.ResourceFileType; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; import org.eclipse.jkube.kit.common.util.ResourceClassifier; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.WatchMode; import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy; diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/AbstractJKubeTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/AbstractJKubeTask.java index 8012efff1f..4fb3612216 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/AbstractJKubeTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/AbstractJKubeTask.java @@ -33,8 +33,7 @@ import org.eclipse.jkube.kit.common.RegistryConfig; import org.eclipse.jkube.kit.common.util.LazyBuilder; import org.eclipse.jkube.kit.common.util.ResourceUtil; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.resource.ResourceServiceConfig; @@ -57,7 +56,7 @@ public abstract class AbstractJKubeTask extends DefaultTask implements Kubernete protected final KubernetesExtension kubernetesExtension; protected KitLogger kitLogger; - protected ClusterAccess clusterAccess; + protected ClusterConfiguration clusterConfiguration; protected JKubeServiceHub jKubeServiceHub; protected static final String DOCKER_BUILD_TIMESTAMP = "docker/build.timestamp"; protected List resolvedImages; @@ -80,7 +79,7 @@ public final void runTask() { protected void init() { kubernetesExtension.javaProject = GradleUtil.convertGradleProject(getProject()); kitLogger = createLogger(null); - clusterAccess = new ClusterAccess(initClusterConfiguration()); + clusterConfiguration = initClusterConfiguration(); jKubeServiceHub = initJKubeServiceHubBuilder().build(); kubernetesExtension.resources = updateResourceConfigNamespace(kubernetesExtension.getNamespaceOrNull(), kubernetesExtension.resources); resolvedImages = resolveImages(); @@ -142,8 +141,8 @@ protected JKubeServiceHub.JKubeServiceHubBuilder initJKubeServiceHubBuilder() { .registry(kubernetesExtension.getPushRegistryOrNull() != null ? kubernetesExtension.getPushRegistryOrNull() : kubernetesExtension.getRegistryOrDefault()) .build()) + .clusterConfiguration(clusterConfiguration) .build()) - .clusterAccess(clusterAccess) .offline(kubernetesExtension.getOfflineOrDefault()) .platformMode(kubernetesExtension.getRuntimeMode()) .resourceServiceConfig(initResourceServiceConfig()) @@ -176,7 +175,7 @@ protected GeneratorContext.GeneratorContextBuilder initGeneratorContextBuilder() .prePackagePhase(false) .useProjectClasspath(kubernetesExtension.getUseProjectClassPathOrDefault()) .sourceDirectory(kubernetesExtension.getBuildSourceDirectoryOrDefault()) - .openshiftNamespace(StringUtils.isNotBlank(kubernetesExtension.getNamespaceOrNull()) ? kubernetesExtension.getNamespaceOrNull() : clusterAccess.getNamespace()) + .openshiftNamespace(StringUtils.isNotBlank(kubernetesExtension.getNamespaceOrNull()) ? kubernetesExtension.getNamespaceOrNull() : clusterConfiguration.getNamespace()) .buildTimestamp(getBuildTimestamp(null, null, kubernetesExtension.javaProject.getBuildDirectory().getAbsolutePath(), DOCKER_BUILD_TIMESTAMP)) .filter(kubernetesExtension.getFilterOrNull()); diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTask.java index 1534f0c6d3..4f565a6c50 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTask.java @@ -92,6 +92,6 @@ protected void configureApplyService() { applyService.setRollingUpgradePreserveScale(kubernetesExtension.getRollingUpgradePreserveScaleOrDefault()); applyService.setRecreateMode(kubernetesExtension.getRecreateOrDefault()); applyService.setNamespace(kubernetesExtension.getNamespaceOrNull()); - applyService.setFallbackNamespace(resolveFallbackNamespace(kubernetesExtension.resources, clusterAccess)); + applyService.setFallbackNamespace(resolveFallbackNamespace(kubernetesExtension.resources, clusterConfiguration)); } } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTask.java index ca1eb42be7..efdd17f437 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTask.java @@ -60,7 +60,7 @@ public void run() { WatcherContext context = createWatcherContext(); WatcherManager.watch(resolvedImages, - applicableNamespace(null, kubernetesExtension.getNamespaceOrNull(), kubernetesExtension.resources, clusterAccess), + applicableNamespace(null, kubernetesExtension.getNamespaceOrNull(), kubernetesExtension.resources, clusterConfiguration), resources, context); } catch (KubernetesClientException kubernetesClientException) { diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTaskTest.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTaskTest.java index c260673c14..9db143c800 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTaskTest.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTaskTest.java @@ -13,13 +13,13 @@ */ package org.eclipse.jkube.gradle.plugin.task; -import java.net.URL; import java.util.Collections; -import io.fabric8.openshift.client.OpenShiftClient; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; import org.eclipse.jkube.gradle.plugin.KubernetesExtension; import org.eclipse.jkube.gradle.plugin.TestKubernetesExtension; -import org.eclipse.jkube.kit.config.access.ClusterAccess; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.service.ApplyService; import org.gradle.api.provider.Property; @@ -34,32 +34,26 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +@EnableKubernetesMockClient(crud = true) class KubernetesApplyTaskTest { @RegisterExtension public final TaskEnvironmentExtension taskEnvironment = new TaskEnvironmentExtension(); - private MockedConstruction clusterAccessMockedConstruction; private MockedConstruction applyServiceMockedConstruction; private TestKubernetesExtension extension; + private KubernetesClient kubernetesClient; @BeforeEach void setUp(){ - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class, (mock, ctx) -> { - // OpenShiftClient instance needed due to OpenShift checks performed in KubernetesApply - final OpenShiftClient kubernetesClient = mock(OpenShiftClient.class); - when(kubernetesClient.getMasterUrl()).thenReturn(new URL("http://kubernetes-cluster")); - when(kubernetesClient.adapt(OpenShiftClient.class)).thenReturn(kubernetesClient); - when(mock.createDefaultClient()).thenReturn(kubernetesClient); - }); applyServiceMockedConstruction = mockConstruction(ApplyService.class); extension = new TestKubernetesExtension(); + extension.access = ClusterConfiguration.from(kubernetesClient.getConfiguration()).build(); when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); extension.isFailOnNoKubernetesJson = false; } @@ -67,7 +61,6 @@ void setUp(){ @AfterEach void tearDown() { applyServiceMockedConstruction.close(); - clusterAccessMockedConstruction.close(); } @Test @@ -115,7 +108,7 @@ void configureApplyService_withManifest_shouldSetDefaults() throws Exception { verify(as, times(1)).setRollingUpgradePreserveScale(false); verify(as, times(1)).setRecreateMode(false); verify(as, times(1)).setNamespace(null); - verify(as, times(1)).setFallbackNamespace(null); + verify(as, times(1)).setFallbackNamespace(kubernetesClient.getNamespace()); } @Test diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTaskTest.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTaskTest.java index a54c2c7785..536433a50f 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTaskTest.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTaskTest.java @@ -14,17 +14,17 @@ package org.eclipse.jkube.gradle.plugin.task; import java.io.IOException; -import java.net.URL; import java.nio.file.Paths; import java.util.Collections; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; import org.eclipse.jkube.gradle.plugin.KubernetesExtension; import org.eclipse.jkube.gradle.plugin.TestKubernetesExtension; -import org.eclipse.jkube.kit.config.access.ClusterAccess; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.service.kubernetes.KubernetesUndeployService; -import io.fabric8.kubernetes.client.KubernetesClient; import org.gradle.api.provider.Property; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -34,37 +34,32 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +@EnableKubernetesMockClient(crud = true) class KubernetesUndeployTaskTest { @RegisterExtension private final TaskEnvironmentExtension taskEnvironment = new TaskEnvironmentExtension(); private MockedConstruction kubernetesUndeployServiceMockedConstruction; - private MockedConstruction clusterAccessMockedConstruction; private TestKubernetesExtension extension; + private KubernetesClient kubernetesClient; @BeforeEach void setUp() { - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class, (mock, ctx) -> { - final KubernetesClient kubernetesClient = mock(KubernetesClient.class); - when(mock.createDefaultClient()).thenReturn(kubernetesClient); - when(kubernetesClient.getMasterUrl()).thenReturn(new URL("http://kubernetes-cluster")); - }); kubernetesUndeployServiceMockedConstruction = mockConstruction(KubernetesUndeployService.class); extension = new TestKubernetesExtension(); + extension.access = ClusterConfiguration.from(kubernetesClient.getConfiguration()).build(); when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); } @AfterEach void tearDown() { kubernetesUndeployServiceMockedConstruction.close(); - clusterAccessMockedConstruction.close(); } @Test diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTaskTest.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTaskTest.java index c98045fcdc..2890d2dcd8 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTaskTest.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTaskTest.java @@ -14,13 +14,14 @@ package org.eclipse.jkube.gradle.plugin.task; import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; import org.assertj.core.api.AssertionsForClassTypes; import org.eclipse.jkube.gradle.plugin.KubernetesExtension; import org.eclipse.jkube.gradle.plugin.TestKubernetesExtension; import org.eclipse.jkube.kit.build.service.docker.DockerAccessFactory; import org.eclipse.jkube.kit.build.service.docker.access.DockerAccess; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.common.util.KubernetesHelper; -import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.service.kubernetes.DockerBuildService; import org.eclipse.jkube.watcher.api.WatcherManager; import org.junit.jupiter.api.AfterEach; @@ -30,18 +31,17 @@ import org.mockito.MockedConstruction; import org.mockito.MockedStatic; -import java.net.URL; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; +@EnableKubernetesMockClient(crud = true) class KubernetesWatchTaskTest { @RegisterExtension @@ -49,10 +49,10 @@ class KubernetesWatchTaskTest { private MockedConstruction dockerAccessFactoryMockedConstruction; private MockedConstruction dockerBuildServiceMockedConstruction; - private MockedConstruction clusterAccessMockedConstruction; private MockedStatic watcherManagerMockedStatic; private MockedStatic kubernetesHelperMockedStatic; private TestKubernetesExtension extension; + private KubernetesClient kubernetesClient; @BeforeEach void setUp() { @@ -62,14 +62,10 @@ void setUp() { dockerBuildServiceMockedConstruction = mockConstruction(DockerBuildService.class, (mock, ctx) -> { when(mock.isApplicable()).thenReturn(true); }); - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class, (mock, ctx) -> { - final KubernetesClient kubernetesClient = mock(KubernetesClient.class); - when(kubernetesClient.getMasterUrl()).thenReturn(new URL("http://kubernetes-cluster")); - when(mock.createDefaultClient()).thenReturn(kubernetesClient); - }); watcherManagerMockedStatic = mockStatic(WatcherManager.class); kubernetesHelperMockedStatic = mockStatic(KubernetesHelper.class); extension = new TestKubernetesExtension(); + extension.access = ClusterConfiguration.from(kubernetesClient.getConfiguration()).build(); when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); kubernetesHelperMockedStatic.when(KubernetesHelper::getDefaultNamespace).thenReturn(null); extension.isFailOnNoKubernetesJson = false; @@ -79,7 +75,6 @@ void setUp() { void tearDown() { watcherManagerMockedStatic.close(); kubernetesHelperMockedStatic.close(); - clusterAccessMockedConstruction.close(); dockerBuildServiceMockedConstruction.close(); dockerAccessFactoryMockedConstruction.close(); } @@ -107,6 +102,6 @@ void runTask_withManifest_shouldWatchEntities() throws Exception { // Then AssertionsForClassTypes.assertThat(watchTask.jKubeServiceHub.getBuildService()).isNotNull() .isInstanceOf(DockerBuildService.class); - watcherManagerMockedStatic.verify(() -> WatcherManager.watch(any(), isNull(), any(), any()), times(1)); + watcherManagerMockedStatic.verify(() -> WatcherManager.watch(any(), eq(kubernetesClient.getNamespace()), any(), any()), times(1)); } } diff --git a/gradle-plugin/openshift/pom.xml b/gradle-plugin/openshift/pom.xml index 793d0e14c6..d906d5fc38 100644 --- a/gradle-plugin/openshift/pom.xml +++ b/gradle-plugin/openshift/pom.xml @@ -64,6 +64,14 @@ + + io.fabric8 + mockwebserver + + + io.fabric8 + openshift-server-mock + org.junit.jupiter junit-jupiter-engine diff --git a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftApplyTaskTest.java b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftApplyTaskTest.java index a17f8ae758..14bba7000d 100644 --- a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftApplyTaskTest.java +++ b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftApplyTaskTest.java @@ -13,59 +13,63 @@ */ package org.eclipse.jkube.gradle.plugin.task; -import java.net.URL; import java.util.Collections; +import io.fabric8.kubernetes.api.model.APIGroupBuilder; +import io.fabric8.kubernetes.api.model.APIGroupListBuilder; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.openshift.client.OpenShiftClient; import org.eclipse.jkube.gradle.plugin.OpenShiftExtension; import org.eclipse.jkube.gradle.plugin.TestOpenShiftExtension; -import org.eclipse.jkube.kit.config.access.ClusterAccess; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.service.ApplyService; -import io.fabric8.openshift.client.OpenShiftClient; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.MockedConstruction; +import static java.net.HttpURLConnection.HTTP_OK; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +@EnableKubernetesMockClient(crud = true) class OpenShiftApplyTaskTest { @RegisterExtension public final TaskEnvironmentExtension taskEnvironment = new TaskEnvironmentExtension(); - private MockedConstruction clusterAccessMockedConstruction; private MockedConstruction applyServiceMockedConstruction; private TestOpenShiftExtension extension; + private KubernetesMockServer kubernetesMockServer; + private OpenShiftClient openShiftClient; @BeforeEach void setUp() { - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class, (mock, ctx) -> { - final OpenShiftClient openShiftClient = mock(OpenShiftClient.class); - when(mock.createDefaultClient()).thenReturn(openShiftClient); - when(openShiftClient.getMasterUrl()).thenReturn(new URL("http://openshiftapps-com-cluster:6443")); - when(openShiftClient.hasApiGroup("openshift.io", false)).thenReturn(true); - }); applyServiceMockedConstruction = mockConstruction(ApplyService.class); extension = new TestOpenShiftExtension(); - when(taskEnvironment.project.getExtensions().getByType(OpenShiftExtension.class)).thenReturn(extension); + extension.access = ClusterConfiguration.from(openShiftClient.getConfiguration()).build(); extension.isFailOnNoKubernetesJson = false; + kubernetesMockServer.expect().get().withPath("/apis") + .andReturn(HTTP_OK, new APIGroupListBuilder() + .addToGroups(new APIGroupBuilder().withName("test.openshift.io").build()) + .build()) + .always(); + when(taskEnvironment.project.getExtensions().getByType(OpenShiftExtension.class)).thenReturn(extension); } @AfterEach void tearDown() { applyServiceMockedConstruction.close(); - clusterAccessMockedConstruction.close(); } @Test @@ -113,7 +117,7 @@ void configureApplyService_withManifest_shouldSetDefaults() throws Exception { verify(as, times(1)).setRollingUpgradePreserveScale(false); verify(as, times(1)).setRecreateMode(false); verify(as, times(1)).setNamespace(null); - verify(as, times(1)).setFallbackNamespace(null); + verify(as, times(1)).setFallbackNamespace(openShiftClient.getNamespace()); } @Test diff --git a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftUndeployTaskTest.java b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftUndeployTaskTest.java index 9ef32c996d..c89fcd1bea 100644 --- a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftUndeployTaskTest.java +++ b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftUndeployTaskTest.java @@ -17,13 +17,17 @@ import java.nio.file.Paths; import java.util.Collections; +import io.fabric8.kubernetes.api.model.APIGroupBuilder; +import io.fabric8.kubernetes.api.model.APIGroupListBuilder; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.openshift.client.OpenShiftClient; import org.eclipse.jkube.gradle.plugin.OpenShiftExtension; import org.eclipse.jkube.gradle.plugin.TestOpenShiftExtension; -import org.eclipse.jkube.kit.config.access.ClusterAccess; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.service.openshift.OpenshiftUndeployService; -import io.fabric8.openshift.client.OpenShiftClient; import org.gradle.api.provider.Property; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -31,32 +35,35 @@ import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.MockedConstruction; +import static java.net.HttpURLConnection.HTTP_OK; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +@EnableKubernetesMockClient(crud = true) class OpenShiftUndeployTaskTest { @RegisterExtension public final TaskEnvironmentExtension taskEnvironment = new TaskEnvironmentExtension(); private MockedConstruction openshiftUndeployServiceMockedConstruction; - private MockedConstruction clusterAccessMockedConstruction; private TestOpenShiftExtension extension; + private KubernetesMockServer kubernetesMockServer; + private OpenShiftClient openShiftClient; @BeforeEach void setUp() { - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class, (mock, ctx) -> { - final OpenShiftClient openShiftClient = mock(OpenShiftClient.class); - when(mock.createDefaultClient()).thenReturn(openShiftClient); - when(openShiftClient.hasApiGroup("openshift.io", false)).thenReturn(true); - }); openshiftUndeployServiceMockedConstruction = mockConstruction(OpenshiftUndeployService.class); extension = new TestOpenShiftExtension(); + extension.access = ClusterConfiguration.from(openShiftClient.getConfiguration()).build(); + kubernetesMockServer.expect().get().withPath("/apis") + .andReturn(HTTP_OK, new APIGroupListBuilder() + .addToGroups(new APIGroupBuilder().withName("test.openshift.io").build()) + .build()) + .always(); when(taskEnvironment.project.getExtensions().getByType(OpenShiftExtension.class)).thenReturn(extension); when(taskEnvironment.project.getName()).thenReturn("test-project"); } @@ -64,7 +71,6 @@ void setUp() { @AfterEach void tearDown() { openshiftUndeployServiceMockedConstruction.close(); - clusterAccessMockedConstruction.close(); } @Test diff --git a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftWatchTaskTest.java b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftWatchTaskTest.java index df04e1377f..6a6e741b85 100644 --- a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftWatchTaskTest.java +++ b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/task/OpenShiftWatchTaskTest.java @@ -13,52 +13,54 @@ */ package org.eclipse.jkube.gradle.plugin.task; +import io.fabric8.kubernetes.api.model.APIGroupBuilder; +import io.fabric8.kubernetes.api.model.APIGroupListBuilder; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; import io.fabric8.openshift.client.OpenShiftClient; import org.eclipse.jkube.gradle.plugin.OpenShiftExtension; import org.eclipse.jkube.gradle.plugin.TestOpenShiftExtension; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.common.util.KubernetesHelper; -import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.watcher.api.WatcherManager; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -import org.mockito.MockedConstruction; import org.mockito.MockedStatic; -import java.net.URL; - +import static java.net.HttpURLConnection.HTTP_OK; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.isNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.mockConstruction; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; +@EnableKubernetesMockClient(crud = true) class OpenShiftWatchTaskTest { @RegisterExtension private final TaskEnvironmentExtension taskEnvironment = new TaskEnvironmentExtension(); - private MockedConstruction clusterAccessMockedConstruction; private MockedStatic watcherManagerMockedStatic; private MockedStatic kubernetesHelperMockedStatic; private TestOpenShiftExtension extension; + private KubernetesMockServer kubernetesMockServer; + private OpenShiftClient openShiftClient; @BeforeEach void setUp() { - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class, (mock, ctx) -> { - final OpenShiftClient openShiftClient = mock(OpenShiftClient.class); - when(openShiftClient.getMasterUrl()).thenReturn(new URL("http://openshiftapps.com:6443")); - when(openShiftClient.adapt(OpenShiftClient.class)).thenReturn(openShiftClient); - when(mock.createDefaultClient()).thenReturn(openShiftClient); - }); watcherManagerMockedStatic = mockStatic(WatcherManager.class); kubernetesHelperMockedStatic = mockStatic(KubernetesHelper.class); extension = new TestOpenShiftExtension(); + extension.access = ClusterConfiguration.from(openShiftClient.getConfiguration()).build(); when(taskEnvironment.project.getExtensions().getByType(OpenShiftExtension.class)).thenReturn(extension); + kubernetesMockServer.expect().get().withPath("/apis") + .andReturn(HTTP_OK, new APIGroupListBuilder() + .addToGroups(new APIGroupBuilder().withName("test.openshift.io").build()) + .build()) + .always(); kubernetesHelperMockedStatic.when(KubernetesHelper::getDefaultNamespace).thenReturn(null); extension.isFailOnNoKubernetesJson = false; } @@ -66,7 +68,6 @@ void setUp() { @AfterEach void tearDown() { watcherManagerMockedStatic.close(); - clusterAccessMockedConstruction.close(); kubernetesHelperMockedStatic.close(); } @@ -89,6 +90,6 @@ void runTask_withManifest_shouldWatchEntities() throws Exception { // When watchTask.runTask(); // Then - watcherManagerMockedStatic.verify(() -> WatcherManager.watch(any(), isNull(), any(), any()), times(1)); + watcherManagerMockedStatic.verify(() -> WatcherManager.watch(any(), eq(openShiftClient.getNamespace()), any(), any()), times(1)); } } diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeConfiguration.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeConfiguration.java index 975d3ae50d..3d3c11f7f4 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeConfiguration.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeConfiguration.java @@ -24,6 +24,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; /** * @author roland @@ -38,6 +39,7 @@ public class JKubeConfiguration implements Serializable { private static final long serialVersionUID = 7459084747241070651L; private JavaProject project; + private ClusterConfiguration clusterConfiguration; private String sourceDirectory; private String outputDirectory; private Map buildArgs; diff --git a/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/access/ClusterConfiguration.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/access/ClusterConfiguration.java similarity index 90% rename from jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/access/ClusterConfiguration.java rename to jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/access/ClusterConfiguration.java index d6df655a1b..48282a3e5c 100644 --- a/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/access/ClusterConfiguration.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/access/ClusterConfiguration.java @@ -11,10 +11,14 @@ * Contributors: * Red Hat, Inc. - initial API and implementation */ -package org.eclipse.jkube.kit.config.access; +package org.eclipse.jkube.kit.common.access; +import io.fabric8.kubernetes.api.model.NamedContext; +import io.fabric8.kubernetes.api.model.NamedContextBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.ConfigBuilder; + +import java.io.Serializable; import java.lang.reflect.Field; import java.util.Map; import java.util.Optional; @@ -32,9 +36,10 @@ @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode -public class ClusterConfiguration { +public class ClusterConfiguration implements Serializable { private static final String PROPERTY_PREFIX = "jkube."; + private static final long serialVersionUID = 8756257530678486528L; private String username; private String password; @@ -49,6 +54,7 @@ public class ClusterConfiguration { private String clientKeyData; private String clientKeyAlgo; private String clientKeyPassphrase; + private String currentContext; private String trustStoreFile; private String trustStorePassphrase; private String keyStoreFile; @@ -134,6 +140,12 @@ public Config getConfig() { configBuilder.withTrustCerts(this.trustCerts); } + if (StringUtils.isNotBlank(this.currentContext)) { + configBuilder.withCurrentContext(new NamedContextBuilder() + .withName(this.currentContext) + .build()); + } + return configBuilder.build(); } @@ -153,6 +165,7 @@ public static ClusterConfigurationBuilder from(Config kubernetesConfig) { .clientKeyData(kubernetesConfig.getClientKeyData()) .clientKeyAlgo(kubernetesConfig.getClientKeyAlgo()) .clientKeyPassphrase(kubernetesConfig.getClientKeyPassphrase()) + .currentContext(Optional.ofNullable(kubernetesConfig.getCurrentContext()).map(NamedContext::getName).orElse(null)) .trustStoreFile(kubernetesConfig.getTrustStoreFile()) .trustStorePassphrase(kubernetesConfig.getTrustStorePassphrase()) .keyStoreFile(kubernetesConfig.getKeyStoreFile()) diff --git a/jkube-kit/config/resource/src/test/java/org/eclipse/jkube/kit/config/access/ClusterConfigurationTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/access/ClusterConfigurationTest.java similarity index 92% rename from jkube-kit/config/resource/src/test/java/org/eclipse/jkube/kit/config/access/ClusterConfigurationTest.java rename to jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/access/ClusterConfigurationTest.java index 1a461cec47..c6e68368c0 100644 --- a/jkube-kit/config/resource/src/test/java/org/eclipse/jkube/kit/config/access/ClusterConfigurationTest.java +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/access/ClusterConfigurationTest.java @@ -11,8 +11,9 @@ * Contributors: * Red Hat, Inc. - initial API and implementation */ -package org.eclipse.jkube.kit.config.access; +package org.eclipse.jkube.kit.common.access; +import io.fabric8.kubernetes.api.model.NamedContextBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.ConfigBuilder; import org.junit.jupiter.api.Test; @@ -31,6 +32,7 @@ void should_load_configuration_from_properties() { properties.put("jkube.password", "the pa$$w*rd"); properties.put("jkube.masterUrl", "https://example.com"); properties.put("jkube.corner-case", "corner"); + properties.put("jkube.currentContext", "ctx1"); properties.put("manufactur8.jkube.corner-case", "cased"); // When final Config config = ClusterConfiguration.from(properties).build().getConfig(); @@ -38,6 +40,7 @@ void should_load_configuration_from_properties() { assertThat(config).isNotNull() .hasFieldOrPropertyWithValue("username", "user name") .hasFieldOrPropertyWithValue("password", "the pa$$w*rd") + .hasFieldOrPropertyWithValue("currentContext", new NamedContextBuilder().withName("ctx1").build()) .hasFieldOrPropertyWithValue("masterUrl", "https://example.com/"); } @@ -104,6 +107,7 @@ void loadsConfigurationFromKubernetesConfig() { .withClientKeyData("clientKeyData") .withClientKeyAlgo("clientKeyAlgo") .withClientKeyPassphrase("clientKeyPassphrase") + .withCurrentContext(new NamedContextBuilder().withName("ctx1").build()) .withTrustStoreFile("trustStoreFile") .withTrustStorePassphrase("trustStorePassphrase") .withKeyStoreFile("keyStoreFile") @@ -126,6 +130,7 @@ void loadsConfigurationFromKubernetesConfig() { .hasFieldOrPropertyWithValue("clientKeyData", "clientKeyData") .hasFieldOrPropertyWithValue("clientKeyAlgo", "clientKeyAlgo") .hasFieldOrPropertyWithValue("clientKeyPassphrase", "clientKeyPassphrase") + .hasFieldOrPropertyWithValue("currentContext", new NamedContextBuilder().withName("ctx1").build()) .hasFieldOrPropertyWithValue("trustStoreFile", "trustStoreFile") .hasFieldOrPropertyWithValue("trustStorePassphrase", "trustStorePassphrase") .hasFieldOrPropertyWithValue("keyStoreFile", "keyStoreFile") diff --git a/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/access/ClusterAccess.java b/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/access/ClusterAccess.java deleted file mode 100644 index 4e5589140d..0000000000 --- a/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/access/ClusterAccess.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2019 Red Hat, Inc. - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at: - * - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.jkube.kit.config.access; - - -import io.fabric8.kubernetes.client.Config; -import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.KubernetesClientBuilder; - -/** - * @author roland - */ -public class ClusterAccess { - - private final ClusterConfiguration clusterConfiguration; - - public ClusterAccess(ClusterConfiguration clusterConfiguration) { - this.clusterConfiguration = clusterConfiguration == null ? - ClusterConfiguration.builder().build() : clusterConfiguration; - } - - public KubernetesClient createDefaultClient() { - return new KubernetesClientBuilder().withConfig(createDefaultConfig()).build(); - } - - private Config createDefaultConfig() { - return this.clusterConfiguration.getConfig(); - } - - public String getNamespace() { - return this.clusterConfiguration.getNamespace(); - } - -} - diff --git a/jkube-kit/config/resource/src/test/java/org/eclipse/jkube/kit/config/access/ClusterAccessTest.java b/jkube-kit/config/resource/src/test/java/org/eclipse/jkube/kit/config/access/ClusterAccessTest.java deleted file mode 100644 index 998dc4b022..0000000000 --- a/jkube-kit/config/resource/src/test/java/org/eclipse/jkube/kit/config/access/ClusterAccessTest.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2019 Red Hat, Inc. - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at: - * - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.jkube.kit.config.access; - -import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; -import io.fabric8.openshift.client.OpenShiftClient; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -@EnableKubernetesMockClient(https = false) -class ClusterAccessTest { - private KubernetesMockServer mockServer; - private ClusterConfiguration clusterConfiguration; - - @BeforeEach - void setUp() { - clusterConfiguration = ClusterConfiguration.builder() - .masterUrl(mockServer.url("/")) - .build(); - } - - @Test - void createDefaultClientShouldReturnKubernetesClient() { - // When - final KubernetesClient result = new ClusterAccess(clusterConfiguration).createDefaultClient(); - // Then - assertThat(result).isNotNull().isNotInstanceOf(OpenShiftClient.class); - } -} diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/JKubeServiceHub.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/JKubeServiceHub.java index 104fccd275..56fc80771e 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/JKubeServiceHub.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/JKubeServiceHub.java @@ -18,6 +18,7 @@ import java.util.Optional; import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.KubernetesClientBuilder; import lombok.Builder; import lombok.Getter; import lombok.Setter; @@ -26,8 +27,6 @@ import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.util.LazyBuilder; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.config.resource.ResourceService; import org.eclipse.jkube.kit.config.resource.ResourceServiceConfig; @@ -51,7 +50,6 @@ public class JKubeServiceHub implements Closeable { private final BuildServiceConfig buildServiceConfig; @Getter private final ResourceServiceConfig resourceServiceConfig; - private final ClusterAccess clusterAccess; @Getter @Setter private RuntimeMode platformMode; @@ -64,18 +62,16 @@ public class JKubeServiceHub implements Closeable { private LazyBuilder migrateService; private LazyBuilder debugService; private LazyBuilder helmService; - private LazyBuilder clusterAccessLazyBuilder; private LazyBuilder kubernetesClientLazyBuilder; private final boolean offline; @Builder(toBuilder = true) public JKubeServiceHub( - ClusterAccess clusterAccess, RuntimeMode platformMode, KitLogger log, + RuntimeMode platformMode, KitLogger log, DockerServiceHub dockerServiceHub, JKubeConfiguration configuration, BuildServiceConfig buildServiceConfig, ResourceServiceConfig resourceServiceConfig, LazyBuilder resourceService, boolean offline) { - this.clusterAccess = clusterAccess; this.platformMode = platformMode; this.log = log; this.dockerServiceHub = dockerServiceHub; @@ -103,8 +99,7 @@ private void init() { } private void initLazyBuilders() { - clusterAccessLazyBuilder = new LazyBuilder<>(JKubeServiceHub::initClusterAccessIfNecessary); - kubernetesClientLazyBuilder = new LazyBuilder<>(hub -> getClusterAccess().createDefaultClient()); + kubernetesClientLazyBuilder = new LazyBuilder<>(hub -> initKubernetesClientIfNecessary()); buildServiceManager = new LazyBuilder<>(BuildServiceManager::new); pluginManager = new LazyBuilder<>(PluginManager::new); applyService = new LazyBuilder<>(ApplyService::new); @@ -125,15 +120,11 @@ private void initLazyBuilders() { helmService = new LazyBuilder<>(hub -> new HelmService(hub.getConfiguration(), hub.getResourceServiceConfig(), log)); } - private ClusterAccess initClusterAccessIfNecessary() { + private KubernetesClient initKubernetesClientIfNecessary() { if (offline) { throw new IllegalArgumentException("Connection to Cluster required. Please check if offline mode is set to false"); } - if (clusterAccess != null) { - return clusterAccess; - } - return new ClusterAccess(ClusterConfiguration.from( - System.getProperties(), configuration.getProject().getProperties()).build()); + return new KubernetesClientBuilder().withConfig(configuration.getClusterConfiguration().getConfig()).build(); } public RuntimeMode getRuntimeMode() { @@ -180,8 +171,4 @@ public KubernetesClient getClient() { return kubernetesClientLazyBuilder.get(this); } - public ClusterAccess getClusterAccess() { - return clusterAccessLazyBuilder.get(this); - } - } diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesClientUtil.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesClientUtil.java index 9ba9356af2..b778fa8fd5 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesClientUtil.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesClientUtil.java @@ -26,9 +26,9 @@ import io.fabric8.kubernetes.client.dsl.Resource; import io.fabric8.kubernetes.client.dsl.ScalableResource; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; -import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.image.ImageName; import io.fabric8.kubernetes.api.model.DeletionPropagation; @@ -171,8 +171,8 @@ public static void doDeleteAndWait(KubernetesClient kubernetesClient, GenericKub crClient.waitUntilCondition(Objects::isNull, seconds, TimeUnit.SECONDS); } - public static String applicableNamespace(HasMetadata resource, String namespace, ResourceConfig resourceConfig, ClusterAccess clusterAccess) { - return applicableNamespace(resource, namespace, resolveFallbackNamespace(resourceConfig, clusterAccess)); + public static String applicableNamespace(HasMetadata resource, String namespace, ResourceConfig resourceConfig, ClusterConfiguration clusterConfiguration) { + return applicableNamespace(resource, namespace, resolveFallbackNamespace(resourceConfig, clusterConfiguration)); } public static String applicableNamespace(HasMetadata resource, String namespace, String fallbackNamespace) { @@ -185,11 +185,11 @@ public static String applicableNamespace(HasMetadata resource, String namespace, return StringUtils.isNotBlank(fallbackNamespace) ? fallbackNamespace : KubernetesHelper.getDefaultNamespace(); } - public static String resolveFallbackNamespace(ResourceConfig resourceConfig, ClusterAccess clusterAccess) { + public static String resolveFallbackNamespace(ResourceConfig resourceConfig, ClusterConfiguration clusterConfiguration) { return Optional.ofNullable(resourceConfig) .map(ResourceConfig::getNamespace) - .orElse(Optional.ofNullable(clusterAccess) - .map(ClusterAccess::getNamespace) + .orElse(Optional.ofNullable(clusterConfiguration) + .map(ClusterConfiguration::getNamespace) .orElse(null)); } diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployService.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployService.java index bb2d1f1e1c..6933eb70da 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployService.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployService.java @@ -51,7 +51,7 @@ public KubernetesUndeployService(JKubeServiceHub jKubeServiceHub, KitLogger logg @Override public void undeploy(List resourceDirs, ResourceConfig resourceConfig, File... manifestFiles) throws IOException { - final String fallbackNamespace = KubernetesClientUtil.resolveFallbackNamespace(resourceConfig, jKubeServiceHub.getClusterAccess()); + final String fallbackNamespace = KubernetesClientUtil.resolveFallbackNamespace(resourceConfig, jKubeServiceHub.getConfiguration().getClusterConfiguration()); final List manifests = Stream.of(manifestFiles) .filter(Objects::nonNull).filter(File::exists).filter(File::isFile) .collect(Collectors.toList()); diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildService.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildService.java index 249a5a2681..ddc5b9e8a6 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildService.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildService.java @@ -251,7 +251,7 @@ private void initClient() { if (buildServiceConfig.getResourceConfig() != null && buildServiceConfig.getResourceConfig().getNamespace() != null) { applicableOpenShiftNamespace = buildServiceConfig.getResourceConfig().getNamespace(); } else { - applicableOpenShiftNamespace = jKubeServiceHub.getClusterAccess().getNamespace(); + applicableOpenShiftNamespace = jKubeServiceHub.getConfiguration().getClusterConfiguration().getNamespace(); } } diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceCrudTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceCrudTest.java index 6ecf43f722..b318232121 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceCrudTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceCrudTest.java @@ -41,8 +41,7 @@ import io.fabric8.openshift.client.OpenShiftClient; import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.common.KitLogger; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.resource.RuntimeMode; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -63,7 +62,6 @@ @EnableKubernetesMockClient(crud = true) class ApplyServiceCrudTest { - KubernetesMockServer kubernetesMockServer; KubernetesClient kubernetesClient; private KitLogger log; @@ -76,9 +74,10 @@ void setUp() { apiGroupList = new APIGroupList(); final JKubeServiceHub serviceHub = JKubeServiceHub.builder() .log(log) - .configuration(JKubeConfiguration.builder().build()) + .configuration(JKubeConfiguration.builder() + .clusterConfiguration(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build()) + .build()) .platformMode(RuntimeMode.KUBERNETES) - .clusterAccess(new ClusterAccess(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build())) .build(); applyService = serviceHub.getApplyService(); applyService.setNamespace("default"); diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceTest.java index 77ac9c1a13..d80c79eb5d 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceTest.java @@ -42,8 +42,7 @@ import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.util.Serialization; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.resource.RuntimeMode; import org.eclipse.jkube.kit.config.service.openshift.WebServerEventCollector; @@ -72,7 +71,6 @@ @EnableKubernetesMockClient class ApplyServiceTest { - KubernetesMockServer mockServer; OpenShiftClient client; @@ -82,9 +80,10 @@ class ApplyServiceTest { void setUp() { final JKubeServiceHub serviceHub = JKubeServiceHub.builder() .log(new KitLogger.SilentLogger()) - .configuration(JKubeConfiguration.builder().build()) + .configuration(JKubeConfiguration.builder() + .clusterConfiguration(ClusterConfiguration.from(client.getConfiguration()).build()) + .build()) .platformMode(RuntimeMode.KUBERNETES) - .clusterAccess(new ClusterAccess(ClusterConfiguration.from(client.getConfiguration()).build())) .build(); applyService = serviceHub.getApplyService(); applyService.setNamespace("default"); diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/DebugServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/DebugServiceTest.java index c53e26b6c8..a269ffca3f 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/DebugServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/DebugServiceTest.java @@ -49,8 +49,7 @@ import org.eclipse.jkube.kit.common.JKubeException; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.util.Serialization; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy; import org.eclipse.jkube.kit.config.resource.RuntimeMode; import org.junit.jupiter.api.AfterEach; @@ -94,9 +93,10 @@ void setUp() { logger = spy(new KitLogger.SilentLogger()); final JKubeServiceHub serviceHub = JKubeServiceHub.builder() .log(logger) - .configuration(JKubeConfiguration.builder().build()) + .configuration(JKubeConfiguration.builder() + .clusterConfiguration(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build()) + .build()) .platformMode(RuntimeMode.KUBERNETES) - .clusterAccess(new ClusterAccess(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build())) .build(); debugContext = DebugContext.builder() .namespace("namespace") diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/JKubeServiceHubTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/JKubeServiceHubTest.java index b1f065524c..4183d36b06 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/JKubeServiceHubTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/JKubeServiceHubTest.java @@ -13,12 +13,21 @@ */ package org.eclipse.jkube.kit.config.service; +import io.fabric8.kubernetes.api.model.APIGroupBuilder; +import io.fabric8.kubernetes.api.model.APIGroupListBuilder; +import io.fabric8.kubernetes.client.Client; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.http.HttpClient; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import org.assertj.core.api.InstanceOfAssertFactories; import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub; import org.eclipse.jkube.kit.common.JKubeConfiguration; +import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.common.service.MigrateService; import org.eclipse.jkube.kit.common.util.LazyBuilder; -import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy; import org.eclipse.jkube.kit.config.resource.ResourceService; import org.eclipse.jkube.kit.config.resource.RuntimeMode; @@ -32,35 +41,39 @@ import org.eclipse.jkube.kit.resource.helm.HelmService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.MockedConstruction; +import org.junit.jupiter.api.io.TempDir; +import java.nio.file.Path; + +import static java.net.HttpURLConnection.HTTP_OK; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.assertj.core.api.Assertions.assertThatNullPointerException; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.eclipse.jkube.kit.config.resource.RuntimeMode.KUBERNETES; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.mockConstruction; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @SuppressWarnings({"unused"}) +@EnableKubernetesMockClient(crud = true) class JKubeServiceHubTest { + @TempDir + Path temporaryFolder; private JKubeServiceHub.JKubeServiceHubBuilder jKubeServiceHubBuilder; - private OpenShiftClient openShiftClient; + KubernetesMockServer kubernetesMockServer; + OpenShiftClient openShiftClient; @BeforeEach void setUp() { - final ClusterAccess clusterAccess = mock(ClusterAccess.class, RETURNS_DEEP_STUBS); - openShiftClient = mock(OpenShiftClient.class); - when(clusterAccess.createDefaultClient()).thenReturn(openShiftClient); - when(openShiftClient.adapt(OpenShiftClient.class)).thenReturn(openShiftClient); jKubeServiceHubBuilder = JKubeServiceHub.builder() .platformMode(KUBERNETES) - .configuration(mock(JKubeConfiguration.class, RETURNS_DEEP_STUBS)) - .clusterAccess(clusterAccess) + .configuration(JKubeConfiguration.builder() + .clusterConfiguration(ClusterConfiguration.from(openShiftClient.getConfiguration()).build()) + .project(JavaProject.builder() + .baseDirectory(temporaryFolder.toFile()) + .build()) + .build()) .log(new KitLogger.SilentLogger()) .dockerServiceHub(mock(DockerServiceHub.class, RETURNS_DEEP_STUBS)) .offline(false) @@ -170,7 +183,7 @@ void getUndeployServiceInOpenShiftWithInvalidClient() { // Given jKubeServiceHubBuilder.platformMode(RuntimeMode.OPENSHIFT); try (JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build()) { - when(openShiftClient.isSupported()).thenReturn(true); + kubernetesMockServer.setUnsupported("openshift.io"); // When final UndeployService result = jKubeServiceHub.getUndeployService(); // Then @@ -185,7 +198,9 @@ void getUndeployServiceInOpenShiftWithValidClient() { // Given jKubeServiceHubBuilder.platformMode(RuntimeMode.OPENSHIFT); try (JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build()) { - when(openShiftClient.hasApiGroup("openshift.io", false)).thenReturn(true); + kubernetesMockServer.expect().get().withPath("/apis") + .andReturn(HTTP_OK, new APIGroupListBuilder().addToGroups(new APIGroupBuilder().withName("apps.openshift.io").build()).build()) + .once(); // When final UndeployService result = jKubeServiceHub.getUndeployService(); // Then @@ -247,33 +262,6 @@ void getResourceService() { } } - @Test - void clusterAccessIsNotInitializedIfProvided() { - // Given - try (final JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build(); - MockedConstruction clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class)) { - assertThat(clusterAccessMockedConstruction.constructed()).asList().isEmpty(); - // When - jKubeServiceHub.getClusterAccess(); - // Then - assertThat(clusterAccessMockedConstruction.constructed()).asList().isEmpty(); - } - } - - @Test - void clusterAccessIsInitializedLazily() { - // Given - jKubeServiceHubBuilder.clusterAccess(null); - try (final JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build(); - MockedConstruction clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class)) { - assertThat(clusterAccessMockedConstruction.constructed()).asList().isEmpty(); - // When - jKubeServiceHub.getClusterAccess(); - // Then - assertThat(clusterAccessMockedConstruction.constructed()).asList().hasSize(1); - } - } - @Test void getClientWithOfflineConnectionIsNotAllowed() { // Given @@ -300,10 +288,16 @@ void getApplyServiceWithOfflineThrowsException() { @Test void closeClosesInitializedClient() { + KubernetesClient kubernetesClient; try (final JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build()) { - jKubeServiceHub.getClient(); + kubernetesClient = jKubeServiceHub.getClient(); } // Then - verify(openShiftClient, times(1)).close(); + assertThat(kubernetesClient) + .isNotNull() + .extracting(Client::getHttpClient) + .extracting(HttpClient::isClosed) + .asInstanceOf(InstanceOfAssertFactories.BOOLEAN) + .isTrue(); } } diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesClientUtilTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesClientUtilTest.java index 14f7406778..e8c04f9c0f 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesClientUtilTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesClientUtilTest.java @@ -22,15 +22,13 @@ import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; import io.fabric8.kubernetes.client.Watcher; -import org.eclipse.jkube.kit.config.access.ClusterAccess; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil.doDeleteAndWait; -import static org.mockito.Mockito.RETURNS_DEEP_STUBS; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; + @SuppressWarnings("unused") @EnableKubernetesMockClient(crud = true) class KubernetesClientUtilTest { @@ -91,16 +89,13 @@ void applicableNamespace_whenNamespaceInResourceMetadata_shouldReturnProvidedNam } @Test - void applicableNamespace_whenNamespaceProvidedViaClusterAccess_shouldReturnProvidedNamespace() { - // Given - ClusterAccess mockedClusterAccess = mock(ClusterAccess.class, RETURNS_DEEP_STUBS); - when(mockedClusterAccess.getNamespace()).thenReturn("ns1"); - + void applicableNamespace_whenNamespaceProvidedViaKubernetesClient_shouldReturnProvidedNamespace() { // When - String resolvedNamespace = KubernetesClientUtil.applicableNamespace(null, null, null, mockedClusterAccess); + String resolvedNamespace = KubernetesClientUtil.applicableNamespace(null, null, null, + ClusterConfiguration.from(kubernetesClient.getConfiguration()).build()); // Then - assertThat(resolvedNamespace).isEqualTo("ns1"); + assertThat(resolvedNamespace).isEqualTo(kubernetesClient.getNamespace()); } @Test @@ -128,17 +123,15 @@ void resolveFallbackNamespace_whenNamespaceProvidedViaResourceConfiguration_shou } @Test - void resolveFallbackNamespace_whenNamespaceProvidedViaClusterAccess_shouldReturnProvidedNamespace() { - // Given - ClusterAccess mockedClusterAccess = mock(ClusterAccess.class, RETURNS_DEEP_STUBS); - when(mockedClusterAccess.getNamespace()).thenReturn("ns1"); - + void resolveFallbackNamespace_whenNamespaceProvidedViaKubernetesClient_shouldReturnProvidedNamespace() { // When - String resolvedNamespace = KubernetesClientUtil.resolveFallbackNamespace(null, mockedClusterAccess); + String resolvedNamespace = KubernetesClientUtil + .resolveFallbackNamespace(null, ClusterConfiguration.from(kubernetesClient.getConfiguration()).build()); // Then - assertThat(resolvedNamespace).isEqualTo("ns1"); + assertThat(resolvedNamespace).isEqualTo(kubernetesClient.getNamespace()); } + @Test void getPodStatusMessagePostfix_whenActionIsDeleted_shouldReturnPodDeletedMessage() { // Given diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployServiceTest.java index 3b4b856e2c..e3d36ba448 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployServiceTest.java @@ -34,8 +34,7 @@ import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.util.Serialization; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.resource.RuntimeMode; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; @@ -72,8 +71,9 @@ void setUp() { final JKubeServiceHub jKubeServiceHub = JKubeServiceHub.builder() .log(logger) .platformMode(RuntimeMode.KUBERNETES) - .configuration(JKubeConfiguration.builder().build()) - .clusterAccess(new ClusterAccess(ClusterConfiguration.from(kubernetesClient.getConfiguration()).namespace("test").build())) + .configuration(JKubeConfiguration.builder() + .clusterConfiguration(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build()) + .build()) .build(); kubernetesUndeployService = new KubernetesUndeployService(jKubeServiceHub, logger); } diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceTest.java index 349fc663e4..89a614e7c5 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceTest.java @@ -60,7 +60,6 @@ void setUp() { jKubeServiceHub = mock(JKubeServiceHub.class, RETURNS_DEEP_STUBS); final OpenShiftClient oc = mock(OpenShiftClient.class); when(jKubeServiceHub.getClient()).thenReturn(oc); - when(jKubeServiceHub.getClusterAccess().createDefaultClient()).thenReturn(oc); when(jKubeServiceHub.getConfiguration()).thenReturn(JKubeConfiguration.builder() .project(JavaProject.builder() .buildFinalName("test-project") diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildServiceIntegrationTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildServiceIntegrationTest.java index def6bfb197..a7ab792aba 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildServiceIntegrationTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildServiceIntegrationTest.java @@ -37,6 +37,7 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.RegistryConfig; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.common.archive.ArchiveCompression; import org.eclipse.jkube.kit.common.util.Serialization; import org.eclipse.jkube.kit.config.image.ImageConfiguration; @@ -136,6 +137,7 @@ void init(@TempDir Path temporaryFolder) throws Exception { .buildDirectory(target) .build()) .pullRegistryConfig(RegistryConfig.builder().build()) + .clusterConfiguration(ClusterConfiguration.from(client.getConfiguration()).build()) .build()); image = ImageConfiguration.builder() diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftUndeployServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftUndeployServiceTest.java index 96b3cebd0e..66ecb21d17 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftUndeployServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftUndeployServiceTest.java @@ -28,8 +28,7 @@ import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.util.Serialization; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.resource.RuntimeMode; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; @@ -73,8 +72,9 @@ void setUp() { final JKubeServiceHub jKubeServiceHub = JKubeServiceHub.builder() .log(logger) .platformMode(RuntimeMode.KUBERNETES) - .configuration(JKubeConfiguration.builder().build()) - .clusterAccess(new ClusterAccess(ClusterConfiguration.from(openShiftClient.getConfiguration()).namespace("test").build())) + .configuration(JKubeConfiguration.builder() + .clusterConfiguration(ClusterConfiguration.from(openShiftClient.getConfiguration()).build()) + .build()) .build(); resourceConfig = ResourceConfig.builder().namespace("test").build(); openshiftUndeployService = new OpenshiftUndeployService(jKubeServiceHub, logger); diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginManagerTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginManagerTest.java index ca3f5cf7c7..c3968e2bff 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginManagerTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginManagerTest.java @@ -35,7 +35,7 @@ class PluginManagerTest { @BeforeEach void setUp() { - jKubeServiceHub = new JKubeServiceHub(null, RuntimeMode.KUBERNETES, new KitLogger.StdoutLogger(), + jKubeServiceHub = new JKubeServiceHub(RuntimeMode.KUBERNETES, new KitLogger.StdoutLogger(), null, new JKubeConfiguration(), new BuildServiceConfig(), new ResourceServiceConfig(), new LazyBuilder<>(hub -> null), true); } diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginServiceTest.java index 0bc99bcfb4..095ba1223d 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginServiceTest.java @@ -13,7 +13,6 @@ */ package org.eclipse.jkube.kit.config.service.plugins; - import org.apache.commons.io.FileUtils; import org.eclipse.jkube.api.JKubePlugin; import org.eclipse.jkube.kit.common.JKubeConfiguration; @@ -52,7 +51,7 @@ class PluginServiceTest { @BeforeEach void setUp() { logger = spy(new KitLogger.SilentLogger()); - jKubeServiceHub = new JKubeServiceHub(null, RuntimeMode.KUBERNETES, logger, null, + jKubeServiceHub = new JKubeServiceHub(RuntimeMode.KUBERNETES, logger, null, JKubeConfiguration.builder() .project(JavaProject.builder() .outputDirectory(temporaryFolder) diff --git a/jkube-kit/doc/src/main/asciidoc/inc/apply/_cluster_access_configuration.adoc b/jkube-kit/doc/src/main/asciidoc/inc/apply/_cluster_access_configuration.adoc index 3b0ce91a4e..50ee722172 100644 --- a/jkube-kit/doc/src/main/asciidoc/inc/apply/_cluster_access_configuration.adoc +++ b/jkube-kit/doc/src/main/asciidoc/inc/apply/_cluster_access_configuration.adoc @@ -88,6 +88,10 @@ endif::[] | Client Key Passphrase on which to operate. | `jkube.clientKeyPassphrase` +| *currentContext* +| Client Kubernetes Context that is currently in use +| `jkube.currentContext` + | *trustStoreFile* | Trust Store File on which to operate. | `jkube.trustStoreFile` diff --git a/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/watcher/SpringBootWatcherIntegrationTest.java b/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/watcher/SpringBootWatcherIntegrationTest.java index 730a4521f1..691d231ac0 100644 --- a/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/watcher/SpringBootWatcherIntegrationTest.java +++ b/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/watcher/SpringBootWatcherIntegrationTest.java @@ -25,8 +25,7 @@ import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.Plugin; import org.eclipse.jkube.kit.common.util.EnvUtil; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.RuntimeMode; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; @@ -78,8 +77,9 @@ void setUp() throws IOException { final JKubeServiceHub jKubeServiceHub = JKubeServiceHub.builder() .log(logger) .platformMode(RuntimeMode.KUBERNETES) - .configuration(JKubeConfiguration.builder().build()) - .clusterAccess(new ClusterAccess(ClusterConfiguration.from(kubernetesClient.getConfiguration()).namespace("test").build())) + .configuration(JKubeConfiguration.builder() + .clusterConfiguration(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build()) + .build()) .build(); watcherContext = WatcherContext.builder() .logger(logger) diff --git a/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/WatcherContext.java b/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/WatcherContext.java index 8f9955279b..c74182b93d 100644 --- a/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/WatcherContext.java +++ b/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/WatcherContext.java @@ -47,6 +47,6 @@ public class WatcherContext { private JKubeBuildStrategy jKubeBuildStrategy; public String getNamespace() { - return getJKubeServiceHub().getClusterAccess().getNamespace(); + return getJKubeServiceHub().getConfiguration().getClusterConfiguration().getNamespace(); } } diff --git a/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherRestartContainerTest.java b/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherRestartContainerTest.java index 8ea8ee05ce..26f8a22355 100644 --- a/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherRestartContainerTest.java +++ b/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherRestartContainerTest.java @@ -40,7 +40,6 @@ import org.assertj.core.api.InstanceOfAssertFactories; import org.eclipse.jkube.kit.build.service.docker.WatchService; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; -import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.watcher.api.WatcherContext; import org.junit.jupiter.api.BeforeEach; diff --git a/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherTest.java b/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherTest.java index 1d56b92676..528a944620 100644 --- a/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherTest.java +++ b/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherTest.java @@ -20,7 +20,6 @@ import org.eclipse.jkube.kit.build.service.docker.watch.ExecTask; import org.eclipse.jkube.kit.build.service.docker.watch.WatchContext; import org.eclipse.jkube.kit.common.JavaProject; -import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.watcher.api.WatcherContext; @@ -46,7 +45,6 @@ class DockerImageWatcherTest { @BeforeEach public void setUp() { WatcherContext watcherContext = mock(WatcherContext.class, RETURNS_DEEP_STUBS); - ClusterAccess mockedClusterAccess = mock(ClusterAccess.class); watchService = mock(WatchService.class); DockerServiceHub mockedDockerServiceHub = mock(DockerServiceHub.class,RETURNS_DEEP_STUBS); dockerImageWatcher = new DockerImageWatcher(watcherContext); @@ -57,7 +55,6 @@ public void setUp() { .groupId("org.example") .artifactId("test") .version("1.0.0-SNAPSHOT").build()); - when(watcherContext.getJKubeServiceHub().getClusterAccess()).thenReturn(mockedClusterAccess); } @Test diff --git a/kubernetes-maven-plugin/plugin/pom.xml b/kubernetes-maven-plugin/plugin/pom.xml index b938c8573d..7c0b9acd2f 100644 --- a/kubernetes-maven-plugin/plugin/pom.xml +++ b/kubernetes-maven-plugin/plugin/pom.xml @@ -157,6 +157,14 @@ jkube-kit-remote-dev + + io.fabric8 + mockwebserver + + + io.fabric8 + openshift-server-mock + org.junit.jupiter junit-jupiter-engine diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java index 85f5d0d05a..b417e0619b 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java @@ -41,8 +41,7 @@ import org.eclipse.jkube.kit.common.util.EnvUtil; import org.eclipse.jkube.kit.common.util.MavenUtil; import org.eclipse.jkube.kit.common.util.ResourceUtil; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.image.build.RegistryAuthConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ProcessorConfig; @@ -311,8 +310,8 @@ public abstract class AbstractDockerMojo extends AbstractMojo protected KitLogger log; - // Access for creating OpenShift binary builds - protected ClusterAccess clusterAccess; + // Resolved Cluster Configuration + protected ClusterConfiguration clusterConfiguration; // The JKube service hub protected JKubeServiceHub jkubeServiceHub; @@ -375,7 +374,7 @@ public final void execute() throws MojoExecutionException, MojoFailureException protected void init() { log = new AnsiLogger(getLog(), useColorForLogging(), verbose, !settings.getInteractiveMode(), getLogPrefix()); authConfigFactory = new DockerAuthConfigFactory(log); - clusterAccess = new ClusterAccess(initClusterConfiguration()); + clusterConfiguration = initClusterConfiguration(); runtimeMode = getConfiguredRuntimeMode(); } @@ -398,7 +397,6 @@ protected void doExecute() throws MojoExecutionException { jkubeServiceHub = JKubeServiceHub.builder() .log(log) .configuration(initJKubeConfiguration()) - .clusterAccess(clusterAccess) .platformMode(getConfiguredRuntimeMode()) .dockerServiceHub(DockerServiceHub.newInstance(log, dockerAccess)) .buildServiceConfig(buildServiceConfigBuilder().build()) @@ -434,6 +432,7 @@ protected JKubeConfiguration initJKubeConfiguration() throws DependencyResolutio .buildArgs(buildArgs) .pullRegistryConfig(getRegistryConfig(pullRegistry)) .pushRegistryConfig(getRegistryConfig(pushRegistry)) + .clusterConfiguration(clusterConfiguration) .build(); } diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractJKubeMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractJKubeMojo.java index 9bc37db986..afd154865f 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractJKubeMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractJKubeMojo.java @@ -26,8 +26,7 @@ import org.eclipse.jkube.kit.common.util.LazyBuilder; import org.eclipse.jkube.kit.common.util.MavenUtil; import org.eclipse.jkube.kit.common.util.ResourceUtil; -import org.eclipse.jkube.kit.config.access.ClusterAccess; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; @@ -145,7 +144,7 @@ public abstract class AbstractJKubeMojo extends AbstractMojo implements KitLogge protected KitLogger log; - protected ClusterAccess clusterAccess; + protected ClusterConfiguration clusterConfiguration; // The JKube service hub protected JKubeServiceHub jkubeServiceHub; @@ -164,7 +163,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { protected void init() throws MojoFailureException { log = createLogger(null); - clusterAccess = new ClusterAccess(initClusterConfiguration()); + clusterConfiguration = initClusterConfiguration(); try { javaProject = MavenUtil.convertMavenProjectToJKubeProject(project, session); } catch (DependencyResolutionRequiredException e) { @@ -243,8 +242,8 @@ protected JKubeServiceHub.JKubeServiceHubBuilder initJKubeServiceHubBuilder(Java .settings(MavenUtil.getRegistryServerFromMavenSettings(settings)) .passwordDecryptionMethod(this::decrypt) .build()) + .clusterConfiguration(clusterConfiguration) .build()) - .clusterAccess(clusterAccess) .offline(offline) .platformMode(getRuntimeMode()) .resourceServiceConfig(initResourceServiceConfig()) diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojo.java index 10e6b5704a..e6d220650f 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojo.java @@ -226,7 +226,7 @@ private void configureApplyService(KubernetesClient kubernetes) { applyService.setRollingUpgradePreserveScale(isRollingUpgradePreserveScale()); applyService.setRecreateMode(recreate); applyService.setNamespace(namespace); - applyService.setFallbackNamespace(resolveFallbackNamespace(resources, clusterAccess)); + applyService.setFallbackNamespace(resolveFallbackNamespace(resources, clusterConfiguration)); boolean openShift = OpenshiftHelper.isOpenShift(kubernetes); if (openShift) { diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojo.java index 9b174e97cd..5fab601cdf 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojo.java @@ -232,7 +232,7 @@ private List getResolvedImages(List imag .useProjectClasspath(useProjectClasspath) .strategy(JKubeBuildStrategy.docker) .prePackagePhase(true) - .openshiftNamespace(StringUtils.isNotBlank(this.namespace) ? this.namespace: clusterAccess.getNamespace()) + .openshiftNamespace(StringUtils.isNotBlank(this.namespace) ? this.namespace: clusterConfiguration.getNamespace()) .buildTimestamp(getBuildTimestamp(getPluginContext(), CONTEXT_KEY_BUILD_TIMESTAMP, project.getBuild().getDirectory(), DOCKER_BUILD_TIMESTAMP)) .build()); return generatorManager.generateAndMerge(images); diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojo.java index b0b7734d6f..107d8f7c19 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojo.java @@ -95,7 +95,7 @@ public void executeInternal() throws MojoExecutionException { WatcherContext context = getWatcherContext(); WatcherManager.watch(getResolvedImages(), - applicableNamespace(null, namespace, resources, clusterAccess), + applicableNamespace(null, namespace, resources, clusterConfiguration), appliedK8sResources, context); diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoTest.java index 47078d9f0d..0c154b5394 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoTest.java @@ -15,13 +15,14 @@ import java.io.File; import java.io.IOException; -import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.util.Properties; -import io.fabric8.openshift.client.NamespacedOpenShiftClient; -import org.eclipse.jkube.kit.config.access.ClusterAccess; +import io.fabric8.kubernetes.client.ConfigBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.apache.maven.plugin.MojoExecutionException; @@ -32,38 +33,32 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import org.mockito.MockedConstruction; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.when; +@EnableKubernetesMockClient(crud = true) class ApplyMojoTest { - private MockedConstruction clusterAccessMockedConstruction; private File kubernetesManifestFile; private MavenProject mavenProject; - private NamespacedOpenShiftClient defaultKubernetesClient; - private String kubeConfigNamespace; + private KubernetesClient defaultKubernetesClient; private ApplyMojo applyMojo; @BeforeEach void setUp(@TempDir Path temporaryFolder) throws IOException { - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class, (mock, context) -> { - when(mock.createDefaultClient()).thenReturn(defaultKubernetesClient); - when(mock.getNamespace()).thenAnswer(invocation -> kubeConfigNamespace); - }); kubernetesManifestFile = Files.createFile(temporaryFolder.resolve("kubernetes.yml")).toFile(); mavenProject = mock(MavenProject.class); when(mavenProject.getProperties()).thenReturn(new Properties()); - defaultKubernetesClient = mock(NamespacedOpenShiftClient.class); - when(defaultKubernetesClient.adapt(any())).thenReturn(defaultKubernetesClient); - when(defaultKubernetesClient.getMasterUrl()).thenReturn(URI.create("https://www.example.com").toURL()); // @formatter:off applyMojo = new ApplyMojo() {{ + access = ClusterConfiguration.from( + new ConfigBuilder(defaultKubernetesClient.getConfiguration()) + .withNamespace("kubernetes-client-config-namespace") + .build() + ).build(); project = mavenProject; settings = mock(Settings.class); kubernetesManifest = kubernetesManifestFile; @@ -74,7 +69,6 @@ void setUp(@TempDir Path temporaryFolder) throws IOException { @AfterEach void tearDown() { - clusterAccessMockedConstruction.close(); mavenProject = null; applyMojo = null; } @@ -128,13 +122,12 @@ void resolveEffectiveNamespace_whenNamespaceSetInResourceConfig() throws MojoExe @Test void resolveEffectiveNamespace_whenNoNamespaceConfigured() throws MojoExecutionException, MojoFailureException { // Given - kubeConfigNamespace = "clusteraccess-namespace"; // When applyMojo.execute(); // Then assertThat(applyMojo.applyService) .hasFieldOrPropertyWithValue("namespace", null) - .hasFieldOrPropertyWithValue("fallbackNamespace", "clusteraccess-namespace"); + .hasFieldOrPropertyWithValue("fallbackNamespace", "kubernetes-client-config-namespace"); } } diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/DebugMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/DebugMojoTest.java index ae69fa8fe0..97f4f54309 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/DebugMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/DebugMojoTest.java @@ -20,7 +20,6 @@ import java.util.Properties; import org.eclipse.jkube.kit.common.util.AnsiLogger; -import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.service.DebugContext; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; @@ -36,9 +35,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.ArgumentMatchers.isNotNull; -import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -51,7 +47,6 @@ class DebugMojoTest { private MockedConstruction jKubeServiceHubMockedConstruction; - private MockedConstruction clusterAccessMockedConstruction; private File kubernetesManifestFile; private MavenProject mavenProject; @@ -65,7 +60,6 @@ void setUp(@TempDir Path temporaryFolder) throws IOException { doReturn(oc).when(oc).adapt(OpenShiftClient.class); when(mock.getClient()).thenReturn(oc); }); - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class); kubernetesManifestFile = Files.createFile(temporaryFolder.resolve("kubernetes.yml")).toFile(); mavenProject = mock(MavenProject.class); when(mavenProject.getProperties()).thenReturn(new Properties()); @@ -81,7 +75,6 @@ void setUp(@TempDir Path temporaryFolder) throws IOException { @AfterEach void tearDown() { - clusterAccessMockedConstruction.close(); jKubeServiceHubMockedConstruction.close(); mavenProject = null; debugMojo = null; diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/LogMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/LogMojoTest.java index 7f68b21109..bf1648cf0f 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/LogMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/LogMojoTest.java @@ -21,7 +21,6 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.openshift.client.OpenShiftClient; -import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; import org.eclipse.jkube.kit.config.service.PodLogService; @@ -50,7 +49,6 @@ class LogMojoTest { private MockedConstruction jKubeServiceHubMockedConstruction; - private MockedConstruction clusterAccessMockedConstruction; private MockedConstruction podLogServiceMockedConstruction; private File kubernetesManifestFile; private MavenProject mavenProject; @@ -65,7 +63,6 @@ void setUp(@TempDir Path temporaryFolder) throws IOException { doReturn(oc).when(oc).adapt(OpenShiftClient.class); when(mock.getClient()).thenReturn(oc); }); - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class); podLogServiceMockedConstruction = mockConstruction(PodLogService.class); kubernetesManifestFile = Files.createTempFile(temporaryFolder, "kubernetes", ".yml").toFile(); mavenProject = mock(MavenProject.class); @@ -82,7 +79,6 @@ void setUp(@TempDir Path temporaryFolder) throws IOException { @AfterEach void tearDown() { - clusterAccessMockedConstruction.close(); jKubeServiceHubMockedConstruction.close(); mavenProject = null; logMojo = null; diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java index 9e36a6ce0d..2d5ad62f29 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java @@ -14,20 +14,17 @@ package org.eclipse.jkube.maven.plugin.mojo.develop; import java.io.File; -import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; -import java.util.HashMap; import java.util.Properties; +import io.fabric8.kubernetes.client.ConfigBuilder; import io.fabric8.kubernetes.client.KubernetesClient; -import org.eclipse.jkube.kit.common.JKubeConfiguration; -import org.eclipse.jkube.kit.common.JavaProject; -import org.eclipse.jkube.kit.config.access.ClusterAccess; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy; import org.eclipse.jkube.kit.config.resource.ResourceConfig; -import org.eclipse.jkube.kit.config.service.JKubeServiceHub; import org.eclipse.jkube.watcher.api.WatcherManager; import org.apache.maven.project.MavenProject; @@ -36,47 +33,29 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import org.mockito.MockedConstruction; import org.mockito.MockedStatic; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; -import static org.mockito.Mockito.withSettings; +@EnableKubernetesMockClient(crud = true) class WatchMojoTest { - private File kubernetesManifestFile; + private KubernetesClient kubernetesClient; + private File kubernetesManifestFile; private MavenProject mavenProject; - private Settings mavenSettings; private MockedStatic watcherManagerMockedStatic; - private MockedConstruction jKubeServiceHubMockedConstruction; - private MockedConstruction clusterAccessMockedConstruction; private TestWatchMojo watchMojo; @BeforeEach void setUp(@TempDir Path temporaryFolder) throws Exception { final Path srcDir = Files.createDirectory(temporaryFolder.resolve("src")); final File targetDir = Files.createDirectory(temporaryFolder.resolve("target")).toFile(); - jKubeServiceHubMockedConstruction = mockConstruction(JKubeServiceHub.class, - withSettings().defaultAnswer(RETURNS_DEEP_STUBS), (mock, context) -> { - final KubernetesClient kc = mock(KubernetesClient.class, RETURNS_DEEP_STUBS); - when(kc.getMasterUrl()).thenReturn(URI.create("https://www.example.com").toURL()); - when(mock.getClient()).thenReturn(kc); - when(mock.getConfiguration()).thenReturn(JKubeConfiguration.builder() - .project(JavaProject.builder() - .baseDirectory(temporaryFolder.toFile()) - .build()) - .build()); - }); - clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class, (mock, ctx) -> { - when(mock.getNamespace()).thenReturn("namespace-from-config"); - }); kubernetesManifestFile = Files.createTempFile(srcDir, "kubernetes", ".yml").toFile(); mavenProject = mock(MavenProject.class, RETURNS_DEEP_STUBS); when(mavenProject.getProperties()).thenReturn(new Properties()); @@ -86,16 +65,19 @@ void setUp(@TempDir Path temporaryFolder) throws Exception { when(mavenProject.getBasedir()).thenReturn(temporaryFolder.toFile()); when(mavenProject.getBuild().getDirectory()).thenReturn(targetDir.getAbsolutePath()); when(mavenProject.getBuild().getOutputDirectory()).thenReturn(targetDir.getAbsolutePath()); - mavenSettings = mock(Settings.class); watcherManagerMockedStatic = mockStatic(WatcherManager.class); // @formatter:off watchMojo = new TestWatchMojo() {{ project = mavenProject; - settings = mavenSettings; + settings = mock(Settings.class); kubernetesManifest = kubernetesManifestFile; resourceDir = temporaryFolder.resolve("src").resolve("main").resolve("jkube").toFile().getAbsoluteFile(); buildStrategy = JKubeBuildStrategy.jib; - setPluginContext(new HashMap<>()); + access = ClusterConfiguration.from( + new ConfigBuilder(kubernetesClient.getConfiguration()) + .withNamespace("kubernetes-client-config-namespace") + .build() + ).build(); }}; // @formatter:on } @@ -103,20 +85,18 @@ void setUp(@TempDir Path temporaryFolder) throws Exception { @AfterEach void tearDown() { watcherManagerMockedStatic.close(); - clusterAccessMockedConstruction.close(); - jKubeServiceHubMockedConstruction.close(); } @Test - void executeInternal_whenNoNamespaceConfigured_shouldDelegateToWatcherManagerWithClusterAccessNamespace() throws Exception { + void executeInternal_whenNoNamespaceConfigured_shouldDelegateToWatcherManagerWithClusterConfigurationNamespace() throws Exception { // When watchMojo.execute(); // Then - watcherManagerMockedStatic.verify(() -> WatcherManager.watch(any(), eq("namespace-from-config"), any(), any()), times(1)); + watcherManagerMockedStatic.verify(() -> WatcherManager.watch(any(), eq("kubernetes-client-config-namespace"), any(), any()), times(1)); } @Test - void executeInternal_whenNamespaceConfiguredInResourceConfig_shouldDelegateToWatcherManagerWithClusterAccessNamespace() throws Exception { + void executeInternal_whenNamespaceConfiguredInResourceConfig_shouldDelegateToWatcherManagerWithResourceConfigNamespace() throws Exception { // Given ResourceConfig resources = ResourceConfig.builder() .namespace("namespace-from-resource_config") @@ -129,7 +109,7 @@ void executeInternal_whenNamespaceConfiguredInResourceConfig_shouldDelegateToWat } @Test - void executeInternal_whenNamespaceConfigured_shouldDelegateToWatcherManagerWithClusterAccessNamespace() throws Exception { + void executeInternal_whenNamespaceConfigured_shouldDelegateToWatcherManagerWithConfiguredNamespace() throws Exception { // Given watchMojo.setNamespace("configured-namespace"); // When diff --git a/openshift-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/OpenShiftResourceMojoTest.java b/openshift-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/OpenShiftResourceMojoTest.java index ea48613146..6b9f21d406 100644 --- a/openshift-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/OpenShiftResourceMojoTest.java +++ b/openshift-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/OpenShiftResourceMojoTest.java @@ -22,7 +22,7 @@ import org.apache.maven.project.MavenProjectHelper; import org.apache.maven.settings.Settings; import org.eclipse.jkube.kit.common.KitLogger; -import org.eclipse.jkube.kit.config.access.ClusterConfiguration; +import org.eclipse.jkube.kit.common.access.ClusterConfiguration; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.junit.jupiter.api.BeforeEach; @@ -91,7 +91,7 @@ void execute_generatesResourcesAndAttachesArtifact() throws Exception { } @Test - void executeInternal_resolvesGroupInImageNameToClusterAccessNamespace_whenNamespaceDetected() throws MojoExecutionException, MojoFailureException { + void executeInternal_resolvesGroupInImageNameToClusterConfigurationNamespace_whenNamespaceDetected() throws MojoExecutionException, MojoFailureException { // Given resourceMojo.project.setArtifactId("test-project"); ImageConfiguration imageConfiguration = ImageConfiguration.builder()