diff --git a/pom.xml b/pom.xml index c8cb6f4e..910884ea 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.jenkins-ci.plugins plugin - 4.16 + 4.27 @@ -33,7 +33,7 @@ io.jenkins.tools.bom bom-2.235.x - 26 + 918.vae501d2cdc99 import pom @@ -82,7 +82,7 @@ org.mockito - mockito-core + mockito-inline test @@ -91,26 +91,6 @@ - - org.powermock - powermock-module-junit4 - test - - - junit - junit - - - org.hamcrest - hamcrest-core - - - - - org.powermock - powermock-api-mockito2 - test - org.jenkins-ci.plugins.workflow diff --git a/src/test/java/hudson/tasks/MailAddressResolverTest.java b/src/test/java/hudson/tasks/MailAddressResolverTest.java index d2715463..dde0d48e 100644 --- a/src/test/java/hudson/tasks/MailAddressResolverTest.java +++ b/src/test/java/hudson/tasks/MailAddressResolverTest.java @@ -25,6 +25,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -40,19 +42,12 @@ import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; import org.jvnet.hudson.test.Bug; -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.MockedStatic; /** * @author Kohsuke Kawaguchi, ogondza */ -@RunWith(PowerMockRunner.class) -@PrepareForTest( {MailAddressResolver.class, Mailer.class, Mailer.DescriptorImpl.class}) -@PowerMockIgnore({"javax.security.*", "javax.xml.*"}) public class MailAddressResolverTest { private User user; @@ -62,44 +57,51 @@ public class MailAddressResolverTest { @Before public void setUp() throws Exception { - jenkins = PowerMockito.mock(Hudson.class); + jenkins = mock(Hudson.class); - user = PowerMockito.mock(User.class); + user = mock(User.class); when(user.getFullName()).thenReturn("Full name"); when(user.getId()).thenReturn("user_id"); - PowerMockito.spy(Mailer.class); - descriptor = PowerMockito.mock(Mailer.DescriptorImpl.class); - PowerMockito.doReturn(descriptor).when(Mailer.class, "descriptor"); + descriptor = mock(Mailer.DescriptorImpl.class); } @Test public void nameAlreadyIsAnAddress() throws Exception { + try (MockedStatic mockedMailer = mockStatic(Mailer.class)) { + mockedMailer.when(Mailer::descriptor).thenReturn(descriptor); validateUserPropertyAddress("user@example.com", "user@example.com", ""); + } } @Test public void nameContainsAddress() throws Exception { + try (MockedStatic mockedMailer = mockStatic(Mailer.class)) { + mockedMailer.when(Mailer::descriptor).thenReturn(descriptor); validateUserPropertyAddress("user@example.com", "User Name ", ""); + } } @Bug(5164) @Test public void test5164() throws Exception { + try (MockedStatic mockedMailer = mockStatic(Mailer.class)) { + mockedMailer.when(Mailer::descriptor).thenReturn(descriptor); validateUserPropertyAddress("user@example.com", "DOMAIN\\user", "@example.com"); + } } private void validateUserPropertyAddress( String address, String username, String suffix ) throws Exception { - PowerMockito.when(descriptor.getDefaultSuffix()).thenReturn(suffix); + when(descriptor.getDefaultSuffix()).thenReturn(suffix); - PowerMockito.when(user.getFullName()).thenReturn(username); - PowerMockito.when(user.getId()).thenReturn(username.replace('\\','_')); + when(user.getFullName()).thenReturn(username); + when(user.getId()).thenReturn(username.replace('\\','_')); String a = new UserPropertyMock(user, null).getConfiguredAddress(); assertEquals(address, a); @@ -115,31 +117,37 @@ public UserPropertyMock(User user, String emailAddress) { @Test public void doNotResolveWhenUsingFastResolution() throws Exception { + try (MockedStatic mockedMailer = mockStatic(Mailer.class); + MockedStatic mockedExtensionList = mockStatic(ExtensionList.class)) { + mockedMailer.when(Mailer::descriptor).thenReturn(descriptor); final MailAddressResolver resolver = mockResolver(); - configure(resolver); + configure(mockedExtensionList, resolver); final String address = MailAddressResolver.resolveFast(user); verify(resolver, never()).findMailAddressFor(user); assertNull(address); + } } @Test public void doResolveWhenNotUsingFastResolution() throws Exception { + try (MockedStatic mockedExtensionList = mockStatic(ExtensionList.class)) { final MailAddressResolver resolver = mockResolver(); - PowerMockito.when(resolver.findMailAddressFor(user)).thenReturn("a@b.c"); + when(resolver.findMailAddressFor(user)).thenReturn("a@b.c"); - configure(resolver); + configure(mockedExtensionList, resolver); final String address = MailAddressResolver.resolve(user); verify(resolver, times(1)).findMailAddressFor(user); assertEquals("a@b.c", address); + } } @Test @@ -155,16 +163,11 @@ public void doResolveWhenUsingExplicitlUserEmail() { private MailAddressResolver mockResolver() { - return PowerMockito.mock(MailAddressResolver.class); + return mock(MailAddressResolver.class); } - private void configure(final MailAddressResolver... resolvers) throws Exception { - - PowerMockito.spy(MailAddressResolver.class); - - PowerMockito.doReturn(new MockExtensionList(jenkins, resolvers)) - .when(MailAddressResolver.class, "all") - ; + private void configure(final MockedStatic mockedExtensionList, final MailAddressResolver... resolvers) { + mockedExtensionList.when(() -> ExtensionList.lookup(MailAddressResolver.class)).thenReturn(new MockExtensionList(jenkins, resolvers)); } private static class MockExtensionList extends ExtensionList { diff --git a/src/test/java/hudson/tasks/MailSenderTest.java b/src/test/java/hudson/tasks/MailSenderTest.java index b5fe769b..ebffc967 100644 --- a/src/test/java/hudson/tasks/MailSenderTest.java +++ b/src/test/java/hudson/tasks/MailSenderTest.java @@ -20,15 +20,16 @@ import org.acegisecurity.Authentication; import org.acegisecurity.userdetails.UsernameNotFoundException; import static org.hamcrest.Matchers.containsString; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertTrue; import org.junit.Test; -import org.junit.runner.RunWith; import org.jvnet.hudson.test.Issue; -import static 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 static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.when; +import org.mockito.MockedStatic; /** * Test case for the {@link MailSender} @@ -37,9 +38,6 @@ * * @author Christoph Kutzinski */ -@RunWith(PowerMockRunner.class) -@PrepareForTest(Jenkins.class) -@PowerMockIgnore({"javax.security.auth.Subject", "javax.security.*", "javax.xml.*"}) // otherwise as in https://groups.google.com/d/msg/jenkinsci-dev/n5sdCxrccSk/7K4yTTc7XG4J mock(ACL.class) in Java 8 fails with: java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.acegisecurity.Authentication$$EnhancerByMockitoWithCGLIB$$31bf4863.implies(Ljavax/security/auth/Subject;)Z" the class loader (instance of org/powermock/core/classloader/MockClassLoader) of the current class, org/acegisecurity/Authentication$$EnhancerByMockitoWithCGLIB$$31bf4863, and the class loader (instance of ) for interface java/security/Principal have different Class objects for the type javax/security/auth/Subject used in the signature @SuppressWarnings("rawtypes") public class MailSenderTest { @@ -51,11 +49,10 @@ public class MailSenderTest { @SuppressWarnings("unchecked") @Test public void testIncludeUpstreamCulprits() throws Exception { - final Jenkins jenkins = PowerMockito.mock(Jenkins.class); - PowerMockito.when(jenkins.isUseSecurity()).thenReturn(false); - PowerMockito.mockStatic(Jenkins.class); - PowerMockito.doReturn(jenkins).when(Jenkins.class, "getInstanceOrNull"); - PowerMockito.doReturn(jenkins).when(Jenkins.class, "get"); + final Jenkins jenkins = mock(Jenkins.class); + when(jenkins.isUseSecurity()).thenReturn(false); + try (MockedStatic mockedJenkins = mockStatic(Jenkins.class)) { + mockedJenkins.when(Jenkins::get).thenReturn(jenkins); AbstractProject upstreamProject = mock(AbstractProject.class); @@ -112,6 +109,7 @@ public void testIncludeUpstreamCulprits() throws Exception { assertFalse(emailList.contains("this.one.should.not.be.included@example.com")); assertTrue(emailList.contains("this.one.must.be.included@example.com")); assertTrue(emailList.contains("this.one.must.be.included.too@example.com")); + } } /** @@ -135,11 +133,10 @@ private static void createPreviousNextRelationShip(AbstractBuild... builds) { @Issue("SECURITY-372") @Test public void forbiddenMail() throws Exception { - final Jenkins jenkins = PowerMockito.mock(Jenkins.class); - PowerMockito.when(jenkins.isUseSecurity()).thenReturn(true); - PowerMockito.mockStatic(Jenkins.class); - PowerMockito.doReturn(jenkins).when(Jenkins.class, "getInstanceOrNull"); - PowerMockito.doReturn(jenkins).when(Jenkins.class, "get"); + final Jenkins jenkins = mock(Jenkins.class); + when(jenkins.isUseSecurity()).thenReturn(true); + try (MockedStatic mockedJenkins = mockStatic(Jenkins.class)) { + mockedJenkins.when(Jenkins::get).thenReturn(jenkins); ACL acl = mock(ACL.class); User authorizedU = mock(User.class); when(authorizedU.getProperty(Mailer.UserProperty.class)).thenReturn(new Mailer.UserProperty("authorized@mycorp")); @@ -186,6 +183,7 @@ private static void createPreviousNextRelationShip(AbstractBuild... builds) { } finally { MailSender.SEND_TO_USERS_WITHOUT_READ = false; } + } } } diff --git a/src/test/java/jenkins/plugins/mailer/tasks/MailAddressFilterTest.java b/src/test/java/jenkins/plugins/mailer/tasks/MailAddressFilterTest.java index 62eee37d..4707a08d 100644 --- a/src/test/java/jenkins/plugins/mailer/tasks/MailAddressFilterTest.java +++ b/src/test/java/jenkins/plugins/mailer/tasks/MailAddressFilterTest.java @@ -43,18 +43,12 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; -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.MockedStatic; +import org.mockito.Mockito; /** * @author Mudiaga Obada */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({ MailAddressFilter.class, AbstractBuild.class, BuildListener.class }) -@PowerMockIgnore({"javax.security.*", "javax.xml.*"}) public class MailAddressFilterTest { private Hudson jenkins; @@ -64,9 +58,9 @@ public class MailAddressFilterTest { @Before public void setUp() throws Exception { - jenkins = PowerMockito.mock(Hudson.class); - build = PowerMockito.mock(AbstractBuild.class); - listener = PowerMockito.mock(BuildListener.class); + jenkins = Mockito.mock(Hudson.class); + build = Mockito.mock(AbstractBuild.class); + listener = Mockito.mock(BuildListener.class); } @@ -74,6 +68,9 @@ public void setUp() throws Exception { @Test public void testIdentity() throws Exception { + try (MockedStatic mocked = Mockito.mockStatic(Jenkins.class)) { + mocked.when(Jenkins::get).thenReturn(jenkins); + Set rcp = getRecipients(); configure(Collections. emptyList()); @@ -84,6 +81,7 @@ public void testIdentity() throws Exception { for (InternetAddress a : rcp) { Assert.assertTrue(filtered.contains(a)); } + } } @@ -91,13 +89,16 @@ public void testIdentity() throws Exception { @Test public void testFilterExtension() throws Exception { + try (MockedStatic mocked = Mockito.mockStatic(Jenkins.class)) { + mocked.when(Jenkins::get).thenReturn(jenkins); + InternetAddress filteredAddress = new InternetAddress("systemUser@example.com"); Set rcp = getRecipients(); rcp.add(filteredAddress); - MailAddressFilter filter = PowerMockito.mock(MailAddressFilter.class); - PowerMockito.when(filter.shouldFilter(build, listener, filteredAddress)).thenReturn(true); + MailAddressFilter filter = Mockito.mock(MailAddressFilter.class); + Mockito.when(filter.shouldFilter(build, listener, filteredAddress)).thenReturn(true); configure(Arrays.asList(filter)); @@ -106,6 +107,7 @@ public void testFilterExtension() throws Exception { Assert.assertEquals(rcp.size() - 1, filtered.size()); Assert.assertTrue(!filtered.contains(filteredAddress)); + } } @@ -119,9 +121,7 @@ private Set getRecipients() throws AddressException { private void configure(List filters) throws Exception { - PowerMockito.spy(MailAddressFilter.class); - - PowerMockito.doReturn(new MockExtensionList(jenkins, filters)).when(MailAddressFilter.class, "allExtensions"); + Mockito.when(jenkins.getExtensionList(MailAddressFilter.class)).thenReturn(new MockExtensionList(jenkins, filters)); } private static class MockExtensionList extends ExtensionList {