From 5885099efe2261be6dfe2fc5af5abcef89f585a6 Mon Sep 17 00:00:00 2001 From: Maarten de Kruijf Date: Wed, 10 Apr 2024 09:37:33 +0200 Subject: [PATCH] Called playbook action from decomposer and updated test --- internal/decomposer/decomposer.go | 13 +++-- test/unittest/decomposer/decomposer_test.go | 59 +++++++++++++++++++++ 2 files changed, 67 insertions(+), 5 deletions(-) diff --git a/internal/decomposer/decomposer.go b/internal/decomposer/decomposer.go index 8f8f1f4b..c4f9160c 100644 --- a/internal/decomposer/decomposer.go +++ b/internal/decomposer/decomposer.go @@ -131,6 +131,12 @@ func (decomposer *Decomposer) ExecuteStep(step cacao.Step, scopeVariables cacao. variables.Merge(scopeVariables) variables.Merge(step.StepVariables) + metadata := execution.Metadata{ + ExecutionId: decomposer.details.ExecutionId, + PlaybookId: decomposer.details.PlaybookId, + StepId: step.ID, + } + switch step.Type { case cacao.StepTypeAction: actionMetadata := action.PlaybookStepMetadata{ @@ -140,12 +146,9 @@ func (decomposer *Decomposer) ExecuteStep(step cacao.Step, scopeVariables cacao. Agent: decomposer.playbook.AgentDefinitions[step.Agent], Variables: variables, } - metadata := execution.Metadata{ - ExecutionId: decomposer.details.ExecutionId, - PlaybookId: decomposer.details.PlaybookId, - StepId: step.ID, - } return decomposer.actionExecutor.Execute(metadata, actionMetadata) + case cacao.StepTypePlaybookAction: + return decomposer.playbookActionExecutor.Execute(metadata, step, variables) default: // NOTE: This currently silently handles unknown step types. Should we return an error instead? return cacao.NewVariables(), nil diff --git a/test/unittest/decomposer/decomposer_test.go b/test/unittest/decomposer/decomposer_test.go index c1b99c98..91c9b0a6 100644 --- a/test/unittest/decomposer/decomposer_test.go +++ b/test/unittest/decomposer/decomposer_test.go @@ -364,3 +364,62 @@ func TestExecuteIllegalMultiStep(t *testing.T) { assert.Equal(t, returnedId.ExecutionId, id) mock_action_executor2.AssertExpectations(t) } + +func TestExecutePlaybookAction(t *testing.T) { + mock_action_executor := new(mock_executor.Mock_Action_Executor) + mock_playbook_action_executor := new(mock_playbook_action_executor.Mock_PlaybookActionExecutor) + uuid_mock := new(mock_guid.Mock_Guid) + + expectedVariables := cacao.Variable{ + Type: "string", + Name: "var1", + Value: "testing", + } + + decomposer := decomposer.New(mock_action_executor, + mock_playbook_action_executor, + uuid_mock) + + step1 := cacao.Step{ + Type: "playbook-action", + ID: "playbook-action--test", + Name: "ssh-tests", + StepVariables: cacao.NewVariables(expectedVariables), + PlaybookID: "playbook--1", + OnCompletion: "end--test", + } + + end := cacao.Step{ + Type: "end", + ID: "end--test", + Name: "end step", + } + + playbook := cacao.Playbook{ + ID: "test", + Type: "test", + Name: "playbook-test", + WorkflowStart: step1.ID, + Workflow: map[string]cacao.Step{step1.ID: step1, end.ID: end}, + } + + executionId, _ := uuid.Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8") + metaStep1 := execution.Metadata{ExecutionId: executionId, PlaybookId: "test", StepId: step1.ID} + + uuid_mock.On("New").Return(executionId) + + mock_playbook_action_executor.On("Execute", + metaStep1, + step1, + cacao.NewVariables(expectedVariables)).Return(cacao.NewVariables(cacao.Variable{Name: "return", Value: "value"}), nil) + + details, err := decomposer.Execute(playbook) + uuid_mock.AssertExpectations(t) + fmt.Println(err) + assert.Equal(t, err, nil) + assert.Equal(t, details.ExecutionId, executionId) + mock_action_executor.AssertExpectations(t) + value, found := details.Variables.Find("return") + assert.Equal(t, found, true) + assert.Equal(t, value.Value, "value") +}