public CommandResult executeCommand(String command) {
   CommandResult cr = this.shell.executeCommand(command);
   if (cr.getException() != null) {
     cr.getException().printStackTrace();
   }
   Assert.isTrue(cr.isSuccess(), "Failure.  CommandResult = " + cr.toString());
   return cr;
 }
 @Test
 public void testLaunchNotDeployedJob() {
   logger.info("Launch batch job that is not deployed");
   String jobName = generateJobName();
   executeJobCreate(jobName, JOB_WITH_PARAMETERS_DESCRIPTOR, false);
   CommandResult result = executeCommandExpectingFailure("job launch --name " + jobName);
   assertThat(
       result.getException().getMessage(),
       containsString(String.format("The job named '%s' is not currently deployed", jobName)));
 }
  @Test
  public void testLaunchJobTwiceWhereMakeUniqueIsFalse() throws Exception {
    logger.info("Launch batch job (makeUnique=false) twice");
    String jobName = generateJobName();
    // Batch 3.0 requires at least one parameter to reject duplicate executions of an instance
    String myJobParams = "{\"-param(long)\":\"12345\"}";
    JobParametersHolder.reset();
    final JobParametersHolder jobParametersHolder = new JobParametersHolder();

    executeJobCreate(jobName, JOB_WITH_PARAMETERS_DESCRIPTOR + " --makeUnique=false");
    checkForJobInList(jobName, JOB_WITH_PARAMETERS_DESCRIPTOR + " --makeUnique=false", true);
    executeJobLaunch(jobName, myJobParams);
    assertTrue("The countdown latch expired and did not count down.", jobParametersHolder.isDone());

    CommandResult result =
        executeCommandExpectingFailure("job launch --name " + jobName + " --params " + myJobParams);
    assertThat(
        result.getException().getMessage(),
        containsString(
            "A job instance already exists and is complete for parameters={param=12345}."
                + "  If you want to run this job again, change the parameters."));
  }