From 0b606d74695700ae26abea3847434594e8598b9b Mon Sep 17 00:00:00 2001 From: Francisco Javier Fernandez Gonzalez Date: Tue, 2 Jun 2020 09:35:40 +0200 Subject: [PATCH 1/2] Add hook for jacoco plugin --- .../jenkins/tools/test/hook/JacocoHook.java | 38 ++++++++++ .../tools/test/hook/JacocoHookTest.java | 76 +++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java create mode 100644 plugins-compat-tester/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java diff --git a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java new file mode 100644 index 000000000..c28161f49 --- /dev/null +++ b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java @@ -0,0 +1,38 @@ +package org.jenkins.tools.test.hook; + +import org.jenkins.tools.test.model.PomData; +import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeExecution; + +import java.util.List; +import java.util.Map; +import java.util.stream.IntStream; + +/** + * Workaround for JaCoCo plugin since it needs execute the jacoco:prepare-agent goal before execution. + */ +public class JacocoHook extends PluginCompatTesterHookBeforeExecution { + + @Override + public boolean check(Map info) { + PomData data = (PomData) info.get("pomData"); + return "org.jenkins-ci.plugins".equals(data.groupId) && "jacoco".equals(data.artifactId); + } + + @Override + public Map action(Map info) throws Exception { + List args = (List) info.get("args"); + + if (args != null) { + int index = IntStream.range(0, args.size()).filter(i -> args.get(i).startsWith("hpi:")).findFirst().orElse(-1); + if (index == -1) { + index = IntStream.range(0, args.size()).filter(i -> args.get(i).equals("surefire:test")).findFirst().orElse(-1); + } + if (index != -1) { + args.add(index, "jacoco:prepare-agent"); + } + } + + return info; + } + +} diff --git a/plugins-compat-tester/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java b/plugins-compat-tester/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java new file mode 100644 index 000000000..dcddd5a0b --- /dev/null +++ b/plugins-compat-tester/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java @@ -0,0 +1,76 @@ +package org.jenkins.tools.test.hook; + +import com.google.common.collect.Lists; +import org.jenkins.tools.test.model.MavenCoordinates; +import org.jenkins.tools.test.model.PomData; +import org.junit.Test; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class JacocoHookTest { + + @Test + public void testCheckMethod() { + final JacocoHook hook = new JacocoHook(); + final MavenCoordinates parent = new MavenCoordinates("org.jenkins-ci.plugins", "plugin", "3.57"); + + PomData pomData = new PomData("jacoco", "hpi", "it-does-not-matter", "whatever", parent, "org.jenkins-ci.plugins"); + Map info = new HashMap<>(); + info.put("pomData", pomData); + assertTrue(hook.check(info)); + + pomData = new PomData("jacoco", "hpi", "it-does-not-matter", "whatever", parent, "fake-groupId"); + info = new HashMap<>(); + info.put("pomData", pomData); + assertFalse(hook.check(info)); + + pomData = new PomData("other-plugin", "hpi", "it-does-not-matter", "whatever", parent, "org.jenkins-ci.plugins"); + info = new HashMap<>(); + info.put("pomData", pomData); + assertFalse(hook.check(info)); + } + + @Test + public void testAction() throws Exception { + final JacocoHook hook = new JacocoHook(); + + Map info = new HashMap<>(); + info.put("args", Lists.newArrayList( + "--define=forkCount=1", + "hpi:resolve-test-dependencies", + "hpi:test-hpl", + "surefire:test")); + Map afterAction = hook.action(info); + List args = (List) afterAction.get("args"); + assertThat(args.size(), is(5)); + assertThat(args.get(1), is("jacoco:prepare-agent")); + + info = new HashMap<>(); + info.put("args", Lists.newArrayList( + "--define=forkCount=1", + "other-plugin:other-goal", + "surefire:test")); + afterAction = hook.action(info); + args = (List) afterAction.get("args"); + assertThat(args.size(), is(4)); + assertThat(args.get(2), is("jacoco:prepare-agent")); + + info = new HashMap<>(); + info.put("args", Lists.newArrayList( + "element1", + "element2", + "element3", + "element4")); + afterAction = hook.action(info); + args = (List) afterAction.get("args"); + assertThat(args.size(), is(4)); + assertFalse(args.contains("jacoco:prepare-agent")); + } +} From 3571fa4bd35d7526386de685a118a50f8dd52036 Mon Sep 17 00:00:00 2001 From: Francisco Javier Fernandez Gonzalez Date: Tue, 2 Jun 2020 09:50:13 +0200 Subject: [PATCH 2/2] Fix error with groupId --- .../main/java/org/jenkins/tools/test/hook/JacocoHook.java | 2 +- .../java/org/jenkins/tools/test/hook/JacocoHookTest.java | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java index c28161f49..9078fc2fd 100644 --- a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java +++ b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java @@ -15,7 +15,7 @@ public class JacocoHook extends PluginCompatTesterHookBeforeExecution { @Override public boolean check(Map info) { PomData data = (PomData) info.get("pomData"); - return "org.jenkins-ci.plugins".equals(data.groupId) && "jacoco".equals(data.artifactId); + return "jacoco".equals(data.artifactId); } @Override diff --git a/plugins-compat-tester/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java b/plugins-compat-tester/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java index dcddd5a0b..a10d856c2 100644 --- a/plugins-compat-tester/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java +++ b/plugins-compat-tester/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java @@ -26,11 +26,6 @@ public void testCheckMethod() { info.put("pomData", pomData); assertTrue(hook.check(info)); - pomData = new PomData("jacoco", "hpi", "it-does-not-matter", "whatever", parent, "fake-groupId"); - info = new HashMap<>(); - info.put("pomData", pomData); - assertFalse(hook.check(info)); - pomData = new PomData("other-plugin", "hpi", "it-does-not-matter", "whatever", parent, "org.jenkins-ci.plugins"); info = new HashMap<>(); info.put("pomData", pomData);