diff --git a/hadoop-mapreduce-project/CHANGES.txt b/hadoop-mapreduce-project/CHANGES.txt index bb2aa74b5a8..63b397a305f 100644 --- a/hadoop-mapreduce-project/CHANGES.txt +++ b/hadoop-mapreduce-project/CHANGES.txt @@ -229,6 +229,9 @@ Release 2.0.0 - UNRELEASED MAPREDUCE-4076. Stream job fails with ZipException when use yarn jar command (Devaraj K via bobby) + + MAPREDUCE-4108. Fix tests in org.apache.hadoop.util.TestRunJar + (Devaraj K via tgraves) Release 0.23.3 - UNRELEASED diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/testjar/Hello.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/util/Hello.java similarity index 85% rename from hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/testjar/Hello.java rename to hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/util/Hello.java index dc9b98d2d06..47e9efaf509 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/testjar/Hello.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/util/Hello.java @@ -16,25 +16,24 @@ * limitations under the License. */ -package testjar; +package org.apache.hadoop.util; import java.io.FileOutputStream; import java.io.IOException; /** - * A simple Hello class that is called from TestRunJar - * + * A simple Hello class that is called from TestRunJar + * */ public class Hello { - public static void main(String[] args){ + public static void main(String[] args) { try { System.out.println("Creating file" + args[0]); FileOutputStream fstream = new FileOutputStream(args[0]); fstream.write("Hello Hadoopers".getBytes()); fstream.close(); - } - catch (IOException e) { - //do nothing + } catch (IOException e) { + // do nothing } } } diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/util/TestRunJar.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/util/TestRunJar.java index 472f82bfddc..6d19b214f56 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/util/TestRunJar.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/util/TestRunJar.java @@ -18,34 +18,63 @@ package org.apache.hadoop.util; +import java.io.BufferedInputStream; import java.io.File; -import org.apache.hadoop.fs.Path; -import org.junit.Ignore; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.jar.JarOutputStream; +import java.util.zip.ZipEntry; -import junit.framework.TestCase; +import org.apache.hadoop.fs.Path; +import org.junit.Assert; +import org.junit.Test; /** * A test to rest the RunJar class. */ -@Ignore -public class TestRunJar extends TestCase { - +public class TestRunJar { + private static String TEST_ROOT_DIR = new Path(System.getProperty( "test.build.data", "/tmp")).toString(); - + + private static final String TEST_JAR_NAME = "testjar.jar"; + private static final String CLASS_NAME = "Hello.class"; + + @Test public void testRunjar() throws Throwable { - - File outFile = new File(TEST_ROOT_DIR, "out"); - // delete if output file already exists. + File outFile = new File(TEST_ROOT_DIR, "out"); + // delete if output file already exists. if (outFile.exists()) { outFile.delete(); } - + File makeTestJar = makeTestJar(); + String[] args = new String[3]; - args[0] = "build/test/mapred/testjar/testjob.jar"; - args[1] = "testjar.Hello"; + args[0] = makeTestJar.getAbsolutePath(); + args[1] = "org.apache.hadoop.util.Hello"; args[2] = outFile.toString(); RunJar.main(args); - assertTrue("RunJar failed", outFile.exists()); + Assert.assertTrue("RunJar failed", outFile.exists()); } -} + + private File makeTestJar() throws IOException { + File jarFile = new File(TEST_ROOT_DIR, TEST_JAR_NAME); + JarOutputStream jstream = new JarOutputStream(new FileOutputStream(jarFile)); + InputStream entryInputStream = this.getClass().getResourceAsStream( + CLASS_NAME); + ZipEntry entry = new ZipEntry("org/apache/hadoop/util/" + CLASS_NAME); + jstream.putNextEntry(entry); + BufferedInputStream bufInputStream = new BufferedInputStream( + entryInputStream, 2048); + int count; + byte[] data = new byte[2048]; + while ((count = bufInputStream.read(data, 0, 2048)) != -1) { + jstream.write(data, 0, count); + } + jstream.closeEntry(); + jstream.close(); + + return jarFile; + } +} \ No newline at end of file