From 4b9aaef2dfb5fba334b173e580b41dd803cbcce6 Mon Sep 17 00:00:00 2001 From: Miguel Torres Date: Wed, 23 Nov 2016 15:52:47 -0800 Subject: [PATCH] Add worker tests --- engine/runner/worker.go | 7 +++ engine/runner/worker_test.go | 86 ++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 engine/runner/worker_test.go diff --git a/engine/runner/worker.go b/engine/runner/worker.go index 9053d9f..20088c1 100644 --- a/engine/runner/worker.go +++ b/engine/runner/worker.go @@ -2,6 +2,7 @@ package runner import ( "context" + "fmt" "github.com/TIBCOSoftware/flogo-lib/core/action" ) @@ -78,6 +79,12 @@ func (w ActionWorker) Start() { log.Debugf("worker-%d: Received Request\n", w.ID) switch work.ReqType { + default: + + err := fmt.Errorf("Unsupported work request type: '%d'", work.ReqType) + actionData := work.actionData + actionData.rc <- &ActionResult{err: err} + case RtRun: actionData := work.actionData diff --git a/engine/runner/worker_test.go b/engine/runner/worker_test.go new file mode 100644 index 0000000..5fa7ea6 --- /dev/null +++ b/engine/runner/worker_test.go @@ -0,0 +1,86 @@ +package runner + +import ( + "errors" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "testing" +) + +//TestWorkerInvalidRequestType worker returns error for invalid request type +func TestWorkerInvalidRequestType(t *testing.T) { + worker := createDefaultWorker() + worker.Start() + + rc := make(chan *ActionResult) + actionData := &ActionData{rc: rc} + + // Create some work + invalidWorkRequest := ActionWorkRequest{ReqType: -1, actionData: actionData} + + // Send some work + worker.Work <- invalidWorkRequest + + // Check work result + result := <-actionData.rc + + assert.NotNil(t, result.err) + assert.Equal(t, "Unsupported work request type: '-1'", result.err.Error()) +} + +//TestWorkerErrorInAction returns an error when the action returns error +func TestWorkerErrorInAction(t *testing.T) { + worker := createDefaultWorker() + worker.Start() + + rc := make(chan *ActionResult) + + action := new(MockFullAction) + action.On("Run", nil, mock.AnythingOfType("string"), nil, mock.AnythingOfType("*runner.AsyncResultHandler")).Return(errors.New("Error in action")) + + actionData := &ActionData{rc: rc, action: action} + + // Create some work + errorWorkRequest := ActionWorkRequest{ReqType: RtRun, actionData: actionData} + + // Send some work + worker.Work <- errorWorkRequest + + // Check work result + result := <-actionData.rc + + assert.NotNil(t, result.err) + assert.Equal(t, "Error in action", result.err.Error()) +} + +//TestWorkerStartOk +func TestWorkerStartOk(t *testing.T) { + worker := createDefaultWorker() + worker.Start() + + rc := make(chan *ActionResult) + + action := new(MockResultAction) + action.On("Run", nil, mock.AnythingOfType("string"), nil, mock.AnythingOfType("*runner.AsyncResultHandler")).Return(nil) + + actionData := &ActionData{rc: rc, action: action} + + // Create some work + okWorkRequest := ActionWorkRequest{ReqType: RtRun, actionData: actionData} + + // Send some work + worker.Work <- okWorkRequest + + // Check work result + result := <-actionData.rc + + assert.Nil(t, result.err) + assert.NotNil(t, result) + assert.Equal(t, "mock", result.data) +} + +func createDefaultWorker() ActionWorker { + runner := NewDirect() + queue := make(chan chan ActionWorkRequest, 2) + return NewWorker(1, runner, queue) +}