Skip to content

Commit

Permalink
change async chan type to executiondetails
Browse files Browse the repository at this point in the history
  • Loading branch information
lucamrgs committed Jul 23, 2024
1 parent b931a56 commit 042fb67
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 25 deletions.
10 changes: 4 additions & 6 deletions internal/decomposer/decomposer.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ type ExecutionDetails struct {
}

type IDecomposer interface {
Execute(playbook cacao.Playbook, details chan string) (*ExecutionDetails, error)
Execute(playbook cacao.Playbook, details chan ExecutionDetails) (*ExecutionDetails, error)
}

func init() {
Expand Down Expand Up @@ -69,18 +69,16 @@ type Decomposer struct {
}

// Execute a Playbook
func (decomposer *Decomposer) Execute(playbook cacao.Playbook, detailsch chan string) (*ExecutionDetails, error) {
func (decomposer *Decomposer) Execute(playbook cacao.Playbook, execution_details_ch chan ExecutionDetails) (*ExecutionDetails, error) {

executionId := decomposer.guid.New()
log.Debugf("Starting execution %s for Playbook %s", executionId, playbook.ID)

details := ExecutionDetails{executionId, playbook.ID, playbook.PlaybookVariables}
decomposer.details = details

if detailsch != nil {
// Ad-hoc format using '///' separator
execution_ids := playbook.ID + "///" + executionId.String()
detailsch <- execution_ids
if execution_details_ch != nil {
execution_details_ch <- details
}

decomposer.playbook = playbook
Expand Down
12 changes: 6 additions & 6 deletions routes/trigger/trigger_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import (
"io"
"net/http"
"reflect"
"strings"
"time"

"soarca/internal/controller/decomposer_controller"
"soarca/internal/decomposer"
"soarca/logger"
"soarca/models/decoder"
"soarca/routes/error"
Expand All @@ -29,14 +29,14 @@ func init() {

type TriggerApi struct {
controller decomposer_controller.IController
Executionsch chan string
Executionsch chan decomposer.ExecutionDetails
}

func New(controller decomposer_controller.IController) *TriggerApi {
instance := TriggerApi{}
instance.controller = controller
// Channel to get back execution details
instance.Executionsch = make(chan string)
instance.Executionsch = make(chan decomposer.ExecutionDetails)
return &instance
}

Expand Down Expand Up @@ -75,10 +75,10 @@ func (trigger *TriggerApi) Execute(context *gin.Context) {
}
context.JSON(http.StatusRequestTimeout, msg)
log.Error("async execution timed out for playbook ", playbook.ID)
case execution_ids := <-trigger.Executionsch:
case exec_details := <-trigger.Executionsch:
// Ad-hoc format using '///' separator
playbook_id := strings.Split(execution_ids, "///")[0]
exec_id := strings.Split(execution_ids, "///")[1]
playbook_id := exec_details.PlaybookId
exec_id := exec_details.ExecutionId
if playbook_id == playbook.ID {
msg := gin.H{
"execution_id": exec_id,
Expand Down
13 changes: 7 additions & 6 deletions test/unittest/decomposer/decomposer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"time"

"soarca/internal/decomposer"
decomposer_model "soarca/internal/decomposer"
"soarca/internal/executors/action"
"soarca/models/cacao"
"soarca/models/execution"
Expand Down Expand Up @@ -112,7 +113,7 @@ func TestExecutePlaybook(t *testing.T) {
mock_reporter.On("ReportWorkflowEnd", executionId, playbook, nil).Return()
mock_action_executor.On("Execute", metaStep1, playbookStepMetadata).Return(cacao.NewVariables(cacao.Variable{Name: "return", Value: "value"}), nil)

var nilch chan string
var nilch chan decomposer_model.ExecutionDetails
details, err := decomposer.Execute(playbook, nilch)
uuid_mock.AssertExpectations(t)
fmt.Println(err)
Expand Down Expand Up @@ -261,7 +262,7 @@ func TestExecutePlaybookMultiStep(t *testing.T) {

mock_action_executor.On("Execute", metaStep2, playbookStepMetadata2).Return(cacao.NewVariables(cacao.Variable{Name: "result", Value: "updated"}), nil)

var nilch chan string
var nilch chan decomposer_model.ExecutionDetails
details, err := decomposer.Execute(playbook, nilch)
uuid_mock.AssertExpectations(t)
fmt.Println(err)
Expand Down Expand Up @@ -342,7 +343,7 @@ func TestExecuteEmptyMultiStep(t *testing.T) {
mock_time.On("Sleep", time.Second*0).Return()
mock_reporter.On("ReportWorkflowEnd", id, playbook, errors.New("empty success step")).Return()

var nilch chan string
var nilch chan decomposer_model.ExecutionDetails
returnedId, err := decomposer2.Execute(playbook, nilch)
uuid_mock2.AssertExpectations(t)
fmt.Println(err)
Expand Down Expand Up @@ -406,7 +407,7 @@ func TestExecuteIllegalMultiStep(t *testing.T) {
mock_time.On("Sleep", time.Second*0).Return()
mock_reporter.On("ReportWorkflowEnd", id, playbook, errors.New("empty success step")).Return()

var nilch chan string
var nilch chan decomposer_model.ExecutionDetails
returnedId, err := decomposer2.Execute(playbook, nilch)
uuid_mock2.AssertExpectations(t)
mock_reporter.AssertExpectations(t)
Expand Down Expand Up @@ -472,7 +473,7 @@ func TestExecutePlaybookAction(t *testing.T) {
step1,
cacao.NewVariables(expectedVariables)).Return(cacao.NewVariables(cacao.Variable{Name: "return", Value: "value"}), nil)

var nilch chan string
var nilch chan decomposer_model.ExecutionDetails
details, err := decomposer.Execute(playbook, nilch)
uuid_mock.AssertExpectations(t)
fmt.Println(err)
Expand Down Expand Up @@ -653,7 +654,7 @@ func TestExecuteIfCondition(t *testing.T) {
metaStepCompletion,
stepCompletionDetails).Return(cacao.NewVariables(), nil)
mock_reporter.On("ReportWorkflowEnd", executionId, playbook, nil).Return()
var nilch chan string
var nilch chan decomposer_model.ExecutionDetails
details, err := decomposer.Execute(playbook, nilch)
uuid_mock.AssertExpectations(t)
fmt.Println(err)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,13 @@ func TestExecutePlaybook(t *testing.T) {

playbook2 := cacao.Playbook{ID: playbookId, PlaybookVariables: cacao.NewVariables(expectedVariables)}

var nilch chan string
mockDecomposer.On("Execute", playbook2, nilch).Return(&details, nil)
var nilch chan decomposer.ExecutionDetails

mockDecomposer.On("Execute", playbook2, nilch).Return(&details, nil, executionId)

results, err := executerObject.Execute(metadata, step, cacao.NewVariables(addedVariables))

mockDecomposer.AssertExpectations(t)
mock_reporter.AssertExpectations(t)
assert.Equal(t, err, nil)
assert.Equal(t, results, cacao.NewVariables(returnedVariables))
Expand Down
7 changes: 4 additions & 3 deletions test/unittest/mocks/mock_decomposer/mock_decomposer.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,19 @@ import (
"soarca/internal/decomposer"
"soarca/models/cacao"

"github.com/google/uuid"
"github.com/stretchr/testify/mock"
)

type Mock_Decomposer struct {
mock.Mock
}

func (mock *Mock_Decomposer) Execute(playbook cacao.Playbook, detailsch chan string) (*decomposer.ExecutionDetails, error) {
func (mock *Mock_Decomposer) Execute(playbook cacao.Playbook, detailsch chan decomposer.ExecutionDetails) (*decomposer.ExecutionDetails, error) {
args := mock.Called(playbook, detailsch)
if detailsch != nil {
execution_ids := playbook.ID + "///" + "mock_uuid_string_defined_in_mock_decomposer"
detailsch <- execution_ids
details := decomposer.ExecutionDetails{ExecutionId: args.Get(2).(uuid.UUID), PlaybookId: playbook.ID, Variables: cacao.NewVariables()}
detailsch <- details
}
return args.Get(0).(*decomposer.ExecutionDetails), args.Error(1)
}
6 changes: 4 additions & 2 deletions test/unittest/routes/trigger_api/tigger_api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (

"github.com/gin-gonic/gin"
"github.com/go-playground/assert/v2"
"github.com/google/uuid"
)

func TestTriggerExecutionOfPlaybook(t *testing.T) {
Expand All @@ -39,14 +40,15 @@ func TestTriggerExecutionOfPlaybook(t *testing.T) {
recorder := httptest.NewRecorder()
trigger.Routes(app, trigger_api)

mock_decomposer.On("Execute", *playbook, trigger_api.Executionsch).Return(&decomposer.ExecutionDetails{}, nil)
executionId, _ := uuid.Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
mock_decomposer.On("Execute", *playbook, trigger_api.Executionsch).Return(&decomposer.ExecutionDetails{}, nil, executionId)

request, err := http.NewRequest("POST", "/trigger/playbook", bytes.NewBuffer(byteValue))
if err != nil {
t.Fail()
}

expected_return_string := `{"execution_id":"mock_uuid_string_defined_in_mock_decomposer","payload":"playbook--61a6c41e-6efc-4516-a242-dfbc5c89d562"}`
expected_return_string := `{"execution_id":"6ba7b810-9dad-11d1-80b4-00c04fd430c8","payload":"playbook--61a6c41e-6efc-4516-a242-dfbc5c89d562"}`
app.ServeHTTP(recorder, request)
assert.Equal(t, expected_return_string, recorder.Body.String())
assert.Equal(t, 200, recorder.Code)
Expand Down

0 comments on commit 042fb67

Please sign in to comment.