Skip to content
This repository has been archived by the owner on Jul 23, 2024. It is now read-only.

FLPATH-445: Add support to display alert message for tasks waiting user interference #432

Merged
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package com.redhat.parodos.flows.negative;

import java.util.function.Consumer;

import com.redhat.parodos.flows.common.WorkFlowTestBuilder;
import com.redhat.parodos.flows.common.WorkFlowTestBuilder.TestComponents;
import com.redhat.parodos.sdk.api.WorkflowApi;
import com.redhat.parodos.sdk.invoker.ApiException;
import com.redhat.parodos.sdk.model.WorkDefinitionResponseDTO;
import com.redhat.parodos.sdk.model.WorkFlowDefinitionResponseDTO;
import com.redhat.parodos.sdk.model.WorkFlowDefinitionResponseDTO.ProcessingTypeEnum;
import com.redhat.parodos.sdk.model.WorkFlowDefinitionResponseDTO.TypeEnum;
import com.redhat.parodos.sdk.model.WorkFlowExecutionResponseDTO;
import com.redhat.parodos.sdk.model.WorkFlowExecutionResponseDTO.WorkStatusEnum;
import com.redhat.parodos.sdk.model.WorkFlowRequestDTO;
import com.redhat.parodos.sdk.model.WorkFlowStatusResponseDTO;
import com.redhat.parodos.sdk.model.WorkFlowStatusResponseDTO.StatusEnum;
import com.redhat.parodos.sdk.model.WorkStatusResponseDTO;
import com.redhat.parodos.sdkutils.WorkFlowServiceUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import static org.assertj.core.api.Assertions.assertThat;

