Search in sources :

Example 11 with Stage

use of pipelite.stage.Stage in project pipelite by enasequence.

the class DependencyResolverTest method othersActivePendingIndependentOnePermanentError.

@Test
public void othersActivePendingIndependentOnePermanentError() {
    for (StageState stageState : EnumSet.of(ACTIVE, PENDING)) {
        ProcessBuilder builder = createProcessBuilder();
        Process process = builder.execute("STAGE1").withSyncTestExecutor(StageExecutorState.ERROR).execute("STAGE2").withSyncTestExecutor().execute("STAGE3").withSyncTestExecutor().execute("STAGE4").withSyncTestExecutor().build();
        Set<Stage> stages = process.getStages();
        int stageNumber = 0;
        for (Stage stage : stages) {
            if (stageNumber == 0) {
                simulateStageExecution(stage, ErrorType.PERMANENT_ERROR);
            } else {
                simulateStageExecution(stage, stageState);
            }
            stageNumber++;
        }
        assertGetDependsOnStages(process, "STAGE1", Collections.emptyList());
        assertGetDependsOnStages(process, "STAGE2", Collections.emptyList());
        assertGetDependsOnStages(process, "STAGE3", Collections.emptyList());
        assertGetDependsOnStages(process, "STAGE4", Collections.emptyList());
        assertGetDependsOnStagesDirectly(process, "STAGE1", Collections.emptyList());
        assertGetDependsOnStagesDirectly(process, "STAGE2", Collections.emptyList());
        assertGetDependsOnStagesDirectly(process, "STAGE3", Collections.emptyList());
        assertGetDependsOnStagesDirectly(process, "STAGE4", Collections.emptyList());
        assertGetDependentStages(process, "STAGE1", Collections.emptyList());
        assertGetDependentStages(process, "STAGE2", Collections.emptyList());
        assertGetDependentStages(process, "STAGE3", Collections.emptyList());
        assertGetDependentStages(process, "STAGE4", Collections.emptyList());
        assertGetPermanentFailedStages(stages, Arrays.asList("STAGE1"));
        assertGetImmediatelyExecutableStages(process, Arrays.asList("STAGE2", "STAGE3", "STAGE4"));
        assertGetEventuallyExecutableStages(process, Arrays.asList("STAGE2", "STAGE3", "STAGE4"));
    }
}
Also used : StageState(pipelite.stage.StageState) ProcessBuilder(pipelite.process.builder.ProcessBuilder) Stage(pipelite.stage.Stage) Process(pipelite.process.Process) Test(org.junit.jupiter.api.Test)

Example 12 with Stage

use of pipelite.stage.Stage in project pipelite by enasequence.

the class DependencyResolverTest method simulatedStageExecution.

private SingleStageProcess simulatedStageExecution(StageState stageState, int executionCount, int immediateExecutionCount, int maximumRetries, int immediateRetries) {
    StageEntity stageEntity = new StageEntity();
    stageEntity.setExecutionCount(executionCount);
    stageEntity.setStageState(stageState);
    SyncTestExecutor executor = StageExecutor.createSyncTestExecutor(StageExecutorState.SUCCESS, null);
    executor.setExecutorParams(ExecutorParameters.builder().immediateRetries(immediateRetries).maximumRetries(maximumRetries).build());
    Stage stage = Stage.builder().stageName("STAGE").executor(executor).build();
    stage.setStageEntity(stageEntity);
    for (int i = 0; i < immediateExecutionCount; ++i) {
        stage.incrementImmediateExecutionCount();
    }
    return new SingleStageProcess(new Process("TEST", ProcessBuilderHelper.stageGraph(Arrays.asList(new ProcessBuilderHelper.AddedStage(stage)))), stage);
}
Also used : Stage(pipelite.stage.Stage) Process(pipelite.process.Process) StageEntity(pipelite.entity.StageEntity) SyncTestExecutor(pipelite.executor.SyncTestExecutor)

Example 13 with Stage

use of pipelite.stage.Stage in project pipelite by enasequence.

the class ProcessBuilderTest method test.

