From 5fda9c36873e8221dc5c48d0e1ae5ad4cde3ddd1 Mon Sep 17 00:00:00 2001 From: Vishesh Date: Mon, 12 Jun 2023 16:04:23 +0530 Subject: [PATCH] Upgrade mockito (#7577) --- pom.xml | 3 +- .../java/com/cloud/utils/FileUtilTest.java | 25 +++-- .../java/com/cloud/utils/TestProfiler.java | 9 +- .../cloud/utils/UriUtilsParametrizedTest.java | 21 +--- .../com/cloud/utils/net/NetUtilsTest.java | 29 +++-- .../com/cloud/utils/ssh/SshHelperTest.java | 26 ++--- .../utils/validation/ChecksumUtilTest.java | 20 ++-- .../jsinterpreter/JsInterpreterTest.java | 12 +- .../ReflectionToStringBuilderUtilsTest.java | 103 ++++++++++-------- .../org.mockito.plugins.MockMaker | 1 + 10 files changed, 115 insertions(+), 134 deletions(-) create mode 100644 utils/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/pom.xml b/pom.xml index 10dce9226fc..2497dee7e0a 100644 --- a/pom.xml +++ b/pom.xml @@ -113,7 +113,7 @@ 1.13.1 5.9.1 18.0 - 3.2.4 + 3.12.4 2.0.5 1.0-20081010.060147 1.0.1 @@ -1062,6 +1062,7 @@ ui/public/** ui/legacy/** utils/testsmallfileinactive + utils/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/utils/src/test/java/com/cloud/utils/FileUtilTest.java b/utils/src/test/java/com/cloud/utils/FileUtilTest.java index 70ad39cd585..87e1a18e85a 100644 --- a/utils/src/test/java/com/cloud/utils/FileUtilTest.java +++ b/utils/src/test/java/com/cloud/utils/FileUtilTest.java @@ -20,49 +20,52 @@ import com.cloud.utils.ssh.SshHelper; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.MockedStatic; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.junit.MockitoJUnitRunner; import java.io.File; import static org.mockito.ArgumentMatchers.nullable; -@PrepareForTest(value = {SshHelper.class}) -@RunWith(PowerMockRunner.class) -@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.parsers.*", "javax.xml.*", "org.w3c.dom.*", "org.xml.*"}) +@RunWith(MockitoJUnitRunner.class) public class FileUtilTest { @Test public void successfulScpTest() throws Exception { - PowerMockito.mockStatic(SshHelper.class); + MockedStatic sshHelperMocked = Mockito.mockStatic(SshHelper.class); String basePath = "/tmp"; String[] files = new String[] { "file1.txt" }; int sshPort = 3922; String controlIp = "10.0.0.10"; String destPath = "/home/cloud/"; File pemFile = new File("/root/.ssh/id_rsa"); - PowerMockito.doNothing().when(SshHelper.class, "scpTo", Mockito.anyString(), Mockito.anyInt(), Mockito.anyString(), Mockito.any(File.class), nullable(String.class), Mockito.anyString(), Mockito.any(String[].class), Mockito.anyString()); + sshHelperMocked.when(() -> + SshHelper.scpTo( + Mockito.anyString(), Mockito.anyInt(), Mockito.anyString(), Mockito.any(File.class), nullable(String.class), Mockito.anyString(), Mockito.any(String[].class), Mockito.anyString() + )).then(invocation -> null); FileUtil.scpPatchFiles(controlIp, destPath, sshPort, pemFile, files, basePath); + sshHelperMocked.close(); } @Test public void FailingScpFilesTest() throws Exception { - PowerMockito.mockStatic(SshHelper.class); String basePath = "/tmp"; String[] files = new String[] { "file1.txt" }; int sshPort = 3922; String controlIp = "10.0.0.10"; String destPath = "/home/cloud/"; File pemFile = new File("/root/.ssh/id_rsa"); - PowerMockito.doThrow(new Exception()).when(SshHelper.class, "scpTo", Mockito.anyString(), Mockito.anyInt(), Mockito.anyString(), Mockito.any(File.class), Mockito.anyString(), Mockito.anyString(), Mockito.any(String[].class), Mockito.anyString()); + MockedStatic sshHelperMocked = Mockito.mockStatic(SshHelper.class); + sshHelperMocked.when(() -> + SshHelper.scpTo(Mockito.anyString(), Mockito.anyInt(), Mockito.anyString(), Mockito.any(File.class), Mockito.anyString(), Mockito.anyString(), Mockito.any(String[].class), Mockito.anyString() + )).thenThrow(new Exception()); try { FileUtil.scpPatchFiles(controlIp, destPath, sshPort, pemFile, files, basePath); } catch (Exception e) { Assert.assertEquals("Failed to scp files to system VM", e.getMessage()); } + sshHelperMocked.close(); } diff --git a/utils/src/test/java/com/cloud/utils/TestProfiler.java b/utils/src/test/java/com/cloud/utils/TestProfiler.java index 1520963c6e3..1d2d5f7aecd 100644 --- a/utils/src/test/java/com/cloud/utils/TestProfiler.java +++ b/utils/src/test/java/com/cloud/utils/TestProfiler.java @@ -23,16 +23,11 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; import com.cloud.utils.testcase.Log4jEnabledTestCase; +import org.mockito.junit.MockitoJUnitRunner; -@RunWith(PowerMockRunner.class) -@PowerMockIgnore({ "javax.management.*", "com.sun.org.apache.xerces.*", "javax.xml.*", - "org.xml.*", "org.w3c.dom.*", "com.sun.org.apache.xalan.*", "javax.activation.*" }) -@PrepareForTest(Profiler.class) +@RunWith(MockitoJUnitRunner.class) public class TestProfiler extends Log4jEnabledTestCase { private static final long SLEEP_TIME_NANO = 1000000000L; diff --git a/utils/src/test/java/com/cloud/utils/UriUtilsParametrizedTest.java b/utils/src/test/java/com/cloud/utils/UriUtilsParametrizedTest.java index 68479f51d9f..3f1e707c607 100644 --- a/utils/src/test/java/com/cloud/utils/UriUtilsParametrizedTest.java +++ b/utils/src/test/java/com/cloud/utils/UriUtilsParametrizedTest.java @@ -31,18 +31,12 @@ import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; +import org.mockito.MockedStatic; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.modules.junit4.PowerMockRunnerDelegate; import com.google.common.collect.ImmutableSet; -@RunWith(PowerMockRunner.class) -@PowerMockRunnerDelegate(Parameterized.class) -@PowerMockIgnore({"javax.xml.*", "org.apache.xerces.*", "org.xml.*", "org.w3c.*"}) +@RunWith(Parameterized.class) public class UriUtilsParametrizedTest { @FunctionalInterface public interface ThrowingBlock { @@ -149,14 +143,11 @@ public class UriUtilsParametrizedTest { } @Test - @PrepareForTest({UriUtils.class}) - public void validateUrl() throws Exception { + MockedStatic inetAddressMocked = Mockito.mockStatic(InetAddress.class); InetAddress inetAddressMock = Mockito.mock(InetAddress.class); - - PowerMockito.mockStatic(InetAddress.class); - PowerMockito.when(InetAddress.getByName(Mockito.anyString())).thenReturn(inetAddressMock); + inetAddressMocked.when(() -> InetAddress.getByName(Mockito.anyString())).thenReturn(inetAddressMock); if (expectSuccess) { UriUtils.validateUrl(format, url); @@ -164,14 +155,14 @@ public class UriUtilsParametrizedTest { assertThrows(() -> UriUtils.validateUrl(format, url), IllegalArgumentException.class); } - PowerMockito.verifyStatic(InetAddress.class); - InetAddress.getByName(Mockito.anyString()); + inetAddressMocked.verify(() -> InetAddress.getByName(Mockito.anyString())); Mockito.verify(inetAddressMock).isAnyLocalAddress(); Mockito.verify(inetAddressMock).isLinkLocalAddress(); Mockito.verify(inetAddressMock).isLoopbackAddress(); Mockito.verify(inetAddressMock).isMulticastAddress(); + inetAddressMocked.close(); } @Test diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index 53e2e3ae376..4a6c5df4fd0 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -52,15 +52,12 @@ import com.googlecode.ipv6.IPv6Address; import com.googlecode.ipv6.IPv6Network; import org.junit.runner.RunWith; +import org.mockito.MockedStatic; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.runners.MockitoJUnitRunner; -@RunWith(PowerMockRunner.class) -@PowerMockIgnore({"jdk.xml.internal.*", "javax.xml.parsers.*", "org.xml.sax.*", "org.w3c.dom.*"}) +@RunWith(MockitoJUnitRunner.class) public class NetUtilsTest { private static final String WIDE_SHARED_NET_CIDR_IP = "10.20.0.0"; private static final List WIDE_SHARED_NET_USED_IPS = List.of("10.20.0.22", "10.20.1.22", "10.20.2.22"); @@ -815,34 +812,34 @@ public class NetUtilsTest { } @Test - @PrepareForTest(NetUtils.class) public void getNetworkInterfaceTestReturnNullWhenGetByNameReturnsNull() throws SocketException { - PowerMockito.mockStatic(NetworkInterface.class); - PowerMockito.when(NetworkInterface.getByName(Mockito.anyString())).thenReturn(null); + MockedStatic networkInterfaceMocked = Mockito.mockStatic(NetworkInterface.class); + Mockito.when(NetworkInterface.getByName(Mockito.anyString())).thenReturn(null); NetworkInterface result = NetUtils.getNetworkInterface(" test "); Assert.assertNull(result); + networkInterfaceMocked.close(); } @Test - @PrepareForTest(NetUtils.class) public void getNetworkInterfaceTestReturnNullWhenGetByNameThrowsException() throws SocketException { - PowerMockito.mockStatic(NetworkInterface.class); - PowerMockito.when(NetworkInterface.getByName(Mockito.anyString())).thenThrow(SocketException.class); + MockedStatic networkInterfaceMocked = Mockito.mockStatic(NetworkInterface.class); + Mockito.when(NetworkInterface.getByName(Mockito.anyString())).thenThrow(SocketException.class); NetworkInterface result = NetUtils.getNetworkInterface(" test "); Assert.assertNull(result); + networkInterfaceMocked.close(); } @Test - @PrepareForTest(NetUtils.class) public void getNetworkInterfaceTestReturnInterfaceReturnedByGetByName() throws SocketException { - NetworkInterface expected = PowerMockito.mock(NetworkInterface.class); - PowerMockito.mockStatic(NetworkInterface.class); - PowerMockito.when(NetworkInterface.getByName(Mockito.anyString())).thenReturn(expected); + MockedStatic networkInterfaceMocked = Mockito.mockStatic(NetworkInterface.class); + NetworkInterface expected = Mockito.mock(NetworkInterface.class); + Mockito.when(NetworkInterface.getByName(Mockito.anyString())).thenReturn(expected); NetworkInterface result = NetUtils.getNetworkInterface(" test "); Assert.assertEquals(expected, result); + networkInterfaceMocked.close(); } } diff --git a/utils/src/test/java/com/cloud/utils/ssh/SshHelperTest.java b/utils/src/test/java/com/cloud/utils/ssh/SshHelperTest.java index 37bd089dfc5..04d84435abe 100644 --- a/utils/src/test/java/com/cloud/utils/ssh/SshHelperTest.java +++ b/utils/src/test/java/com/cloud/utils/ssh/SshHelperTest.java @@ -25,38 +25,31 @@ import java.io.InputStream; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.MockedStatic; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.runners.MockitoJUnitRunner; import com.trilead.ssh2.ChannelCondition; import com.trilead.ssh2.Connection; import com.trilead.ssh2.Session; -@PrepareForTest({ Thread.class, SshHelper.class }) -@PowerMockIgnore({ "javax.management.*", "com.sun.org.apache.xerces.*", "javax.xml.*", - "org.xml.*", "org.w3c.dom.*", "com.sun.org.apache.xalan.*", "javax.activation.*" }) -@RunWith(PowerMockRunner.class) +@RunWith(MockitoJUnitRunner.class) public class SshHelperTest { @Test public void canEndTheSshConnectionTest() throws Exception { - PowerMockito.spy(SshHelper.class); + MockedStatic sshHelperMocked = Mockito.mockStatic(SshHelper.class, Mockito.CALLS_REAL_METHODS); Session mockedSession = Mockito.mock(Session.class); - PowerMockito.doReturn(true).when(SshHelper.class, "isChannelConditionEof", Mockito.anyInt()); - Mockito.when(mockedSession.waitForCondition(ChannelCondition.EXIT_STATUS, 1l)).thenReturn(0); - PowerMockito.doNothing().when(SshHelper.class, "throwSshExceptionIfConditionsTimeout", Mockito.anyInt()); + Mockito.when(SshHelper.isChannelConditionEof(Mockito.anyInt())).thenReturn(true); + Mockito.when(mockedSession.waitForCondition(ChannelCondition.EXIT_STATUS, 1L)).thenReturn(0); SshHelper.canEndTheSshConnection(1, mockedSession, 0); - - PowerMockito.verifyStatic(SshHelper.class); - SshHelper.isChannelConditionEof(Mockito.anyInt()); - SshHelper.throwSshExceptionIfConditionsTimeout(Mockito.anyInt()); + sshHelperMocked.verify(() -> SshHelper.isChannelConditionEof(Mockito.anyInt()), Mockito.times(1)); + sshHelperMocked.verify(() -> SshHelper.throwSshExceptionIfConditionsTimeout(Mockito.anyInt())); Mockito.verify(mockedSession).waitForCondition(ChannelCondition.EXIT_STATUS, 1l); + sshHelperMocked.close(); } @Test(expected = SshException.class) @@ -143,7 +136,6 @@ public class SshHelperTest { @Test public void openConnectionSessionTest() throws IOException, InterruptedException { Connection conn = Mockito.mock(Connection.class); - PowerMockito.mockStatic(Thread.class); SshHelper.openConnectionSession(conn); Mockito.verify(conn).openSession(); diff --git a/utils/src/test/java/com/cloud/utils/validation/ChecksumUtilTest.java b/utils/src/test/java/com/cloud/utils/validation/ChecksumUtilTest.java index 08cc389621e..2b99275b978 100644 --- a/utils/src/test/java/com/cloud/utils/validation/ChecksumUtilTest.java +++ b/utils/src/test/java/com/cloud/utils/validation/ChecksumUtilTest.java @@ -20,37 +20,35 @@ import com.cloud.utils.script.Script; import org.apache.cloudstack.utils.security.DigestHelper; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.MockedStatic; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.junit.MockitoJUnitRunner; + import java.io.File; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -@PrepareForTest(value = {Script.class, DigestHelper.class}) -@RunWith(PowerMockRunner.class) -@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.parsers.*", "javax.xml.*", "org.w3c.dom.*", "org.xml.*"}) +@RunWith(MockitoJUnitRunner.class) public class ChecksumUtilTest { @Test public void invalidFileForCheckSumValidationTest() { - PowerMockito.mockStatic(Script.class); + MockedStatic