diff --git a/pom.xml b/pom.xml index 58b2ea33..74154611 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ false false - 2.504 + 2.541 ${jenkins.baseline}.3 @@ -38,7 +38,7 @@ io.jenkins.tools.bom bom-${jenkins.baseline}.x - 5983.v443959746f1f + 6509.v993a_c958a_e35 pom import diff --git a/src/main/java/org/jenkinsci/plugins/scriptler/ScriptlerManagement.java b/src/main/java/org/jenkinsci/plugins/scriptler/ScriptlerManagement.java index ef5cb9a6..e58280b1 100644 --- a/src/main/java/org/jenkinsci/plugins/scriptler/ScriptlerManagement.java +++ b/src/main/java/org/jenkinsci/plugins/scriptler/ScriptlerManagement.java @@ -200,7 +200,7 @@ public HttpResponse doDownloadScript( } for (ScriptInfoCatalog scriptInfoCatalog : getCatalogs()) { - if (catalogName.equals(scriptInfoCatalog.getInfo().name)) { + if (catalogName.equals(scriptInfoCatalog.getInfo().name())) { final ScriptInfo info = scriptInfoCatalog.getEntryById(id); final String source = scriptInfoCatalog.getScriptSource(scriptInfoCatalog.getEntryById(id)); final List paramList = new ArrayList<>(); @@ -784,7 +784,7 @@ public ScriptInfoCatalog getCatalogByName(String catalogName) { if (catalogName != null && !catalogName.isBlank()) { for (ScriptInfoCatalog sic : getCatalogs()) { final CatalogInfo info = sic.getInfo(); - if (catalogName.equals(info.name)) { + if (catalogName.equals(info.name())) { return sic; } } @@ -796,7 +796,7 @@ public CatalogInfo getCatalogInfoByName(String catalogName) { if (catalogName != null && !catalogName.isBlank()) { for (ScriptInfoCatalog sic : getCatalogs()) { final CatalogInfo info = sic.getInfo(); - if (catalogName.equals(info.name)) { + if (catalogName.equals(info.name())) { return info; } } diff --git a/src/main/java/org/jenkinsci/plugins/scriptler/share/CatalogInfo.java b/src/main/java/org/jenkinsci/plugins/scriptler/share/CatalogInfo.java index 9645ac0d..45e5536b 100644 --- a/src/main/java/org/jenkinsci/plugins/scriptler/share/CatalogInfo.java +++ b/src/main/java/org/jenkinsci/plugins/scriptler/share/CatalogInfo.java @@ -3,40 +3,20 @@ import edu.umd.cs.findbugs.annotations.NonNull; import java.text.MessageFormat; -public class CatalogInfo { - - @NonNull - public final String name; - - @NonNull - public final String catalogLocation; - - @NonNull - public final String scriptDownloadUrl; - - @NonNull - public final String scriptDetailUrl; +public record CatalogInfo( + @NonNull String name, + @NonNull String catalogLocation, + @NonNull String scriptDetailUrl, + @NonNull String scriptDownloadUrl) { /** * Holds the informations used to connect to a catalog location * - * @param name - * symbolic name of the catalog, must be unique. - * @param catLocation - * where to download the catalog file from (including file name, e.g. http://myserver.com/scriptler/my-scriptler-catalog.xml ) - * @param scriptDownloadUrl - * the url to download a script by its name. Use {0} to mark the position for the file name in the url (e.g. http://myserver.com/scriptler/{0}) + * @param name symbolic name of the catalog, must be unique. + * @param catalogLocation where to download the catalog file from (including file name, e.g. http://myserver.com/scriptler/my-scriptler-catalog.xml ) + * @param scriptDownloadUrl the url to download a script by its name. Use {0} to mark the position for the file name in the url (e.g. http://myserver.com/scriptler/{0}) */ - public CatalogInfo( - @NonNull String name, - @NonNull String catLocation, - @NonNull String scriptDetailUrl, - @NonNull String scriptDownloadUrl) { - this.name = name; - this.catalogLocation = catLocation; - this.scriptDownloadUrl = scriptDownloadUrl; - this.scriptDetailUrl = scriptDetailUrl; - } + public CatalogInfo {} public String getReplacedDownloadUrl(String scriptName, String id) { if (scriptDownloadUrl.isEmpty()) { diff --git a/src/test/java/org/jenkinsci/plugins/scriptler/builder/ScriptlerBuilderWithRestartTest.java b/src/test/java/org/jenkinsci/plugins/scriptler/builder/ScriptlerBuilderWithRestartTest.java index 237dc52a..8f526229 100644 --- a/src/test/java/org/jenkinsci/plugins/scriptler/builder/ScriptlerBuilderWithRestartTest.java +++ b/src/test/java/org/jenkinsci/plugins/scriptler/builder/ScriptlerBuilderWithRestartTest.java @@ -35,6 +35,7 @@ import java.util.Objects; import net.sf.json.JSONObject; import org.htmlunit.HttpMethod; +import org.htmlunit.WebClient; import org.htmlunit.WebRequest; import org.htmlunit.html.HtmlPage; import org.htmlunit.util.NameValuePair; @@ -42,14 +43,14 @@ import org.jenkinsci.plugins.scriptler.ScriptlerManagementHelper; import org.jenkinsci.plugins.scriptler.config.Parameter; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; import org.jvnet.hudson.test.JenkinsRule; -import org.jvnet.hudson.test.junit.jupiter.WithJenkins; +import org.jvnet.hudson.test.junit.jupiter.JenkinsSessionExtension; /** * Warning: a user without RUN_SCRIPT can currently only clone an existing builder INSIDE a project. * You can search CLONE_NOTE inside this test to see the cases */ -@WithJenkins class ScriptlerBuilderWithRestartTest { private static final String SCRIPT_CONTENTS = "print 'Hello World!'"; private static final String SCRIPT_USABLE_1 = "script_usable_1.groovy"; @@ -59,50 +60,69 @@ class ScriptlerBuilderWithRestartTest { private static final String SCRIPT_NOT_USABLE = "not_usable.groovy"; + @RegisterExtension + public JenkinsSessionExtension jenkins = new JenkinsSessionExtension(); + @Test - void configRoundTrip(JenkinsRule r) throws Throwable { - r.jenkins.setCrumbIssuer(null); - - ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_1, SCRIPT_CONTENTS, true); - ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_2, SCRIPT_CONTENTS, true); - ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_3, SCRIPT_CONTENTS, true); - ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_4, SCRIPT_CONTENTS, true); - ScriptlerManagementHelper.saveScript(SCRIPT_NOT_USABLE, SCRIPT_CONTENTS, false); - - FreeStyleProject project = r.createFreeStyleProject("test"); - - try (JenkinsRule.WebClient wc = r.createWebClient()) { - - WebRequest request = - new WebRequest(new URL(r.getURL() + project.getShortUrl() + "configSubmit"), HttpMethod.POST); - - final String projectName = project.getName(); - request.setRequestParameters(List.of(new NameValuePair( - "json", - JSONObject.fromObject(Map.of( - "name", - projectName, - "builder", - Map.of( - "kind", - ScriptlerBuilder.class.getName(), - "builderId", - "", - "scriptlerScriptId", - SCRIPT_USABLE_1, - "propagateParams", - true, - "defineParams", - Map.of( - "parameters", - List.of( - Map.of("name", "param1", "value", "value1"), - Map.of("name", "param2", "value", "value2")))))) - .toString()))); - HtmlPage page = wc.getPage(request); - r.assertGoodStatus(page); - - ScriptlerBuilder scriptlerBuilder = project.getBuildersList().get(ScriptlerBuilder.class); + void configRoundTrip() throws Throwable { + jenkins.then(r -> { + r.jenkins.setCrumbIssuer(null); + + ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_1, SCRIPT_CONTENTS, true); + ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_2, SCRIPT_CONTENTS, true); + ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_3, SCRIPT_CONTENTS, true); + ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_4, SCRIPT_CONTENTS, true); + ScriptlerManagementHelper.saveScript(SCRIPT_NOT_USABLE, SCRIPT_CONTENTS, false); + + FreeStyleProject project = r.createFreeStyleProject("test"); + + try (WebClient wc = r.createWebClient()) { + + WebRequest request = + new WebRequest(new URL(r.getURL() + project.getShortUrl() + "configSubmit"), HttpMethod.POST); + + final String projectName = project.getName(); + request.setRequestParameters(List.of(new NameValuePair( + "json", + JSONObject.fromObject(Map.of( + "name", + projectName, + "builder", + Map.of( + "kind", + ScriptlerBuilder.class.getName(), + "builderId", + "", + "scriptlerScriptId", + SCRIPT_USABLE_1, + "propagateParams", + true, + "defineParams", + Map.of( + "parameters", + List.of( + Map.of("name", "param1", "value", "value1"), + Map.of("name", "param2", "value", "value2")))))) + .toString()))); + HtmlPage page = wc.getPage(request); + r.assertGoodStatus(page); + + ScriptlerBuilder scriptlerBuilder = project.getBuildersList().get(ScriptlerBuilder.class); + assertNotNull(scriptlerBuilder); + assertNotNull(scriptlerBuilder.getBuilderId()); + assertEquals(SCRIPT_USABLE_1, scriptlerBuilder.getScriptId()); + assertTrue(scriptlerBuilder.isPropagateParams()); + assertIterableEquals( + List.of(new Parameter("param1", "value1"), new Parameter("param2", "value2")), + scriptlerBuilder.getParametersList()); + } + }); + + jenkins.then(r -> { + FreeStyleProject p = r.jenkins.getItemByFullName("test", FreeStyleProject.class); + + ScriptlerBuilder scriptlerBuilder = + Objects.requireNonNull(p).getBuildersList().get(ScriptlerBuilder.class); assertNotNull(scriptlerBuilder); assertNotNull(scriptlerBuilder.getBuilderId()); assertEquals(SCRIPT_USABLE_1, scriptlerBuilder.getScriptId()); @@ -110,90 +130,78 @@ void configRoundTrip(JenkinsRule r) throws Throwable { assertIterableEquals( List.of(new Parameter("param1", "value1"), new Parameter("param2", "value2")), scriptlerBuilder.getParametersList()); - } - - r.restart(); - - FreeStyleProject p = r.jenkins.getItemByFullName("test", FreeStyleProject.class); - - ScriptlerBuilder scriptlerBuilder = - Objects.requireNonNull(p).getBuildersList().get(ScriptlerBuilder.class); - assertNotNull(scriptlerBuilder); - assertNotNull(scriptlerBuilder.getBuilderId()); - assertEquals(SCRIPT_USABLE_1, scriptlerBuilder.getScriptId()); - assertTrue(scriptlerBuilder.isPropagateParams()); - assertIterableEquals( - List.of(new Parameter("param1", "value1"), new Parameter("param2", "value2")), - scriptlerBuilder.getParametersList()); + }); } @Test - void configRoundTripConfigXml(JenkinsRule r) throws Throwable { - r.jenkins.setCrumbIssuer(null); - - ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_1, SCRIPT_CONTENTS, true); - ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_2, SCRIPT_CONTENTS, true); - ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_3, SCRIPT_CONTENTS, true); - ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_4, SCRIPT_CONTENTS, true); - ScriptlerManagementHelper.saveScript(SCRIPT_NOT_USABLE, SCRIPT_CONTENTS, false); - - FreeStyleProject project = r.createFreeStyleProject("test"); - - try (JenkinsRule.WebClient wc = r.createWebClient()) { - - XmlPage xmlPage = wc.goToXml(project.getShortUrl() + "config.xml"); - r.assertGoodStatus(xmlPage); - String xml = xmlPage.getWebResponse().getContentAsString(); - - String modifiedXml = xml.replace("", String.format(""" - - - - %1s - true - - - param1 - value1 - - - param2 - value2 - - - - """, SCRIPT_USABLE_1)); - - WebRequest request = new WebRequest(new URL(project.getAbsoluteUrl() + "config.xml"), HttpMethod.POST); - request.setRequestBody(modifiedXml); - request.setEncodingType(null); - HtmlPage page = wc.getPage(request); - r.assertGoodStatus(page); - - project = r.jenkins.getItemByFullName(project.getFullName(), FreeStyleProject.class); + void configRoundTripConfigXml() throws Throwable { + jenkins.then(r -> { + r.jenkins.setCrumbIssuer(null); + + ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_1, SCRIPT_CONTENTS, true); + ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_2, SCRIPT_CONTENTS, true); + ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_3, SCRIPT_CONTENTS, true); + ScriptlerManagementHelper.saveScript(SCRIPT_USABLE_4, SCRIPT_CONTENTS, true); + ScriptlerManagementHelper.saveScript(SCRIPT_NOT_USABLE, SCRIPT_CONTENTS, false); + + FreeStyleProject project = r.createFreeStyleProject("test"); + + try (JenkinsRule.WebClient wc = r.createWebClient()) { + + XmlPage xmlPage = wc.goToXml(project.getShortUrl() + "config.xml"); + r.assertGoodStatus(xmlPage); + String xml = xmlPage.getWebResponse().getContentAsString(); + + String modifiedXml = xml.replace("", String.format(""" + + + + %1s + true + + + param1 + value1 + + + param2 + value2 + + + + """, SCRIPT_USABLE_1)); + + WebRequest request = new WebRequest(new URL(project.getAbsoluteUrl() + "config.xml"), HttpMethod.POST); + request.setRequestBody(modifiedXml); + request.setEncodingType(null); + HtmlPage page = wc.getPage(request); + r.assertGoodStatus(page); + + project = r.jenkins.getItemByFullName(project.getFullName(), FreeStyleProject.class); + ScriptlerBuilder scriptlerBuilder = + Objects.requireNonNull(project).getBuildersList().get(ScriptlerBuilder.class); + assertNotNull(scriptlerBuilder); + assertEquals("", scriptlerBuilder.getBuilderId()); + assertEquals(SCRIPT_USABLE_1, scriptlerBuilder.getScriptId()); + assertTrue(scriptlerBuilder.isPropagateParams()); + assertIterableEquals( + List.of(new Parameter("param1", "value1"), new Parameter("param2", "value2")), + scriptlerBuilder.getParametersList()); + } + }); + + jenkins.then(r -> { + FreeStyleProject p = r.jenkins.getItemByFullName("test", FreeStyleProject.class); + ScriptlerBuilder scriptlerBuilder = - Objects.requireNonNull(project).getBuildersList().get(ScriptlerBuilder.class); + Objects.requireNonNull(p).getBuildersList().get(ScriptlerBuilder.class); assertNotNull(scriptlerBuilder); - assertEquals("", scriptlerBuilder.getBuilderId()); + assertNotNull(scriptlerBuilder.getBuilderId()); assertEquals(SCRIPT_USABLE_1, scriptlerBuilder.getScriptId()); assertTrue(scriptlerBuilder.isPropagateParams()); assertIterableEquals( List.of(new Parameter("param1", "value1"), new Parameter("param2", "value2")), scriptlerBuilder.getParametersList()); - } - - r.restart(); - - FreeStyleProject p = r.jenkins.getItemByFullName("test", FreeStyleProject.class); - - ScriptlerBuilder scriptlerBuilder = - Objects.requireNonNull(p).getBuildersList().get(ScriptlerBuilder.class); - assertNotNull(scriptlerBuilder); - assertNotNull(scriptlerBuilder.getBuilderId()); - assertEquals(SCRIPT_USABLE_1, scriptlerBuilder.getScriptId()); - assertTrue(scriptlerBuilder.isPropagateParams()); - assertIterableEquals( - List.of(new Parameter("param1", "value1"), new Parameter("param2", "value2")), - scriptlerBuilder.getParametersList()); + }); } } diff --git a/src/test/java/org/jenkinsci/plugins/scriptler/util/GroovyScriptTest.java b/src/test/java/org/jenkinsci/plugins/scriptler/util/GroovyScriptTest.java index 70bcb7a0..a9d27573 100644 --- a/src/test/java/org/jenkinsci/plugins/scriptler/util/GroovyScriptTest.java +++ b/src/test/java/org/jenkinsci/plugins/scriptler/util/GroovyScriptTest.java @@ -93,11 +93,6 @@ private Runnable createWork(final List assertionErrors, final in private GroovyScript newInstance(ByteArrayOutputStream sos, String scriptSource, Parameter... params) { return new GroovyScript( - scriptSource, Arrays.asList(params), true, new StreamTaskListener(sos, StandardCharsets.UTF_8)) { - @Override - public ClassLoader getClassLoader() { - return Thread.currentThread().getContextClassLoader(); - } - }; + scriptSource, Arrays.asList(params), true, new StreamTaskListener(sos, StandardCharsets.UTF_8)); } }