Skip to content

Commit c995a5c

Browse files
mPokornyETMgithub-actions[bot]
authored andcommitted
test: Add comprehensive unit tests for getParametersAsEnvVars()
Add 7 new test methods covering all code paths: - No actions (empty list) - Single parameter - Multiple parameters in one action - Multiple ParametersAction instances - Null parameter value (skipped) - Non-string value (converted via toString) - Duplicate key across actions (later wins) Also fix @NoExternalUse annotations to use @restricted(NoExternalUse.class) and add missing imports for ExcludeFromJacocoGeneratedReport.
1 parent 3aad3c4 commit c995a5c

2 files changed

Lines changed: 140 additions & 0 deletions

File tree

  • src
    • main/java/org/jenkins/plugins/lockableresources/queue
    • test/java/org/jenkins/plugins/lockableresources/queue

src/main/java/org/jenkins/plugins/lockableresources/queue/Utils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@
2121
import java.util.List;
2222
import java.util.Map;
2323
import java.util.regex.Pattern;
24+
import org.jenkins.plugins.lockableresources.ExcludeFromJacocoGeneratedReport;
2425
import org.jenkins.plugins.lockableresources.RequiredResourcesProperty;
2526
import org.jenkinsci.plugins.variant.OptionalExtension;
27+
import org.kohsuke.accmod.Restricted;
28+
import org.kohsuke.accmod.restrictions.NoExternalUse;
2629