@Slf4j
public class FailedWithAlertMessageWorkFlowTest {

private static final String WORKFLOW_NAME = "failedWithAlertMessageWorkFlow";

@Test
public void runSequentialFailedWorkFlow() throws ApiException {
log.info("******** Running The FailedWithAlertMessageWorkFlow ********");
TestComponents components = new WorkFlowTestBuilder().withDefaultProject()
.withWorkFlowDefinition(WORKFLOW_NAME, getWorkFlowDefinitionResponseConsumer()).build();

WorkFlowRequestDTO workFlowRequestDTO = new WorkFlowRequestDTO();
workFlowRequestDTO.setProjectId(components.project().getId());
workFlowRequestDTO.setWorkFlowName(WORKFLOW_NAME);

log.info("executes 2 tasks that should end with failed status and alert message");
WorkflowApi workflowApi = new WorkflowApi(components.apiClient());
WorkFlowExecutionResponseDTO workFlowResponseDTO = workflowApi.execute(workFlowRequestDTO);

assertThat(workFlowResponseDTO.getWorkFlowExecutionId()).isNotNull();
assertThat(workFlowResponseDTO.getWorkStatus()).isEqualTo(WorkStatusEnum.IN_PROGRESS);

log.info("FailedWithAlertMessageWorkFlow execution id: {}", workFlowResponseDTO.getWorkFlowExecutionId());

WorkFlowStatusResponseDTO workFlowStatusResponseDTO = WorkFlowServiceUtils.waitWorkflowStatusAsync(workflowApi,
workFlowResponseDTO.getWorkFlowExecutionId(), StatusEnum.FAILED);

assertThat(workFlowStatusResponseDTO.getWorkFlowExecutionId()).isNotNull();
assertThat(workFlowStatusResponseDTO.getStatus()).isEqualTo(StatusEnum.FAILED);
assertThat(workFlowStatusResponseDTO.getMessage()).isNull();

// verify the task status and message
assertThat(workFlowStatusResponseDTO.getWorks()).isNotNull();
assertThat(workFlowStatusResponseDTO.getWorks()).hasSize(2);

// first task - doNothingWorkFlowTask (fetched in reversed order)
assertThat(workFlowStatusResponseDTO.getWorks().get(1).getName()).isEqualTo("doNothingAgainWorkFlowTask");
assertThat(workFlowStatusResponseDTO.getWorks().get(1).getStatus())
.isEqualTo(WorkStatusResponseDTO.StatusEnum.COMPLETED);
assertThat(workFlowStatusResponseDTO.getWorks().get(1).getMessage()).isNull();
assertThat(workFlowStatusResponseDTO.getWorks().get(1).getAlertMessage()).isNull();

// second task - failedWithAlertMessageWorkFlowTask
assertThat(workFlowStatusResponseDTO.getWorks().get(0).getName())
.isEqualTo("failedWithAlertMessageWorkFlowTask");
assertThat(workFlowStatusResponseDTO.getWorks().get(0).getStatus())
.isEqualTo(WorkStatusResponseDTO.StatusEnum.FAILED);
assertThat(workFlowStatusResponseDTO.getWorks().get(0).getMessage()).isNull();
assertThat(workFlowStatusResponseDTO.getWorks().get(0).getAlertMessage())
.isEqualTo("[link](http://localhost:8080)");

log.info("******** FailedWithAlertMessageWorkFlow successfully ended: {} ********",
workFlowStatusResponseDTO.getStatus());
}

private static Consumer<WorkFlowDefinitionResponseDTO> getWorkFlowDefinitionResponseConsumer() {
return workFlowDefinition -> {
assertThat(workFlowDefinition.getId()).isNotNull();
assertThat(WORKFLOW_NAME).isEqualTo(workFlowDefinition.getName());
assertThat(workFlowDefinition.getProcessingType()).isEqualTo(ProcessingTypeEnum.SEQUENTIAL);
assertThat(workFlowDefinition.getType()).isEqualTo(TypeEnum.INFRASTRUCTURE);

assertThat(workFlowDefinition.getWorks()).isNotNull();
assertThat(workFlowDefinition.getWorks()).hasSize(2);
assertThat(workFlowDefinition.getWorks().get(1).getName()).isEqualTo("doNothingAgainWorkFlowTask");
assertThat(workFlowDefinition.getWorks().get(1).getWorkType())
.isEqualTo(WorkDefinitionResponseDTO.WorkTypeEnum.TASK);
assertThat(workFlowDefinition.getWorks().get(1).getWorks()).isNullOrEmpty();
assertThat(workFlowDefinition.getWorks().get(1).getProcessingType()).isNull();
assertThat(workFlowDefinition.getWorks().get(1).getParameters()).isNotNull();
assertThat(workFlowDefinition.getWorks().get(0).getName()).isEqualTo("failedWithAlertMessageWorkFlowTask");
};
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package com.redhat.parodos.flows.negative;

import java.util.function.Consumer;

import com.redhat.parodos.flows.common.WorkFlowTestBuilder;
import com.redhat.parodos.flows.common.WorkFlowTestBuilder.TestComponents;
import com.redhat.parodos.sdk.api.WorkflowApi;
import com.redhat.parodos.sdk.invoker.ApiException;
import com.redhat.parodos.sdk.model.WorkDefinitionResponseDTO;
import com.redhat.parodos.sdk.model.WorkFlowDefinitionResponseDTO;
import com.redhat.parodos.sdk.model.WorkFlowDefinitionResponseDTO.ProcessingTypeEnum;
import com.redhat.parodos.sdk.model.WorkFlowDefinitionResponseDTO.TypeEnum;
import com.redhat.parodos.sdk.model.WorkFlowExecutionResponseDTO;
import com.redhat.parodos.sdk.model.WorkFlowExecutionResponseDTO.WorkStatusEnum;
import com.redhat.parodos.sdk.model.WorkFlowRequestDTO;
import com.redhat.parodos.sdk.model.WorkFlowStatusResponseDTO;
import com.redhat.parodos.sdk.model.WorkFlowStatusResponseDTO.StatusEnum;
import com.redhat.parodos.sdk.model.WorkStatusResponseDTO;
import com.redhat.parodos.sdkutils.WorkFlowServiceUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import static org.assertj.core.api.Assertions.assertThat;

@Slf4j
public class PendingWithAlertMessageWorkFlowTest {

private static final String WORKFLOW_NAME = "pendingWithAlertMessageWorkFlow";

@Test
public void runSequentialFailedWorkFlow() throws ApiException {
log.info("******** Running The PendingWithAlertMessageWorkFlow ********");
TestComponents components = new WorkFlowTestBuilder().withDefaultProject()
.withWorkFlowDefinition(WORKFLOW_NAME, getWorkFlowDefinitionResponseConsumer()).build();

WorkFlowRequestDTO workFlowRequestDTO = new WorkFlowRequestDTO();
workFlowRequestDTO.setProjectId(components.project().getId());
workFlowRequestDTO.setWorkFlowName(WORKFLOW_NAME);

log.info("executes 2 tasks that should end with pending status and alert message");
WorkflowApi workflowApi = new WorkflowApi(components.apiClient());
WorkFlowExecutionResponseDTO workFlowResponseDTO = workflowApi.execute(workFlowRequestDTO);

assertThat(workFlowResponseDTO.getWorkFlowExecutionId()).isNotNull();
assertThat(workFlowResponseDTO.getWorkStatus()).isEqualTo(WorkStatusEnum.IN_PROGRESS);

log.info("PendingWithAlertMessageWorkFlow execution id: {}", workFlowResponseDTO.getWorkFlowExecutionId());

WorkFlowStatusResponseDTO workFlowStatusResponseDTO = WorkFlowServiceUtils.waitWorkflowStatusAsync(workflowApi,
workFlowResponseDTO.getWorkFlowExecutionId(), StatusEnum.PENDING);

assertThat(workFlowStatusResponseDTO.getWorkFlowExecutionId()).isNotNull();
assertThat(workFlowStatusResponseDTO.getStatus()).isEqualTo(StatusEnum.PENDING);
assertThat(workFlowStatusResponseDTO.getMessage()).isNull();

// verify the task status and message
assertThat(workFlowStatusResponseDTO.getWorks()).isNotNull();
assertThat(workFlowStatusResponseDTO.getWorks()).hasSize(2);

// first task - doNothingWorkFlowTask (fetched in reversed order)
assertThat(workFlowStatusResponseDTO.getWorks().get(1).getName()).isEqualTo("doNothingWorkFlowTask");
assertThat(workFlowStatusResponseDTO.getWorks().get(1).getStatus())
.isEqualTo(WorkStatusResponseDTO.StatusEnum.COMPLETED);
assertThat(workFlowStatusResponseDTO.getWorks().get(1).getMessage()).isNull();
assertThat(workFlowStatusResponseDTO.getWorks().get(1).getAlertMessage()).isNull();

// second task - pendingWithAlertMessageWorkFlowTask
assertThat(workFlowStatusResponseDTO.getWorks().get(0).getName())
.isEqualTo("pendingWithAlertMessageWorkFlowTask");
assertThat(workFlowStatusResponseDTO.getWorks().get(0).getStatus())
.isEqualTo(WorkStatusResponseDTO.StatusEnum.PENDING);
assertThat(workFlowStatusResponseDTO.getWorks().get(0).getMessage()).isNull();
assertThat(workFlowStatusResponseDTO.getWorks().get(0).getAlertMessage())
.isEqualTo("[link](http://localhost:8080)");

log.info("******** PendingWithAlertMessageWorkFlow successfully ended: {} ********",
workFlowStatusResponseDTO.getStatus());
}

private static Consumer<WorkFlowDefinitionResponseDTO> getWorkFlowDefinitionResponseConsumer() {
return workFlowDefinition -> {
assertThat(workFlowDefinition.getId()).isNotNull();
assertThat(WORKFLOW_NAME).isEqualTo(workFlowDefinition.getName());
assertThat(workFlowDefinition.getProcessingType()).isEqualTo(ProcessingTypeEnum.SEQUENTIAL);
assertThat(workFlowDefinition.getType()).isEqualTo(TypeEnum.INFRASTRUCTURE);

assertThat(workFlowDefinition.getWorks()).isNotNull();
assertThat(workFlowDefinition.getWorks()).hasSize(2);
assertThat(workFlowDefinition.getWorks().get(1).getName()).isEqualTo("doNothingWorkFlowTask");
assertThat(workFlowDefinition.getWorks().get(1).getWorkType())
.isEqualTo(WorkDefinitionResponseDTO.WorkTypeEnum.TASK);
assertThat(workFlowDefinition.getWorks().get(1).getWorks()).isNullOrEmpty();
assertThat(workFlowDefinition.getWorks().get(1).getProcessingType()).isNull();
assertThat(workFlowDefinition.getWorks().get(1).getParameters()).isNotNull();
assertThat(workFlowDefinition.getWorks().get(0).getName()).isEqualTo("pendingWithAlertMessageWorkFlowTask");
};
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ public WorkReport execute(WorkContext workContext) {
}

workContext.put(DeployConstants.APPLICATION_HOSTNAMES, hostnames);
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext, null);
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext);
}

private static Set<Path> loadManifests(String manifestsPath) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public WorkReport execute(WorkContext workContext) {
}
}

