From d9ac25454ca559f12ebc235bd1f8129da7eb7a18 Mon Sep 17 00:00:00 2001 From: Zhijie Shen Date: Fri, 31 Oct 2014 17:43:30 -0700 Subject: [PATCH] YARN-2711. Fixed TestDefaultContainerExecutor#testContainerLaunchError failure on Windows. Contributed by Varun Vasudev. (cherry picked from commit 1cd088fd9dac3015df0b6281974fc6b6c3ece20d) --- hadoop-yarn-project/CHANGES.txt | 3 +++ .../TestDefaultContainerExecutor.java | 24 +++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 96e5b2b25d3..5842718643d 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -799,6 +799,9 @@ Release 2.6.0 - UNRELEASED YARN-2707. Potential null dereference in FSDownload (Gera Shegalov via jlowe) + YARN-2711. Fixed TestDefaultContainerExecutor#testContainerLaunchError failure on + Windows. (Varun Vasudev via zjshen) + Release 2.5.1 - 2014-09-05 INCOMPATIBLE CHANGES diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestDefaultContainerExecutor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestDefaultContainerExecutor.java index bf01fb7814a..c669047adaa 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestDefaultContainerExecutor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestDefaultContainerExecutor.java @@ -27,10 +27,12 @@ import static org.mockito.Mockito.doAnswer; import static org.junit.Assert.assertTrue; +import java.io.BufferedWriter; import java.io.DataOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; +import java.io.FileWriter; import java.io.InputStream; import java.io.IOException; import java.io.LineNumberReader; @@ -59,6 +61,7 @@ import org.apache.hadoop.io.DataOutputBuffer; import org.apache.hadoop.security.Credentials; import org.apache.hadoop.util.Progressable; +import org.apache.hadoop.util.Shell; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ContainerId; @@ -118,7 +121,7 @@ DataOutputBuffer mockStream( } */ - private static final Path BASE_TMP_PATH = new Path("target", + private static Path BASE_TMP_PATH = new Path("target", TestDefaultContainerExecutor.class.getSimpleName()); @AfterClass @@ -217,6 +220,12 @@ public void testDirPermissions() throws Exception { public void testContainerLaunchError() throws IOException, InterruptedException { + if (Shell.WINDOWS) { + BASE_TMP_PATH = + new Path(new File("target").getAbsolutePath(), + TestDefaultContainerExecutor.class.getSimpleName()); + } + Path localDir = new Path(BASE_TMP_PATH, "localDir"); List localDirs = new ArrayList(); localDirs.add(localDir.toString()); @@ -226,7 +235,7 @@ public void testContainerLaunchError() Configuration conf = new Configuration(); conf.set(CommonConfigurationKeys.FS_PERMISSIONS_UMASK_KEY, "077"); - conf.set(YarnConfiguration.NM_LOCAL_DIRS, localDir.toString()); + conf.set(YarnConfiguration.NM_LOCAL_DIRS, localDir.toString()); conf.set(YarnConfiguration.NM_LOG_DIRS, logDir.toString()); FileContext lfs = FileContext.getLocalFSFileContext(conf); @@ -284,6 +293,17 @@ public Object answer(InvocationOnMock invocationOnMock) Path scriptPath = new Path("file:///bin/echo"); Path tokensPath = new Path("file:///dev/null"); + if (Shell.WINDOWS) { + File tmp = new File(BASE_TMP_PATH.toString(), "test_echo.cmd"); + BufferedWriter output = new BufferedWriter(new FileWriter(tmp)); + output.write("Exit 1"); + output.write("Echo No such file or directory 1>&2"); + output.close(); + scriptPath = new Path(tmp.getAbsolutePath()); + tmp = new File(BASE_TMP_PATH.toString(), "tokens"); + tmp.createNewFile(); + tokensPath = new Path(tmp.getAbsolutePath()); + } Path workDir = localDir; Path pidFile = new Path(workDir, "pid.txt");