Repository: bigtop
Updated Branches:
  refs/heads/master bd060d02a -> abba9b4da


BIGTOP-1706. Make TestBlockRecovery runnable under all users


Project: http://git-wip-us.apache.org/repos/asf/bigtop/repo
Commit: http://git-wip-us.apache.org/repos/asf/bigtop/commit/abba9b4d
Tree: http://git-wip-us.apache.org/repos/asf/bigtop/tree/abba9b4d
Diff: http://git-wip-us.apache.org/repos/asf/bigtop/diff/abba9b4d

Branch: refs/heads/master
Commit: abba9b4da23da213ba2dd2f4d796193d3754d0f7
Parents: bd060d0
Author: Dasha <[email protected]>
Authored: Thu Feb 26 12:02:19 2015 -0800
Committer: Dasha <[email protected]>
Committed: Thu Feb 26 12:02:19 2015 -0800

----------------------------------------------------------------------
 .../itest/hadoop/hdfs/TestBlockRecovery.groovy  | 85 ++++++++++----------
 1 file changed, 41 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bigtop/blob/abba9b4d/bigtop-tests/test-artifacts/hadoop/src/main/groovy/org/apache/bigtop/itest/hadoop/hdfs/TestBlockRecovery.groovy
----------------------------------------------------------------------
diff --git 
a/bigtop-tests/test-artifacts/hadoop/src/main/groovy/org/apache/bigtop/itest/hadoop/hdfs/TestBlockRecovery.groovy
 
b/bigtop-tests/test-artifacts/hadoop/src/main/groovy/org/apache/bigtop/itest/hadoop/hdfs/TestBlockRecovery.groovy
index f7bc04e..2a3f2d9 100644
--- 
a/bigtop-tests/test-artifacts/hadoop/src/main/groovy/org/apache/bigtop/itest/hadoop/hdfs/TestBlockRecovery.groovy
+++ 
b/bigtop-tests/test-artifacts/hadoop/src/main/groovy/org/apache/bigtop/itest/hadoop/hdfs/TestBlockRecovery.groovy
@@ -37,23 +37,22 @@ import org.apache.hadoop.hdfs.DFSTestUtil;
  This test checks block recovery after a block is corrupted.
  The test must be performed on a cluster with at least
  three datanodes to allow block recovery.
