You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by cu...@apache.org on 2013/08/14 01:04:55 UTC

svn commit: r1513684 - in /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/shell: ./ TestTextCommand.java

Author: cutting
Date: Tue Aug 13 23:04:55 2013
New Revision: 1513684

URL: http://svn.apache.org/r1513684
Log:
HADOOP-9740. Fix FsShell '-text' command to be able to read Avro files stored in HDFS.  Contributed by Allan Yan.

Added:
    hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/shell/
    hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/shell/TestTextCommand.java
      - copied, changed from r1513673, hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/shell/TestTextCommand.java

Copied: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/shell/TestTextCommand.java (from r1513673, hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/shell/TestTextCommand.java)
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/shell/TestTextCommand.java?p2=hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/shell/TestTextCommand.java&p1=hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/shell/TestTextCommand.java&r1=1513673&r2=1513684&rev=1513684&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/shell/TestTextCommand.java (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/shell/TestTextCommand.java Tue Aug 13 23:04:55 2013
@@ -18,21 +18,26 @@
 
 package org.apache.hadoop.fs.shell;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.StringWriter;
 import java.lang.reflect.Method;
-import java.net.URI;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hdfs.HdfsConfiguration;
+import org.apache.hadoop.hdfs.MiniDFSCluster;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
+
 /**
  * This class tests the logic for displaying the binary formats supported
  * by the Text command.
@@ -40,26 +45,44 @@ import org.junit.Test;
 public class TestTextCommand {
   private static final String TEST_ROOT_DIR =
     System.getProperty("test.build.data", "build/test/data/") + "/testText";
-  private static final String AVRO_FILENAME =
-    new Path(TEST_ROOT_DIR, "weather.avro").toUri().getPath();
+  private static final Path AVRO_FILENAME = new Path(TEST_ROOT_DIR, "weather.avro");
+  private static MiniDFSCluster cluster;
+  private static FileSystem fs;
+  
+  @Before
+    public void setUp() throws IOException{
+    Configuration conf = new HdfsConfiguration();
+    cluster = new MiniDFSCluster.Builder(conf).build();
+    cluster.waitActive();
+    fs = cluster.getFileSystem();
+  }
 
+  @After
+    public void tearDown() throws IOException{
+    if(fs != null){
+      fs.close();
+    }
+    if(cluster != null){
+      cluster.shutdown();
+    }
+  }
+  
   /**
    * Tests whether binary Avro data files are displayed correctly.
    */
-  @Test (timeout = 30000)
-  public void testDisplayForAvroFiles() throws Exception {
-    // Create a small Avro data file on the local file system.
+  @Test
+    public void testDisplayForAvroFiles() throws Exception {
+    // Create a small Avro data file on the HDFS.
     createAvroFile(generateWeatherAvroBinaryData());
 
     // Prepare and call the Text command's protected getInputStream method
     // using reflection.
-    Configuration conf = new Configuration();
-    URI localPath = new URI(AVRO_FILENAME);
-    PathData pathData = new PathData(localPath, conf);
+    Configuration conf = fs.getConf();
+    PathData pathData = new PathData(AVRO_FILENAME.toString(), conf);
     Display.Text text = new Display.Text();
     text.setConf(conf);
     Method method = text.getClass().getDeclaredMethod(
-      "getInputStream", PathData.class);
+                                                      "getInputStream", PathData.class);
     method.setAccessible(true);
     InputStream stream = (InputStream) method.invoke(text, pathData);
     String output = inputStreamToString(stream);
@@ -87,12 +110,10 @@ public class TestTextCommand {
   }
 
   private void createAvroFile(byte[] contents) throws IOException {
-    (new File(TEST_ROOT_DIR)).mkdir();
-    File file = new File(AVRO_FILENAME);
-    file.createNewFile();
-    FileOutputStream stream = new FileOutputStream(file);
+    FSDataOutputStream stream = fs.create(AVRO_FILENAME);
     stream.write(contents);
     stream.close();
+    assertTrue(fs.exists(AVRO_FILENAME));
   }
 
   private byte[] generateWeatherAvroBinaryData() {
@@ -194,3 +215,4 @@ public class TestTextCommand {
   }
 }
 
+