From b9d3cc663d8a3eb91d1bccc35113e08c0a1ff916 Mon Sep 17 00:00:00 2001 From: Marc Nuri Date: Tue, 4 Mar 2025 05:47:16 +0100 Subject: [PATCH] test:refactor: replaced deprecated i.f.k.c.s.mock.KubernetesServer with KubernetesMockServer --- core/che-core-metrics-core/pom.xml | 4 +- infrastructures/kubernetes/pom.xml | 26 -------- .../namespace/KubernetesDeploymentsTest.java | 42 +++++++++---- .../KubernetesNamespaceFactoryTest.java | 27 ++++++--- ...KubernetesWorkspaceServiceAccountTest.java | 43 +++++++++---- .../CredentialsSecretConfiguratorTest.java | 43 +++++++++---- .../GitconfigConfiguratorTest.java | 60 +++++++++++++------ .../PreferencesConfigMapConfiguratorTest.java | 47 ++++++++++----- .../configurator/SshKeysConfiguratorTest.java | 40 +++++++++---- .../UserPermissionConfiguratorTest.java | 40 +++++++++---- .../UserPreferencesConfiguratorTest.java | 12 +--- ...rkspaceServiceAccountConfiguratorTest.java | 36 ++++++++--- infrastructures/openshift/pom.xml | 5 -- .../OpenShiftAuthorizationCheckerTest.java | 33 ++++++++-- pom.xml | 8 +-- 15 files changed, 304 insertions(+), 162 deletions(-) diff --git a/core/che-core-metrics-core/pom.xml b/core/che-core-metrics-core/pom.xml index 108f721397..e34211738c 100644 --- a/core/che-core-metrics-core/pom.xml +++ b/core/che-core-metrics-core/pom.xml @@ -35,8 +35,8 @@ okhttp - kotlin-stdlib-jdk8 - org.jetbrains.kotlin + okio + com.squareup.okio diff --git a/infrastructures/kubernetes/pom.xml b/infrastructures/kubernetes/pom.xml index bd423650e9..86fd7930b2 100644 --- a/infrastructures/kubernetes/pom.xml +++ b/infrastructures/kubernetes/pom.xml @@ -204,11 +204,6 @@ h2 test - - com.squareup.okhttp3 - mockwebserver - test - io.fabric8 kubernetes-client @@ -239,21 +234,6 @@ che-core-sql-schema test - - org.eclipse.jetty - jetty-security - test - - - org.eclipse.jetty - jetty-servlet - test - - - org.eclipse.jetty - jetty-util - test - org.eclipse.persistence org.eclipse.persistence.core @@ -268,12 +248,6 @@ org.everrest everrest-assured test - - - jetty-util - org.eclipse.jetty - - org.everrest diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeploymentsTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeploymentsTest.java index 759bf7f689..32b0ef16fb 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeploymentsTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeploymentsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2023 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -69,13 +69,21 @@ import io.fabric8.kubernetes.client.dsl.Resource; import io.fabric8.kubernetes.client.dsl.RollableScalableResource; import io.fabric8.kubernetes.client.dsl.V1APIGroupDSL; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.Queue; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; @@ -90,6 +98,7 @@ import org.mockito.Captor; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; +import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -146,7 +155,7 @@ public class KubernetesDeploymentsTest { @Mock private V1APIGroupDSL v1APIGroupDSL; private KubernetesDeployments kubernetesDeployments; - private KubernetesServer serverMock; + private KubernetesMockServer kubernetesMockServer; @BeforeMethod public void setUp() throws Exception { @@ -194,8 +203,20 @@ public void setUp() throws Exception { kubernetesDeployments = new KubernetesDeployments("namespace", "workspace123", clientFactory, executor); - serverMock = new KubernetesServer(true, true); - serverMock.before(); + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + } + + @AfterMethod + public void cleanUp() { + kubernetesMockServer.destroy(); } @Test @@ -696,7 +717,8 @@ public void shouldHandleEventWithEmptyLastTimestampAndFirstTimestamp() throws Ex @Test public void deploymentShouldHaveImagePullSecretsOfSAAndSelf() throws InfrastructureException { - doReturn(serverMock.getClient()).when(clientFactory).create(anyString()); + final var client = kubernetesMockServer.createClient(); + doReturn(client).when(clientFactory).create(anyString()); final String serviceAccountName = "workspace-sa"; LocalObjectReference pullSecretOfSA = @@ -715,11 +737,7 @@ public void deploymentShouldHaveImagePullSecretsOfSAAndSelf() throws Infrastruct .build()) .withImagePullSecrets(pullSecretOfSA) .build(); - serverMock - .getClient() - .serviceAccounts() - .inNamespace(kubernetesDeployments.namespace) - .create(serviceAccount); + client.serviceAccounts().inNamespace(kubernetesDeployments.namespace).create(serviceAccount); ObjectMeta objectMeta = new ObjectMetaBuilder() @@ -756,7 +774,7 @@ public void deploymentShouldHaveImagePullSecretsOfSAAndSelf() throws Infrastruct @Test public void deploymentShouldHavePullSecretsOnlyOfSelfWithNonexistentSA() throws InfrastructureException { - doReturn(serverMock.getClient()).when(clientFactory).create(anyString()); + doReturn(kubernetesMockServer.createClient()).when(clientFactory).create(anyString()); LocalObjectReference pullSecretOfPod = new LocalObjectReferenceBuilder().withName("pullsecret-pod").build(); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java index 689481e017..e7c540a5f9 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2023 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -62,13 +62,19 @@ import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.Resource; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Queue; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -135,7 +141,7 @@ public class KubernetesNamespaceFactoryTest { @Mock private Resource namespaceResource; - private KubernetesServer serverMock; + private KubernetesMockServer kubernetesMockServer; private KubernetesNamespaceFactory namespaceFactory; @@ -147,9 +153,16 @@ public class KubernetesNamespaceFactoryTest { @BeforeMethod public void setUp() throws Exception { - serverMock = new KubernetesServer(true, true); - serverMock.before(); - k8sClient = spy(serverMock.getClient()); + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + k8sClient = spy(kubernetesMockServer.createClient()); lenient().when(cheServerKubernetesClientFactory.create()).thenReturn(k8sClient); lenient().when(k8sClient.namespaces()).thenReturn(namespaceOperation); @@ -167,7 +180,7 @@ public void setUp() throws Exception { @AfterMethod public void tearDown() { EnvironmentContext.reset(); - serverMock.after(); + kubernetesMockServer.destroy(); } @Test diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesWorkspaceServiceAccountTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesWorkspaceServiceAccountTest.java index 23c9916d5f..225517de31 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesWorkspaceServiceAccountTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesWorkspaceServiceAccountTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2021 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -32,14 +32,23 @@ import io.fabric8.kubernetes.api.model.rbac.RoleBuilder; import io.fabric8.kubernetes.api.model.rbac.RoleList; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; +import java.util.Queue; import java.util.Set; import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; +import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -54,7 +63,7 @@ public class KubernetesWorkspaceServiceAccountTest { @Mock private KubernetesClientFactory clientFactory; private KubernetesClient k8sClient; - private KubernetesServer serverMock; + private KubernetesMockServer kubernetesMockServer; private KubernetesWorkspaceServiceAccount serviceAccount; @BeforeMethod @@ -63,13 +72,25 @@ public void setUp() throws Exception { new KubernetesWorkspaceServiceAccount( WORKSPACE_ID, NAMESPACE, SA_NAME, ROLE_NAMES, clientFactory); - serverMock = new KubernetesServer(true, true); - serverMock.before(); - - k8sClient = serverMock.getClient(); + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + + k8sClient = kubernetesMockServer.createClient(); when(clientFactory.create(anyString())).thenReturn(k8sClient); } + @AfterMethod + public void tearDown() { + kubernetesMockServer.destroy(); + } + @Test public void shouldProvisionSARolesEvenIfItAlreadyExists() throws Exception { ServiceAccountBuilder serviceAccountBuilder = @@ -100,7 +121,7 @@ public void shouldProvisionSARolesEvenIfItAlreadyExists() throws Exception { @Test public void shouldCreateMetricsRoleIfAPIEnabledOnServer() throws Exception { - KubernetesClient localK8sClient = spy(serverMock.getClient()); + KubernetesClient localK8sClient = spy(k8sClient); when(localK8sClient.supportsApiPath(eq("/apis/metrics.k8s.io"))).thenReturn(true); when(clientFactory.create(anyString())).thenReturn(localK8sClient); @@ -121,7 +142,7 @@ public void shouldCreateMetricsRoleIfAPIEnabledOnServer() throws Exception { @Test public void shouldNotCreateMetricsRoleIfAPINotEnabledOnServer() throws Exception { - KubernetesClient localK8sClient = spy(serverMock.getClient()); + KubernetesClient localK8sClient = spy(k8sClient); when(localK8sClient.supportsApiPath(eq("/apis/metrics.k8s.io"))).thenReturn(false); when(clientFactory.create(anyString())).thenReturn(localK8sClient); @@ -142,7 +163,7 @@ public void shouldNotCreateMetricsRoleIfAPINotEnabledOnServer() throws Exception @Test public void shouldCreateCredentialsSecretRole() throws Exception { - KubernetesClient localK8sClient = spy(serverMock.getClient()); + KubernetesClient localK8sClient = spy(k8sClient); when(clientFactory.create(anyString())).thenReturn(localK8sClient); // when @@ -169,7 +190,7 @@ public void shouldCreateCredentialsSecretRole() throws Exception { @Test public void shouldCreatePreferencesConfigmapRole() throws Exception { - KubernetesClient localK8sClient = spy(serverMock.getClient()); + KubernetesClient localK8sClient = spy(k8sClient); when(clientFactory.create(anyString())).thenReturn(localK8sClient); // when diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/CredentialsSecretConfiguratorTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/CredentialsSecretConfiguratorTest.java index 00f0269eae..cda2d20c41 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/CredentialsSecretConfiguratorTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/CredentialsSecretConfiguratorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2024 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -21,15 +21,23 @@ import com.google.common.collect.ImmutableMap; import io.fabric8.kubernetes.api.model.SecretBuilder; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; import java.util.Base64; +import java.util.HashMap; import java.util.Map; +import java.util.Queue; import org.eclipse.che.api.factory.server.scm.PersonalAccessTokenManager; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext; import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; +import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -41,7 +49,8 @@ public class CredentialsSecretConfiguratorTest { @Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory; @Mock private PersonalAccessTokenManager personalAccessTokenManager; - private KubernetesServer serverMock; + private KubernetesMockServer kubernetesMockServer; + private KubernetesClient kubernetesClient; private NamespaceResolutionContext namespaceResolutionContext; private final String TEST_NAMESPACE_NAME = "namespace123"; @@ -62,21 +71,33 @@ public void setUp() throws InfrastructureException { configurator = new CredentialsSecretConfigurator( cheServerKubernetesClientFactory, personalAccessTokenManager); + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + kubernetesClient = spy(kubernetesMockServer.createClient()); - serverMock = new KubernetesServer(true, true); - serverMock.before(); - KubernetesClient client = spy(serverMock.getClient()); + KubernetesClient client = spy(kubernetesClient); when(cheServerKubernetesClientFactory.create()).thenReturn(client); namespaceResolutionContext = new NamespaceResolutionContext(TEST_WORKSPACE_ID, TEST_USER_ID, TEST_USERNAME); } + @AfterMethod + public void cleanUp() { + kubernetesMockServer.destroy(); + } + @Test public void shouldStorePersonalAccessToken() throws Exception { // given - serverMock - .getClient() + kubernetesClient .secrets() .inNamespace(TEST_NAMESPACE_NAME) .create( @@ -97,8 +118,7 @@ public void shouldStorePersonalAccessToken() throws Exception { @Test public void doNothingWhenSecretAlreadyStored() throws Exception { // given - serverMock - .getClient() + kubernetesClient .secrets() .inNamespace(TEST_NAMESPACE_NAME) .create( @@ -111,8 +131,7 @@ public void doNothingWhenSecretAlreadyStored() throws Exception { "credentials", Base64.getEncoder().encodeToString("test-token".getBytes()))) .build()); - serverMock - .getClient() + kubernetesClient .secrets() .inNamespace(TEST_NAMESPACE_NAME) .create( diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/GitconfigConfiguratorTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/GitconfigConfiguratorTest.java index c7850431ea..cee832dea1 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/GitconfigConfiguratorTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/GitconfigConfiguratorTest.java @@ -19,10 +19,17 @@ import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Queue; import java.util.Set; import org.eclipse.che.api.factory.server.scm.GitUserData; import org.eclipse.che.api.factory.server.scm.GitUserDataFetcher; @@ -33,6 +40,7 @@ import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.Assert; +import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -44,7 +52,8 @@ public class GitconfigConfiguratorTest { @Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory; @Mock private GitUserDataFetcher gitUserDataFetcher; - private KubernetesServer serverMock; + private KubernetesMockServer kubernetesMockServer; + private KubernetesClient kubernetesClient; private NamespaceResolutionContext namespaceResolutionContext; private final String TEST_NAMESPACE_NAME = "namespace123"; @@ -68,15 +77,28 @@ public void setUp() configurator = new GitconfigConfigurator(cheServerKubernetesClientFactory, Collections.emptySet()); - serverMock = new KubernetesServer(true, true); - serverMock.before(); - KubernetesClient client = spy(serverMock.getClient()); - when(cheServerKubernetesClientFactory.create()).thenReturn(client); + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + kubernetesClient = spy(kubernetesMockServer.createClient()); + + when(cheServerKubernetesClientFactory.create()).thenReturn(kubernetesClient); namespaceResolutionContext = new NamespaceResolutionContext(TEST_WORKSPACE_ID, TEST_USER_ID, TEST_USERNAME); } + @AfterMethod + public void cleanUp() { + kubernetesMockServer.destroy(); + } + @Test public void shouldCreateGitconfigConfigmapWithUserSection() throws Exception { // given @@ -87,9 +109,9 @@ public void shouldCreateGitconfigConfigmapWithUserSection() throws Exception { // when configurator.configure(namespaceResolutionContext, TEST_NAMESPACE_NAME); // then - Assert.assertEquals(serverMock.getLastRequest().getMethod(), "POST"); + Assert.assertEquals(kubernetesMockServer.getLastRequest().getMethod(), "POST"); List configMaps = - serverMock.getClient().configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); + kubernetesClient.configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); Assert.assertEquals(configMaps.size(), 1); String expected = "[user]\n\tname = username\n\temail = userEmail"; Assert.assertEquals(configMaps.get(0).getData().get("gitconfig"), expected); @@ -100,9 +122,9 @@ public void shouldNotCreateGitconfigConfigmap() throws Exception { // when configurator.configure(namespaceResolutionContext, TEST_NAMESPACE_NAME); // then - Assert.assertEquals(serverMock.getLastRequest().getMethod(), "GET"); + Assert.assertEquals(kubernetesMockServer.getLastRequest().getMethod(), "GET"); List configMaps = - serverMock.getClient().configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); + kubernetesClient.configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); Assert.assertEquals(configMaps.size(), 0); } @@ -122,7 +144,7 @@ public void shouldUpdateGitconfigConfigmapWithUserSection() .build(); gitconfigConfigmap.setData( Collections.singletonMap("gitconfig", "[user]\n\tname = \"\"\n\temail= \"\"")); - serverMock.getClient().configMaps().inNamespace(TEST_NAMESPACE_NAME).create(gitconfigConfigmap); + kubernetesClient.configMaps().inNamespace(TEST_NAMESPACE_NAME).create(gitconfigConfigmap); configurator = new GitconfigConfigurator(cheServerKubernetesClientFactory, Set.of(gitUserDataFetcher)); when(gitUserDataFetcher.fetchGitUserData(anyString())) @@ -130,9 +152,9 @@ public void shouldUpdateGitconfigConfigmapWithUserSection() // when configurator.configure(namespaceResolutionContext, TEST_NAMESPACE_NAME); // then - Assert.assertEquals(serverMock.getLastRequest().getMethod(), "PUT"); + Assert.assertEquals(kubernetesMockServer.getLastRequest().getMethod(), "PUT"); List configMaps = - serverMock.getClient().configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); + kubernetesClient.configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); Assert.assertEquals(configMaps.size(), 1); String expected = "[user]\n\tname = username\n\temail = userEmail"; Assert.assertEquals(configMaps.get(0).getData().get("gitconfig"), expected); @@ -156,7 +178,7 @@ public void shouldUpdateGitconfigConfigmapWithStoredSectionsWithUserSection() Collections.singletonMap( "gitconfig", "[other]\n\tkey = value\n[other1]\n\tkey = value\n[user]\n\tname = \"\"\n\temail= \"\"")); - serverMock.getClient().configMaps().inNamespace(TEST_NAMESPACE_NAME).create(gitconfigConfigmap); + kubernetesClient.configMaps().inNamespace(TEST_NAMESPACE_NAME).create(gitconfigConfigmap); configurator = new GitconfigConfigurator(cheServerKubernetesClientFactory, Set.of(gitUserDataFetcher)); when(gitUserDataFetcher.fetchGitUserData(anyString())) @@ -164,9 +186,9 @@ public void shouldUpdateGitconfigConfigmapWithStoredSectionsWithUserSection() // when configurator.configure(namespaceResolutionContext, TEST_NAMESPACE_NAME); // then - Assert.assertEquals(serverMock.getLastRequest().getMethod(), "PUT"); + Assert.assertEquals(kubernetesMockServer.getLastRequest().getMethod(), "PUT"); List configMaps = - serverMock.getClient().configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); + kubernetesClient.configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); Assert.assertEquals(configMaps.size(), 1); String expected = "[user]\n\tname = username\n\temail = userEmail\n[other]\n\tkey = value\n[other1]\n\tkey = value"; @@ -190,7 +212,7 @@ public void shouldNotUpdateGitconfigConfigmapWithUserSection() gitconfigConfigmap.setData( Collections.singletonMap( "gitconfig", "[user]\n\tname = gitconfig-username\n\temail = gitconfig-email")); - serverMock.getClient().configMaps().inNamespace(TEST_NAMESPACE_NAME).create(gitconfigConfigmap); + kubernetesClient.configMaps().inNamespace(TEST_NAMESPACE_NAME).create(gitconfigConfigmap); configurator = new GitconfigConfigurator(cheServerKubernetesClientFactory, Set.of(gitUserDataFetcher)); when(gitUserDataFetcher.fetchGitUserData(anyString())) @@ -198,9 +220,9 @@ public void shouldNotUpdateGitconfigConfigmapWithUserSection() // when configurator.configure(namespaceResolutionContext, TEST_NAMESPACE_NAME); // then - Assert.assertEquals(serverMock.getLastRequest().getMethod(), "GET"); + Assert.assertEquals(kubernetesMockServer.getLastRequest().getMethod(), "GET"); List configMaps = - serverMock.getClient().configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); + kubernetesClient.configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); Assert.assertEquals(configMaps.size(), 1); String expected = "[user]\n\tname = gitconfig-username\n\temail = gitconfig-email"; Assert.assertEquals(configMaps.get(0).getData().get("gitconfig"), expected); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/PreferencesConfigMapConfiguratorTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/PreferencesConfigMapConfiguratorTest.java index 0e72cabb92..6e042931d4 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/PreferencesConfigMapConfiguratorTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/PreferencesConfigMapConfiguratorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2023 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -19,14 +19,22 @@ import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; +import java.util.HashMap; import java.util.Map; +import java.util.Queue; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext; import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.Assert; +import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -36,7 +44,8 @@ public class PreferencesConfigMapConfiguratorTest { private NamespaceConfigurator configurator; @Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory; - private KubernetesServer serverMock; + private KubernetesMockServer kubernetesMockServer; + private KubernetesClient kubernetesClient; private NamespaceResolutionContext namespaceResolutionContext; private final String TEST_NAMESPACE_NAME = "namespace123"; @@ -48,15 +57,27 @@ public class PreferencesConfigMapConfiguratorTest { public void setUp() throws InfrastructureException { configurator = new PreferencesConfigMapConfigurator(cheServerKubernetesClientFactory); - serverMock = new KubernetesServer(true, true); - serverMock.before(); - KubernetesClient client = spy(serverMock.getClient()); - when(cheServerKubernetesClientFactory.create()).thenReturn(client); + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + kubernetesClient = spy(kubernetesMockServer.createClient()); + when(cheServerKubernetesClientFactory.create()).thenReturn(kubernetesClient); namespaceResolutionContext = new NamespaceResolutionContext(TEST_WORKSPACE_ID, TEST_USER_ID, TEST_USERNAME); } + @AfterMethod + public void tearDown() { + kubernetesMockServer.destroy(); + } + @Test public void createConfigmapWhenDoesntExist() throws InfrastructureException, InterruptedException { @@ -66,10 +87,9 @@ public void createConfigmapWhenDoesntExist() configurator.configure(namespaceResolutionContext, TEST_NAMESPACE_NAME); // then configmap created - Assert.assertEquals(serverMock.getLastRequest().getMethod(), "POST"); + Assert.assertEquals(kubernetesMockServer.getLastRequest().getMethod(), "POST"); Assert.assertNotNull( - serverMock - .getClient() + kubernetesClient .configMaps() .inNamespace(TEST_NAMESPACE_NAME) .withName(PREFERENCES_CONFIGMAP_NAME) @@ -80,8 +100,7 @@ public void createConfigmapWhenDoesntExist() @Test public void doNothingWhenConfigmapExists() throws InfrastructureException, InterruptedException { // given - configmap already exists - serverMock - .getClient() + kubernetesClient .configMaps() .inNamespace(TEST_NAMESPACE_NAME) .create( @@ -96,9 +115,9 @@ public void doNothingWhenConfigmapExists() throws InfrastructureException, Inter configurator.configure(namespaceResolutionContext, TEST_NAMESPACE_NAME); // then - don't create the configmap - Assert.assertEquals(serverMock.getLastRequest().getMethod(), "GET"); + Assert.assertEquals(kubernetesMockServer.getLastRequest().getMethod(), "GET"); var configmaps = - serverMock.getClient().configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); + kubernetesClient.configMaps().inNamespace(TEST_NAMESPACE_NAME).list().getItems(); Assert.assertEquals(configmaps.size(), 1); Assert.assertEquals(configmaps.get(0).getMetadata().getAnnotations().get("already"), "created"); } diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/SshKeysConfiguratorTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/SshKeysConfiguratorTest.java index 6b9a7081ac..15d9b17de6 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/SshKeysConfiguratorTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/SshKeysConfiguratorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2023 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -17,11 +17,19 @@ import static org.testng.Assert.assertEquals; import io.fabric8.kubernetes.api.model.Secret; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; import java.util.Base64; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Queue; import org.eclipse.che.api.core.NotFoundException; import org.eclipse.che.api.core.ServerException; import org.eclipse.che.api.ssh.server.SshManager; @@ -48,8 +56,9 @@ public class SshKeysConfiguratorTest { @Mock private SshManager sshManager; @InjectMocks private SshKeysConfigurator sshKeysConfigurator; + private KubernetesMockServer kubernetesMockServer; + private KubernetesClient kubernetesClient; - private KubernetesServer kubernetesServer; private NamespaceResolutionContext context; private final SshPairImpl sshPair = @@ -58,25 +67,31 @@ public class SshKeysConfiguratorTest { @BeforeMethod public void setUp() throws InfrastructureException, NotFoundException, ServerException { context = new NamespaceResolutionContext(null, USER_ID, USER_NAME); - kubernetesServer = new KubernetesServer(true, true); - kubernetesServer.before(); - + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + kubernetesClient = kubernetesMockServer.createClient(); when(sshManager.getPairs(USER_ID, "vcs")).thenReturn(Collections.singletonList(sshPair)); - when(cheServerKubernetesClientFactory.create()).thenReturn(kubernetesServer.getClient()); + when(cheServerKubernetesClientFactory.create()).thenReturn(kubernetesClient); } @AfterMethod public void cleanUp() { - kubernetesServer.getClient().secrets().inNamespace(USER_NAMESPACE).delete(); - kubernetesServer.after(); + kubernetesClient.secrets().inNamespace(USER_NAMESPACE).delete(); + kubernetesMockServer.destroy(); } @Test public void shouldCreateSSHKeysSecret() throws InfrastructureException { sshKeysConfigurator.configure(context, USER_NAMESPACE); List secrets = - kubernetesServer - .getClient() + kubernetesClient .secrets() .inNamespace(USER_NAMESPACE) .withLabels( @@ -108,8 +123,7 @@ public void shouldNotCreateSSHKeysSecretFromBadSecret() throws Exception { when(sshManager.getPairs(USER_ID, "vcs")).thenReturn(List.of(sshPairLocal)); sshKeysConfigurator.configure(context, USER_NAMESPACE); List secrets = - kubernetesServer - .getClient() + kubernetesClient .secrets() .inNamespace(USER_NAMESPACE) .withLabels( diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/UserPermissionConfiguratorTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/UserPermissionConfiguratorTest.java index 8e6ec82bca..25396b9d94 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/UserPermissionConfiguratorTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/UserPermissionConfiguratorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2021 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -20,13 +20,22 @@ import io.fabric8.kubernetes.api.model.rbac.RoleBindingBuilder; import io.fabric8.kubernetes.api.model.rbac.Subject; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; +import java.util.HashMap; +import java.util.Map; +import java.util.Queue; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext; import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.Assert; +import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -38,7 +47,7 @@ public class UserPermissionConfiguratorTest { @Mock private CheServerKubernetesClientFactory clientFactory; private KubernetesClient client; - private KubernetesServer serverMock; + private KubernetesMockServer kubernetesMockServer; private NamespaceResolutionContext namespaceResolutionContext; private final String TEST_NAMESPACE_NAME = "namespace123"; @@ -51,15 +60,27 @@ public class UserPermissionConfiguratorTest { public void setUp() throws InfrastructureException { configurator = new UserPermissionConfigurator(TEST_CLUSTER_ROLES, clientFactory); - serverMock = new KubernetesServer(true, true); - serverMock.before(); - client = spy(serverMock.getClient()); + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + client = spy(kubernetesMockServer.createClient()); lenient().when(clientFactory.create()).thenReturn(client); namespaceResolutionContext = new NamespaceResolutionContext(TEST_WORKSPACE_ID, TEST_USER_ID, TEST_USERNAME); } + @AfterMethod + public void tearDown() { + kubernetesMockServer.destroy(); + } + @Test public void doNothingWhenNoClusterRolesSet() throws InfrastructureException, InterruptedException { @@ -70,13 +91,12 @@ public void doNothingWhenNoClusterRolesSet() configurator.configure(namespaceResolutionContext, TEST_NAMESPACE_NAME); // then - do nothing - Assert.assertNull(serverMock.getLastRequest()); + Assert.assertNull(kubernetesMockServer.getLastRequest()); verify(clientFactory, never()).create(); } @Test - public void bindAllClusterRolesWhenEmptyEnv() - throws InfrastructureException, InterruptedException { + public void bindAllClusterRolesWhenEmptyEnv() throws InfrastructureException { // given - clean env // when @@ -84,7 +104,7 @@ public void bindAllClusterRolesWhenEmptyEnv() // then - create all role bindings var roleBindings = - serverMock.getClient().rbac().roleBindings().inNamespace(TEST_NAMESPACE_NAME); + kubernetesMockServer.createClient().rbac().roleBindings().inNamespace(TEST_NAMESPACE_NAME); Assert.assertEquals(roleBindings.list().getItems().size(), 2); var cr1 = roleBindings.withName("cr1").get(); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/UserPreferencesConfiguratorTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/UserPreferencesConfiguratorTest.java index 28132df14f..be1cbafdab 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/UserPreferencesConfiguratorTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/UserPreferencesConfiguratorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2023 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -15,7 +15,6 @@ import static org.mockito.Mockito.lenient; import static org.testng.Assert.assertEquals; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; import java.util.HashMap; import java.util.Map; import org.eclipse.che.api.core.NotFoundException; @@ -27,7 +26,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; -import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -50,14 +48,11 @@ public class UserPreferencesConfiguratorTest { @InjectMocks private UserPreferencesConfigurator userPreferencesConfigurator; - private KubernetesServer kubernetesServer; private NamespaceResolutionContext context; @BeforeMethod public void setUp() throws InfrastructureException, NotFoundException, ServerException { context = new NamespaceResolutionContext(null, USER_ID, USER_NAME); - kubernetesServer = new KubernetesServer(true, true); - kubernetesServer.before(); Map preferences = new HashMap<>(); preferences.put("preference-name", "preference"); @@ -66,11 +61,6 @@ public void setUp() throws InfrastructureException, NotFoundException, ServerExc lenient().when(preferenceManager.find(USER_ID)).thenReturn(preferences); } - @AfterMethod - public void cleanUp() { - kubernetesServer.after(); - } - @Test public void shouldNormalizePreferenceName() { assertEquals( diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/WorkspaceServiceAccountConfiguratorTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/WorkspaceServiceAccountConfiguratorTest.java index 59888263ea..e5b49e77dd 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/WorkspaceServiceAccountConfiguratorTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/configurator/WorkspaceServiceAccountConfiguratorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2021 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -19,13 +19,22 @@ import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBuilder; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; +import java.util.HashMap; +import java.util.Map; +import java.util.Queue; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext; import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory; import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesWorkspaceServiceAccount; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; +import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -37,7 +46,7 @@ public class WorkspaceServiceAccountConfiguratorTest { @Mock private CheServerKubernetesClientFactory clientFactory; private KubernetesClient client; - private KubernetesServer serverMock; + private KubernetesMockServer kubernetesMockServer; private NamespaceResolutionContext namespaceResolutionContext; @Mock private KubernetesWorkspaceServiceAccount kubeWSA; @@ -57,18 +66,29 @@ public void setUp() throws InfrastructureException { // when(configurator.doCreateServiceAccount(TEST_WORKSPACE_ID, // TEST_NAMESPACE_NAME)).thenReturn(kubeWSA); - serverMock = new KubernetesServer(true, true); - serverMock.before(); - client = spy(serverMock.getClient()); + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + client = spy(kubernetesMockServer.createClient()); lenient().when(clientFactory.create(TEST_WORKSPACE_ID)).thenReturn(client); namespaceResolutionContext = new NamespaceResolutionContext(TEST_WORKSPACE_ID, TEST_USER_ID, TEST_USERNAME); } + @AfterMethod + public void tearDown() { + kubernetesMockServer.destroy(); + } + @Test - public void createWorkspaceServiceAccountWithBindings() - throws InfrastructureException, InterruptedException { + public void createWorkspaceServiceAccountWithBindings() throws InfrastructureException { // given - cluster roles exists in cluster configurator = new WorkspaceServiceAccountConfigurator( diff --git a/infrastructures/openshift/pom.xml b/infrastructures/openshift/pom.xml index fd086c2ce3..f421de29f7 100644 --- a/infrastructures/openshift/pom.xml +++ b/infrastructures/openshift/pom.xml @@ -152,11 +152,6 @@ logback-classic test - - com.squareup.okhttp3 - mockwebserver - test - io.fabric8 kubernetes-server-mock diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/authorization/OpenShiftAuthorizationCheckerTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/authorization/OpenShiftAuthorizationCheckerTest.java index f826cf4002..11fdf866c6 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/authorization/OpenShiftAuthorizationCheckerTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/authorization/OpenShiftAuthorizationCheckerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2023 Red Hat, Inc. + * Copyright (c) 2012-2025 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/ @@ -15,15 +15,24 @@ import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.KubernetesMixedDispatcher; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import io.fabric8.mockwebserver.Context; +import io.fabric8.mockwebserver.MockWebServer; +import io.fabric8.mockwebserver.ServerRequest; +import io.fabric8.mockwebserver.ServerResponse; import io.fabric8.openshift.api.model.Group; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Queue; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.Assert; +import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Listeners; @@ -34,16 +43,28 @@ public class OpenShiftAuthorizationCheckerTest { @Mock private CheServerKubernetesClientFactory clientFactory; private KubernetesClient client; - private KubernetesServer serverMock; + private KubernetesMockServer kubernetesMockServer; @BeforeMethod public void setUp() throws InfrastructureException { - serverMock = new KubernetesServer(true, true); - serverMock.before(); - client = spy(serverMock.getClient()); + final Map> responses = new HashMap<>(); + kubernetesMockServer = + new KubernetesMockServer( + new Context(), + new MockWebServer(), + responses, + new KubernetesMixedDispatcher(responses), + true); + kubernetesMockServer.init(); + client = spy(kubernetesMockServer.createClient()); lenient().when(clientFactory.create()).thenReturn(client); } + @AfterMethod + public void tearDown() { + kubernetesMockServer.destroy(); + } + @Test(dataProvider = "advancedAuthorizationData") public void advancedAuthorization( String testUserName, diff --git a/pom.xml b/pom.xml index 1a2dfe265d..541832d632 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ 2.10.1 2.2.224 0.1.55 - 5.0.0-alpha.12 + 4.12.0 3.6.0 1.5 2.14.0 @@ -273,7 +273,7 @@ com.squareup.okhttp3 - mockwebserver + okhttp ${com.squareup.okhttp3.version} @@ -453,10 +453,6 @@ xml-path io.rest-assured - - hamcrest - org.hamcrest -