From 6cd61f361da4b7bbe74e86e038eba7bf5da4fafc Mon Sep 17 00:00:00 2001 From: Dawid Rusnak Date: Thu, 8 Aug 2024 12:56:06 +0200 Subject: [PATCH] fix: void groups --- .../testworkflowprocessor/action/finalize.go | 5 +- .../presets/processor_test.go | 58 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/pkg/testworkflows/testworkflowprocessor/action/finalize.go b/pkg/testworkflows/testworkflowprocessor/action/finalize.go index 275f1529fa8..3448ceefb58 100644 --- a/pkg/testworkflows/testworkflowprocessor/action/finalize.go +++ b/pkg/testworkflows/testworkflowprocessor/action/finalize.go @@ -104,9 +104,12 @@ func Finalize(groups actiontypes.ActionGroups, isolatedContainers bool) actionty } // Move non-executable steps from the 2nd group into setup - for groups[0][0].Type() != lite.ActionTypeContainerTransition { + for len(groups[0]) > 0 && groups[0][0].Type() != lite.ActionTypeContainerTransition { setup = append(setup, groups[0][0]) groups[0] = groups[0][1:] } + if len(groups[0]) == 0 { + groups = groups[1:] + } return append(actiontypes.ActionGroups{setup}, groups...) } diff --git a/pkg/testworkflows/testworkflowprocessor/presets/processor_test.go b/pkg/testworkflows/testworkflowprocessor/presets/processor_test.go index ea91bb01e0b..fb2f9fb17a1 100644 --- a/pkg/testworkflows/testworkflowprocessor/presets/processor_test.go +++ b/pkg/testworkflows/testworkflowprocessor/presets/processor_test.go @@ -1056,3 +1056,61 @@ func TestProcessConditionWithMultipleOperations(t *testing.T) { assert.NoError(t, err) assert.Equal(t, want, res.LiteActions()) } + +func TestProcessNamedGroupWithSkippedSteps(t *testing.T) { + wf := &testworkflowsv1.TestWorkflow{ + Spec: testworkflowsv1.TestWorkflowSpec{ + TestWorkflowSpecBase: testworkflowsv1.TestWorkflowSpecBase{ + System: &testworkflowsv1.TestWorkflowSystem{ + IsolatedContainers: common.Ptr(true), + }, + }, + Steps: []testworkflowsv1.Step{ + {StepMeta: testworkflowsv1.StepMeta{Name: "test-group", Condition: "always"}, Steps: []testworkflowsv1.Step{ + {StepMeta: testworkflowsv1.StepMeta{Condition: "never"}, StepOperations: testworkflowsv1.StepOperations{Shell: "shell-test-1"}}, + {StepMeta: testworkflowsv1.StepMeta{Condition: "never"}, StepOperations: testworkflowsv1.StepOperations{Shell: "shell-test-2"}}, + }}, + }, + }, + } + + res, err := proc.Bundle(context.Background(), wf, execMachine) + sig := res.Signature + + want := lite.NewLiteActionGroups(). + Append(func(list lite.LiteActionList) lite.LiteActionList { + return list. + // configure + Setup(false, false, false). + Declare(constants.RootOperationName, "true"). + Declare(sig[0].Ref(), "true", constants.RootOperationName). + Declare(sig[0].Children()[0].Ref(), "false"). + Declare(sig[0].Children()[1].Ref(), "false"). + Result(sig[0].Ref(), "true"). + Result(constants.RootOperationName, sig[0].Ref()). + Result("", constants.RootOperationName). + Start(""). + CurrentStatus("true"). + Start(constants.RootOperationName). + CurrentStatus(constants.RootOperationName). + + // start the group + Start(sig[0].Ref()). + CurrentStatus(and(sig[0].Ref(), constants.RootOperationName)). + + // void operations + Start(sig[0].Children()[0].Ref()). + End(sig[0].Children()[0].Ref()). + CurrentStatus(and(sig[0].Ref(), constants.RootOperationName)). + Start(sig[0].Children()[1].Ref()). + End(sig[0].Children()[1].Ref()). + + // finish all + End(sig[0].Ref()). + End(constants.RootOperationName). + End("") + }) + + assert.NoError(t, err) + assert.Equal(t, want, res.LiteActions()) +}