Package org.apache.hadoop.hdfs

Source Code of org.apache.hadoop.hdfs.TestAvatarShellInteractive

package org.apache.hadoop.hdfs;

import java.io.PushbackInputStream;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hdfs.FailoverTestUtil.FailoverTestUtilHandler;
import org.apache.hadoop.hdfs.TestAvatarShell.ShortTxidWaitAvatarShell;
import org.apache.hadoop.ipc.RemoteException;
import org.apache.hadoop.util.InjectionHandler;

import org.junit.Test;
import static org.junit.Assert.*;

public class TestAvatarShellInteractive extends AvatarSetupUtil {

  public void setUp(String name) throws Exception {
    Configuration conf = new Configuration();
    super.setUp(false, conf, name);
  }

  public void testFailoverInteractive(String[] input) throws Exception {
    testFailoverInteractive(input, false);
  }

  public void testFailoverInteractive(String[] input,
      boolean simulateEditLogCrash) throws Exception {
    int blocksBefore = blocksInFile();
    if (simulateEditLogCrash) {
      FailoverTestUtilHandler handler = new FailoverTestUtilHandler();
      InjectionHandler.set(handler);
    }
    // Txid will now mismatch.
    cluster.getPrimaryAvatar(0).avatar.namesystem.getEditLog()
        .setLastWrittenTxId(0);
    PushbackInputStream stream = new PushbackInputStream(System.in,
        100);
    System.setIn(stream);
    // PushbackInputStream processes in reverse order.
    for (int i = input.length - 1; i >= 0; i--) {
      stream.unread(input[i].getBytes());
    }
    ShortTxidWaitAvatarShell shell = new ShortTxidWaitAvatarShell(conf);
    assertEquals(0, shell.run(new String[] { "-failover" }));
    int blocksAfter = blocksInFile();
    assertTrue(blocksBefore == blocksAfter);
  }

  @Test
  public void testFailoverInteractiveYes() throws Exception {
    setUp("testFailoverInteractiveYes");
    testFailoverInteractive(new String[] { "Y\n" });
  }

  @Test(expected = AssertionError.class)
  public void testFailoverInteractiveNo() throws Exception {
    setUp("testFailoverInteractiveNo");
    testFailoverInteractive(new String[] { "N\n" });
  }

  public void testWrongInput(String input[]) throws Exception {
    PushbackInputStream stream = new PushbackInputStream(System.in,
        100);
    System.setIn(stream);
    // PushbackInputStream processes in reverse order.
    for (int i = input.length - 1; i >= 0; i--) {
      stream.unread(input[i].getBytes());
    }
    AvatarShell.handleRemoteException(
        new RemoteException("org.apache.hadoop.hdfs.server.namenode.StandbyStateException",
          "Test"));
  }

  @Test
  public void testFailoverInteractiveYesAfterWrongInput() throws Exception {
    testWrongInput(new String[] { "a\n", "b\n", "c\n", "Y\n" });
  }

  @Test(expected = RemoteException.class)
  public void testFailoverInteractiveNoAfterWrongInput() throws Exception {
    testWrongInput(new String[] { "a\n", "b\n", "c\n", "N\n" });
  }

  @Test(expected =AssertionError.class)
  public void testFailoverInteractiveYesWithEditLogCrash() throws Exception {
    setUp("testFailoverInteractiveYesWithEditLogCrash");
    testFailoverInteractive(new String[] { "Y\n" }, true);
  }
}
TOP

Related Classes of org.apache.hadoop.hdfs.TestAvatarShellInteractive

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.