@Test
public void test() {
    String stageName1 = "STAGE1";
    String stageName2 = "STAGE2";
    String stageName3 = "STAGE3";
    String stageName4 = "STAGE4";
    String stageName5 = "STAGE5";
    Process process = new ProcessBuilder(PROCESS_ID).execute(stageName1).withSyncTestExecutor().executeAfterPrevious(stageName2).withSyncTestExecutor().executeAfterPrevious(stageName3).withSyncTestExecutor().executeAfterFirst(stageName4).withSyncTestExecutor().executeAfter(stageName5, Arrays.asList(stageName1, stageName2)).withSyncTestExecutor().build();
    Stage stage1 = process.getStage(stageName1).get();
    Stage stage2 = process.getStage(stageName2).get();
    Stage stage3 = process.getStage(stageName3).get();
    Stage stage4 = process.getStage(stageName4).get();
    Stage stage5 = process.getStage(stageName5).get();
    assertThat(process).isNotNull();
    assertThat(process.getProcessId()).isEqualTo(PROCESS_ID);
    assertThat(process.getStages()).hasSize(5);
    assertThat(DependencyResolver.getDependsOnStages(process, stage1)).isEmpty();
    assertThat(DependencyResolver.getDependsOnStages(process, stage2).size()).isOne();
    assertThat(DependencyResolver.getDependsOnStages(process, stage3).size()).isEqualTo(2);
    assertThat(DependencyResolver.getDependsOnStages(process, stage4).size()).isOne();
    assertThat(DependencyResolver.getDependsOnStages(process, stage5).size()).isEqualTo(2);
    assertThat(DependencyResolver.getDependsOnStages(process, stage2).contains(stage1)).isTrue();
    assertThat(DependencyResolver.getDependsOnStages(process, stage3).contains(stage1)).isTrue();
    assertThat(DependencyResolver.getDependsOnStages(process, stage3).contains(stage2)).isTrue();
    assertThat(DependencyResolver.getDependsOnStages(process, stage4).contains(stage1)).isTrue();
    assertThat(DependencyResolver.getDependsOnStages(process, stage5).contains(stage1)).isTrue();
    assertThat(DependencyResolver.getDependsOnStages(process, stage5).contains(stage2)).isTrue();
    assertThat(DependencyResolver.getDependentStages(process, stage1).size()).isEqualTo(4);
    assertThat(DependencyResolver.getDependentStages(process, stage2).size()).isEqualTo(2);
    assertThat(DependencyResolver.getDependentStages(process, stage3)).isEmpty();
    assertThat(DependencyResolver.getDependentStages(process, stage4)).isEmpty();
    assertThat(DependencyResolver.getDependentStages(process, stage5)).isEmpty();
    assertThat(DependencyResolver.getDependentStages(process, stage1).contains(stage2)).isTrue();
    assertThat(DependencyResolver.getDependentStages(process, stage1).contains(stage3)).isTrue();
    assertThat(DependencyResolver.getDependentStages(process, stage1).contains(stage4)).isTrue();
    assertThat(DependencyResolver.getDependentStages(process, stage1).contains(stage5)).isTrue();
    assertThat(DependencyResolver.getDependentStages(process, stage2).contains(stage3)).isTrue();
    assertThat(DependencyResolver.getDependentStages(process, stage2).contains(stage5)).isTrue();
}
Also used : ProcessBuilder(pipelite.process.builder.ProcessBuilder) Stage(pipelite.stage.Stage) Test(org.junit.jupiter.api.Test)

Example 14 with Stage

use of pipelite.stage.Stage in project pipelite by enasequence.

the class MailServiceTest method sendStageExecutionMessage.

@Test
public void sendStageExecutionMessage() {
    Process process = new ProcessBuilder("PROCESS_ID").execute("STAGE1").withSyncTestExecutor().build();
    Stage stage = process.getStage("STAGE1").get();
    StageEntity.createExecution("PIPELINE_NAME", "PROCESS_ID", stage);
    ProcessEntity processEntity = new ProcessEntity();
    processEntity.setPipelineName("PIPELINE_NAME");
    processEntity.setProcessId("PROCESS_ID");
    processEntity.setProcessState(ProcessState.PENDING);
    processEntity.setPriority(5);
    process.setProcessEntity(processEntity);
    process.setProcessEntity(processEntity);
    assertThat(mailService.getStageExecutionSubject(process, stage)).isEqualTo("Pipelite stage (PENDING): PIPELINE_NAME/PROCESS_ID/STAGE1");
    assertThat(mailService.getExecutionBody(process, "SUBJECT")).isEqualTo("SUBJECT\n" + "\n" + "Process:\n" + "---------------\n" + "{\n" + "  \"processId\" : \"PROCESS_ID\",\n" + "  \"pipelineName\" : \"PIPELINE_NAME\",\n" + "  \"processState\" : \"PENDING\",\n" + "  \"executionCount\" : 0,\n" + "  \"priority\" : 5\n" + "}\n" + "\n" + "Stages:\n" + "---------------\n" + "{\n" + "  \"processId\" : \"PROCESS_ID\",\n" + "  \"pipelineName\" : \"PIPELINE_NAME\",\n" + "  \"stageName\" : \"STAGE1\",\n" + "  \"stageState\" : \"PENDING\",\n" + "  \"executionCount\" : 0\n" + "}\n");
}
Also used : ProcessBuilder(pipelite.process.builder.ProcessBuilder) ProcessEntity(pipelite.entity.ProcessEntity) Stage(pipelite.stage.Stage) Process(pipelite.process.Process) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Example 15 with Stage

