diff --git a/integrations/src/test/java/io/jenkins/plugins/casc/GlobalNodePropertiesTest.java b/integrations/src/test/java/io/jenkins/plugins/casc/GlobalNodePropertiesTest.java index ba91c2edea..c59a115e32 100644 --- a/integrations/src/test/java/io/jenkins/plugins/casc/GlobalNodePropertiesTest.java +++ b/integrations/src/test/java/io/jenkins/plugins/casc/GlobalNodePropertiesTest.java @@ -7,15 +7,19 @@ import static org.hamcrest.core.Is.is; import static org.junit.jupiter.api.Assertions.assertEquals; +import hudson.node_monitors.DiskSpaceMonitorNodeProperty; import hudson.slaves.EnvironmentVariablesNodeProperty; import hudson.slaves.NodeProperty; import hudson.slaves.NodePropertyDescriptor; +import hudson.tools.ToolLocationNodeProperty; import hudson.util.DescribableList; import io.jenkins.plugins.casc.misc.ConfiguredWithCode; import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import io.jenkins.plugins.casc.misc.junit.jupiter.WithJenkinsConfiguredWithCode; import io.jenkins.plugins.casc.model.CNode; +import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import jenkins.model.Jenkins; import org.junit.jupiter.api.Test; @@ -30,14 +34,37 @@ void configure(JenkinsConfiguredWithCodeRule j) { DescribableList, NodePropertyDescriptor> nodeProperties = jenkins.getGlobalNodeProperties(); - Set> entries = ((EnvironmentVariablesNodeProperty) nodeProperties.get(0)) + assertEquals(3, nodeProperties.size()); + + Set> envVars = ((EnvironmentVariablesNodeProperty) + nodeProperties.get(EnvironmentVariablesNodeProperty.class)) .getEnvVars() .entrySet(); - assertEquals(1, entries.size()); + assertEquals(3, envVars.size()); - Map.Entry envVar = entries.iterator().next(); + Iterator> iterator = envVars.iterator(); + Map.Entry envVar = iterator.next(); assertEquals("FOO", envVar.getKey()); assertEquals("BAR", envVar.getValue()); + + envVar = iterator.next(); + assertEquals("FOO2", envVar.getKey()); + assertEquals("", envVar.getValue()); + + envVar = iterator.next(); + assertEquals("FOO3", envVar.getKey()); + assertEquals("", envVar.getValue()); + + DiskSpaceMonitorNodeProperty diskSpace = nodeProperties.get(DiskSpaceMonitorNodeProperty.class); + assertEquals("1GiB", diskSpace.getFreeDiskSpaceThreshold()); + assertEquals("2GiB", diskSpace.getFreeDiskSpaceWarningThreshold()); + assertEquals("1GiB", diskSpace.getFreeTempSpaceThreshold()); + assertEquals("2GiB", diskSpace.getFreeTempSpaceWarningThreshold()); + + ToolLocationNodeProperty toolLocations = nodeProperties.get(ToolLocationNodeProperty.class); + assertEquals(1, toolLocations.getLocations().size()); + assertEquals("Default", toolLocations.getLocations().get(0).getName()); + assertEquals("/home/user/bin/git", toolLocations.getLocations().get(0).getHome()); } @Test diff --git a/integrations/src/test/resources/io/jenkins/plugins/casc/GlobalNodePropertiesTest.yml b/integrations/src/test/resources/io/jenkins/plugins/casc/GlobalNodePropertiesTest.yml index c9eeb3aaf9..35ae547e9c 100644 --- a/integrations/src/test/resources/io/jenkins/plugins/casc/GlobalNodePropertiesTest.yml +++ b/integrations/src/test/resources/io/jenkins/plugins/casc/GlobalNodePropertiesTest.yml @@ -1,6 +1,18 @@ jenkins: globalNodeProperties: + - diskSpaceMonitor: + freeDiskSpaceThreshold: "1GiB" + freeDiskSpaceWarningThreshold: "2GiB" + freeTempSpaceThreshold: "1GiB" + freeTempSpaceWarningThreshold: "2GiB" - envVars: env: - key: FOO value: BAR + - key: FOO2 + value: "" + - key: FOO3 + - toolLocation: + locations: + - home: "/home/user/bin/git" + key: "hudson.plugins.git.GitTool$DescriptorImpl@Default" \ No newline at end of file diff --git a/integrations/src/test/resources/io/jenkins/plugins/casc/GlobalNodePropertiesTestExpected.yml b/integrations/src/test/resources/io/jenkins/plugins/casc/GlobalNodePropertiesTestExpected.yml index e02c4d039a..b34a3b8583 100644 --- a/integrations/src/test/resources/io/jenkins/plugins/casc/GlobalNodePropertiesTestExpected.yml +++ b/integrations/src/test/resources/io/jenkins/plugins/casc/GlobalNodePropertiesTestExpected.yml @@ -1,4 +1,15 @@ +- diskSpaceMonitor: + freeDiskSpaceThreshold: "1GiB" + freeDiskSpaceWarningThreshold: "2GiB" + freeTempSpaceThreshold: "1GiB" + freeTempSpaceWarningThreshold: "2GiB" - envVars: env: - key: "FOO" value: "BAR" + - key: "FOO2" + - key: "FOO3" +- toolLocation: + locations: + - home: "/home/user/bin/git" + key: "hudson.plugins.git.GitTool$DescriptorImpl@Default" diff --git a/plugin/src/main/java/io/jenkins/plugins/casc/core/GlobalNodePropertiesConfigurator.java b/plugin/src/main/java/io/jenkins/plugins/casc/core/GlobalNodePropertiesConfigurator.java new file mode 100644 index 0000000000..b3ab3ce0e0 --- /dev/null +++ b/plugin/src/main/java/io/jenkins/plugins/casc/core/GlobalNodePropertiesConfigurator.java @@ -0,0 +1,61 @@ +package io.jenkins.plugins.casc.core; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Extension; +import hudson.slaves.EnvironmentVariablesNodeProperty; +import hudson.slaves.EnvironmentVariablesNodeProperty.Entry; +import io.jenkins.plugins.casc.ConfigurationContext; +import io.jenkins.plugins.casc.ConfiguratorException; +import io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator; +import io.jenkins.plugins.casc.model.CNode; +import io.jenkins.plugins.casc.model.Mapping; +import java.util.ArrayList; +import java.util.List; + +@Extension +public class GlobalNodePropertiesConfigurator extends DataBoundConfigurator { + + public GlobalNodePropertiesConfigurator() { + this(EnvironmentVariablesNodeProperty.class); + } + + public GlobalNodePropertiesConfigurator(Class clazz) { + super(EnvironmentVariablesNodeProperty.class); + } + + @NonNull + @Override + public String getName() { + return "globalNodeProperties"; + } + + @NonNull + @Override + public EnvironmentVariablesNodeProperty configure(CNode c, ConfigurationContext context) + throws ConfiguratorException { + Mapping mapping = c.asMapping(); + List variables = getVarsAsList(mapping); + return new EnvironmentVariablesNodeProperty(variables); + } + + private List getVarsAsList(Mapping m) { + List result = new ArrayList<>(); + if (m.get("env") != null) { + result = m.get("env").asSequence().stream() + .map(pair -> { + if (pair.asMapping().get("key") == null) { + return null; + } + final String key = + pair.asMapping().get("key").asScalar().getValue(); + final String value = pair.asMapping().get("value") == null + ? "" + : pair.asMapping().get("value").asScalar().getValue(); + + return new Entry(key, value); + }) + .toList(); + } + return result; + } +}