From e1ec4c59126ce59b43a653d23082b43a091bab24 Mon Sep 17 00:00:00 2001 From: Filipe Roque Date: Fri, 12 Nov 2021 14:01:38 +0000 Subject: [PATCH 1/2] Fix permissions for UnprotectedRootAction Action methods getDisplayName, getIconFileName, getUrlName should return null if this action is to be hidden from users. https://www.jenkins.io/doc/developer/extensibility/action-for-all-projects/ --- .../plugins/pluginusage/PluginUsageView.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/pluginusage/PluginUsageView.java b/src/main/java/org/jenkinsci/plugins/pluginusage/PluginUsageView.java index d09b2d3..8288187 100644 --- a/src/main/java/org/jenkinsci/plugins/pluginusage/PluginUsageView.java +++ b/src/main/java/org/jenkinsci/plugins/pluginusage/PluginUsageView.java @@ -21,28 +21,38 @@ public class PluginUsageView implements RootAction{ public static final Permission PLUGIN_VIEW = new Permission(PERMISSIONS, "PluginView", Messages._PluginUsageView_PluginViewPermission_Description(), Jenkins.ADMINISTER, PermissionScope.JENKINS); + @Override public String getDisplayName() { - return "Plugin Usage"; + if (Jenkins.get().hasPermission(PluginUsageView.PLUGIN_VIEW)){ + return "Plugin Usage"; + } + return null; } + @Override public String getIconFileName() { - Jenkins.getInstance().checkPermission(PluginUsageView.PLUGIN_VIEW); - return "plugin.png"; + if (Jenkins.get().hasPermission(PluginUsageView.PLUGIN_VIEW)){ + return "plugin.png"; + } + return null; } + @Override public String getUrlName() { - Jenkins.getInstance().checkPermission(PluginUsageView.PLUGIN_VIEW); - return "pluginusage"; + if (Jenkins.get().hasPermission(PluginUsageView.PLUGIN_VIEW)){ + return "pluginusage"; + } + return null; } public PluginUsageModel getData() { - Jenkins.getInstance().checkPermission(PluginUsageView.PLUGIN_VIEW); + Jenkins.get().checkPermission(PluginUsageView.PLUGIN_VIEW); PluginUsageModel pluginUsageModel = new PluginUsageModel(); return pluginUsageModel; } public Api getApi() { - Jenkins.getInstance().checkPermission(PluginUsageView.PLUGIN_VIEW); + Jenkins.get().checkPermission(PluginUsageView.PLUGIN_VIEW); return new Api(getData()); } } From e4502fd32b9ac46fd6aef44e206cca9ed0ec00c8 Mon Sep 17 00:00:00 2001 From: Filipe Roque Date: Fri, 12 Nov 2021 18:33:53 +0000 Subject: [PATCH 2/2] Fix integration test excluding plugin version from comparison --- .../plugins/pluginusage/PluginUsageIT.java | 78 ++++++++++++++----- .../plugins/pluginusage/api/Plugin.java | 4 + .../pluginusage/api/PluginProjects.java | 8 ++ .../plugins/pluginusage/api/PluginUsage.java | 4 + .../plugins/pluginusage/api/Project.java | 4 + 5 files changed, 77 insertions(+), 21 deletions(-) diff --git a/src/test/java/org/jenkinsci/plugins/pluginusage/PluginUsageIT.java b/src/test/java/org/jenkinsci/plugins/pluginusage/PluginUsageIT.java index 9fce0dd..cca06a8 100644 --- a/src/test/java/org/jenkinsci/plugins/pluginusage/PluginUsageIT.java +++ b/src/test/java/org/jenkinsci/plugins/pluginusage/PluginUsageIT.java @@ -3,6 +3,9 @@ import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; import com.google.common.collect.Lists; import org.jenkinsci.plugins.pluginusage.api.Plugin; @@ -37,6 +40,17 @@ public class PluginUsageIT { private JenkinsClient client; private final int maxTimeBackoffMillis = 5 * 60 * 1000; + Function> pluginNamesExtractor = p -> p.getJobsPerPlugin() + .stream() + .map(PluginProjects::getPlugin) + .map(Plugin::getShortName) + .collect(Collectors.toList()); + + Function>> ProjectsExtractor = p -> p.getJobsPerPlugin() + .stream() + .map(PluginProjects::getProjects) + .collect(Collectors.toList()); + @BeforeClass public static void setupAll(){ assumeFalse(isWindows()); @@ -64,7 +78,8 @@ public void freestyle() { new Project("freestyle1") )) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -92,7 +107,8 @@ public void conditionalSingle() { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("conditional-single1"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -120,7 +136,8 @@ public void conditionalMultiple() { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("conditional-multiple1"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -145,7 +162,8 @@ public void parameters() { new PluginProjects( new Plugin("mailer", "1.34"), Lists.newArrayList()) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -170,7 +188,8 @@ public void promotions() throws MalformedURLException, URISyntaxException { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("promotion-job1"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -190,7 +209,8 @@ public void buildWrappers() { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("timestamper1"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -207,7 +227,8 @@ public void publishers() { new PluginProjects( new Plugin("junit", "1.53"), Lists.newArrayList(new Project("publisher1"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -230,7 +251,8 @@ public void publishersPromotions() throws URISyntaxException, MalformedURLExcept new PluginProjects( new Plugin("promoted-builds", "3.10"), Lists.newArrayList(new Project("publisher2"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -251,7 +273,8 @@ public void scm() { new PluginProjects( new Plugin("mailer", "1.34"), Lists.newArrayList()) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -274,7 +297,8 @@ public void maven() { new PluginProjects( new Plugin("maven-plugin", "3.15"), Lists.newArrayList(new Project("maven1"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -300,7 +324,8 @@ public void mavenPreBuilders() { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("maven2"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -326,7 +351,8 @@ public void mavenPostBuilders() { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("maven3"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -356,7 +382,9 @@ public void mavenParameter() { new PluginProjects( new Plugin("maven-plugin", "3.15"), Lists.newArrayList(new Project("maven4"))) )); - assertEquals(expected, actual); + + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -385,7 +413,8 @@ public void mavenSingleConditionalBuilder() { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("maven5"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -414,7 +443,8 @@ public void mavenMultiConditionalBuilder() { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("maven6"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @@ -447,7 +477,8 @@ public void mavenPromotions() throws URISyntaxException, MalformedURLException { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("maven7"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -466,7 +497,8 @@ public void trigger() { new PluginProjects( new Plugin("urltrigger", "0.49"), Lists.newArrayList(new Project("trigger1"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -505,7 +537,8 @@ public void pipeline() { new PluginProjects( new Plugin("pipeline-stage-step", "2.5"), Lists.newArrayList()) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -547,7 +580,8 @@ public void pipeline2() { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("pipeline2"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -569,7 +603,8 @@ public void matrix() { new PluginProjects( new Plugin("visual-basic-6", "1.4"), Lists.newArrayList(new Project("matrix1"))) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } @Test @@ -592,6 +627,7 @@ public void otherProjects() { new Project("freestyle1") )) )); - assertEquals(expected, actual); + assertEquals(pluginNamesExtractor.apply(expected), pluginNamesExtractor.apply(actual)); + assertEquals(ProjectsExtractor.apply(expected), ProjectsExtractor.apply(actual)); } } diff --git a/src/test/java/org/jenkinsci/plugins/pluginusage/api/Plugin.java b/src/test/java/org/jenkinsci/plugins/pluginusage/api/Plugin.java index e0cf6dc..704a27b 100644 --- a/src/test/java/org/jenkinsci/plugins/pluginusage/api/Plugin.java +++ b/src/test/java/org/jenkinsci/plugins/pluginusage/api/Plugin.java @@ -15,6 +15,10 @@ public Plugin(String shortName, String version) { this.version = version; } + public String getShortName() { + return shortName; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/test/java/org/jenkinsci/plugins/pluginusage/api/PluginProjects.java b/src/test/java/org/jenkinsci/plugins/pluginusage/api/PluginProjects.java index 9247b63..d01dc35 100644 --- a/src/test/java/org/jenkinsci/plugins/pluginusage/api/PluginProjects.java +++ b/src/test/java/org/jenkinsci/plugins/pluginusage/api/PluginProjects.java @@ -36,4 +36,12 @@ public String toString() { .add("projects=" + projects) .toString(); } + + public Plugin getPlugin() { + return plugin; + } + + public List getProjects() { + return projects; + } } diff --git a/src/test/java/org/jenkinsci/plugins/pluginusage/api/PluginUsage.java b/src/test/java/org/jenkinsci/plugins/pluginusage/api/PluginUsage.java index 8ec373b..25a17ea 100644 --- a/src/test/java/org/jenkinsci/plugins/pluginusage/api/PluginUsage.java +++ b/src/test/java/org/jenkinsci/plugins/pluginusage/api/PluginUsage.java @@ -33,4 +33,8 @@ public String toString() { .add("jobsPerPlugin=" + jobsPerPlugin) .toString(); } + + public List getJobsPerPlugin() { + return jobsPerPlugin; + } } diff --git a/src/test/java/org/jenkinsci/plugins/pluginusage/api/Project.java b/src/test/java/org/jenkinsci/plugins/pluginusage/api/Project.java index ceab048..e62aa3a 100644 --- a/src/test/java/org/jenkinsci/plugins/pluginusage/api/Project.java +++ b/src/test/java/org/jenkinsci/plugins/pluginusage/api/Project.java @@ -32,4 +32,8 @@ public String toString() { .add("fullName='" + fullName + "'") .toString(); } + + public String getFullName() { + return fullName; + } }