@Test
public void testCommandValidation() throws Exception {

  String absRoot = TEST_ROOT_DIR.getAbsolutePath();
  ApplicationId appId = ApplicationId.newInstance(1, 1);
  ApplicationAttemptId attemptId = ApplicationAttemptId.newInstance(appId, 1);
  ContainerId cid = ContainerId.newContainerId(attemptId, 1);
  Configuration conf = new Configuration();
  conf.set("hadoop.tmp.dir", absRoot);
  conf.set(YarnConfiguration.NM_LOCAL_DIRS, absRoot);
  conf.set(YarnConfiguration.NM_LOG_DIRS, absRoot);
  LocalDirsHandlerService dirsHandler = new LocalDirsHandlerService();
  Context mockContext = mock(Context.class);
  doReturn(conf).when(mockContext).getConf();
  doReturn(dirsHandler).when(mockContext).getLocalDirsHandler();
  DockerClient dockerClient = new DockerClient();
  dirsHandler.init(conf);
  dirsHandler.start();
  try {
    DockerRunCommand dockerCmd = new DockerRunCommand(cid.toString(), "user",
        "image");
    dockerCmd.addCommandArguments("prop=bad", "val");
    dockerClient.writeCommandToTempFile(dockerCmd, cid,
        mockContext);
    fail("Expected exception writing command file");
  } catch (ContainerExecutionException e) {
    assertTrue("Expected key validation error", e.getMessage()
        .contains("'=' found in entry for docker command file"));
  }
  try {
    DockerRunCommand dockerCmd = new DockerRunCommand(cid.toString(), "user",
        "image");
    dockerCmd.setOverrideCommandWithArgs(Arrays.asList("sleep", "1000\n"));
    dockerClient.writeCommandToTempFile(dockerCmd, cid, mockContext);
    fail("Expected exception writing command file");
  } catch (ContainerExecutionException e) {
    assertTrue("Expected value validation error", e.getMessage()
        .contains("'\\n' found in entry for docker command file"));
  }
  dirsHandler.stop();
}