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 236d898c..16da376a 100644
--- a/src/test/java/org/jenkinsci/plugins/scriptler/builder/ScriptlerBuilderWithRestartTest.java
+++ b/src/test/java/org/jenkinsci/plugins/scriptler/builder/ScriptlerBuilderWithRestartTest.java
@@ -41,17 +41,15 @@
import org.htmlunit.xml.XmlPage;
import org.jenkinsci.plugins.scriptler.ScriptlerManagementHelper;
import org.jenkinsci.plugins.scriptler.config.Parameter;
-import org.jenkinsci.plugins.scriptler.testharness.RestartableJenkinsExtension;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
import org.jvnet.hudson.test.JenkinsRule;
-import org.jvnet.hudson.test.RestartableJenkinsRule;
+import org.jvnet.hudson.test.junit.jupiter.WithJenkins;
/**
* 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
*/
-@ExtendWith(RestartableJenkinsExtension.class)
+@WithJenkins
class ScriptlerBuilderWithRestartTest {
private static final String SCRIPT_CONTENTS = "print 'Hello World!'";
private static final String SCRIPT_USABLE_1 = "script_usable_1.groovy";
@@ -62,65 +60,49 @@ class ScriptlerBuilderWithRestartTest {
private static final String SCRIPT_NOT_USABLE = "not_usable.groovy";
@Test
- void configRoundTrip(RestartableJenkinsRule rule) {
- rule.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()) {
-
- 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());
- }
- });
-
- rule.then(r -> {
- FreeStyleProject p = r.jenkins.getItemByFullName("test", FreeStyleProject.class);
-
- ScriptlerBuilder scriptlerBuilder =
- Objects.requireNonNull(p).getBuildersList().get(ScriptlerBuilder.class);
+ 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);
assertNotNull(scriptlerBuilder);
assertNotNull(scriptlerBuilder.getBuilderId());
assertEquals(SCRIPT_USABLE_1, scriptlerBuilder.getScriptId());
@@ -128,32 +110,45 @@ void configRoundTrip(RestartableJenkinsRule rule) {
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(RestartableJenkinsRule rule) {
- rule.then(r -> {
- r.jenkins.setCrumbIssuer(null);
+ 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);
+ 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");
+ FreeStyleProject project = r.createFreeStyleProject("test");
- try (JenkinsRule.WebClient wc = r.createWebClient()) {
+ try (JenkinsRule.WebClient wc = r.createWebClient()) {
- XmlPage xmlPage = wc.goToXml(project.getShortUrl() + "config.xml");
- r.assertGoodStatus(xmlPage);
- String xml = xmlPage.getWebResponse().getContentAsString();
+ XmlPage xmlPage = wc.goToXml(project.getShortUrl() + "config.xml");
+ r.assertGoodStatus(xmlPage);
+ String xml = xmlPage.getWebResponse().getContentAsString();
- String modifiedXml = xml.replace(
- "",
- String.format(
- """
+ String modifiedXml = xml.replace(
+ "",
+ String.format(
+ """
@@ -171,39 +166,38 @@ void configRoundTripConfigXml(RestartableJenkinsRule rule) {
""",
- 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());
- }
- });
-
- rule.then(r -> {
- FreeStyleProject p = r.jenkins.getItemByFullName("test", FreeStyleProject.class);
+ 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(p).getBuildersList().get(ScriptlerBuilder.class);
+ Objects.requireNonNull(project).getBuildersList().get(ScriptlerBuilder.class);
assertNotNull(scriptlerBuilder);
- assertNotNull(scriptlerBuilder.getBuilderId());
+ 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());
- });
+ }
+
+ 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/testharness/RestartableJenkinsExtension.java b/src/test/java/org/jenkinsci/plugins/scriptler/testharness/RestartableJenkinsExtension.java
deleted file mode 100644
index 78e9aae8..00000000
--- a/src/test/java/org/jenkinsci/plugins/scriptler/testharness/RestartableJenkinsExtension.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.jenkinsci.plugins.scriptler.testharness;
-
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver;
-import org.junit.runners.model.FrameworkMethod;
-import org.junit.runners.model.Statement;
-import org.jvnet.hudson.test.RestartableJenkinsRule;
-
-/**
- * JUnit 5 extension providing {@link RestartableJenkinsRule} integration.
- */
-public class RestartableJenkinsExtension extends TypeBasedParameterResolver
- implements AfterEachCallback {
-
- private static final String KEY = "jenkins-instance";
- private static final ExtensionContext.Namespace NAMESPACE =
- ExtensionContext.Namespace.create(RestartableJenkinsExtension.class);
-
- @Override
- public void afterEach(ExtensionContext context) throws Exception {
- final RestartableJenkinsRule rule = context.getStore(NAMESPACE).remove(KEY, RestartableJenkinsRule.class);
- if (rule == null) {
- return;
- }
-
- try {
- rule.apply(
- new Statement() {
- @Override
- public void evaluate() {
- // body is already evaluated, nothing more to do here
- }
- },
- new FrameworkMethod(context.getRequiredTestMethod()),
- context.getRequiredTestInstance())
- .evaluate();
- } catch (Exception | Error e) {
- throw e;
- } catch (Throwable t) {
- throw new Exception(t);
- }
- }
-
- @Override
- public RestartableJenkinsRule resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
- throws ParameterResolutionException {
- return extensionContext
- .getStore(NAMESPACE)
- .getOrComputeIfAbsent(KEY, key -> new RestartableJenkinsRule(), RestartableJenkinsRule.class);
- }
-}