[test-utils] cleanup and improve method to set the environment - introduced parameter to update or overwrite the environment - make Windows-specific code explicit - avoid duplicate update of environment map
Project: http://git-wip-us.apache.org/repos/asf/flink/repo Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/8d7c3ff0 Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/8d7c3ff0 Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/8d7c3ff0 Branch: refs/heads/master Commit: 8d7c3ff087ac1390e6da0054ec55974258b6b78c Parents: 230bf17 Author: Maximilian Michels <[email protected]> Authored: Mon Dec 5 19:23:32 2016 +0100 Committer: Maximilian Michels <[email protected]> Committed: Tue Dec 6 00:29:57 2016 +0100 ---------------------------------------------------------------------- .../flink/core/testutils/CommonTestUtils.java | 52 ++++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flink/blob/8d7c3ff0/flink-test-utils-parent/flink-test-utils-junit/src/main/java/org/apache/flink/core/testutils/CommonTestUtils.java ---------------------------------------------------------------------- diff --git a/flink-test-utils-parent/flink-test-utils-junit/src/main/java/org/apache/flink/core/testutils/CommonTestUtils.java b/flink-test-utils-parent/flink-test-utils-junit/src/main/java/org/apache/flink/core/testutils/CommonTestUtils.java index 45c5a77..2eb18c1 100644 --- a/flink-test-utils-parent/flink-test-utils-junit/src/main/java/org/apache/flink/core/testutils/CommonTestUtils.java +++ b/flink-test-utils-parent/flink-test-utils-junit/src/main/java/org/apache/flink/core/testutils/CommonTestUtils.java @@ -30,7 +30,6 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Field; -import java.util.Collections; import java.util.Map; import static org.junit.Assert.fail; @@ -118,37 +117,38 @@ public class CommonTestUtils { } } - // This code is taken from: http://stackoverflow.com/a/7201825/568695 + public static void setEnv(Map<String, String> newenv) { + setEnv(newenv, true); + } + + // This code is taken slightly modified from: http://stackoverflow.com/a/7201825/568695 // it changes the environment variables of this JVM. Use only for testing purposes! @SuppressWarnings("unchecked") - public static void setEnv(Map<String, String> newenv) { + public static void setEnv(Map<String, String> newenv, boolean clearExisting) { try { + Map<String, String> env = System.getenv(); + Class<?> clazz = env.getClass(); + Field field = clazz.getDeclaredField("m"); + field.setAccessible(true); + Map<String, String> map = (Map<String, String>) field.get(env); + if (clearExisting) { + map.clear(); + } + map.putAll(newenv); + + // only for Windows Class<?> processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment"); - Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment"); - theEnvironmentField.setAccessible(true); - Map<String, String> env = (Map<String, String>) theEnvironmentField.get(null); - env.putAll(newenv); - Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment"); - theCaseInsensitiveEnvironmentField.setAccessible(true); - Map<String, String> cienv = (Map<String, String>) theCaseInsensitiveEnvironmentField.get(null); - cienv.putAll(newenv); - } catch (NoSuchFieldException e) { try { - Class<?>[] classes = Collections.class.getDeclaredClasses(); - Map<String, String> env = System.getenv(); - for (Class<?> cl : classes) { - if ("java.util.Collections$UnmodifiableMap".equals(cl.getName())) { - Field field = cl.getDeclaredField("m"); - field.setAccessible(true); - Object obj = field.get(env); - Map<String, String> map = (Map<String, String>) obj; - map.clear(); - map.putAll(newenv); - } + Field theCaseInsensitiveEnvironmentField = + processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment"); + theCaseInsensitiveEnvironmentField.setAccessible(true); + Map<String, String> cienv = (Map<String, String>) theCaseInsensitiveEnvironmentField.get(null); + if (clearExisting) { + cienv.clear(); } - } catch (Exception e2) { - throw new RuntimeException(e2); - } + cienv.putAll(newenv); + } catch (NoSuchFieldException ignored) {} + } catch (Exception e1) { throw new RuntimeException(e1); }
