From 6956132d01a5962385cb1053b0fd3914b9d963f5 Mon Sep 17 00:00:00 2001 From: Aayush Date: Sun, 12 Nov 2023 18:11:34 +0530 Subject: [PATCH 1/3] Added plugin information while using verbose --- .../tools/pluginmanager/cli/CliOptions.java | 25 ++++++++++++++++++- .../pluginmanager/cli/CliOptionsTest.java | 1 - 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java b/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java index bcfe0bd3..20213b7c 100644 --- a/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java +++ b/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java @@ -269,11 +269,14 @@ private String getJenkinsWar() { * * @return list of plugins representing user-specified input */ + + @SuppressFBWarnings(value = {"PATH_TRAVERSAL_IN", "URLCONNECTION_SSRF_FD"}, justification = "User provided values for running the program.") private List getPlugins() { PluginListParser pluginParser = new PluginListParser(verbose); List requestedPlugins = new ArrayList<>(pluginParser.parsePluginsFromCliOption(plugins)); File pluginFile = getPluginFile(); + if (pluginFile != null) { if (isFileExtension(pluginFile, "yaml", "yml")) { requestedPlugins.addAll(pluginParser.parsePluginYamlFile(pluginFile)); @@ -283,7 +286,27 @@ private List getPlugins() { throw new PluginInputException("Unknown file type, file must have .yaml/.yml or .txt extension"); } } - return requestedPlugins; + List pluginNames = new ArrayList<>(); + + File dr = new File(String.valueOf(pluginDir)); + + File[] directoryListing = dr.listFiles(); + if (directoryListing != null) { + for (File child : directoryListing) { + pluginNames.add(child.getName()); + } + } + + for(Plugin plugin: requestedPlugins){ + for(String names:pluginNames) { + if ( names.indexOf( plugin.getName() )!= -1) { + logVerbose("Plugin " + plugin.getName() + " is already present in the dir"); + } + } + } + + return requestedPlugins; + } /** diff --git a/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java b/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java index ab63e0f8..07da65ee 100644 --- a/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java +++ b/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java @@ -216,7 +216,6 @@ public void setupUpdateCenterCliTest() throws Exception { assertThat(cfg.getJenkinsIncrementalsRepoMirror()).hasToString(incrementalsCli); assertThat(cfg.getJenkinsPluginInfo()).hasToString(pluginInfoCli); } - @Test public void setupSecurityWarningsTest() throws CmdLineException { parser.parseArgument("--view-all-security-warnings", "--view-security-warnings"); From cad3fd8e2432000b2dc1ec20db333e446fd4da1c Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 14 Nov 2023 11:33:04 +0530 Subject: [PATCH 2/3] Improve naming convention and added test cases --- .../tools/pluginmanager/cli/CliOptions.java | 14 ++++++----- .../pluginmanager/cli/CliOptionsTest.java | 24 ++++++++++++++++++- .../pluginmanager/util/PluginListParser.java | 2 ++ 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java b/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java index 20213b7c..0fdf678d 100644 --- a/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java +++ b/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java @@ -270,7 +270,7 @@ private String getJenkinsWar() { * @return list of plugins representing user-specified input */ - @SuppressFBWarnings(value = {"PATH_TRAVERSAL_IN", "URLCONNECTION_SSRF_FD"}, justification = "User provided values for running the program.") + @SuppressFBWarnings(value = {"PATH_TRAVERSAL_IN"}, justification = "User provided values for running the program.") private List getPlugins() { PluginListParser pluginParser = new PluginListParser(verbose); List requestedPlugins = new ArrayList<>(pluginParser.parsePluginsFromCliOption(plugins)); @@ -286,20 +286,22 @@ private List getPlugins() { throw new PluginInputException("Unknown file type, file must have .yaml/.yml or .txt extension"); } } - List pluginNames = new ArrayList<>(); + List pluginFileNames = new ArrayList<>(); File dr = new File(String.valueOf(pluginDir)); File[] directoryListing = dr.listFiles(); if (directoryListing != null) { for (File child : directoryListing) { - pluginNames.add(child.getName()); + if (child.isFile()) { + pluginFileNames.add(child.getAbsoluteFile().getName()); + } } } - for(Plugin plugin: requestedPlugins){ - for(String names:pluginNames) { - if ( names.indexOf( plugin.getName() )!= -1) { + + for(String names:pluginFileNames) { + if (names.contains(plugin.getName())) { logVerbose("Plugin " + plugin.getName() + " is already present in the dir"); } } diff --git a/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java b/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java index 07da65ee..5fe22608 100644 --- a/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java +++ b/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java @@ -41,6 +41,7 @@ public class CliOptionsTest { @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Before public void createParser() { options = new CliOptions(); @@ -216,6 +217,7 @@ public void setupUpdateCenterCliTest() throws Exception { assertThat(cfg.getJenkinsIncrementalsRepoMirror()).hasToString(incrementalsCli); assertThat(cfg.getJenkinsPluginInfo()).hasToString(pluginInfoCli); } + @Test public void setupSecurityWarningsTest() throws CmdLineException { parser.parseArgument("--view-all-security-warnings", "--view-security-warnings"); @@ -382,4 +384,24 @@ private void assertConfigHasPlugins(Config cfg, List expectedPlugins) { Plugin[] expectedPluginsAsArray = expectedPlugins.toArray(new Plugin[0]); assertThat(cfg.getPlugins()).containsExactlyInAnyOrder(expectedPluginsAsArray); } -} + + @Test + public void verboseEnabledContainingPluginInformation() throws Exception{ + + String jenkinsWar = this.getClass().getResource("/jenkinstest.war").toString(); + + parser.parseArgument("--war", jenkinsWar); + + String pluginDir = temporaryFolder.newFolder("plugins").toString(); + + parser.parseArgument("--war",jenkinsWar,"--plugin-download-directory",pluginDir,"--plugins","delivery-pipeline-plugin:1.3.2 deployit-plugin","--verbose"); + + String stdOut = tapSystemOutNormalized(() -> { + Config cfg = options.setup(); + }); + + assertThat(stdOut).isEmpty(); + + } + +} \ No newline at end of file diff --git a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/util/PluginListParser.java b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/util/PluginListParser.java index 824fbbb6..015449f0 100644 --- a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/util/PluginListParser.java +++ b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/util/PluginListParser.java @@ -71,6 +71,8 @@ public List parsePluginTxtFile(File pluginTxtFile) { return pluginsFromTxt; } + + /** * Given a Jenkins yaml file with a plugins root element, will parse the yaml file and create a list of requested * plugins From 8aa5303aeb651fe1c230a062ad0c299f1c7844f7 Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 14 Nov 2023 11:48:28 +0530 Subject: [PATCH 3/3] Resolve checkstyle issue --- .../java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java b/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java index 5fe22608..f424618b 100644 --- a/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java +++ b/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java @@ -404,4 +404,4 @@ public void verboseEnabledContainingPluginInformation() throws Exception{ } -} \ No newline at end of file +}