From 6c2360f624d4bb681f07b2e7c72b460a48c44200 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Tue, 23 Aug 2022 11:09:43 -0700 Subject: [PATCH] Remove PowerMock --- .mvn/extensions.xml | 2 +- pom.xml | 44 +---------- .../plugins/ec2/AmazonEC2CloudUnitTest.java | 27 ++++--- .../hudson/plugins/ec2/CloudHelperTest.java | 76 +++++++------------ .../java/hudson/plugins/ec2/EC2CloudTest.java | 46 +++++------ .../java/hudson/plugins/ec2/EC2StepTest.java | 8 +- .../plugins/ec2/SlaveTemplateUnitTest.java | 35 ++++++--- 7 files changed, 93 insertions(+), 145 deletions(-) diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml index a65d82e1b..9ac2968bc 100644 --- a/.mvn/extensions.xml +++ b/.mvn/extensions.xml @@ -2,6 +2,6 @@ io.jenkins.tools.incrementals git-changelist-maven-extension - 1.3 + 1.4 diff --git a/pom.xml b/pom.xml index fe7ba1767..1ab361105 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ THE SOFTWARE. org.jenkins-ci.plugins plugin - 4.40 + 4.47 @@ -69,7 +69,7 @@ THE SOFTWARE. - scm:git:git://github.com/${gitHubRepo}.git + scm:git:https://github.com/${gitHubRepo}.git scm:git:git@github.com:${gitHubRepo}.git https://github.com/${gitHubRepo} ${scmTag} @@ -79,10 +79,7 @@ THE SOFTWARE. 1.69 -SNAPSHOT 2.289.3 - 8 jenkinsci/${project.artifactId}-plugin - 3.12.4 - 2.0.9 @@ -144,21 +141,9 @@ THE SOFTWARE. org.jenkins-ci.plugins.workflow workflow-step-api - - org.powermock - powermock-module-junit4 - ${powermock.version} - test - - - org.powermock - powermock-api-mockito2 - ${powermock.version} - test - org.mockito - mockito-core + mockito-inline test @@ -195,17 +180,6 @@ THE SOFTWARE. io.jenkins.configuration-as-code test-harness test - - - - joda-time - joda-time - - org.testcontainers @@ -239,17 +213,6 @@ THE SOFTWARE. import pom - - joda-time - joda-time - 2.10.14 - - - - com.fasterxml.jackson.core - jackson-annotations - 2.13.2 - @@ -274,7 +237,6 @@ THE SOFTWARE. true 1.45 - 8 diff --git a/src/test/java/hudson/plugins/ec2/AmazonEC2CloudUnitTest.java b/src/test/java/hudson/plugins/ec2/AmazonEC2CloudUnitTest.java index 26dd89f5d..5c8b66f17 100644 --- a/src/test/java/hudson/plugins/ec2/AmazonEC2CloudUnitTest.java +++ b/src/test/java/hudson/plugins/ec2/AmazonEC2CloudUnitTest.java @@ -27,18 +27,16 @@ import com.amazonaws.services.ec2.model.Tag; +import org.mockito.MockedStatic; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; +import org.mockito.junit.MockitoJUnitRunner; import hudson.plugins.ec2.util.AmazonEC2FactoryMockImpl; import jenkins.model.Jenkins; -import org.powermock.reflect.Whitebox; import org.junit.runner.RunWith; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; import com.amazonaws.services.ec2.model.Instance; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashSet; @@ -46,6 +44,7 @@ import java.net.URL; import java.util.Collections; import java.util.List; +import java.util.Set; import static hudson.plugins.ec2.EC2Cloud.DEFAULT_EC2_ENDPOINT; import static org.junit.Assert.assertEquals; @@ -56,9 +55,7 @@ /** * Unit tests related to {@link AmazonEC2Cloud}, but do not require a Jenkins instance. */ -@PowerMockIgnore({"javax.crypto.*", "org.hamcrest.*", "javax.net.ssl.*", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*"}) -@RunWith(PowerMockRunner.class) -@PrepareForTest({EC2Cloud.class, Jenkins.class}) +@RunWith(MockitoJUnitRunner.Silent.class) public class AmazonEC2CloudUnitTest { @Test @@ -90,15 +87,14 @@ public void testInstaceCap() throws Exception { @Test public void testSpotInstanceCount() throws Exception { final int numberOfSpotInstanceRequests = 105; - AmazonEC2Cloud cloud = PowerMockito.spy(new AmazonEC2Cloud("us-east-1", true, "abc", "us-east-1", + AmazonEC2Cloud cloud = Mockito.spy(new AmazonEC2Cloud("us-east-1", true, "abc", "us-east-1", null, "key", null, Collections.emptyList(), "roleArn", "roleSessionName")); - PowerMockito.mockStatic(Jenkins.class); Jenkins jenkinsMock = mock(Jenkins.class); EC2SpotSlave spotSlaveMock = mock(EC2SpotSlave.class); - - PowerMockito.when(Jenkins.get()).thenReturn(jenkinsMock); - PowerMockito.when(jenkinsMock.getNodes()).thenReturn(Collections.singletonList(spotSlaveMock)); + try (MockedStatic mocked = Mockito.mockStatic(Jenkins.class)) { + mocked.when(Jenkins::get).thenReturn(jenkinsMock); + Mockito.when(jenkinsMock.getNodes()).thenReturn(Collections.singletonList(spotSlaveMock)); when(spotSlaveMock.getSpotRequest()).thenReturn(null); when(spotSlaveMock.getSpotInstanceRequestId()).thenReturn("sir-id"); @@ -111,11 +107,14 @@ public void testSpotInstanceCount() throws Exception { Mockito.doReturn(AmazonEC2FactoryMockImpl.createAmazonEC2Mock(null)).when(cloud).connect(); + Method countCurrentEC2SpotSlaves = EC2Cloud.class.getDeclaredMethod("countCurrentEC2SpotSlaves", SlaveTemplate.class, String.class, Set.class); + countCurrentEC2SpotSlaves.setAccessible(true); Object[] params = {null, "jenkinsurl", new HashSet()}; - int n = Whitebox.invokeMethod(cloud, "countCurrentEC2SpotSlaves", params); + int n = (int) countCurrentEC2SpotSlaves.invoke(cloud, params); // Should equal number of spot instance requests + 1 for spot nodes not having a spot instance request assertEquals(numberOfSpotInstanceRequests+1, n); + } } @Test diff --git a/src/test/java/hudson/plugins/ec2/CloudHelperTest.java b/src/test/java/hudson/plugins/ec2/CloudHelperTest.java index 64c45d87a..5611db222 100644 --- a/src/test/java/hudson/plugins/ec2/CloudHelperTest.java +++ b/src/test/java/hudson/plugins/ec2/CloudHelperTest.java @@ -6,8 +6,6 @@ import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.Instance; import com.amazonaws.services.ec2.model.Reservation; -import jenkins.model.Jenkins; -import jenkins.model.JenkinsLocationConfiguration; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -16,11 +14,8 @@ import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; +import org.mockito.junit.MockitoJUnitRunner; import org.mockito.stubbing.Answer; -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 java.util.Collections; @@ -28,9 +23,7 @@ import static org.junit.Assert.assertEquals; -@RunWith(PowerMockRunner.class) -@PrepareForTest({JenkinsLocationConfiguration.class, CloudHelper.class, Jenkins.class, SlaveTemplate.class, DescribeInstancesResult.class, Instance.class, EC2AbstractSlave.class}) -@PowerMockIgnore({"javax.crypto.*", "org.hamcrest.*", "javax.net.ssl.*", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*"}) +@RunWith(MockitoJUnitRunner.class) public class CloudHelperTest { @Mock @@ -41,49 +34,38 @@ public void init() throws Exception { cloud = new AmazonEC2Cloud("us-east-1", true, "abc", "us-east-1", null, "ghi", "3", Collections.emptyList(), "roleArn", "roleSessionName"); - - PowerMockito.mockStatic(Thread.class); } @Test public void testGetInstanceHappyPath() throws Exception { /* Mocked items */ - EC2Cloud spyCloud = PowerMockito.spy(cloud); - AmazonEC2 mockEc2 = PowerMockito.mock(AmazonEC2.class); - DescribeInstancesResult mockedDIResult = PowerMockito.mock(DescribeInstancesResult.class); - Reservation mockedReservation = PowerMockito.mock(Reservation.class); + EC2Cloud spyCloud = Mockito.spy(cloud); + AmazonEC2 mockEc2 = Mockito.mock(AmazonEC2.class); + DescribeInstancesResult mockedDIResult = Mockito.mock(DescribeInstancesResult.class); + Reservation mockedReservation = Mockito.mock(Reservation.class); List reservationResults = Collections.singletonList(mockedReservation); - Instance mockedInstance = PowerMockito.mock(Instance.class); + Instance mockedInstance = Mockito.mock(Instance.class); List instanceResults = Collections.singletonList(mockedInstance); - PowerMockito.doReturn(mockEc2).when(spyCloud).connect(); - PowerMockito.doReturn(mockedDIResult).when(mockEc2).describeInstances(Mockito.any(DescribeInstancesRequest.class)); - PowerMockito.doReturn(reservationResults).when(mockedDIResult).getReservations(); - PowerMockito.doReturn(instanceResults).when(mockedReservation).getInstances(); + Mockito.doReturn(mockEc2).when(spyCloud).connect(); + Mockito.doReturn(mockedDIResult).when(mockEc2).describeInstances(Mockito.any(DescribeInstancesRequest.class)); + Mockito.doReturn(reservationResults).when(mockedDIResult).getReservations(); + Mockito.doReturn(instanceResults).when(mockedReservation).getInstances(); /* Actual call to test*/ Instance result = CloudHelper.getInstance("test-instance-id", spyCloud); assertEquals(mockedInstance, result); } - @Test - public void testGetInstanceWithRetryHappyPath() throws Exception { - Instance mockedInstance = PowerMockito.mock(Instance.class); - PowerMockito.stub(PowerMockito.method(CloudHelper.class, "getInstance")).toReturn(mockedInstance); - - Instance result = CloudHelper.getInstanceWithRetry("test-instance-id", cloud); - assertEquals(mockedInstance, result); - } - @Test public void testGetInstanceWithRetryInstanceNotFound() throws Exception { /* Mocked items */ - EC2Cloud spyCloud = PowerMockito.spy(cloud); - AmazonEC2 mockEc2 = PowerMockito.mock(AmazonEC2.class); - DescribeInstancesResult mockedDIResult = PowerMockito.mock(DescribeInstancesResult.class); - Reservation mockedReservation = PowerMockito.mock(Reservation.class); + EC2Cloud spyCloud = Mockito.spy(cloud); + AmazonEC2 mockEc2 = Mockito.mock(AmazonEC2.class); + DescribeInstancesResult mockedDIResult = Mockito.mock(DescribeInstancesResult.class); + Reservation mockedReservation = Mockito.mock(Reservation.class); List reservationResults = Collections.singletonList(mockedReservation); - Instance mockedInstance = PowerMockito.mock(Instance.class); + Instance mockedInstance = Mockito.mock(Instance.class); List instanceResults = Collections.singletonList(mockedInstance); AmazonServiceException amazonServiceException = new AmazonServiceException("test exception"); amazonServiceException.setErrorCode("InvalidInstanceID.NotFound"); @@ -99,10 +81,10 @@ public DescribeInstancesResult answer(InvocationOnMock invocation) throws Throwa } }; - PowerMockito.doReturn(mockEc2).when(spyCloud).connect(); - PowerMockito.doAnswer(answerWithRetry).when(mockEc2).describeInstances(Mockito.any(DescribeInstancesRequest.class)); - PowerMockito.doReturn(reservationResults).when(mockedDIResult).getReservations(); - PowerMockito.doReturn(instanceResults).when(mockedReservation).getInstances(); + Mockito.doReturn(mockEc2).when(spyCloud).connect(); + Mockito.doAnswer(answerWithRetry).when(mockEc2).describeInstances(Mockito.any(DescribeInstancesRequest.class)); + Mockito.doReturn(reservationResults).when(mockedDIResult).getReservations(); + Mockito.doReturn(instanceResults).when(mockedReservation).getInstances(); /* Actual call to test*/ Instance result = CloudHelper.getInstanceWithRetry("test-instance-id", spyCloud); @@ -112,12 +94,12 @@ public DescribeInstancesResult answer(InvocationOnMock invocation) throws Throwa @Test public void testGetInstanceWithRetryRequestExpired() throws Exception { /* Mocked items */ - EC2Cloud spyCloud = PowerMockito.spy(cloud); - AmazonEC2 mockEc2 = PowerMockito.mock(AmazonEC2.class); - DescribeInstancesResult mockedDIResult = PowerMockito.mock(DescribeInstancesResult.class); - Reservation mockedReservation = PowerMockito.mock(Reservation.class); + EC2Cloud spyCloud = Mockito.spy(cloud); + AmazonEC2 mockEc2 = Mockito.mock(AmazonEC2.class); + DescribeInstancesResult mockedDIResult = Mockito.mock(DescribeInstancesResult.class); + Reservation mockedReservation = Mockito.mock(Reservation.class); List reservationResults = Collections.singletonList(mockedReservation); - Instance mockedInstance = PowerMockito.mock(Instance.class); + Instance mockedInstance = Mockito.mock(Instance.class); List instanceResults = Collections.singletonList(mockedInstance); AmazonServiceException amazonServiceException = new AmazonServiceException("test exception"); amazonServiceException.setErrorCode("RequestExpired"); @@ -134,10 +116,10 @@ public DescribeInstancesResult answer(InvocationOnMock invocation) throws Throwa } }; - PowerMockito.doReturn(mockEc2).when(spyCloud).connect(); - PowerMockito.doAnswer(answerWithRetry).when(mockEc2).describeInstances(Mockito.any(DescribeInstancesRequest.class)); - PowerMockito.doReturn(reservationResults).when(mockedDIResult).getReservations(); - PowerMockito.doReturn(instanceResults).when(mockedReservation).getInstances(); + Mockito.doReturn(mockEc2).when(spyCloud).connect(); + Mockito.doAnswer(answerWithRetry).when(mockEc2).describeInstances(Mockito.any(DescribeInstancesRequest.class)); + Mockito.doReturn(reservationResults).when(mockedDIResult).getReservations(); + Mockito.doReturn(instanceResults).when(mockedReservation).getInstances(); /* Actual call to test*/ Instance result = CloudHelper.getInstanceWithRetry("test-instance-id", spyCloud); diff --git a/src/test/java/hudson/plugins/ec2/EC2CloudTest.java b/src/test/java/hudson/plugins/ec2/EC2CloudTest.java index 40ac36588..c8ef46e4d 100644 --- a/src/test/java/hudson/plugins/ec2/EC2CloudTest.java +++ b/src/test/java/hudson/plugins/ec2/EC2CloudTest.java @@ -5,16 +5,13 @@ import com.amazonaws.services.ec2.model.Instance; import hudson.model.Node; import jenkins.model.Jenkins; -import jenkins.model.JenkinsLocationConfiguration; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; +import org.mockito.junit.MockitoJUnitRunner; import org.mockito.stubbing.Answer; -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 java.util.ArrayList; import java.util.Arrays; @@ -25,9 +22,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; -@RunWith(PowerMockRunner.class) -@PrepareForTest({JenkinsLocationConfiguration.class, AmazonEC2.class, Jenkins.class, SlaveTemplate.class, DescribeInstancesResult.class, Instance.class, EC2AbstractSlave.class}) -@PowerMockIgnore({"javax.crypto.*", "org.hamcrest.*", "javax.net.ssl.*", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*"}) +@RunWith(MockitoJUnitRunner.class) public class EC2CloudTest { @Test @@ -36,24 +31,24 @@ public void testReattachOrphanStoppedNodes() throws Exception { AmazonEC2Cloud cloud = new AmazonEC2Cloud("us-east-1", true, "abc", "us-east-1", null, "ghi", "3", Collections.emptyList(), "roleArn", "roleSessionName"); - EC2Cloud spyCloud = PowerMockito.spy(cloud); - AmazonEC2 mockEc2 = PowerMockito.mock(AmazonEC2.class); - Jenkins mockJenkins = PowerMockito.mock(Jenkins.class); - EC2AbstractSlave mockOrphanNode = PowerMockito.mock(EC2AbstractSlave.class); - SlaveTemplate mockSlaveTemplate = PowerMockito.mock(SlaveTemplate.class); - DescribeInstancesResult mockedDIResult = PowerMockito.mock(DescribeInstancesResult.class); - Instance mockedInstance = PowerMockito.mock(Instance.class); + EC2Cloud spyCloud = Mockito.spy(cloud); + AmazonEC2 mockEc2 = Mockito.mock(AmazonEC2.class); + Jenkins mockJenkins = Mockito.mock(Jenkins.class); + EC2AbstractSlave mockOrphanNode = Mockito.mock(EC2AbstractSlave.class); + SlaveTemplate mockSlaveTemplate = Mockito.mock(SlaveTemplate.class); + DescribeInstancesResult mockedDIResult = Mockito.mock(DescribeInstancesResult.class); + Instance mockedInstance = Mockito.mock(Instance.class); List listOfMockedInstances = new ArrayList<>(); listOfMockedInstances.add(mockedInstance); - PowerMockito.mockStatic(Jenkins.class); - Mockito.when(Jenkins.getInstanceOrNull()).thenReturn(mockJenkins); + try (MockedStatic mocked = Mockito.mockStatic(Jenkins.class)) { + mocked.when(Jenkins::getInstanceOrNull).thenReturn(mockJenkins); EC2AbstractSlave[] orphanNodes = {mockOrphanNode}; - PowerMockito.doReturn(Arrays.asList(orphanNodes)).when(mockSlaveTemplate).toSlaves(eq(listOfMockedInstances)); + Mockito.doReturn(Arrays.asList(orphanNodes)).when(mockSlaveTemplate).toSlaves(eq(listOfMockedInstances)); List listOfJenkinsNodes = new ArrayList<>(); - PowerMockito.doAnswer(new Answer() { + Mockito.doAnswer(new Answer() { public Void answer(InvocationOnMock invocation) { Node n = (Node) invocation.getArguments()[0]; listOfJenkinsNodes.add(n); @@ -61,12 +56,12 @@ public Void answer(InvocationOnMock invocation) { } }).when(mockJenkins).addNode(Mockito.any(Node.class)); - PowerMockito.doReturn(null).when(mockOrphanNode).toComputer(); - PowerMockito.doReturn(false).when(mockOrphanNode).getStopOnTerminate(); - PowerMockito.doReturn(mockEc2).when(spyCloud).connect(); - PowerMockito.doReturn(mockedDIResult).when(mockSlaveTemplate).getDescribeInstanceResult(Mockito.any(AmazonEC2.class), eq(true)); - PowerMockito.doReturn(listOfMockedInstances).when(mockSlaveTemplate).findOrphansOrStopped(eq(mockedDIResult), Mockito.anyInt()); - PowerMockito.doNothing().when(mockSlaveTemplate).wakeOrphansOrStoppedUp(Mockito.any(AmazonEC2.class), eq(listOfMockedInstances)); + Mockito.doReturn(null).when(mockOrphanNode).toComputer(); + Mockito.doReturn(false).when(mockOrphanNode).getStopOnTerminate(); + Mockito.doReturn(mockEc2).when(spyCloud).connect(); + Mockito.doReturn(mockedDIResult).when(mockSlaveTemplate).getDescribeInstanceResult(Mockito.any(AmazonEC2.class), eq(true)); + Mockito.doReturn(listOfMockedInstances).when(mockSlaveTemplate).findOrphansOrStopped(eq(mockedDIResult), Mockito.anyInt()); + Mockito.doNothing().when(mockSlaveTemplate).wakeOrphansOrStoppedUp(Mockito.any(AmazonEC2.class), eq(listOfMockedInstances)); /* Actual call to test*/ spyCloud.attemptReattachOrphanOrStoppedNodes(mockJenkins, mockSlaveTemplate, 1); @@ -75,5 +70,6 @@ public Void answer(InvocationOnMock invocation) { Mockito.verify(mockSlaveTemplate, times(1)).wakeOrphansOrStoppedUp(Mockito.any(AmazonEC2.class), eq(listOfMockedInstances)); Node[] expectedNodes = {mockOrphanNode}; assertArrayEquals(expectedNodes, listOfJenkinsNodes.toArray()); + } } } diff --git a/src/test/java/hudson/plugins/ec2/EC2StepTest.java b/src/test/java/hudson/plugins/ec2/EC2StepTest.java index abe82729f..901070652 100644 --- a/src/test/java/hudson/plugins/ec2/EC2StepTest.java +++ b/src/test/java/hudson/plugins/ec2/EC2StepTest.java @@ -15,9 +15,7 @@ import org.jvnet.hudson.test.JenkinsRule; import org.mockito.Mock; import org.mockito.internal.stubbing.answers.ThrowsException; -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.util.ArrayList; import java.util.Collections; @@ -34,9 +32,7 @@ /** * @author Alicia Doblas */ -@PowerMockIgnore({"javax.crypto.*", "org.hamcrest.*", "javax.net.ssl.*", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*"}) -@RunWith(PowerMockRunner.class) -@PrepareForTest({EC2AbstractSlave.class, SlaveTemplate.class}) +@RunWith(MockitoJUnitRunner.class) public class EC2StepTest { @Rule public JenkinsRule r = new JenkinsRule(); diff --git a/src/test/java/hudson/plugins/ec2/SlaveTemplateUnitTest.java b/src/test/java/hudson/plugins/ec2/SlaveTemplateUnitTest.java index c64dd9cf6..672827bb9 100644 --- a/src/test/java/hudson/plugins/ec2/SlaveTemplateUnitTest.java +++ b/src/test/java/hudson/plugins/ec2/SlaveTemplateUnitTest.java @@ -11,11 +11,12 @@ import org.junit.Before; import org.junit.Test; import org.jvnet.hudson.test.Issue; -import org.powermock.reflect.Whitebox; -import org.powermock.reflect.internal.WhiteboxImpl; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Arrays; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -74,8 +75,10 @@ protected Object readResolve() { awsTags.add(new Tag(EC2Tag.TAG_NAME_JENKINS_SLAVE_TYPE, "value1")); awsTags.add(new Tag(EC2Tag.TAG_NAME_JENKINS_SLAVE_TYPE, "value2")); - final Object params[] = { ec2, awsTags, "InvalidInstanceRequestID.NotFound", instanceId }; - Whitebox.invokeMethod(orig, "updateRemoteTags", params); + Method updateRemoteTags = SlaveTemplate.class.getDeclaredMethod("updateRemoteTags", AmazonEC2.class, Collection.class, String.class, String[].class); + updateRemoteTags.setAccessible(true); + final Object params[] = {ec2, awsTags, "InvalidInstanceRequestID.NotFound", new String[]{instanceId}}; + updateRemoteTags.invoke(orig, params); assertEquals(0, handler.getRecords().size()); } @@ -111,8 +114,10 @@ protected Object readResolve() { awsTags.add(new Tag(EC2Tag.TAG_NAME_JENKINS_SLAVE_TYPE, "value1")); awsTags.add(new Tag(EC2Tag.TAG_NAME_JENKINS_SLAVE_TYPE, "value2")); - final Object params[] = { ec2, awsTags, "InvalidSpotInstanceRequestID.NotFound", instanceId }; - Whitebox.invokeMethod(orig, "updateRemoteTags", params); + Method updateRemoteTags = SlaveTemplate.class.getDeclaredMethod("updateRemoteTags", AmazonEC2.class, Collection.class, String.class, String[].class); + updateRemoteTags.setAccessible(true); + final Object params[] = {ec2, awsTags, "InvalidSpotInstanceRequestID.NotFound", new String[]{instanceId}}; + updateRemoteTags.invoke(orig, params); assertEquals(5, handler.getRecords().size()); @@ -137,12 +142,18 @@ private void doTestMakeDescribeImagesRequest(SlaveTemplate template, template.setAmiOwners(testOwners); template.setAmiUsers(testUsers); template.setAmiFilters(testFilters); + Method makeDescribeImagesRequest = SlaveTemplate.class.getDeclaredMethod("makeDescribeImagesRequest"); + makeDescribeImagesRequest.setAccessible(true); if (shouldRaise) { - assertThrows(AmazonClientException.class, () -> - Whitebox.invokeMethod(template, "makeDescribeImagesRequest")); + assertThrows(AmazonClientException.class, () -> { + try { + makeDescribeImagesRequest.invoke(template); + } catch (InvocationTargetException e) { + throw e.getCause(); + } + }); } else { - DescribeImagesRequest request = Whitebox.invokeMethod(template, - "makeDescribeImagesRequest"); + DescribeImagesRequest request = (DescribeImagesRequest) makeDescribeImagesRequest.invoke(template); assertEquals(expectedImageIds, request.getImageIds()); assertEquals(expectedOwners, request.getOwners()); assertEquals(expectedUsers, request.getExecutableUsers()); @@ -324,7 +335,9 @@ protected Object readResolve() { if (rootVolumeEnum instanceof EbsEncryptRootVolume) { template.ebsEncryptRootVolume = rootVolumeEnum; }; - WhiteboxImpl.invokeMethod(template, "setupRootDevice", image, deviceMappings); + Method setupRootDevice = SlaveTemplate.class.getDeclaredMethod("setupRootDevice", Image.class, List.class); + setupRootDevice.setAccessible(true); + setupRootDevice.invoke(template, image, deviceMappings); return image.getBlockDeviceMappings().get(0).getEbs().getEncrypted(); }