use of pipelite.stage.Stage in project pipelite by enasequence.

the class MailServiceTest method sendFailedStageExecutionMessageWithEmptyLog.

@Test
public void sendFailedStageExecutionMessageWithEmptyLog() {
    String pipelineName = PipeliteIdCreator.pipelineName();
    String processId = PipeliteIdCreator.processId();
    Process process = new ProcessBuilder(processId).execute("STAGE1").withSyncTestExecutor().build();
    Stage stage = process.getStage("STAGE1").get();
    StageEntity.createExecution(pipelineName, processId, stage).setStageState(StageState.ERROR);
    StageLogEntity stageLogEntity = new StageLogEntity();
    stageLogEntity.setPipelineName(pipelineName);
    stageLogEntity.setProcessId(processId);
    stageLogEntity.setStageName("STAGE1");
    stageLogEntity.setStageLog("");
    stageService.saveStageLog(stageLogEntity);
    ProcessEntity processEntity = new ProcessEntity();
    processEntity.setPipelineName(pipelineName);
    processEntity.setProcessId(processId);
    processEntity.setProcessState(ProcessState.PENDING);
    processEntity.setPriority(5);
    process.setProcessEntity(processEntity);
    process.setProcessEntity(processEntity);
    assertThat(mailService.getStageExecutionSubject(process, stage)).isEqualTo("Pipelite stage (ERROR): " + pipelineName + "/" + processId + "/STAGE1");
    assertThat(mailService.getExecutionBody(process, "SUBJECT")).isEqualTo("SUBJECT\n" + "\n" + "Process:\n" + "---------------\n" + "{\n" + "  \"processId\" : \"" + processId + "\",\n" + "  \"pipelineName\" : \"" + pipelineName + "\",\n" + "  \"processState\" : \"PENDING\",\n" + "  \"executionCount\" : 0,\n" + "  \"priority\" : 5\n" + "}\n" + "\n" + "Stages:\n" + "---------------\n" + "{\n" + "  \"processId\" : \"" + processId + "\",\n" + "  \"pipelineName\" : \"" + pipelineName + "\",\n" + "  \"stageName\" : \"STAGE1\",\n" + "  \"stageState\" : \"ERROR\",\n" + "  \"executionCount\" : 0\n" + "}\n" + "\n" + "Error logs:\n" + "---------------\n");
}
Also used : StageLogEntity(pipelite.entity.StageLogEntity) ProcessBuilder(pipelite.process.builder.ProcessBuilder) ProcessEntity(pipelite.entity.ProcessEntity) Stage(pipelite.stage.Stage) Process(pipelite.process.Process) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Aggregations

Stage (pipelite.stage.Stage)62 Test (org.junit.jupiter.api.Test)49 Process (pipelite.process.Process)28 ProcessBuilder (pipelite.process.builder.ProcessBuilder)21 StageEntity (pipelite.entity.StageEntity)15 StageState (pipelite.stage.StageState)15 StageExecutorRequest (pipelite.stage.executor.StageExecutorRequest)13 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)10 ProcessEntity (pipelite.entity.ProcessEntity)9 SimpleLsfExecutorParameters (pipelite.stage.parameters.SimpleLsfExecutorParameters)8 AtomicReference (java.util.concurrent.atomic.AtomicReference)6 StageExecutorResult (pipelite.stage.executor.StageExecutorResult)6 StageLogEntity (pipelite.entity.StageLogEntity)5 ExecutorParameters (pipelite.stage.parameters.ExecutorParameters)3 ZonedDateTime (java.time.ZonedDateTime)2 Flogger (lombok.extern.flogger.Flogger)2 InternalErrorHandler (pipelite.error.InternalErrorHandler)2 SimpleLsfExecutor (pipelite.executor.SimpleLsfExecutor)2 SyncTestExecutor (pipelite.executor.SyncTestExecutor)2 ProcessState (pipelite.process.ProcessState)2