Skip to content

Commit 152c522

Browse files
committed
TestGxReadEnvVar was failing because it was calling internal JVM methods via reflection, which can change between versions.
The test has been changed so that it no longer calls internal JVM methods to modify environment variables.
1 parent fb11f4d commit 152c522

File tree

2 files changed

+33
-47
lines changed

2 files changed

+33
-47
lines changed

java/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,12 @@
164164
<artifactId>commons-dbcp2</artifactId>
165165
<version>2.9.0</version>
166166
</dependency>
167+
<dependency>
168+
<groupId>com.github.stefanbirkner</groupId>
169+
<artifactId>system-lambda</artifactId>
170+
<version>1.2.1</version>
171+
<scope>test</scope>
172+
</dependency>
167173
</dependencies>
168174

169175
<build>

java/src/test/java/com/genexus/TestGxReadEnvVar.java

Lines changed: 27 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.genexus.sampleapp.GXcfg;
55
import com.genexus.specific.java.Connect;
66
import com.genexus.util.EnvVarReader;
7+
import com.github.stefanbirkner.systemlambda.SystemLambda;
78
import org.junit.Assert;
89
import org.junit.Test;
910

@@ -22,55 +23,34 @@ public class TestGxReadEnvVar {
2223
private static final String SECOND_VALUE = "SecondDB_URL";
2324

2425
@Test
25-
public void testGxReadEnvVar()
26-
{
26+
public void testGxReadEnvVar() throws Exception {
2727
Connect.init();
2828
ModelContext modelContext = ModelContext.getModelContext(GXcfg.class);
29-
try {
30-
Map<String, String> newenv = new HashMap<>();
31-
newenv.put(FIRST_ENV_VAR, FIRST_VALUE);
32-
setEnvVar(newenv);
33-
String envVarValue = EnvVarReader.getEnvironmentVar(GX_DATASTORE, GX_PROP, null);
34-
Assert.assertEquals(FIRST_VALUE, envVarValue);
3529

36-
newenv.put(SECOND_ENV_VAR, SECOND_VALUE);
37-
setEnvVar(newenv);
38-
envVarValue = EnvVarReader.getEnvironmentVar(GX_DATASTORE, GX_PROP, null);
39-
Assert.assertEquals(SECOND_VALUE, envVarValue);
40-
newenv.put(FIRST_ENV_VAR, null);
41-
setEnvVar(newenv);
42-
newenv.put(SECOND_ENV_VAR, null);
43-
setEnvVar(newenv);
44-
} catch (Exception e) {
45-
e.printStackTrace();
46-
}
47-
}
48-
49-
private void setEnvVar(Map<String, String> newenv) throws Exception{
50-
try {
51-
Class<?> processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment");
52-
Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment");
53-
theEnvironmentField.setAccessible(true);
54-
Map<String, String> env = (Map<String, String>) theEnvironmentField.get(null);
55-
env.putAll(newenv);
56-
Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment");
57-
theCaseInsensitiveEnvironmentField.setAccessible(true);
58-
Map<String, String> cienv = (Map<String, String>) theCaseInsensitiveEnvironmentField.get(null);
59-
cienv.putAll(newenv);
60-
} catch (NoSuchFieldException e)
61-
{
62-
Class[] classes = Collections.class.getDeclaredClasses();
63-
Map<String, String> env = System.getenv();
64-
for (Class cl : classes) {
65-
if ("java.util.Collections$UnmodifiableMap".equals(cl.getName())) {
66-
Field field = cl.getDeclaredField("m");
67-
field.setAccessible(true);
68-
Object obj = field.get(env);
69-
Map<String, String> map = (Map<String, String>) obj;
70-
map.clear();
71-
map.putAll(newenv);
72-
}
73-
}
74-
}
30+
SystemLambda.withEnvironmentVariable(FIRST_ENV_VAR, FIRST_VALUE)
31+
.execute(() -> {
32+
String envVarValue = EnvVarReader.getEnvironmentVar(GX_DATASTORE, GX_PROP, null);
33+
Assert.assertEquals(FIRST_VALUE, envVarValue);
34+
});
35+
36+
SystemLambda.withEnvironmentVariable(SECOND_ENV_VAR, SECOND_VALUE)
37+
.execute(() -> {
38+
String envVarValue = EnvVarReader.getEnvironmentVar(GX_DATASTORE, GX_PROP, null);
39+
Assert.assertEquals(SECOND_VALUE, envVarValue);
40+
});
41+
42+
SystemLambda.withEnvironmentVariable(FIRST_ENV_VAR, FIRST_VALUE)
43+
.and(SECOND_ENV_VAR, SECOND_VALUE)
44+
.execute(() -> {
45+
String envVarValue1 = EnvVarReader.getEnvironmentVar(GX_DATASTORE, GX_PROP, null);
46+
Assert.assertEquals(SECOND_VALUE, envVarValue1); // Prioridad según tu EnvVarReader
47+
});
48+
49+
SystemLambda.withEnvironmentVariable(FIRST_ENV_VAR, null)
50+
.and(SECOND_ENV_VAR, null)
51+
.execute(() -> {
52+
String envVarValue = EnvVarReader.getEnvironmentVar(GX_DATASTORE, GX_PROP, null);
53+
Assert.assertNull(envVarValue);
54+
});
7555
}
7656
}

0 commit comments

Comments
 (0)