From 665fb83e73c4bbf2b86e31fcf5ef6b834626ba46 Mon Sep 17 00:00:00 2001 From: Vishesh Date: Fri, 28 Jul 2023 16:53:26 +0530 Subject: [PATCH] Remove powermock from kubernetes plugin (#7788) --- .../utils/KubernetesClusterUtilTest.java | 35 ++++------ .../version/KubernetesVersionServiceTest.java | 66 +++++++++++-------- .../org.mockito.plugins.MockMaker | 1 + 3 files changed, 52 insertions(+), 50 deletions(-) create mode 100644 plugins/integrations/kubernetes-service/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtilTest.java b/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtilTest.java index 53bc1a3c0f6..31363dbd1a1 100644 --- a/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtilTest.java +++ b/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/cluster/utils/KubernetesClusterUtilTest.java @@ -16,35 +16,22 @@ // under the License. package com.cloud.kubernetes.cluster.utils; -import java.io.File; - +import com.cloud.utils.Pair; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.junit.MockitoJUnitRunner; -import com.cloud.utils.Pair; -import com.cloud.utils.ssh.SshHelper; - -@RunWith(PowerMockRunner.class) -@PrepareForTest(SshHelper.class) +@RunWith(MockitoJUnitRunner.class) public class KubernetesClusterUtilTest { - String ipAddress = "10.1.1.1"; - int port = 2222; - String user = "user"; - File sshKeyFile = Mockito.mock(File.class); - String hostName = "host"; - private void mockSshHelperExecuteThrowAndTestVersionMatch() { + private void executeThrowAndTestVersionMatch() { Pair resultPair = null; boolean result = KubernetesClusterUtil.clusterNodeVersionMatches(resultPair, "1.24.0"); Assert.assertFalse(result); } - private void mockSshHelperExecuteAndTestVersionMatch(boolean status, String response, boolean expectedResult) { + private void executeAndTestVersionMatch(boolean status, String response, boolean expectedResult) { Pair resultPair = new Pair<>(status, response); boolean result = KubernetesClusterUtil.clusterNodeVersionMatches(resultPair, "1.24.0"); Assert.assertEquals(expectedResult, result); @@ -52,17 +39,17 @@ public class KubernetesClusterUtilTest { @Test public void testClusterNodeVersionMatches() { - PowerMockito.mockStatic(SshHelper.class); String v1233WorkerNodeOutput = "v1.23.3"; String v1240WorkerNodeOutput = "v1.24.0"; - mockSshHelperExecuteAndTestVersionMatch(true, v1240WorkerNodeOutput, true); - mockSshHelperExecuteAndTestVersionMatch(true, v1233WorkerNodeOutput, false); + executeAndTestVersionMatch(true, v1240WorkerNodeOutput, true); - mockSshHelperExecuteAndTestVersionMatch(false, v1240WorkerNodeOutput, false); + executeAndTestVersionMatch(true, v1233WorkerNodeOutput, false); - mockSshHelperExecuteAndTestVersionMatch(false, v1233WorkerNodeOutput, false); + executeAndTestVersionMatch(false, v1240WorkerNodeOutput, false); - mockSshHelperExecuteThrowAndTestVersionMatch(); + executeAndTestVersionMatch(false, v1233WorkerNodeOutput, false); + + executeThrowAndTestVersionMatch(); } } diff --git a/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionServiceTest.java b/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionServiceTest.java index 0427c350e80..d92b2c438c0 100644 --- a/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionServiceTest.java +++ b/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionServiceTest.java @@ -30,20 +30,22 @@ import org.apache.cloudstack.api.command.admin.kubernetes.version.UpdateKubernet import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; import org.apache.cloudstack.api.command.user.kubernetes.version.ListKubernetesSupportedVersionsCmd; +import org.apache.cloudstack.api.response.KubernetesSupportedVersionResponse; +import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; import org.apache.cloudstack.framework.config.ConfigKey; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.junit.MockitoJUnitRunner; import com.cloud.api.query.dao.TemplateJoinDao; import com.cloud.api.query.vo.TemplateJoinVO; @@ -70,8 +72,7 @@ import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.exception.CloudRuntimeException; -@RunWith(PowerMockRunner.class) -@PrepareForTest({ComponentContext.class}) +@RunWith(MockitoJUnitRunner.class) public class KubernetesVersionServiceTest { @InjectMocks @@ -92,6 +93,9 @@ public class KubernetesVersionServiceTest { @Mock private TemplateApiService templateService; + AutoCloseable closeable; + + private void overrideDefaultConfigValue(final ConfigKey configKey, final String name, final Object o) throws IllegalAccessException, NoSuchFieldException { Field f = ConfigKey.class.getDeclaredField(name); f.setAccessible(true); @@ -100,7 +104,7 @@ public class KubernetesVersionServiceTest { @Before public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); + closeable = MockitoAnnotations.openMocks(this); overrideDefaultConfigValue(KubernetesClusterService.KubernetesServiceEnabled, "_defaultValue", "true"); @@ -114,12 +118,9 @@ public class KubernetesVersionServiceTest { when(kubernetesSupportedVersionDao.createSearchCriteria()).thenReturn(versionSearchCriteria); DataCenterVO zone = Mockito.mock(DataCenterVO.class); - when(zone.getId()).thenReturn(1L); when(dataCenterDao.findById(Mockito.anyLong())).thenReturn(zone); TemplateJoinVO templateJoinVO = Mockito.mock(TemplateJoinVO.class); - when(templateJoinVO.getId()).thenReturn(1L); - when(templateJoinVO.getUrl()).thenReturn("https://download.cloudstack.com"); when(templateJoinVO.getState()).thenReturn(ObjectInDataStoreStateMachine.State.Ready); when(templateJoinDao.findById(Mockito.anyLong())).thenReturn(templateJoinVO); @@ -130,6 +131,7 @@ public class KubernetesVersionServiceTest { @After public void tearDown() throws Exception { + closeable.close(); } @Test @@ -141,7 +143,13 @@ public class KubernetesVersionServiceTest { versionVOs.add(versionVO); when(kubernetesSupportedVersionDao.findById(Mockito.anyLong())).thenReturn(versionVO); when(kubernetesSupportedVersionDao.search(Mockito.any(SearchCriteria.class), Mockito.any(Filter.class))).thenReturn(versionVOs); - kubernetesVersionService.listKubernetesSupportedVersions(cmd); + ListResponse response = + kubernetesVersionService.listKubernetesSupportedVersions( + cmd); + Assert.assertNotNull(response); + Assert.assertEquals(Integer.valueOf(1), response.getCount()); + Assert.assertEquals(1, response.getResponses().size()); + Assert.assertEquals(KubernetesVersionService.MIN_KUBERNETES_VERSION, response.getResponses().get(0).getSemanticVersion()); } @Test(expected = InvalidParameterValueException.class) @@ -206,13 +214,19 @@ public class KubernetesVersionServiceTest { when(cmd.getMinimumRamSize()).thenReturn(KubernetesClusterService.MIN_KUBERNETES_CLUSTER_NODE_RAM_SIZE); Account systemAccount = new AccountVO("system", 1L, "", Account.Type.ADMIN, "uuid"); when(accountManager.getSystemAccount()).thenReturn(systemAccount); - PowerMockito.mockStatic(ComponentContext.class); - when(ComponentContext.inject(Mockito.any(RegisterIsoCmd.class))).thenReturn(new RegisterIsoCmd()); - when(templateService.registerIso(Mockito.any(RegisterIsoCmd.class))).thenReturn(Mockito.mock(VirtualMachineTemplate.class)); - VMTemplateVO templateVO = Mockito.mock(VMTemplateVO.class); - when(templateVO.getId()).thenReturn(1L); - when(templateDao.findById(Mockito.anyLong())).thenReturn(templateVO); - kubernetesVersionService.addKubernetesSupportedVersion(cmd); + try (MockedStatic mockedComponentContext = Mockito.mockStatic(ComponentContext.class)) { + mockedComponentContext.when(() -> ComponentContext.inject(Mockito.any(RegisterIsoCmd.class))).thenReturn( + new RegisterIsoCmd()); + + when(templateService.registerIso(Mockito.any(RegisterIsoCmd.class))).thenReturn( + Mockito.mock(VirtualMachineTemplate.class)); + VMTemplateVO templateVO = Mockito.mock(VMTemplateVO.class); + when(templateVO.getId()).thenReturn(1L); + when(templateDao.findById(Mockito.anyLong())).thenReturn(templateVO); + KubernetesSupportedVersionResponse response = kubernetesVersionService.addKubernetesSupportedVersion(cmd); + Assert.assertNotNull(response); + Mockito.verify(kubernetesSupportedVersionDao, Mockito.times(1)).persist(Mockito.any(KubernetesSupportedVersionVO.class)); + } } @Test(expected = CloudRuntimeException.class) @@ -237,12 +251,11 @@ public class KubernetesVersionServiceTest { when(kubernetesSupportedVersionDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(KubernetesSupportedVersionVO.class)); List clusters = new ArrayList<>(); when(kubernetesClusterDao.listAllByKubernetesVersion(Mockito.anyLong())).thenReturn(clusters); - when(templateDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(VMTemplateVO.class)); - PowerMockito.mockStatic(ComponentContext.class); - when(ComponentContext.inject(Mockito.any(DeleteIsoCmd.class))).thenReturn(new DeleteIsoCmd()); - when(templateService.deleteIso(Mockito.any(DeleteIsoCmd.class))).thenReturn(true); - when(kubernetesClusterDao.remove(Mockito.anyLong())).thenReturn(true); - kubernetesVersionService.deleteKubernetesSupportedVersion(cmd); + try (MockedStatic mockedComponentContext = Mockito.mockStatic(ComponentContext.class)) { + mockedComponentContext.when(() -> ComponentContext.inject(Mockito.any(DeleteIsoCmd.class))).thenReturn(new DeleteIsoCmd()); + kubernetesVersionService.deleteKubernetesSupportedVersion(cmd); + Mockito.verify(kubernetesSupportedVersionDao).remove(Mockito.anyLong()); + } } @Test @@ -254,11 +267,12 @@ public class KubernetesVersionServiceTest { CallContext.register(user, account); when(kubernetesSupportedVersionDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(KubernetesSupportedVersionVO.class)); KubernetesSupportedVersionVO version = Mockito.mock(KubernetesSupportedVersionVO.class); - when(kubernetesSupportedVersionDao.createForUpdate(Mockito.anyLong())).thenReturn(version); - when(kubernetesSupportedVersionDao.update(Mockito.anyLong(), Mockito.any(KubernetesSupportedVersionVO.class))).thenReturn(true); when(version.getState()).thenReturn(KubernetesSupportedVersion.State.Disabled); when(version.getSemanticVersion()).thenReturn(KubernetesVersionService.MIN_KUBERNETES_VERSION); when(kubernetesSupportedVersionDao.findById(Mockito.anyLong())).thenReturn(version); - kubernetesVersionService.updateKubernetesSupportedVersion(cmd); + KubernetesSupportedVersionResponse response = kubernetesVersionService.updateKubernetesSupportedVersion(cmd); + Assert.assertNotNull(response); + Assert.assertEquals(KubernetesSupportedVersion.State.Disabled.toString(), response.getState()); + Assert.assertEquals(KubernetesVersionService.MIN_KUBERNETES_VERSION, response.getSemanticVersion()); } } diff --git a/plugins/integrations/kubernetes-service/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/plugins/integrations/kubernetes-service/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000000..1f0955d450f --- /dev/null +++ b/plugins/integrations/kubernetes-service/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline