Skip to content

Commit 89fd370

Browse files
committed
write CLIHelper Test
1 parent d2e2942 commit 89fd370

File tree

2 files changed

+68
-33
lines changed

2 files changed

+68
-33
lines changed

components/cli/src/main/java/datadog.cli/CLIHelper.java

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -131,59 +131,43 @@ public static Map<String, List<String>> parseJvmArgs(List<String> args) {
131131

132132
// Handle system properties (-Dkey=value)
133133
if (arg.startsWith("-D")) {
134-
int equalsIndex = arg.indexOf('=');
135-
if (equalsIndex >= 0) {
136-
String key = arg.substring(0, equalsIndex);
137-
String value = arg.substring(equalsIndex + 1);
138-
parsedArgs.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
139-
} else {
140-
parsedArgs.computeIfAbsent(arg, k -> new ArrayList<>()).add(null);
141-
}
134+
addEntryToMap('=', arg, parsedArgs);
142135
continue;
143136
}
144137

145138
// Handle -XX flags
146139
if (arg.startsWith("-XX:")) {
147140
// -XX flags can have values after = (like -XX:MaxMetaspaceSize=128m)
148-
int equalsIndex = arg.indexOf('=');
149-
if (equalsIndex >= 0) {
150-
String key = arg.substring(0, equalsIndex);
151-
String value = arg.substring(equalsIndex + 1);
152-
parsedArgs.computeIfAbsent("-XX:" + key, k -> new ArrayList<>()).add(value);
153-
} else {
154-
parsedArgs.computeIfAbsent(arg, k -> new ArrayList<>()).add(null);
155-
}
141+
addEntryToMap('=', arg, parsedArgs);
142+
continue;
156143
}
157144

158145
// Handle -javaagent
159146
if (arg.startsWith("-javaagent:")) {
160-
String keyValue = arg.substring(11); // Remove "-javaagent:" prefix
161-
int equalsIndex = keyValue.indexOf('=');
162-
if (equalsIndex >= 0) {
163-
String key = keyValue.substring(0, equalsIndex);
164-
String value = keyValue.substring(equalsIndex + 1);
165-
parsedArgs.computeIfAbsent("-javaagent:" + key, k -> new ArrayList<>()).add(value);
166-
} else {
167-
parsedArgs.computeIfAbsent(arg, k -> new ArrayList<>()).add(null);
168-
}
147+
addEntryToMap(':', arg, parsedArgs);
169148
continue;
170149
}
171150

172151
// Handle other flags that might have values
173152
// Note that -X flags will not be parsed into key-vals; they'll be caught by the value-less
174153
// case and stored as a key. Therefore, duplicate keys are not supported for -X flags
175154
if (arg.startsWith("-")) {
176-
int equalsIndex = arg.indexOf('=');
177-
if (equalsIndex >= 0) {
178-
String key = arg.substring(0, equalsIndex);
179-
String value = arg.substring(equalsIndex + 1);
180-
parsedArgs.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
181-
} else {
182-
parsedArgs.computeIfAbsent(arg, k -> new ArrayList<>()).add(null);
183-
}
155+
addEntryToMap('=', arg, parsedArgs);
184156
}
185157
}
186158

187159
return parsedArgs;
188160
}
161+
162+
private static void addEntryToMap(
163+
char equalsOperator, String arg, Map<String, List<String>> parsedArgs) {
164+
int equalsIndex = arg.indexOf(equalsOperator);
165+
if (equalsIndex >= 0 && equalsIndex < (arg.length() - 1)) {
166+
String key = arg.substring(0, equalsIndex);
167+
String value = arg.substring(equalsIndex + 1);
168+
parsedArgs.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
169+
} else {
170+
parsedArgs.computeIfAbsent(arg, k -> new ArrayList<>()).add(null);
171+
}
172+
}
189173
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package datadog.cli
2+
import spock.lang.Specification
3+
4+
class CLIHelperTest extends Specification {
5+
def "test parseJvmArgs"() {
6+
when:
7+
List<String> input = [
8+
"-XX:MaxMetaspaceSize=128m",
9+
"-XX:+UseG1GC",
10+
"-Dkey=value1",
11+
"-Dkey=value2",
12+
"-DdisableFeature",
13+
"-javaagent:/path/to/dd-java-agent.jar",
14+
"-javaagent:/path/to/another-agent.jar",
15+
"-javaagent",
16+
"-Xmx512",
17+
"-Xdebug",
18+
]
19+
Map<String,List<String>> args = CLIHelper.parseJvmArgs(input)
20+
21+
then:
22+
// -Xdebug
23+
args.containsKey("-Xdebug")
24+
args.get("-Xdebug") == [null]
25+
26+
// -Xmx512
27+
args.containsKey("-Xmx512")
28+
args.get("-Xmx512") == [null]
29+
30+
// -javaagent
31+
args.containsKey("-javaagent")
32+
args.get("-javaagent") == ["/path/to/dd-java-agent.jar", "/path/to/another-agent.jar", null]
33+
34+
// -DdisableFeature
35+
args.containsKey("-DdisableFeature")
36+
args.get("-DdisableFeature") == [null]
37+
38+
// -Dkey
39+
// CLIHelper does not discriminate against what types of jvm args can have duplicate values, it accepts all args found on the process
40+
args.containsKey("-Dkey")
41+
args.get("-Dkey") == ["value1", "value2"]
42+
43+
//-XX:+UseG1GC
44+
args.containsKey("-XX:+UseG1GC")
45+
args.get("-XX:+UseG1GC") == [null]
46+
47+
//-XX:MaxMetaspaceSize
48+
args.containsKey("-XX:MaxMetaspaceSize")
49+
args.get("-XX:MaxMetaspaceSize") == ["128m"]
50+
}
51+
}

0 commit comments

Comments
 (0)