@Test
 public void testChangeExecutionModes() throws Exception {
   pipelineStoreTask.create("user1", "pipeline2", "blah", false);
   pipelineStateStore.saveState(
       "user",
       "pipeline2",
       "0",
       PipelineStatus.EDITED,
       "blah",
       null,
       ExecutionMode.STANDALONE,
       null,
       0,
       0);
   Runner runner1 = pipelineManager.getRunner("user1", "pipeline2", "0");
   pipelineStateStore.saveState(
       "user",
       "pipeline2",
       "0",
       PipelineStatus.EDITED,
       "blah",
       null,
       ExecutionMode.CLUSTER_BATCH,
       null,
       0,
       0);
   Runner runner2 = pipelineManager.getRunner("user1", "pipeline2", "0");
   assertTrue(runner1 != runner2);
   pipelineStateStore.saveState(
       "user",
       "pipeline2",
       "0",
       PipelineStatus.STARTING,
       "blah",
       null,
       ExecutionMode.CLUSTER_BATCH,
       null,
       0,
       0);
   pipelineManager.getRunner("user1", "pipeline2", "0");
   pipelineStateStore.saveState(
       "user",
       "pipeline2",
       "0",
       PipelineStatus.STARTING,
       "blah",
       null,
       ExecutionMode.STANDALONE,
       null,
       0,
       0);
   try {
     pipelineManager.getRunner("user1", "pipeline2", "0");
     fail("Expected exception but didn't get any");
   } catch (PipelineManagerException pme) {
     // Expected
   }
 }
 @Provides
 @Singleton
 public PipelineStateStore providePipelineStateStore(
     RuntimeInfo runtimeInfo, Configuration configuration) {
   PipelineStateStore pipelineStateStore =
       new FilePipelineStateStore(runtimeInfo, configuration);
   pipelineStateStore.init();
   return pipelineStateStore;
 }
  @Test
  public void testExpiry() throws Exception {
    pipelineStoreTask.create("user", "aaaa", "blah", false);
    Runner runner = pipelineManager.getRunner("user1", "aaaa", "0");
    pipelineStateStore.saveState(
        "user",
        "aaaa",
        "0",
        PipelineStatus.RUNNING_ERROR,
        "blah",
        null,
        ExecutionMode.STANDALONE,
        null,
        0,
        0);
    assertEquals(PipelineStatus.RUNNING_ERROR, runner.getState().getStatus());
    pipelineStateStore.saveState(
        "user",
        "aaaa",
        "0",
        PipelineStatus.RUN_ERROR,
        "blah",
        null,
        ExecutionMode.STANDALONE,
        null,
        0,
        0);

    pipelineManager.stop();
    pipelineStoreTask.stop();

    pipelineStateStore.saveState(
        "user",
        "aaaa",
        "0",
        PipelineStatus.RUNNING_ERROR,
        "blah",
        null,
        ExecutionMode.STANDALONE,
        null,
        0,
        0);
    pipelineManager = null;
    setUpManager(100, false);
    await()
        .atMost(Duration.FIVE_SECONDS)
        .until(
            new Callable<Boolean>() {
              @Override
              public Boolean call() throws Exception {
                return !((StandaloneAndClusterPipelineManager) pipelineManager)
                    .isRunnerPresent("aaaa", "0");
              }
            });
  }
  @Test
  public void testInitTask() throws Exception {
    pipelineStoreTask.create("user", "aaaa", "blah", false);
    pipelineStateStore.saveState(
        "user",
        "aaaa",
        "0",
        PipelineStatus.CONNECTING,
        "blah",
        null,
        ExecutionMode.STANDALONE,
        null,
        0,
        0);
    pipelineManager.stop();
    pipelineStoreTask.stop();

    setUpManager(StandaloneAndClusterPipelineManager.DEFAULT_RUNNER_EXPIRY_INTERVAL, false);

    await().atMost(Duration.FIVE_SECONDS).until(numPipelinesEqualTo(pipelineManager, 1));

    List<PipelineState> pipelineStates = pipelineManager.getPipelines();
    assertEquals(1, pipelineStates.size());
    assertTrue(
        ((StandaloneAndClusterPipelineManager) pipelineManager).isRunnerPresent("aaaa", "0"));

    pipelineManager.stop();
    pipelineStoreTask.stop();
    pipelineStateStore.saveState(
        "user",
        "aaaa",
        "0",
        PipelineStatus.FINISHING,
        "blah",
        null,
        ExecutionMode.STANDALONE,
        null,
        0,
        0);

    setUpManager(StandaloneAndClusterPipelineManager.DEFAULT_RUNNER_EXPIRY_INTERVAL, false);
    await().atMost(Duration.FIVE_SECONDS).until(numPipelinesEqualTo(pipelineManager, 1));

    pipelineStates = pipelineManager.getPipelines();
    assertEquals(1, pipelineStates.size());
    // no runner is created
    assertFalse(
        ((StandaloneAndClusterPipelineManager) pipelineManager).isRunnerPresent("aaaa", "0"));
  }