Skip to content

Commit 326a2e9

Browse files
committed
feat(env): Add more unit tests
1 parent 46345fc commit 326a2e9

File tree

7 files changed

+214
-4
lines changed

7 files changed

+214
-4
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,18 @@
1+
plugins {
2+
`java-library`
3+
}
4+
15
apply(from = "$rootDir/gradle/java.gradle")
6+
7+
extra.set("minimumInstructionCoverage", 0.7)
8+
val excludedClassesCoverage by extra {
9+
listOf(
10+
"datadog.environment.JavaVirtualMachine", // depends on OS and JVM vendor
11+
"datadog.environment.JavaVirtualMachine.JvmOptionsHolder", // depends on OS and JVM vendor
12+
"datadog.environment.JvmOptions", // depends on OS and JVM vendor
13+
"datadog.environment.OperatingSystem", // depends on OS
14+
)
15+
}
16+
val excludedClassesBranchCoverage by extra {
17+
listOf("datadog.environment.CommandLine") // tested using forked process
18+
}

components/environment/src/main/java/datadog/environment/JavaVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ static JavaVersion getRuntimeVersion() {
2424
return parseJavaVersion(SystemProperties.getOrDefault("java.version", ""));
2525
}
2626

27-
private static JavaVersion parseJavaVersion(String javaVersion) {
27+
static JavaVersion parseJavaVersion(String javaVersion) {
2828
// Remove pre-release part, usually -ea
2929
final int indexOfDash = javaVersion.indexOf('-');
3030
if (indexOfDash >= 0) {

components/environment/src/test/java/datadog/environment/CommandLineTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class CommandLineTest {
2828
private static final String CMD_ARGUMENTS_MARKER = "-- CMD ARGUMENTS --";
2929
private static final String REAL_CMD_ARGUMENTS_MARKER = "-- REAL CMD ARGUMENTS --";
3030

31-
public static Stream<Arguments> data() {
31+
static Stream<Arguments> data() {
3232
// spotless:off
3333
return Stream.of(
3434
arguments(
@@ -58,8 +58,8 @@ public static Stream<Arguments> data() {
5858

5959
@ParameterizedTest(name = "[{index}] {0}")
6060
@MethodSource("data")
61-
public void testGetVmArguments(
62-
String useCase, RunArguments arguments, RunArguments expectedArguments) throws Exception {
61+
void testGetVmArguments(String useCase, RunArguments arguments, RunArguments expectedArguments)
62+
throws Exception {
6363
if (useCase.contains("argfile")) {
6464
System.out.println(">>> java.home" + System.getProperty("java.home"));
6565
System.err.println(">>> java.home" + System.getProperty("java.home"));
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package datadog.environment;
2+
3+
import static org.junit.jupiter.api.Assertions.*;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
class EnvironmentVariablesTest {
8+
private static final String EXISTING_ENV_VAR = "JAVA_8_HOME";
9+
private static final String MISSING_ENV_VAR = "UNDEFINED_ENV_VAR";
10+
11+
@Test
12+
void testGet() {
13+
assertNotNull(EnvironmentVariables.get(EXISTING_ENV_VAR));
14+
assertNull(EnvironmentVariables.get(MISSING_ENV_VAR));
15+
assertThrows(NullPointerException.class, () -> EnvironmentVariables.get(null));
16+
}
17+
18+
@Test
19+
void testGetOrDefault() {
20+
assertNotNull(EnvironmentVariables.getOrDefault(EXISTING_ENV_VAR, null));
21+
22+
assertEquals("", EnvironmentVariables.getOrDefault(MISSING_ENV_VAR, ""));
23+
assertNull(EnvironmentVariables.getOrDefault(MISSING_ENV_VAR, null));
24+
25+
assertThrows(NullPointerException.class, () -> EnvironmentVariables.getOrDefault(null, ""));
26+
}
27+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package datadog.environment;
2+
3+
import static java.lang.Integer.MAX_VALUE;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import static org.junit.jupiter.api.Assertions.assertFalse;
6+
import static org.junit.jupiter.api.Assertions.assertTrue;
7+
import static org.junit.jupiter.params.provider.Arguments.of;
8+
9+
import java.util.stream.Stream;
10+
import org.junit.jupiter.params.ParameterizedTest;
11+
import org.junit.jupiter.params.provider.Arguments;
12+
import org.junit.jupiter.params.provider.MethodSource;
13+
14+
class JavaVersionTest {
15+
static Stream<Arguments> argumentsParsing() {
16+
return Stream.of(
17+
of("", 0, 0, 0),
18+
of("a.0.0", 0, 0, 0),
19+
of("0.a.0", 0, 0, 0),
20+
of("0.0.a", 0, 0, 0),
21+
of("1.a.0_0", 0, 0, 0),
22+
of("1.8.a_0", 0, 0, 0),
23+
of("1.8.0_a", 0, 0, 0),
24+
of("1.7", 7, 0, 0),
25+
of("1.7.0", 7, 0, 0),
26+
of("1.7.0_221", 7, 0, 221),
27+
of("1.8", 8, 0, 0),
28+
of("1.8.0", 8, 0, 0),
29+
of("1.8.0_212", 8, 0, 212),
30+
of("1.8.0_292", 8, 0, 292),
31+
of("9-ea", 9, 0, 0),
32+
of("9.0.4", 9, 0, 4),
33+
of("9.1.2", 9, 1, 2),
34+
of("10.0.2", 10, 0, 2),
35+
of("11", 11, 0, 0),
36+
of("11.0.6", 11, 0, 6),
37+
of("11.0.11", 11, 0, 11),
38+
of("12.0.2", 12, 0, 2),
39+
of("13.0.2", 13, 0, 2),
40+
of("14", 14, 0, 0),
41+
of("14.0.2", 14, 0, 2),
42+
of("15", 15, 0, 0),
43+
of("15.0.2", 15, 0, 2),
44+
of("16.0.1", 16, 0, 1),
45+
of("11.0.9.1+1", 11, 0, 9),
46+
of("11.0.6+10", 11, 0, 6),
47+
of("17.0.4-x", 17, 0, 4));
48+
}
49+
50+
@ParameterizedTest(name = "[{index}] {0} parsed as {1}.{2}.{3}")
51+
@MethodSource("argumentsParsing")
52+
void testParsing(String version, int major, int minor, int update) {
53+
JavaVersion javaVersion = JavaVersion.parseJavaVersion(version);
54+
55+
assertEquals(major, javaVersion.major);
56+
assertEquals(minor, javaVersion.minor);
57+
assertEquals(update, javaVersion.update);
58+
59+
assertFalse(javaVersion.is(major - 1));
60+
assertTrue(javaVersion.is(major));
61+
assertFalse(javaVersion.is(major + 1));
62+
63+
assertFalse(javaVersion.is(major, minor - 1));
64+
assertTrue(javaVersion.is(major, minor));
65+
assertFalse(javaVersion.is(major, minor + 1));
66+
67+
assertFalse(javaVersion.is(major, minor, update - 1));
68+
assertTrue(javaVersion.is(major, minor, update));
69+
assertFalse(javaVersion.is(major, minor, update + 1));
70+
71+
assertTrue(javaVersion.isAtLeast(major, minor, update));
72+
73+
assertFalse(javaVersion.isBetween(major, minor, update, major, minor, update));
74+
75+
assertTrue(javaVersion.isBetween(major, minor, update, MAX_VALUE, MAX_VALUE, MAX_VALUE));
76+
assertTrue(javaVersion.isBetween(major, minor, update, major + 1, 0, 0));
77+
assertTrue(javaVersion.isBetween(major, minor, update, major, minor + 1, 0));
78+
assertTrue(javaVersion.isBetween(major, minor, update, major, minor, update + 1));
79+
80+
assertFalse(javaVersion.isBetween(major, minor, update, major - 1, 0, 0));
81+
assertFalse(javaVersion.isBetween(major, minor, update, major, minor - 1, 0));
82+
assertFalse(javaVersion.isBetween(major, minor, update, major, minor, update - 1));
83+
}
84+
85+
static Stream<Arguments> argumentsAtLeast() {
86+
return Stream.of(
87+
of("17.0.5+8", 17, 0, 5),
88+
of("17.0.5", 17, 0, 5),
89+
of("17.0.6+8", 17, 0, 5),
90+
of("11.0.17+8", 11, 0, 17),
91+
of("11.0.18+8", 11, 0, 17),
92+
of("11.0.17", 11, 0, 17),
93+
of("1.8.0_352", 8, 0, 352),
94+
of("1.8.0_362", 8, 0, 352));
95+
}
96+
97+
@ParameterizedTest(name = "[{index}] {0} is at least {1}.{2}.{3}")
98+
@MethodSource("argumentsAtLeast")
99+
void testIsAtLeast(String version, int major, int minor, int update) {
100+
JavaVersion javaVersion = JavaVersion.parseJavaVersion(version);
101+
assertTrue(javaVersion.isAtLeast(major, minor, update));
102+
}
103+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package datadog.environment;
2+
3+
import static org.junit.jupiter.api.Assertions.assertFalse;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
import static org.junit.jupiter.api.condition.OS.LINUX;
6+
import static org.junit.jupiter.api.condition.OS.MAC;
7+
import static org.junit.jupiter.api.condition.OS.WINDOWS;
8+
9+
import org.junit.jupiter.api.Test;
10+
import org.junit.jupiter.api.condition.EnabledOnOs;
11+
12+
class OperatingSystemTest {
13+
@Test
14+
@EnabledOnOs(LINUX)
15+
void onLinuxOnly() {
16+
assertTrue(OperatingSystem.isLinux());
17+
assertFalse(OperatingSystem.isMacOs());
18+
assertFalse(OperatingSystem.isWindows());
19+
}
20+
21+
@Test
22+
@EnabledOnOs(MAC)
23+
void onMacOsOnly() {
24+
assertFalse(OperatingSystem.isLinux());
25+
assertTrue(OperatingSystem.isMacOs());
26+
assertFalse(OperatingSystem.isWindows());
27+
}
28+
29+
@Test
30+
@EnabledOnOs(WINDOWS)
31+
void onWindowsOnly() {
32+
assertFalse(OperatingSystem.isLinux());
33+
assertFalse(OperatingSystem.isMacOs());
34+
assertTrue(OperatingSystem.isWindows());
35+
}
36+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package datadog.environment;
2+
3+
import static org.junit.jupiter.api.Assertions.*;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
class SystemPropertiesTest {
8+
private static final String EXISTING_SYSTEM_PROPERTY = "java.home";
9+
private static final String MISSING_SYSTEM_PROPERTY = "undefined.system.property";
10+
11+
@Test
12+
void testGet() {
13+
assertNotNull(SystemProperties.get(EXISTING_SYSTEM_PROPERTY));
14+
assertNull(SystemProperties.get(MISSING_SYSTEM_PROPERTY));
15+
assertThrows(NullPointerException.class, () -> SystemProperties.get(null));
16+
}
17+
18+
@Test
19+
void testGetOrDefault() {
20+
assertNotNull(SystemProperties.getOrDefault(EXISTING_SYSTEM_PROPERTY, null));
21+
22+
assertEquals("", SystemProperties.getOrDefault(MISSING_SYSTEM_PROPERTY, ""));
23+
assertNull(SystemProperties.getOrDefault(MISSING_SYSTEM_PROPERTY, null));
24+
25+
assertThrows(NullPointerException.class, () -> SystemProperties.getOrDefault(null, ""));
26+
}
27+
}

0 commit comments

Comments
 (0)