2730
public final class Utils {
2831
private Utils() {}
@@ -46,7 +49,10 @@ private Utils() {}
4649
*
4750
* @see #requiredResources(Job, EnvVars)
4851
*/
52+
@Deprecated
53+
@ExcludeFromJacocoGeneratedReport
4954
@CheckForNull
55+
@Restricted(NoExternalUse.class)
5056
public static LockableResourcesStruct requiredResources(@NonNull Job<?, ?> project) {
5157
return requiredResources(project, null);
5258
}
@@ -61,6 +67,7 @@ public static LockableResourcesStruct requiredResources(@NonNull Job<?, ?> proje
6167
* @return the struct, or {@code null} if the project has no lockable-resource property
6268
*/
6369
@CheckForNull
70+
@Restricted(NoExternalUse.class)
6471
public static LockableResourcesStruct requiredResources(
6572
@NonNull Job<?, ?> project, @CheckForNull EnvVars additionalEnv) {
6673
EnvVars env = new EnvVars();
@@ -85,6 +92,7 @@ public static LockableResourcesStruct requiredResources(
8592
* so that {@code ${PARAM}} references in resource names, labels and numbers are expanded.
8693
*/
8794
@NonNull
95+
@Restricted(NoExternalUse.class)
8896
public static EnvVars getParametersAsEnvVars(@NonNull Queue.Item item) {
8997
EnvVars env = new EnvVars();
9098
List<ParametersAction> paramActions = item.getActions(ParametersAction.class);
@@ -105,6 +113,7 @@ public static EnvVars getParametersAsEnvVars(@NonNull Queue.Item item) {
105113
* Returns {@code true} when the given string contains at least one {@code ${...}} variable
106114
* reference that will be resolved at build time.
107115
*/
116+
@Restricted(NoExternalUse.class)
108117
public static boolean containsVariable(@CheckForNull String value) {
109118
return value != null && VARIABLE_PATTERN.matcher(value).find();
110119
}

src/test/java/org/jenkins/plugins/lockableresources/queue/UtilsTest.java

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
package org.jenkins.plugins.lockableresources.queue;
22

3+
import static org.junit.jupiter.api.Assertions.assertEquals;
34
import static org.junit.jupiter.api.Assertions.assertFalse;
5+
import static org.junit.jupiter.api.Assertions.assertNotNull;
46
import static org.junit.jupiter.api.Assertions.assertTrue;
7+
import static org.mockito.Mockito.mock;
8+
import static org.mockito.Mockito.when;
59

10+
import hudson.EnvVars;
11+
import hudson.model.ParameterValue;
12+
import hudson.model.ParametersAction;
13+
import hudson.model.Queue;
14+
import hudson.model.StringParameterValue;
15+
import java.util.Collections;
16+
import java.util.List;
617
import org.junit.jupiter.api.Test;
718

819
class UtilsTest {
920

21+
// -----------------------------------------------------------------------
22+
// containsVariable()
23+
// -----------------------------------------------------------------------
24+
1025
@Test
1126
void containsVariable() {
1227
assertTrue(Utils.containsVariable("${MY_PARAM}"));
@@ -20,4 +35,120 @@ void containsVariable() {
2035
assertFalse(Utils.containsVariable("$NOT_A_VAR"));
2136
assertFalse(Utils.containsVariable("${}")); // empty var name
2237
}
38+
39+
// -----------------------------------------------------------------------
40+
// getParametersAsEnvVars()
41+
// -----------------------------------------------------------------------
42+
43+
@Test
44+
void getParametersAsEnvVars_noActions() {
45+
Queue.Item item = mock(Queue.Item.class);
46+
when(item.getActions(ParametersAction.class)).thenReturn(Collections.emptyList());
47+
48+
EnvVars env = Utils.getParametersAsEnvVars(item);
49+
50+
assertNotNull(env);
51+
assertTrue(env.isEmpty());
52+
}
53+
54+
@Test
55+
void getParametersAsEnvVars_singleParam() {
56+
StringParameterValue param = new StringParameterValue("RESOURCE", "my-resource");
57+
ParametersAction action = new ParametersAction(param);
58+
59+
Queue.Item item = mock(Queue.Item.class);
60+
when(item.getActions(ParametersAction.class)).thenReturn(List.of(action));
61+
62+
EnvVars env = Utils.getParametersAsEnvVars(item);
63+
64+
assertEquals(1, env.size());
65+
assertEquals("my-resource", env.get("RESOURCE"));
66+
}
67+
68+
@Test
69+
void getParametersAsEnvVars_multipleParams() {
70+
StringParameterValue p1 = new StringParameterValue("RESOURCE_NAME", "res-1");
71+
StringParameterValue p2 = new StringParameterValue("LABEL", "team-alpha");
72+
StringParameterValue p3 = new StringParameterValue("COUNT", "3");
73+
ParametersAction action = new ParametersAction(p1, p2, p3);
74+
75+
Queue.Item item = mock(Queue.Item.class);
76+
when(item.getActions(ParametersAction.class)).thenReturn(List.of(action));
77+
78+
EnvVars env = Utils.getParametersAsEnvVars(item);
79+
80+
assertEquals(3, env.size());
81+
assertEquals("res-1", env.get("RESOURCE_NAME"));
82+
assertEquals("team-alpha", env.get("LABEL"));
83+
assertEquals("3", env.get("COUNT"));
84+
}
85+
86+
@Test
87+
void getParametersAsEnvVars_multipleActions() {
88+
StringParameterValue p1 = new StringParameterValue("A", "val-a");
89+
ParametersAction action1 = new ParametersAction(p1);
90+
StringParameterValue p2 = new StringParameterValue("B", "val-b");
91+
ParametersAction action2 = new ParametersAction(p2);
92+
93+
Queue.Item item = mock(Queue.Item.class);
94+
when(item.getActions(ParametersAction.class)).thenReturn(List.of(action1, action2));
95+
96+
EnvVars env = Utils.getParametersAsEnvVars(item);
97+
98+
assertEquals(2, env.size());
99+
assertEquals("val-a", env.get("A"));
100+
assertEquals("val-b", env.get("B"));
101+
}
102+
103+
@Test
104+
void getParametersAsEnvVars_nullValueSkipped() {
105+
ParameterValue nullValParam = mock(ParameterValue.class);
106+
when(nullValParam.getName()).thenReturn("NULL_PARAM");
107+
when(nullValParam.getValue()).thenReturn(null);
108+
109+
StringParameterValue goodParam = new StringParameterValue("GOOD", "ok");
110+
ParametersAction action = mock(ParametersAction.class);
111+
when(action.getParameters()).thenReturn(List.of(nullValParam, goodParam));
112+
113+
Queue.Item item = mock(Queue.Item.class);
114+
when(item.getActions(ParametersAction.class)).thenReturn(List.of(action));
115+
116+
EnvVars env = Utils.getParametersAsEnvVars(item);
117+
118+
assertEquals(1, env.size());
119+
assertEquals("ok", env.get("GOOD"));
120+
assertFalse(env.containsKey("NULL_PARAM"));
121+
}
122+
123+
@Test
124+
void getParametersAsEnvVars_nonStringValueConvertedToString() {
125+
ParameterValue intParam = mock(ParameterValue.class);
126+
when(intParam.getName()).thenReturn("NUM");
127+
when(intParam.getValue()).thenReturn(42);
128+
129+
ParametersAction action = mock(ParametersAction.class);
130+
when(action.getParameters()).thenReturn(List.of(intParam));
131+
132+
Queue.Item item = mock(Queue.Item.class);
133+
when(item.getActions(ParametersAction.class)).thenReturn(List.of(action));
134+
135+
EnvVars env = Utils.getParametersAsEnvVars(item);
136+
137+
assertEquals("42", env.get("NUM"));
138+
}
139+
140+
@Test
141+
void getParametersAsEnvVars_laterActionOverridesEarlier() {
142+
StringParameterValue p1 = new StringParameterValue("KEY", "first");
143+
ParametersAction action1 = new ParametersAction(p1);
144+
StringParameterValue p2 = new StringParameterValue("KEY", "second");
145+
ParametersAction action2 = new ParametersAction(p2);
146+
147+
Queue.Item item = mock(Queue.Item.class);
148+
when(item.getActions(ParametersAction.class)).thenReturn(List.of(action1, action2));
149+
150+
EnvVars env = Utils.getParametersAsEnvVars(item);
151+
152+
assertEquals("second", env.get("KEY"));
153+
}
23154
}

0 commit comments

Comments
 (0)