diff --git a/src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryConfiguration.java b/src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryConfiguration.java index 5549c6fe..64a49ebd 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryConfiguration.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryConfiguration.java @@ -63,6 +63,9 @@ public class LibraryConfiguration extends AbstractDescribableImpl - + diff --git a/src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryConfigurationTest.java b/src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryConfigurationTest.java index c91a4627..393485e5 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryConfigurationTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryConfigurationTest.java @@ -24,7 +24,7 @@ package org.jenkinsci.plugins.workflow.libs; -import java.util.Collections; +import java.util.List; import hudson.plugins.git.GitSCM; import org.hamcrest.Matchers; @@ -69,29 +69,24 @@ public class LibraryConfigurationTest { } @Issue("JENKINS-59527") - @Test public void emptyStringDefaultVersionAndName() { - String libraryName = ""; - String defaultVersion = ""; - - LibraryConfiguration cfg = new LibraryConfiguration(libraryName, new SCMRetriever(new GitSCM("https://phony.jenkins.io/bar.git"))); - cfg.setDefaultVersion(defaultVersion); - - assertNull(cfg.getName()); + @Test public void emptyDefaultVersion() { + LibraryConfiguration cfg = new LibraryConfiguration("test", new SCMRetriever(new GitSCM("https://phony.jenkins.io/bar.git"))); + cfg.setDefaultVersion(""); assertNull(cfg.getDefaultVersion()); - } - - @Issue("JENKINS-59527") - @Test public void nullDefaultVersionAndName() { - String libraryName = null; - String defaultVersion = null; - - LibraryConfiguration cfg = new LibraryConfiguration(libraryName, new SCMRetriever(new GitSCM("https://phony.jenkins.io/bar.git"))); - cfg.setDefaultVersion(defaultVersion); - assertNull(cfg.getName()); + cfg = new LibraryConfiguration("test", new SCMRetriever(new GitSCM("https://phony.jenkins.io/bar.git"))); + cfg.setDefaultVersion(null); assertNull(cfg.getDefaultVersion()); } - + @Issue("JENKINS-63355") + @Test public void emptyNameCannotBeSaved() throws Exception { + assertThrows(IllegalArgumentException.class, () -> GlobalLibraries.get().setLibraries(List.of( + new LibraryConfiguration(null, new SCMRetriever(new GitSCM("https://phony.jenkins.io/bar.git"))) + ))); + assertThrows(IllegalArgumentException.class, () -> GlobalLibraries.get().setLibraries(List.of( + new LibraryConfiguration("", new SCMRetriever(new GitSCM("https://phony.jenkins.io/bar.git"))) + ))); + } } diff --git a/src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryStepTest.java index 8e76a469..58bf3120 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryStepTest.java @@ -56,6 +56,7 @@ import org.jvnet.hudson.test.BuildWatcher; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.recipes.LocalData; @Issue("JENKINS-39450") public class LibraryStepTest { @@ -338,4 +339,32 @@ public class LibraryStepTest { r.assertLogContains("/lib/java", b); r.assertLogContains("/pipeline/java", b); } + + @LocalData + @Test public void nullNamedLibrary() throws Exception { + sampleRepo.init(); + sampleRepo.write("vars/x.groovy", "def call() {echo 'ran library'}"); + sampleRepo.git("add", "vars"); + sampleRepo.git("commit", "--message=init"); + GlobalLibraries.get().setLibraries(Collections.singletonList(new LibraryConfiguration("stuff", new SCMSourceRetriever(new GitSCMSource(null, sampleRepo.toString(), "", "*", "", true))))); + + /* + LibraryConfiguration cfg = new LibraryConfiguration(null, new SCMSourceRetriever(new GitSCMSource(null, sampleRepo.toString(), "", "*", "", true))); + cfg.setDefaultVersion("master"); + cfg.setImplicit(true); + + Folder f = r.jenkins.createProject(Folder.class, "f"); + f.addProperty(new FolderLibraries(Collections.singletonList(cfg))); + f.save(); + */ + + // local data have a folder 'f' with a library with no name (a null name) + Folder f = r.jenkins.getItemByFullName("f", Folder.class); + assertNotNull(f); + WorkflowJob p = f.createProject(WorkflowJob.class, "p"); + p.setDefinition(new CpsFlowDefinition("library 'stuff@master'; x()", true)); + WorkflowRun b = r.buildAndAssertSuccess(p); + r.assertLogContains("Found a library without name", r.buildAndAssertSuccess(p)); + r.assertLogContains("ran library", b); + } } diff --git a/src/test/resources/org/jenkinsci/plugins/workflow/libs/LibraryStepTest/nullNamedLibrary.zip b/src/test/resources/org/jenkinsci/plugins/workflow/libs/LibraryStepTest/nullNamedLibrary.zip new file mode 100644 index 00000000..fbb0c7bb Binary files /dev/null and b/src/test/resources/org/jenkinsci/plugins/workflow/libs/LibraryStepTest/nullNamedLibrary.zip differ