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 testGetFromCurrentStep() {
    String stepId = "step-123";
    String stepInstanceUuid = UUID.randomUUID().toString();
    long stepInstanceId = 2;
    long stepAttemptId = 3;
    StepRuntimeSummary summary =
        StepRuntimeSummary.builder()
            .stepId(stepId)
            .stepInstanceId(stepInstanceId)
            .stepAttemptId(stepAttemptId)
            .stepInstanceUuid(stepInstanceUuid)
            .type(StepType.NOTEBOOK)
            .subType(null)
            .build();
    when(instanceWrapper.isWorkflowParam()).thenReturn(false);
    when(instanceWrapper.getStepInstanceAttributes())
        .thenReturn(StepInstanceAttributes.from(summary));
    assertEquals(stepId, paramExtension.getFromStep(Constants.STEP_ID_PARAM));
    assertEquals(stepInstanceId, paramExtension.getFromStep(Constants.STEP_INSTANCE_ID_PARAM));
    assertEquals(stepInstanceUuid, paramExtension.getFromStep(Constants.STEP_INSTANCE_UUID_PARAM));
    assertEquals(stepAttemptId, paramExtension.getFromStep(Constants.STEP_ATTEMPT_ID_PARAM));
    assertEquals(
        StepType.NOTEBOOK.toString(), paramExtension.getFromStep(Constants.STEP_TYPE_INFO_PARAM));
  }