Object getFromStep(String stepId, String paramName) {
    try {
      return executor
          .submit(() -> fromStep(stepId, paramName))
          .get(TIMEOUT_IN_MILLIS, TimeUnit.MILLISECONDS);
    } catch (Exception e) {
      throw new MaestroInternalError(
          e, "getFromStep throws an exception for stepId=[%s], paramName=[%s]", stepId, paramName);
    }
  }
@Test
  public void testGetFromStep() throws Exception {
    StepRuntimeSummary summary = loadObject(TEST_STEP_RUNTIME_SUMMARY, StepRuntimeSummary.class);
    when(allStepOutputData.get("step1"))
        .thenReturn(Collections.singletonMap("maestro_step_runtime_summary", summary));
    assertEquals("foo", paramExtension.getFromStep("step1", "param1"));
    assertEquals("SUCCEEDED", paramExtension.getFromStep("step1", Constants.STEP_STATUS_PARAM));
    assertEquals(
        1608171805401L, paramExtension.getFromStep("step1", Constants.STEP_END_TIME_PARAM));
  }