- The test must be run under user hdfs.
  Block replication must be set to a minimum value of 2
  for this test to work properly.
  */
 public class TestBlockRecovery {
 
-  private static Shell sh = new Shell("/bin/bash");
+  private static Shell shHDFS = new Shell("/bin/bash", "hdfs");
 
   private static Configuration conf;
 
   private static final String corruptContent = "0123456789";
-  private static final String fsFilePath = USER_DIR + "/file0";
+  private static final String HDFS_TEST_DIR = 
"/tmp/TestBlockRecovery$corruptContent";
+  private static final String fsFilePath = HDFS_TEST_DIR + "/file0";
   private static final String grepIP = "grep -o '\\[[^]]*\\]' | " +
     "grep -o '[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*'";
   private static final String localTestDir = "/tmp/test";
   private static final String outputFile = localTestDir + "/fsckOutput.txt";
-  private static final String USER_DIR = "/user/hdfs";
 
   private static final int sleepTime = 60 * 1000;
   private static final int TIMEOUT = 5000;
@@ -64,7 +63,6 @@ public class TestBlockRecovery {
   private static String cksumError;
   private static String initialBlockChecksum;
   private static String fileContent;
-  private static String USERNAME;
 
   private static def dataDirs = [];
   private static def nodesBeforeRecovery = [];
@@ -90,88 +88,87 @@ public class TestBlockRecovery {
     if (dataDirs == null)
       dataDirs = conf.get("dfs.datanode.data.dir").split(",");
 
-    USERNAME = System.getProperty("user.name");
-    Assume.assumeTrue(USERNAME == "hdfs");
-
-    numberOfDataNodes = sh.exec("hdfs dfsadmin -report | grep ^Name | wc 
-l").getOut()[0] as short;
+    numberOfDataNodes = shHDFS.exec("hdfs dfsadmin -report | grep ^Name | wc 
-l").getOut()[0] as short;
     Assume.assumeTrue(numberOfDataNodes >= 3);
 
-    sh.exec("rm -rf $localTestDir");
-    sh.exec("mkdir $localTestDir");
-    sh.exec("hadoop fs -rm -r $fsFilePath");
+    shHDFS.exec("rm -rf $localTestDir");
+    shHDFS.exec("mkdir $localTestDir");
+    shHDFS.exec("hadoop fs -rm -r $fsFilePath");
     Thread.sleep(TIMEOUT);
-    sh.exec("hadoop fs -mkdir -p $USER_DIR");
-    assertTrue("Failed to create input directory", sh.getRet() == 0);
+    shHDFS.exec("hadoop fs -mkdir -p $HDFS_TEST_DIR && hadoop fs -chmod 777 
$HDFS_TEST_DIR");
+    assertTrue("Failed to create input directory", shHDFS.getRet() == 0);
 
     repFactor = (numberOfDataNodes - 1);
+    try {
+       DFSTestUtil.createFile(fileSys, new Path(fsFilePath), fileLen, 
repFactor, SEED);
+    } catch (Exception e) {
+       assert "Exception should not be thrown"
+    }
+    fileContent = shHDFS.exec("hadoop fs -cat $fsFilePath").getOut()[0];
 
-    DFSTestUtil.createFile(fileSys, new Path(fsFilePath), fileLen, repFactor, 
SEED);
-
-    fileContent = sh.exec("hadoop fs -cat $fsFilePath").getOut()[0];
-
-    sh.exec("hdfs fsck $fsFilePath -blocks -locations -files > $outputFile");
-    assertTrue("Could not write output to file", sh.getRet() == 0);
+    shHDFS.exec("hdfs fsck $fsFilePath -blocks -locations -files > 
$outputFile");
+    assertTrue("Could not write output to file", shHDFS.getRet() == 0);
 
-    nodesBeforeRecovery = sh.exec("grep -o '\\[[^]]*\\]' $outputFile | " +
+    nodesBeforeRecovery = shHDFS.exec("grep -o '\\[[^]]*\\]' $outputFile | " +
       "grep -o '[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*'").getOut();
-    assertTrue("Could not obtain datanode addresses", sh.getRet() == 0);
+    assertTrue("Could not obtain datanode addresses", shHDFS.getRet() == 0);
 
-    blockToTest = sh.exec("grep -o 'blk_[0-9]*' $outputFile").getOut()[0];
-    assertTrue("Could not obtain block number", sh.getRet() == 0);
+    blockToTest = shHDFS.exec("grep -o 'blk_[0-9]*' $outputFile").getOut()[0];
+    assertTrue("Could not obtain block number", shHDFS.getRet() == 0);
 
     for (int i = 0; i < dataDirs.length; i++) {
       def dataDir = dataDirs[i]
-      blockLocation = sh.exec("find $dataDir -name $blockToTest | grep 
$dataDir").getOut()[0];
+      blockLocation = shHDFS.exec("find $dataDir -name $blockToTest | grep 
$dataDir").getOut()[0];
       if (blockLocation != null) break;
     }
     assertNotNull("Could not find specified block", blockLocation);
 
-    initialBlockChecksum = sh.exec("cksum $blockLocation").getOut()[0].split(" 
")[0];
-    assertTrue("Could not obtain checksum for block $blockToTest", sh.getRet() 
== 0);
+    initialBlockChecksum = shHDFS.exec("cksum 
$blockLocation").getOut()[0].split(" ")[0];
+    assertTrue("Could not obtain checksum for block $blockToTest", 
shHDFS.getRet() == 0);
   }
 
   @AfterClass
   public static void tearDown() {
     // deletion of test files
-    sh.exec("hadoop fs -rm -r -skipTrash $fsFilePath");
-    assertTrue("Could not delete file $fsFilePath", sh.getRet() == 0);
-    sh.exec("rm -rf $localTestDir");
-    assertTrue("Could not delete test directory $localTestDir", sh.getRet() == 
0);
+    shHDFS.exec("hadoop fs -rm -r -skipTrash $fsFilePath");
+    assertTrue("Could not delete file $fsFilePath", shHDFS.getRet() == 0);
+    shHDFS.exec("rm -rf $localTestDir");
+    assertTrue("Could not delete test directory $localTestDir", 
shHDFS.getRet() == 0);
   }
 
   @Test
   public void testBlockRecovery() {
     // corrupt block
-    sh.exec("echo $corruptContent > $blockLocation");
-    assertTrue("Could not write to file", sh.getRet() == 0);
+    shHDFS.exec("echo $corruptContent > $blockLocation");
+    assertTrue("Could not write to file", shHDFS.getRet() == 0);
 
     // perform checksum after block corruption
-    String corruptBlockChecksum = sh.exec("cksum 
$blockLocation").getOut()[0].split(" ")[0];
-    assertTrue("Could not obtain checksum for block $blockToTest", sh.getRet() 
== 0);
+    String corruptBlockChecksum = shHDFS.exec("cksum 
$blockLocation").getOut()[0].split(" ")[0];
+    assertTrue("Could not obtain checksum for block $blockToTest", 
shHDFS.getRet() == 0);
 
     // trigger block recovery by trying to access the file
-    sh.exec("hadoop fs -cat $fsFilePath");
+    shHDFS.exec("hadoop fs -cat $fsFilePath");
 
     // make sure checksum changes back to original, indicating block recovery
     for (int j = 0; j < 3; j++) {
       // wait a bit to let the block recover
       sleep(sleepTime);
       // see if checksum has changed
-      cksumError = sh.exec("hadoop fs -cat $fsFilePath | grep -o 'Checksum 
error'").getErr();
+      cksumError = shHDFS.exec("hadoop fs -cat $fsFilePath | grep -o 'Checksum 
error'").getErr();
       if (cksumError != "Checksum error") break;
     }
     assertNotNull("Block has not been successfully triggered for recovery.", 
cksumError);
 
-    nodesAfterRecovery = sh.exec("hdfs fsck $fsFilePath -blocks -locations 
-files | $grepIP").getOut();
-    assertTrue("Could not obtain datanode addresses", sh.getRet() == 0);
+    nodesAfterRecovery = shHDFS.exec("hdfs fsck $fsFilePath -blocks -locations 
-files | $grepIP").getOut();
+    assertTrue("Could not obtain datanode addresses", shHDFS.getRet() == 0);
 
     blockRecoveryNode = (nodesBeforeRecovery.intersect(nodesAfterRecovery))[0];
 
     if (blockRecoveryNode == null) {
       sleep(sleepTime);
 
-      nodesAfterRecovery = sh.exec("hdfs fsck $fsFilePath -blocks -locations 
-files | $grepIP").getOut();
-      assertTrue("Could not obtain datanode addresses", sh.getRet() == 0);
+      nodesAfterRecovery = shHDFS.exec("hdfs fsck $fsFilePath -blocks 
-locations -files | $grepIP").getOut();
+      assertTrue("Could not obtain datanode addresses", shHDFS.getRet() == 0);
 
       blockRecoveryNode = 
(nodesBeforeRecovery.intersect(nodesAfterRecovery))[0];
       assert (blockRecoveryNode.size() != 0): "Block has not been successfully 
triggered for recovery."
@@ -185,14 +182,14 @@ public class TestBlockRecovery {
     while (cksumAttempt < 3) {
       if (corruptBlockChecksum != initialBlockChecksum) {
         sleep(sleepTime);
-        corruptBlockChecksum = sh.exec("ssh -o StrictHostKeyChecking=no -i 
~/.ssh/id_hdfsuser " +
+        corruptBlockChecksum = shHDFS.exec("ssh -o StrictHostKeyChecking=no -i 
~/.ssh/id_hdfsuser " +
           "$blockRecoveryNode 'cksum `find ${dataDirs.join(' ')}" +
           " -name $blockToTest 2>/dev/null | grep $blockToTest` 
'").getOut()[0].split(" ")[0];
         ++cksumAttempt;
       } else {
         // If block recovers, verify file content is the same as before 
corruption
-        if (sh.exec("hadoop fs -cat $fsFilePath").getOut()[0] == fileContent) {
-          assertTrue("Could not read file $fsFilePath", sh.getRet() == 0);
+        if (shHDFS.exec("hadoop fs -cat $fsFilePath").getOut()[0] == 
fileContent) {
+          assertTrue("Could not read file $fsFilePath", shHDFS.getRet() == 0);
           success = true;
           break;
         }

Reply via email to