github.com/TIBCOSoftware/flogo-lib@v0.5.9/engine/runner/worker_test.go (about)

     1  package runner
     2  
     3  import (
     4  	"errors"
     5  	"github.com/stretchr/testify/assert"
     6  	"github.com/stretchr/testify/mock"
     7  	"testing"
     8  )
     9  
    10  //TestWorkerInvalidRequestType worker returns error for invalid request type
    11  func TestWorkerInvalidRequestType(t *testing.T) {
    12  	worker := createDefaultWorker()
    13  	worker.Start()
    14  
    15  	rc := make(chan *ActionResult)
    16  	actionData := &ActionData{arc: rc}
    17  
    18  	// Create some work
    19  	invalidWorkRequest := ActionWorkRequest{ReqType: -1, actionData: actionData}
    20  
    21  	// Send some work
    22  	worker.Work <- invalidWorkRequest
    23  
    24  	// Check work result
    25  	result := <-actionData.arc
    26  
    27  	assert.NotNil(t, result.err)
    28  	assert.Equal(t, "unsupported work request type: '-1'", result.err.Error())
    29  }
    30  
    31  //TestWorkerErrorInAction returns an error when the action returns error
    32  func TestWorkerErrorInAction(t *testing.T) {
    33  	worker := createDefaultWorker()
    34  	worker.Start()
    35  
    36  	rc := make(chan *ActionResult)
    37  
    38  	action := new(MockFullAction)
    39  	action.On("Run", nil, mock.AnythingOfType("map[string]*data.Attribute"), mock.AnythingOfType("*runner.AsyncResultHandler")).Return(errors.New("Error in action"))
    40  
    41  	actionData := &ActionData{arc: rc, action: action}
    42  
    43  	// Create some work
    44  	errorWorkRequest := ActionWorkRequest{ReqType: RtRun, actionData: actionData}
    45  
    46  	// Send some work
    47  	worker.Work <- errorWorkRequest
    48  
    49  	// Check work result
    50  	result := <-actionData.arc
    51  
    52  	assert.NotNil(t, result.err)
    53  	assert.Equal(t, "Error in action", result.err.Error())
    54  }
    55  
    56  //TestWorkerStartOk
    57  func TestWorkerStartOk(t *testing.T) {
    58  	worker := createDefaultWorker()
    59  	worker.Start()
    60  
    61  	rc := make(chan *ActionResult)
    62  
    63  	action := new(MockResultAction)
    64  	action.On("Run", nil, mock.AnythingOfType("map[string]*data.Attribute"), mock.AnythingOfType("*runner.AsyncResultHandler")).Return(nil)
    65  
    66  	actionData := &ActionData{arc: rc, action: action}
    67  
    68  	// Create some work
    69  	okWorkRequest := ActionWorkRequest{ReqType: RtRun, actionData: actionData}
    70  
    71  	// Send some work
    72  	worker.Work <- okWorkRequest
    73  
    74  	// Check work result
    75  	result := <-actionData.arc
    76  
    77  	assert.Nil(t, result.err)
    78  	assert.NotNil(t, result)
    79  	assert.Equal(t, 200, result.results["code"].Value())
    80  	assert.Equal(t, "mock", result.results["data"].Value())
    81  }
    82  
    83  func createDefaultWorker() ActionWorker {
    84  	runner := NewDirect()
    85  	queue := make(chan chan ActionWorkRequest, 2)
    86  	return NewWorker(1, runner, queue)
    87  }