diff --git a/pom.xml b/pom.xml index efe552b..4eb7d58 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.jenkins-ci.plugins plugin - 5.2 + 5.7 io.jenkins.plugins jira-integration @@ -19,7 +19,7 @@ The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt + https://www.apache.org/licenses/LICENSE-2.0.txt repo @@ -56,7 +56,7 @@ io.jenkins.tools.bom bom-${jenkins.baseline}.x - 3613.v584fca_12cf5c + 4136.vca_c3202a_7fd1 import pom diff --git a/src/test/java/org/marvelution/jji/AbstractTechnicalTest.java b/src/test/java/org/marvelution/jji/AbstractTechnicalTest.java index 4b1ff7a..612db5d 100644 --- a/src/test/java/org/marvelution/jji/AbstractTechnicalTest.java +++ b/src/test/java/org/marvelution/jji/AbstractTechnicalTest.java @@ -2,6 +2,7 @@ import java.util.Optional; +import org.jvnet.hudson.test.junit.jupiter.WithJenkins; import org.marvelution.jji.configuration.JiraSite; import org.marvelution.jji.configuration.JiraSitesConfiguration; import org.marvelution.jji.rest.HttpClientProvider; @@ -12,25 +13,27 @@ import com.fasterxml.jackson.databind.ObjectMapper; import okhttp3.OkHttpClient; import okhttp3.Request; -import org.junit.Before; -import org.junit.Rule; +import org.junit.jupiter.api.BeforeEach; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.MockAuthorizationStrategy; +@WithJenkins public abstract class AbstractTechnicalTest { public static final String ALICE = "alice"; protected final MockAuthorizationStrategy authorizationStrategy = new MockAuthorizationStrategy(); - @Rule - public JenkinsRule jenkins = new JenkinsRule(); + + protected JenkinsRule jenkins; protected JiraSitesConfiguration sitesConfiguration; protected OkHttpClient httpClient; protected ObjectMapper objectMapper; - @Before - public void setUpCommonBits() + @BeforeEach + void setUp(JenkinsRule jenkins) { + this.jenkins = jenkins; + jenkins.getInstance() .setSecurityRealm(jenkins.createDummySecurityRealm()); jenkins.getInstance() diff --git a/src/test/java/org/marvelution/jji/casc/ConfigurationAsCodeTest.java b/src/test/java/org/marvelution/jji/casc/ConfigurationAsCodeTest.java index fc33c67..f538b8f 100644 --- a/src/test/java/org/marvelution/jji/casc/ConfigurationAsCodeTest.java +++ b/src/test/java/org/marvelution/jji/casc/ConfigurationAsCodeTest.java @@ -2,23 +2,22 @@ import java.net.*; +import io.jenkins.plugins.casc.misc.junit.jupiter.WithJenkinsConfiguredWithCode; import org.marvelution.jji.configuration.*; import io.jenkins.plugins.casc.misc.*; import org.assertj.core.api.*; -import org.junit.*; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; -public class ConfigurationAsCodeTest +@WithJenkinsConfiguredWithCode +class ConfigurationAsCodeTest { - @Rule - public JenkinsConfiguredWithCodeRule jenkins = new JenkinsConfiguredWithCodeRule(); - @Test @ConfiguredWithCode("configuration-as-code.yml") - public void testSupportConfigurationAsCode() + void testSupportConfigurationAsCode(JenkinsConfiguredWithCodeRule jenkins) { JiraSitesConfiguration sitesConfiguration = (JiraSitesConfiguration) jenkins.getInstance() .getDescriptorOrDie(JiraSitesConfiguration.class); diff --git a/src/test/java/org/marvelution/jji/configuration/JiraSitesConfigurationTest.java b/src/test/java/org/marvelution/jji/configuration/JiraSitesConfigurationTest.java index 2f06338..3a97f5d 100644 --- a/src/test/java/org/marvelution/jji/configuration/JiraSitesConfigurationTest.java +++ b/src/test/java/org/marvelution/jji/configuration/JiraSitesConfigurationTest.java @@ -5,6 +5,7 @@ import java.net.*; import java.util.*; +import org.jvnet.hudson.test.junit.jupiter.WithJenkins; import org.marvelution.jji.synctoken.utils.*; import com.cloudbees.plugins.credentials.*; @@ -15,21 +16,20 @@ import jenkins.model.*; import org.assertj.core.groups.*; import org.jenkinsci.plugins.plaincredentials.*; -import org.junit.*; +import org.junit.jupiter.api.Test; import org.jvnet.hudson.test.*; import org.jvnet.hudson.test.recipes.*; import static org.assertj.core.api.Assertions.*; import static org.marvelution.jji.configuration.JiraSitesConfiguration.*; -public class JiraSitesConfigurationTest +@WithJenkins +class JiraSitesConfigurationTest { - @Rule - public JenkinsRule jenkins = new JenkinsRule(); @Test @LocalData - public void testMigrateSharedSecretAsCredentials() + void testMigrateSharedSecretAsCredentials(JenkinsRule jenkins) throws IOException { URL resource = getClass().getResource(getClass().getSimpleName() + "/" + jenkins.getTestDescription() @@ -41,7 +41,7 @@ public void testMigrateSharedSecretAsCredentials() .map(site -> tuple(site.getName(), site.getSharedSecret())) .toArray(Tuple[]::new); - JiraSitesConfiguration config = getJiraSitesConfiguration(); + JiraSitesConfiguration config = getJiraSitesConfiguration(jenkins); assertThat(config.getSites()).hasSize(2) .allSatisfy(site -> { @@ -59,11 +59,11 @@ public void testMigrateSharedSecretAsCredentials() } @Test - public void testRegisterSiteStoresSharedSecretAsCredential() + void testRegisterSiteStoresSharedSecretAsCredential(JenkinsRule jenkins) { String sharedSecret = SharedSecretGenerator.generate(); - JiraSitesConfiguration configuration = getJiraSitesConfiguration(); + JiraSitesConfiguration configuration = getJiraSitesConfiguration(jenkins); configuration.registerSite(new JiraSite(URI.create("http://jira.local/rest/jenkins/latest")).withName("Jira") .withIdentifier("site-1") @@ -84,9 +84,9 @@ public void testRegisterSiteStoresSharedSecretAsCredential() } @Test - public void testUnRegisterSiteRemovedSharedSecretCredential() + void testUnRegisterSiteRemovedSharedSecretCredential(JenkinsRule jenkins) { - JiraSitesConfiguration configuration = getJiraSitesConfiguration(); + JiraSitesConfiguration configuration = getJiraSitesConfiguration(jenkins); String sharedSecret = SharedSecretGenerator.generate(); configuration.registerSite(new JiraSite(URI.create("http://jira.local/rest/jenkins/latest")).withName("Jira") @@ -104,9 +104,9 @@ public void testUnRegisterSiteRemovedSharedSecretCredential() String sharedSecretId = registeredSite.get() .getSharedSecretId(); - List credentials = CredentialsProvider.lookupCredentials(StringCredentials.class, + List credentials = CredentialsProvider.lookupCredentialsInItemGroup(StringCredentials.class, Jenkins.get(), - ACL.SYSTEM, + ACL.SYSTEM2, List.of(new SchemeRequirement(uri.getScheme()), new HostnameRequirement(uri.getHost()))); assertThat(CredentialsMatchers.firstOrNull(credentials, CredentialsMatchers.withId(sharedSecretId))).isNotNull() .extracting(StringCredentials::getSecret) @@ -116,19 +116,19 @@ public void testUnRegisterSiteRemovedSharedSecretCredential() configuration.unregisterSite(registeredSite.get()); assertThat(configuration.findSite("site-1")).isEmpty(); - credentials = CredentialsProvider.lookupCredentials(StringCredentials.class, + credentials = CredentialsProvider.lookupCredentialsInItemGroup(StringCredentials.class, Jenkins.get(), - ACL.SYSTEM, + ACL.SYSTEM2, List.of(new SchemeRequirement(uri.getScheme()), new HostnameRequirement(uri.getHost()))); assertThat(CredentialsMatchers.firstOrNull(credentials, CredentialsMatchers.withId(sharedSecretId))).isNull(); } @Test - public void testRegisterUpdatedSiteUpdatesSharedSecretCredential() + void testRegisterUpdatedSiteUpdatesSharedSecretCredential(JenkinsRule jenkins) { String sharedSecret = SharedSecretGenerator.generate(); - JiraSitesConfiguration configuration = getJiraSitesConfiguration(); + JiraSitesConfiguration configuration = getJiraSitesConfiguration(jenkins); configuration.registerSite(new JiraSite(URI.create("http://jira.local/rest/jenkins/latest")).withName("Jira") .withIdentifier("site-1") @@ -169,7 +169,7 @@ public void testRegisterUpdatedSiteUpdatesSharedSecretCredential() } @Nonnull - private JiraSitesConfiguration getJiraSitesConfiguration() + private JiraSitesConfiguration getJiraSitesConfiguration(JenkinsRule jenkins) { return (JiraSitesConfiguration) jenkins.getInstance() .getDescriptorOrDie(JiraSitesConfiguration.class); diff --git a/src/test/java/org/marvelution/jji/listener/AbstractListenerTest.java b/src/test/java/org/marvelution/jji/listener/AbstractListenerTest.java index faff107..09697d4 100644 --- a/src/test/java/org/marvelution/jji/listener/AbstractListenerTest.java +++ b/src/test/java/org/marvelution/jji/listener/AbstractListenerTest.java @@ -2,9 +2,9 @@ import java.net.URI; import java.util.*; -import java.util.stream.Collectors; import javax.annotation.Nonnull; +import org.jvnet.hudson.test.junit.jupiter.WithJenkins; import org.marvelution.jji.JiraUtils; import org.marvelution.jji.configuration.JiraSite; import org.marvelution.jji.configuration.JiraSitesConfiguration; @@ -22,10 +22,8 @@ import okhttp3.mockwebserver.RecordedRequest; import org.assertj.core.api.InstanceOfAssertFactories; import org.jenkinsci.plugins.plaincredentials.StringCredentials; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.rules.TestName; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.jvnet.hudson.test.JenkinsRule; import static java.util.Optional.empty; @@ -33,21 +31,22 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.marvelution.jji.Headers.SYNC_TOKEN; -public class AbstractListenerTest +@WithJenkins +class AbstractListenerTest { static final String REST_BASE_PATH = "/rest/jenkins/latest/integration/"; - @Rule - public TestName testName = new TestName(); - @Rule - public JenkinsRule jenkins = new JenkinsRule(); + + protected JenkinsRule jenkins; protected MockWebServer jira; protected MockWebServer jira2; FreeStyleProject project; - @Before - public void setup() + @BeforeEach + void setup(JenkinsRule jenkins) throws Exception { + this.jenkins = jenkins; + jira = new MockWebServer(); jira.setDispatcher(new MemorizingQueueDispatcher()); jira.start(); @@ -60,8 +59,8 @@ public void setup() registerJiraSite(jira2, of("Jira 2"), true); } - @After - public void tearDown() + @AfterEach + void tearDown() throws Exception { jira.shutdown(); @@ -197,7 +196,7 @@ public List findRequest( { return requests.stream() .filter(request -> Objects.equals(method, request.getMethod()) && Objects.equals(path, request.getPath())) - .collect(Collectors.toList()); + .toList(); } @Nonnull diff --git a/src/test/java/org/marvelution/jji/listener/BuildListenerTest.java b/src/test/java/org/marvelution/jji/listener/BuildListenerTest.java index 1b2d199..385a365 100644 --- a/src/test/java/org/marvelution/jji/listener/BuildListenerTest.java +++ b/src/test/java/org/marvelution/jji/listener/BuildListenerTest.java @@ -2,22 +2,24 @@ import java.util.concurrent.*; +import org.jvnet.hudson.test.junit.jupiter.WithJenkins; import org.marvelution.jji.*; import org.marvelution.jji.model.parsers.*; import hudson.model.*; import okhttp3.mockwebserver.*; -import org.junit.*; +import org.junit.jupiter.api.Test; import org.jvnet.hudson.test.*; import static org.assertj.core.api.Assertions.*; import static org.marvelution.jji.JiraUtils.*; -public class BuildListenerTest +@WithJenkins +class BuildListenerTest extends AbstractListenerTest { @Test - public void testNotifyAndDelete() + void testNotifyAndDelete() throws Exception { jira.enqueue(new MockResponse().setResponseCode(500)); @@ -42,7 +44,7 @@ public void testNotifyAndDelete() } @Test - public void testNotify_WithParents() + void testNotify_WithParents() throws Exception { jira.enqueue(new MockResponse().setResponseCode(202)); @@ -81,7 +83,7 @@ public void testNotify_WithParents() } @Test - public void testNotify_WithData() + void testNotify_WithData() throws Exception { jira.enqueue(new MockResponse().setResponseCode(202)); diff --git a/src/test/java/org/marvelution/jji/listener/JobDSLListenerTest.java b/src/test/java/org/marvelution/jji/listener/JobDSLListenerTest.java index d65fd56..13975aa 100644 --- a/src/test/java/org/marvelution/jji/listener/JobDSLListenerTest.java +++ b/src/test/java/org/marvelution/jji/listener/JobDSLListenerTest.java @@ -5,26 +5,29 @@ import hudson.model.*; import javaposse.jobdsl.plugin.*; import okhttp3.mockwebserver.*; -import org.junit.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInfo; +import org.jvnet.hudson.test.junit.jupiter.WithJenkins; -public class JobDSLListenerTest +@WithJenkins +class JobDSLListenerTest extends AbstractListenerTest { @Test - public void testCreate() + void testCreate(TestInfo info) throws Exception { fixedResponse(jira, new MockResponse().setResponseCode(202)); fixedResponse(jira2, new MockResponse().setResponseCode(202)); - configureJobDsl(); + configureJobDsl(info); FreeStyleBuild build = project.scheduleBuild2(0) .get(10, TimeUnit.SECONDS); jenkins.assertBuildStatusSuccess(build); - TopLevelItem item = jenkins.jenkins.getItem(testName.getMethodName()); + TopLevelItem item = jenkins.jenkins.getItem(info.getTestMethod().orElseThrow().getName()); verifyNotificationSend(jira, item, "POST"); verifyNotificationSend(jira2, item, "POST"); @@ -33,22 +36,22 @@ public void testCreate() } @Test - public void testModify() + void testModify(TestInfo info) throws Exception { fixedResponse(jira, new MockResponse().setResponseCode(202)); fixedResponse(jira2, new MockResponse().setResponseCode(202)); - jenkins.createFreeStyleProject(testName.getMethodName()); + jenkins.createFreeStyleProject(info.getTestMethod().orElseThrow().getName()); - configureJobDsl(); + configureJobDsl(info); FreeStyleBuild build = project.scheduleBuild2(0) .get(10, TimeUnit.SECONDS); jenkins.assertBuildStatusSuccess(build); - TopLevelItem item = jenkins.jenkins.getItem(testName.getMethodName()); + TopLevelItem item = jenkins.jenkins.getItem(info.getTestMethod().orElseThrow().getName()); verifyNotificationSend(jira, item, "POST"); verifyNotificationSend(jira2, item, "POST"); @@ -56,11 +59,11 @@ public void testModify() verifyNotificationSend(jira2, build, "POST"); } - public void configureJobDsl() + public void configureJobDsl(TestInfo info) { ExecuteDslScripts executeDslScripts = new ExecuteDslScripts(); executeDslScripts.setUseScriptText(true); - executeDslScripts.setScriptText("job('" + testName.getMethodName() + "') {\n steps {\n shell('echo Hello World!')\n }\n}"); + executeDslScripts.setScriptText("job('" + info.getTestMethod().orElseThrow().getName() + "') {\n steps {\n shell('echo Hello World!')\n }\n}"); project.getBuildersList() .add(executeDslScripts); } diff --git a/src/test/java/org/marvelution/jji/listener/JobListenerTest.java b/src/test/java/org/marvelution/jji/listener/JobListenerTest.java index c869a3f..f2388ae 100644 --- a/src/test/java/org/marvelution/jji/listener/JobListenerTest.java +++ b/src/test/java/org/marvelution/jji/listener/JobListenerTest.java @@ -5,15 +5,17 @@ import hudson.model.*; import net.sf.json.*; import okhttp3.mockwebserver.*; -import org.junit.*; +import org.junit.jupiter.api.Test; +import org.jvnet.hudson.test.junit.jupiter.WithJenkins; import static org.assertj.core.api.Assertions.*; -public class JobListenerTest +@WithJenkins +class JobListenerTest extends AbstractListenerTest { @Test - public void testCreate() + void testCreate() throws IOException { fixedResponse(jira, new MockResponse().setResponseCode(202)); @@ -37,7 +39,7 @@ private void verifyCreateNotification( } @Test - public void testModify() + void testModify() throws IOException { fixedResponse(jira, new MockResponse().setResponseCode(202)); @@ -60,7 +62,7 @@ private void verifyModifiedNotification(MockWebServer jira) } @Test - public void testDelete() + void testDelete() throws Exception { jira.enqueue(new MockResponse().setResponseCode(204)); diff --git a/src/test/java/org/marvelution/jji/listener/RunSaveListenerTest.java b/src/test/java/org/marvelution/jji/listener/RunSaveListenerTest.java index 0b6f66c..5a47509 100644 --- a/src/test/java/org/marvelution/jji/listener/RunSaveListenerTest.java +++ b/src/test/java/org/marvelution/jji/listener/RunSaveListenerTest.java @@ -4,15 +4,17 @@ import hudson.model.*; import okhttp3.mockwebserver.*; -import org.junit.*; +import org.junit.jupiter.api.Test; +import org.jvnet.hudson.test.junit.jupiter.WithJenkins; import static org.assertj.core.api.Assertions.*; -public class RunSaveListenerTest +@WithJenkins +class RunSaveListenerTest extends AbstractListenerTest { @Test - public void testOnChange() + void testOnChange() throws Exception { diff --git a/src/test/java/org/marvelution/jji/management/JiraSiteManagementTest.java b/src/test/java/org/marvelution/jji/management/JiraSiteManagementTest.java index 5f8dff2..f70003f 100644 --- a/src/test/java/org/marvelution/jji/management/JiraSiteManagementTest.java +++ b/src/test/java/org/marvelution/jji/management/JiraSiteManagementTest.java @@ -12,19 +12,19 @@ import net.sf.json.JSONObject; import okhttp3.*; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static jenkins.model.Jenkins.ADMINISTER; import static org.assertj.core.api.Assertions.assertThat; -public class JiraSiteManagementTest +class JiraSiteManagementTest extends AbstractTechnicalTest { private JiraSite jiraSite; - @Before - public void setUp() + @BeforeEach + void setUp() { jiraSite = new JiraSite(URI.create("http://localhost:2990/jira/rest/jenkins/latest")).withName("Local Jira") .withIdentifier("identifier") @@ -33,7 +33,7 @@ public void setUp() } @Test - public void testRegisterJiraSite() + void testRegisterJiraSite() throws Exception { authorizationStrategy.grant(ADMINISTER) @@ -51,7 +51,7 @@ public void testRegisterJiraSite() } @Test - public void testRegisterJiraSite_NoAdmin() + void testRegisterJiraSite_NoAdmin() throws Exception { try (Response response = registerJiraSite(jiraSite, Credentials.basic(ALICE, ALICE))) @@ -62,7 +62,7 @@ public void testRegisterJiraSite_NoAdmin() } @Test - public void testRegisterJiraSite_NoBasicAuth() + void testRegisterJiraSite_NoBasicAuth() throws Exception { try (Response response = registerJiraSite(jiraSite, (String) null)) @@ -73,7 +73,7 @@ public void testRegisterJiraSite_NoBasicAuth() } @Test - public void testRegisterJiraSite_Update() + void testRegisterJiraSite_Update() throws Exception { injectSite(jiraSite); @@ -87,7 +87,7 @@ public void testRegisterJiraSite_Update() } @Test - public void testRegisterJiraSite_AccessDenied() + void testRegisterJiraSite_AccessDenied() throws Exception { try (Response response = registerJiraSite(jiraSite, request -> request.addHeader("Authorization", Credentials.basic(ALICE, ALICE)))) @@ -98,7 +98,7 @@ public void testRegisterJiraSite_AccessDenied() } @Test - public void testUnregisterJiraSite() + void testUnregisterJiraSite() throws Exception { injectSite(jiraSite); @@ -111,7 +111,7 @@ public void testUnregisterJiraSite() } @Test - public void testUnregisterJiraSite_UnknownJiraSite() + void testUnregisterJiraSite_UnknownJiraSite() throws Exception { JiraSite site = new JiraSite(URI.create("http://localhost:8080/jira/rest/jenkins/latest")).withName("Local Jira") @@ -128,7 +128,7 @@ public void testUnregisterJiraSite_UnknownJiraSite() } @Test - public void testUnregisterJiraSite_AccessDenied() + void testUnregisterJiraSite_AccessDenied() throws Exception { JiraSite site = new JiraSite(URI.create("http://localhost:8080/jira/rest/jenkins/latest")).withName("Local Jira") diff --git a/src/test/java/org/marvelution/jji/security/SyncTokenAuthenticationFilterTest.java b/src/test/java/org/marvelution/jji/security/SyncTokenAuthenticationFilterTest.java index ad67141..1f9d14c 100644 --- a/src/test/java/org/marvelution/jji/security/SyncTokenAuthenticationFilterTest.java +++ b/src/test/java/org/marvelution/jji/security/SyncTokenAuthenticationFilterTest.java @@ -2,26 +2,27 @@ import java.net.*; +import org.jvnet.hudson.test.junit.jupiter.WithJenkins; import org.marvelution.jji.*; import org.marvelution.jji.configuration.*; import org.marvelution.jji.synctoken.utils.*; import hudson.model.*; import okhttp3.*; -import org.junit.*; -import org.jvnet.hudson.test.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static jenkins.model.Jenkins.*; import static org.assertj.core.api.Assertions.*; -public class SyncTokenAuthenticationFilterTest +@WithJenkins +class SyncTokenAuthenticationFilterTest extends AbstractTechnicalTest { - private JiraSitesConfiguration sitesConfiguration; private JiraSite site; - @Before - public void setUp() + @BeforeEach + void setUp() { site = new JiraSite(URI.create("https://jira.example.com")).withIdentifier("jira") .withName("Jira") @@ -30,7 +31,7 @@ public void setUp() } @Test - public void testAccessViaSyncToken() + void testAccessViaSyncToken() throws Exception { authorizationStrategy.grant(ADMINISTER) @@ -56,7 +57,7 @@ public void testAccessViaSyncToken() } @Test - public void testNoSyncTokenAccessToAPI() + void testNoSyncTokenAccessToAPI() throws Exception { authorizationStrategy.grant(ADMINISTER)