You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jd...@apache.org on 2014/11/06 22:03:16 UTC

svn commit: r1637222 - /hive/trunk/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java

Author: jdere
Date: Thu Nov  6 21:03:15 2014
New Revision: 1637222

URL: http://svn.apache.org/r1637222
Log:
HIVE-8737: setEnv is not portable, which fails TestCliDriverMethods#testprocessInitFiles on Windows (Xiaobing Zhou via Jason Dere)

Modified:
    hive/trunk/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java

Modified: hive/trunk/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java
URL: http://svn.apache.org/viewvc/hive/trunk/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java?rev=1637222&r1=1637221&r2=1637222&view=diff
==============================================================================
--- hive/trunk/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java (original)
+++ hive/trunk/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java Thu Nov  6 21:03:15 2014
@@ -58,6 +58,7 @@ import org.apache.hadoop.hive.ql.Driver;
 import org.apache.hadoop.hive.ql.processors.CommandProcessorResponse;
 import org.apache.hadoop.hive.service.HiveClient;
 import org.apache.hadoop.hive.service.HiveServerException;
+import org.apache.hadoop.util.Shell;
 import org.apache.thrift.TException;
 
 
@@ -375,8 +376,14 @@ public class TestCliDriverMethods extend
     }
   }
 
-
   private static void setEnv(String key, String value) throws Exception {
+    if (Shell.WINDOWS)
+      setEnvWindows(key, value);
+    else
+      setEnvLinux(key, value);
+  }
+
+  private static void setEnvLinux(String key, String value) throws Exception {
     Class[] classes = Collections.class.getDeclaredClasses();
     Map<String, String> env = (Map<String, String>) System.getenv();
     for (Class cl : classes) {
@@ -394,6 +401,26 @@ public class TestCliDriverMethods extend
     }
   }
 
+  private static void setEnvWindows(String key, String value) throws Exception {
+    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);
+    if (value == null) {
+      env.remove(key);
+    } else {
+      env.put(key, value);
+    }
+
+    Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment");
+    theCaseInsensitiveEnvironmentField.setAccessible(true);
+    Map<String, String> cienv = (Map<String, String>) theCaseInsensitiveEnvironmentField.get(null);
+    if (value == null) {
+      cienv.remove(key);
+    } else {
+      cienv.put(key, value);
+    }
+  }
 
   private static class FakeCliDriver extends CliDriver {