diff --git a/pkg/api/v1/testkube/model_test_workflow_result_extended.go b/pkg/api/v1/testkube/model_test_workflow_result_extended.go index af2bb4c6ce..8ed4900da0 100644 --- a/pkg/api/v1/testkube/model_test_workflow_result_extended.go +++ b/pkg/api/v1/testkube/model_test_workflow_result_extended.go @@ -334,7 +334,7 @@ func (r *TestWorkflowResult) HealMissingPauseStatuses() { } } -func (r *TestWorkflowResult) healPredictedStatus() { +func (r *TestWorkflowResult) healPredictedStatus(sigSequence []TestWorkflowSignature) { // Mark as aborted, when any step is aborted if r.IsAnyStepAborted() || r.Initialization.Status.AnyError() { r.PredictedStatus = common.Ptr(ABORTED_TestWorkflowStatus) @@ -342,7 +342,19 @@ func (r *TestWorkflowResult) healPredictedStatus() { } // Determine if there are some steps failed +loop: for ref := range r.Steps { + // Ignore optional steps + for i := range sigSequence { + if sigSequence[i].Ref == ref { + if sigSequence[i].Optional { + continue loop + } + break + } + } + + // Predict failure on step error if r.Steps[ref].Status != nil && r.Steps[ref].Status.AnyError() { r.PredictedStatus = common.Ptr(FAILED_TestWorkflowStatus) return @@ -361,8 +373,8 @@ func (r *TestWorkflowResult) healStatus() { } } -func (r *TestWorkflowResult) HealStatus() { - r.healPredictedStatus() +func (r *TestWorkflowResult) HealStatus(sigSequence []TestWorkflowSignature) { + r.healPredictedStatus(sigSequence) r.healStatus() } diff --git a/pkg/testworkflows/testworkflowcontroller/notifier.go b/pkg/testworkflows/testworkflowcontroller/notifier.go index 2b418b41ad..f18d162b4e 100644 --- a/pkg/testworkflows/testworkflowcontroller/notifier.go +++ b/pkg/testworkflows/testworkflowcontroller/notifier.go @@ -358,7 +358,7 @@ func (n *notifier) reconcile() { n.result.HealTimestamps(n.sigSequence, n.scheduledAt, containerStartTs, completionTs, n.ended) n.result.HealDuration() n.result.HealMissingPauseStatuses() - n.result.HealStatus() + n.result.HealStatus(n.sigSequence) } // TODO: Optimize memory