From ab3a21ac00eda46968cca826267417c9d19796cc Mon Sep 17 00:00:00 2001 From: Vincent Latombe Date: Fri, 24 Jan 2025 09:54:41 +0100 Subject: [PATCH] Re-introduce support for Junit5 tests not having JenkinsRule as parameter (#909) --- .../jvnet/hudson/test/recipes/LocalData.java | 23 ++++++++++---- .../JenkinsRuleResolverBeforeTest.java | 30 ++++++++++++++++++ .../localData/jobs/testJob/config.xml | 22 +++++++++++++ .../localDataZip.zip | Bin 0 -> 499 bytes 4 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 src/test/java/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest.java create mode 100644 src/test/resources/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest/localData/jobs/testJob/config.xml create mode 100644 src/test/resources/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest/localDataZip.zip diff --git a/src/main/java/org/jvnet/hudson/test/recipes/LocalData.java b/src/main/java/org/jvnet/hudson/test/recipes/LocalData.java index aa1b4e1ec..502b06aab 100644 --- a/src/main/java/org/jvnet/hudson/test/recipes/LocalData.java +++ b/src/main/java/org/jvnet/hudson/test/recipes/LocalData.java @@ -29,6 +29,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Method; +import java.util.logging.Logger; import org.junit.runner.Description; import org.jvnet.hudson.test.HudsonHomeLoader.Local; import org.jvnet.hudson.test.HudsonTestCase; @@ -86,6 +87,7 @@ @Retention(RetentionPolicy.RUNTIME) public @interface LocalData { String value() default ""; + Logger LOGGER = Logger.getLogger(LocalData.class.getName()); class RunnerImpl extends Recipe.Runner { @Override @@ -99,14 +101,21 @@ class RuleRunnerImpl extends JenkinsRecipe.Runner { public void setup(JenkinsRule jenkinsRule, LocalData recipe) throws Exception { Description desc = jenkinsRule.getTestDescription(); - Method testMethod; - - try { - testMethod = desc.getTestClass().getMethod(desc.getMethodName()); - } catch (NoSuchMethodException ex) { - testMethod = desc.getTestClass().getDeclaredMethod(desc.getMethodName(), JenkinsRule.class); + Method testMethod = null; + for (var cls = desc.getTestClass(); testMethod == null && cls != null; cls = cls.getSuperclass()) { + try { + testMethod = cls.getDeclaredMethod(desc.getMethodName()); + } catch (NoSuchMethodException ex) { + try { + testMethod = cls.getDeclaredMethod(desc.getMethodName(), JenkinsRule.class); + } catch (NoSuchMethodException ex2) { + LOGGER.fine("No method " + desc.getMethodName() + " in " + cls); + } + } + } + if (testMethod == null) { + throw new NoSuchMethodException("Could not look up any test method for " + desc); } - jenkinsRule.with(new Local(testMethod, recipe.value())); } } diff --git a/src/test/java/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest.java b/src/test/java/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest.java new file mode 100644 index 000000000..e2e64b275 --- /dev/null +++ b/src/test/java/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest.java @@ -0,0 +1,30 @@ +package org.jvnet.hudson.test.junit.jupiter; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.recipes.LocalData; + +@WithJenkins +class JenkinsRuleResolverBeforeTest { + private JenkinsRule rule; + + @BeforeEach + void before(JenkinsRule rule) { + this.rule = rule; + } + + @LocalData + @Test + void localData() { + assertNotNull(rule.jenkins.getItem("testJob")); + } + + @LocalData + @Test + void localDataZip() { + assertNotNull(rule.jenkins.getItem("somejob")); + } +} diff --git a/src/test/resources/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest/localData/jobs/testJob/config.xml b/src/test/resources/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest/localData/jobs/testJob/config.xml new file mode 100644 index 000000000..7f0268d9f --- /dev/null +++ b/src/test/resources/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest/localData/jobs/testJob/config.xml @@ -0,0 +1,22 @@ + + + + + + + true + hudson.model.Item.ExtendedRead:alice + hudson.model.Item.Configure:alice + hudson.model.Item.Configure:bob + hudson.model.Item.ExtendedRead:charlie + + + + true + false + (Default) + + + + + diff --git a/src/test/resources/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest/localDataZip.zip b/src/test/resources/org/jvnet/hudson/test/junit/jupiter/JenkinsRuleResolverBeforeTest/localDataZip.zip new file mode 100644 index 0000000000000000000000000000000000000000..7983b969ba76e53ad2ca4b9ec6629658bf6509fa GIT binary patch literal 499 zcmWIWW@h1H0D&`gES_Knlwf6$VaUo)D%KAT;bdSgn7cSU2Z&26xEUB(UNAE-fQbOO z_6um*d12a%^K(;y=0J?802%=@3a>Ga9|X5^16={a;^@XC=jWwmrt4MY=78M=G7yB( z474dI%FjwoF44E+3h-uRl4Hi@M+vBJ1sMK1f|yVrvqF4~W-78#nEpjJ${uDE!uLQU pu{adnNL0T=jAR5FwxzKR-ALq+z-2fq8&DSmGZ6j;(vLtK1_109Wd8sF literal 0 HcmV?d00001