Skip to content

Commit 506f96a

Browse files
Allowing empty valued global variables in config file (#2657)
* Using configurator for global props * Accept EnvVars wihtout value * Testing additional global props * Removing not used describe * Switching to use DataBoundConstructor --------- Co-authored-by: Francisco Javier Fernandez Gonzalez <fjfernandez@cloudbees.com>
1 parent 3afd81a commit 506f96a

4 files changed

Lines changed: 114 additions & 3 deletions

File tree

integrations/src/test/java/io/jenkins/plugins/casc/GlobalNodePropertiesTest.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,19 @@
77
import static org.hamcrest.core.Is.is;
88
import static org.junit.jupiter.api.Assertions.assertEquals;
99

10+
import hudson.node_monitors.DiskSpaceMonitorNodeProperty;
1011
import hudson.slaves.EnvironmentVariablesNodeProperty;
1112
import hudson.slaves.NodeProperty;
1213
import hudson.slaves.NodePropertyDescriptor;
14+
import hudson.tools.ToolLocationNodeProperty;
1315
import hudson.util.DescribableList;
1416
import io.jenkins.plugins.casc.misc.ConfiguredWithCode;
1517
import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule;
1618
import io.jenkins.plugins.casc.misc.junit.jupiter.WithJenkinsConfiguredWithCode;
1719
import io.jenkins.plugins.casc.model.CNode;
20+
import java.util.Iterator;
1821
import java.util.Map;
22+
import java.util.Map.Entry;
1923
import java.util.Set;
2024
import jenkins.model.Jenkins;
2125
import org.junit.jupiter.api.Test;
@@ -30,14 +34,37 @@ void configure(JenkinsConfiguredWithCodeRule j) {
3034

3135
DescribableList<NodeProperty<?>, NodePropertyDescriptor> nodeProperties = jenkins.getGlobalNodeProperties();
3236

33-
Set<Map.Entry<String, String>> entries = ((EnvironmentVariablesNodeProperty) nodeProperties.get(0))
37+
assertEquals(3, nodeProperties.size());
38+
39+
Set<Map.Entry<String, String>> envVars = ((EnvironmentVariablesNodeProperty)
40+
nodeProperties.get(EnvironmentVariablesNodeProperty.class))
3441
.getEnvVars()
3542
.entrySet();
36-
assertEquals(1, entries.size());
43+
assertEquals(3, envVars.size());
3744

38-
Map.Entry<String, String> envVar = entries.iterator().next();
45+
Iterator<Entry<String, String>> iterator = envVars.iterator();
46+
Map.Entry<String, String> envVar = iterator.next();
3947
assertEquals("FOO", envVar.getKey());
4048
assertEquals("BAR", envVar.getValue());
49+
50+
envVar = iterator.next();
51+
assertEquals("FOO2", envVar.getKey());
52+
assertEquals("", envVar.getValue());
53+
54+
envVar = iterator.next();
55+
assertEquals("FOO3", envVar.getKey());
56+
assertEquals("", envVar.getValue());
57+
58+
DiskSpaceMonitorNodeProperty diskSpace = nodeProperties.get(DiskSpaceMonitorNodeProperty.class);
59+
assertEquals("1GiB", diskSpace.getFreeDiskSpaceThreshold());
60+
assertEquals("2GiB", diskSpace.getFreeDiskSpaceWarningThreshold());
61+
assertEquals("1GiB", diskSpace.getFreeTempSpaceThreshold());
62+
assertEquals("2GiB", diskSpace.getFreeTempSpaceWarningThreshold());
63+
64+
ToolLocationNodeProperty toolLocations = nodeProperties.get(ToolLocationNodeProperty.class);
65+
assertEquals(1, toolLocations.getLocations().size());
66+
assertEquals("Default", toolLocations.getLocations().get(0).getName());
67+
assertEquals("/home/user/bin/git", toolLocations.getLocations().get(0).getHome());
4168
}
4269

4370
@Test
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
jenkins:
22
globalNodeProperties:
3+
- diskSpaceMonitor:
4+
freeDiskSpaceThreshold: "1GiB"
5+
freeDiskSpaceWarningThreshold: "2GiB"
6+
freeTempSpaceThreshold: "1GiB"
7+
freeTempSpaceWarningThreshold: "2GiB"
38
- envVars:
49
env:
510
- key: FOO
611
value: BAR
12+
- key: FOO2
13+
value: ""
14+
- key: FOO3
15+
- toolLocation:
16+
locations:
17+
- home: "/home/user/bin/git"
18+
key: "hudson.plugins.git.GitTool$DescriptorImpl@Default"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
1+
- diskSpaceMonitor:
2+
freeDiskSpaceThreshold: "1GiB"
3+
freeDiskSpaceWarningThreshold: "2GiB"
4+
freeTempSpaceThreshold: "1GiB"
5+
freeTempSpaceWarningThreshold: "2GiB"
16
- envVars:
27
env:
38
- key: "FOO"
49
value: "BAR"
10+
- key: "FOO2"
11+
- key: "FOO3"
12+
- toolLocation:
13+
locations:
14+
- home: "/home/user/bin/git"
15+
key: "hudson.plugins.git.GitTool$DescriptorImpl@Default"
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package io.jenkins.plugins.casc.core;
2+
3+
import edu.umd.cs.findbugs.annotations.NonNull;
4+
import hudson.Extension;
5+
import hudson.slaves.EnvironmentVariablesNodeProperty;
6+
import hudson.slaves.EnvironmentVariablesNodeProperty.Entry;
7+
import io.jenkins.plugins.casc.ConfigurationContext;
8+
import io.jenkins.plugins.casc.ConfiguratorException;
9+
import io.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator;
10+
import io.jenkins.plugins.casc.model.CNode;
11+
import io.jenkins.plugins.casc.model.Mapping;
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
@Extension
16+
public class GlobalNodePropertiesConfigurator extends DataBoundConfigurator<EnvironmentVariablesNodeProperty> {
17+
18+
public GlobalNodePropertiesConfigurator() {
19+
this(EnvironmentVariablesNodeProperty.class);
20+
}
21+
22+
public GlobalNodePropertiesConfigurator(Class<?> clazz) {
23+
super(EnvironmentVariablesNodeProperty.class);
24+
}
25+
26+
@NonNull
27+
@Override
28+
public String getName() {
29+
return "globalNodeProperties";
30+
}
31+
32+
@NonNull
33+
@Override
34+
public EnvironmentVariablesNodeProperty configure(CNode c, ConfigurationContext context)
35+
throws ConfiguratorException {
36+
Mapping mapping = c.asMapping();
37+
List<Entry> variables = getVarsAsList(mapping);
38+
return new EnvironmentVariablesNodeProperty(variables);
39+
}
40+
41+
private List<Entry> getVarsAsList(Mapping m) {
42+
List<Entry> result = new ArrayList<>();
43+
if (m.get("env") != null) {
44+
result = m.get("env").asSequence().stream()
45+
.map(pair -> {
46+
if (pair.asMapping().get("key") == null) {
47+
return null;
48+
}
49+
final String key =
50+
pair.asMapping().get("key").asScalar().getValue();
51+
final String value = pair.asMapping().get("value") == null
52+
? ""
53+
: pair.asMapping().get("value").asScalar().getValue();
54+
55+
return new Entry(key, value);
56+
})
57+
.toList();
58+
}
59+
return result;
60+
}
61+
}

0 commit comments

Comments
 (0)