return new DefaultWorkReport(WorkStatus.COMPLETED, workContext, null);
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext);
}

private Repository getRepo(String path) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public WorkReport execute(WorkContext workContext) {
"Cannot create the branch on the repository: %s".formatted(e.getMessage()), e));
}

return new DefaultWorkReport(WorkStatus.COMPLETED, workContext, null);
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext);
}

private Repository getRepo(String path) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public WorkReport execute(WorkContext workContext) {
workContext.put(GitConstants.CONTEXT_URI, gitUri);
workContext.put(GitConstants.CONTEXT_DESTINATION, destination);
workContext.put(GitConstants.CONTEXT_BRANCH, gitBranch);
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext, null);
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext);
}

private String cloneRepo(String gitUri, String gitBranch, String credentials)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public WorkReport execute(WorkContext workContext) {
return new DefaultWorkReport(WorkStatus.FAILED, workContext,
new RuntimeException("Cannot create the commit on the repository: %s".formatted(e)));
}
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext, null);
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext);
}

private Repository getRepo(String path) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public WorkReport execute(WorkContext workContext) {
}
}

return new DefaultWorkReport(WorkStatus.COMPLETED, workContext, null);
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext);
}

private Repository getRepo(String path) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public WorkReport execute(WorkContext workContext) {
if (id.isBlank()) {
try {
JiraIssue issue = createIssue(new JiraIssue("", project, summary, description, "", List.of(comment)));
WorkReport report = new DefaultWorkReport(WorkStatus.COMPLETED, new WorkContext(), null);
WorkReport report = new DefaultWorkReport(WorkStatus.COMPLETED, new WorkContext());
report.getWorkContext().put("issue", issue);
return report;
}
Expand All @@ -114,7 +114,7 @@ public WorkReport execute(WorkContext workContext) {

var context = new WorkContext();
context.put("issue", issue);
return new DefaultWorkReport(WorkStatus.COMPLETED, context, null);
return new DefaultWorkReport(WorkStatus.COMPLETED, context);
}
if (!summary.isBlank() && !issue.summary.equals(summary)) {
issue.summary = summary;
Expand All @@ -134,7 +134,7 @@ public WorkReport execute(WorkContext workContext) {
}
var context = new WorkContext();
context.put("issue", issue);
return new DefaultWorkReport(WorkStatus.COMPLETED, context, null);
return new DefaultWorkReport(WorkStatus.COMPLETED, context);
}
catch (Exception e) {
return new DefaultWorkReport(WorkStatus.FAILED, workContext, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public class DefaultWorkReport implements WorkReport {

private Throwable error;

private String alertMessage;

/**
* Create a new {@link DefaultWorkReport}.
* @param status of work
Expand All @@ -55,6 +57,16 @@ public DefaultWorkReport(WorkStatus status, WorkContext workContext, Throwable e
this.error = error;
}

/**
* Create a new {@link DefaultWorkReport}.
* @param status of work
* @param alertMessage if any
*/
public DefaultWorkReport(WorkStatus status, WorkContext workContext, String alertMessage) {
this(status, workContext);
this.alertMessage = alertMessage;
}

public WorkStatus getStatus() {
return status;
}
Expand All @@ -68,10 +80,15 @@ public WorkContext getWorkContext() {
return workContext;
}

@Override
public String getAlertMessage() {
return this.alertMessage;
}

@Override
public String toString() {
return "DefaultWorkReport {" + "status=" + status + ", context=" + workContext + ", error="
+ (error == null ? "''" : error) + '}';
return "DefaultWorkReport {" + "status=" + status + ", context=" + workContext + ", alertMessage='"
+ alertMessage + ", error=" + (error == null ? "''" : error) + '}';
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,9 @@ public interface WorkReport {
*/
WorkContext getWorkContext();

/**
* Get alert message if any.
*/
String getAlertMessage();

}
Original file line number Diff line number Diff line change
Expand Up @@ -139,4 +139,9 @@ public WorkContext getWorkContext() {
return workContext;
}

@Override
public String getAlertMessage() {
return null;
masayag marked this conversation as resolved.
Show resolved Hide resolved
}

}
6 changes: 6 additions & 0 deletions workflow-examples/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
<freemarker.version>2.3.30</freemarker.version>
<fabric8.version>6.5.1</fabric8.version>
<move2kube.version>v1.0.3</move2kube.version>
<markdowngenerator.version>1.3.1.1</markdowngenerator.version>
</properties>
<dependencies>
<dependency>
Expand Down Expand Up @@ -132,6 +133,11 @@
<version>5.7.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.steppschuh.markdowngenerator</groupId>
<artifactId>markdowngenerator</artifactId>
<version>${markdowngenerator.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
Expand Down
Loading