From e9e7447b1b38215340d8a8a8faa483b8e5bdac9a Mon Sep 17 00:00:00 2001 From: Steven L Date: Tue, 12 Oct 2021 08:02:07 -0700 Subject: [PATCH] fmt, removing globals from tests, scoping test logs (#1142) * Removing some globals from tests * Use test-scoped loggers everywhere Conflicted with jwt-related things, so those have been removed. Otherwise no issues. Part of #1149 --- Makefile | 2 +- compatibility/thrift2proto.go | 2 +- evictiontest/workflow_cache_eviction_test.go | 31 ++++-- internal/activity_test.go | 48 ++++----- internal/client.go | 2 - internal/context_test.go | 5 +- internal/error_test.go | 74 +++++++------- internal/internal_coroutines_test.go | 67 +++++++------ internal/internal_event_handlers.go | 6 +- internal/internal_event_handlers_test.go | 2 +- internal/internal_task_handlers_test.go | 25 ++--- internal/internal_worker_interfaces_test.go | 19 ++-- internal/internal_worker_test.go | 98 ++++++++++--------- internal/internal_workers_test.go | 98 +++++++++---------- internal/internal_workflow_client_test.go | 48 ++++----- internal/internal_workflow_test.go | 81 ++++++++------- internal/internal_workflow_testsuite_test.go | 5 + internal/session.go | 2 +- internal/session_test.go | 34 +++---- internal/test_helpers_test.go | 53 ++++++++++ internal/workflow.go | 6 +- internal/workflow_replayer_test.go | 50 +++++----- internal/workflow_shadower_activities_test.go | 27 ++--- internal/workflow_shadower_test.go | 32 +++--- internal/workflow_shadower_worker_test.go | 26 +++-- internal/workflow_testsuite_test.go | 15 +-- mocks/Client.go | 2 +- test/integration_test.go | 19 ++-- tools.go | 1 + 29 files changed, 477 insertions(+), 403 deletions(-) create mode 100644 internal/test_helpers_test.go diff --git a/Makefile b/Makefile index 603485d03..2b8dd0ac2 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ IMPORT_ROOT := go.uber.org/cadence THRIFT_GENDIR := .gen/go THRIFTRW_SRC := idls/thrift/cadence.thrift idls/thrift/shadower.thrift # one or more thriftrw-generated file(s), to create / depend on generated code -THRIFTRW_OUT := $(THRIFT_GENDIR)/cadence/idl.go +THRIFTRW_OUT := $(THRIFT_GENDIR)/cadence/cadence.go TEST_ARG ?= -v -race # general build-product folder, cleaned as part of `make clean` diff --git a/compatibility/thrift2proto.go b/compatibility/thrift2proto.go index 915f5609b..ec33b8373 100644 --- a/compatibility/thrift2proto.go +++ b/compatibility/thrift2proto.go @@ -36,4 +36,4 @@ func NewThrift2ProtoAdapter( visibility apiv1.VisibilityAPIYARPCClient, ) workflowserviceclient.Interface { return internal.NewThrift2ProtoAdapter(domain, workflow, worker, visibility) -} \ No newline at end of file +} diff --git a/evictiontest/workflow_cache_eviction_test.go b/evictiontest/workflow_cache_eviction_test.go index 0afb51b38..7a8795562 100644 --- a/evictiontest/workflow_cache_eviction_test.go +++ b/evictiontest/workflow_cache_eviction_test.go @@ -44,9 +44,22 @@ import ( "go.uber.org/cadence/internal/common" "go.uber.org/cadence/worker" "go.uber.org/yarpc" + "go.uber.org/zap/zaptest" "golang.org/x/net/context" ) +// copied from internal/test_helpers_test.go +// this is the mock for yarpcCallOptions, as gomock requires the num of arguments to be the same. +// see getYarpcCallOptions for the default case. +func callOptions() []interface{} { + return []interface{}{ + gomock.Any(), // library version + gomock.Any(), // feature version + gomock.Any(), // client name + gomock.Any(), // feature flags + } +} + func testReplayWorkflow(ctx internal.Context) error { ao := internal.ActivityOptions{ ScheduleToStartTimeout: time.Second, @@ -86,9 +99,6 @@ func TestWorkersTestSuite(t *testing.T) { suite.Run(t, new(CacheEvictionSuite)) } -// this is the mock for yarpcCallOptions, make sure length are the same -var callOptions = []interface{}{gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()} - func createTestEventWorkflowExecutionStarted(eventID int64, attr *m.WorkflowExecutionStartedEventAttributes) *m.HistoryEvent { return &m.HistoryEvent{ EventId: common.Int64Ptr(eventID), @@ -149,25 +159,28 @@ func (s *CacheEvictionSuite) TestResetStickyOnEviction() { cacheSize := 5 internal.SetStickyWorkflowCacheSize(cacheSize) // once for workflow worker because we disable activity worker - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).Times(1) + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).Times(1) // feed our worker exactly *cacheSize* "legit" decision tasks // these are handcrafted decision tasks that are not blatantly obviously mocks // the goal is to trick our worker into thinking they are real so it // actually goes along with processing these and puts their execution in the cache. - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(mockPollForDecisionTask).Times(cacheSize) + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(mockPollForDecisionTask).Times(cacheSize) // after *cacheSize* "legit" tasks are fed to our worker, start feeding our worker empty responses. // these will get tossed away immediately after polled, but we still need them so gomock doesn't compain about unexpected calls. // this is because our worker's poller doesn't stop, it keeps polling on the service client as long // as Stop() is not called on the worker - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForDecisionTaskResponse{}, nil).AnyTimes() + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForDecisionTaskResponse{}, nil).AnyTimes() // this gets called after polled decision tasks are processed, any number of times doesn't matter - s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).Return(&m.RespondDecisionTaskCompletedResponse{}, nil).AnyTimes() + s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.RespondDecisionTaskCompletedResponse{}, nil).AnyTimes() // this is the critical point of the test. // ResetSticky should be called exactly once because our workflow cache evicts when full // so if our worker puts *cacheSize* entries in the cache, it should evict exactly one - s.service.EXPECT().ResetStickyTaskList(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(mockResetStickyTaskList).Times(1) + s.service.EXPECT().ResetStickyTaskList(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(mockResetStickyTaskList).Times(1) - workflowWorker := internal.NewWorker(s.service, "test-domain", "tasklist", worker.Options{DisableActivityWorker: true}) + workflowWorker := internal.NewWorker(s.service, "test-domain", "tasklist", worker.Options{ + DisableActivityWorker: true, + Logger: zaptest.NewLogger(s.T()), + }) // this is an arbitrary workflow we use for this test // NOTE: a simple helloworld that doesn't execute an activity // won't work because the workflow will simply just complete diff --git a/internal/activity_test.go b/internal/activity_test.go index b279e9520..a220d2e82 100644 --- a/internal/activity_test.go +++ b/internal/activity_test.go @@ -22,7 +22,6 @@ package internal import ( "context" - "fmt" "testing" "github.com/golang/mock/gomock" @@ -54,17 +53,12 @@ func (s *activityTestSuite) TearDownTest() { s.mockCtrl.Finish() // assert mock’s expectations } -// this is the mock for yarpcCallOptions, make sure length are the same -var callOptions = []interface{}{gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()} - -var featureFlags = FeatureFlags{} - func (s *activityTestSuite) TestActivityHeartbeat() { ctx, cancel := context.WithCancel(context.Background()) - invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 1, make(chan struct{}), featureFlags) + invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 1, make(chan struct{}), FeatureFlags{}) ctx = context.WithValue(ctx, activityEnvContextKey, &activityEnvironment{serviceInvoker: invoker}) - s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{}, nil).Times(1) RecordActivityHeartbeat(ctx, "testDetails") @@ -72,15 +66,15 @@ func (s *activityTestSuite) TestActivityHeartbeat() { func (s *activityTestSuite) TestActivityHeartbeat_InternalError() { ctx, cancel := context.WithCancel(context.Background()) - invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 1, make(chan struct{}), featureFlags) + invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 1, make(chan struct{}), FeatureFlags{}) ctx = context.WithValue(ctx, activityEnvContextKey, &activityEnvironment{ serviceInvoker: invoker, logger: getTestLogger(s.T())}) - s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(nil, &shared.InternalServiceError{}). Do(func(ctx context.Context, request *shared.RecordActivityTaskHeartbeatRequest, opts ...yarpc.CallOption) { - fmt.Println("MOCK RecordActivityTaskHeartbeat executed") + s.T().Log("MOCK RecordActivityTaskHeartbeat executed") }).AnyTimes() RecordActivityHeartbeat(ctx, "testDetails") @@ -88,12 +82,12 @@ func (s *activityTestSuite) TestActivityHeartbeat_InternalError() { func (s *activityTestSuite) TestActivityHeartbeat_CancelRequested() { ctx, cancel := context.WithCancel(context.Background()) - invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 1, make(chan struct{}), featureFlags) + invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 1, make(chan struct{}), FeatureFlags{}) ctx = context.WithValue(ctx, activityEnvContextKey, &activityEnvironment{ serviceInvoker: invoker, logger: getTestLogger(s.T())}) - s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{CancelRequested: common.BoolPtr(true)}, nil).Times(1) RecordActivityHeartbeat(ctx, "testDetails") @@ -103,12 +97,12 @@ func (s *activityTestSuite) TestActivityHeartbeat_CancelRequested() { func (s *activityTestSuite) TestActivityHeartbeat_EntityNotExist() { ctx, cancel := context.WithCancel(context.Background()) - invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 1, make(chan struct{}), featureFlags) + invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 1, make(chan struct{}), FeatureFlags{}) ctx = context.WithValue(ctx, activityEnvContextKey, &activityEnvironment{ serviceInvoker: invoker, logger: getTestLogger(s.T())}) - s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{}, &shared.EntityNotExistsError{}).Times(1) RecordActivityHeartbeat(ctx, "testDetails") @@ -118,13 +112,13 @@ func (s *activityTestSuite) TestActivityHeartbeat_EntityNotExist() { func (s *activityTestSuite) TestActivityHeartbeat_SuppressContinousInvokes() { ctx, cancel := context.WithCancel(context.Background()) - invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 2, make(chan struct{}), featureFlags) + invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 2, make(chan struct{}), FeatureFlags{}) ctx = context.WithValue(ctx, activityEnvContextKey, &activityEnvironment{ serviceInvoker: invoker, logger: getTestLogger(s.T())}) // Multiple calls but only one call is made. - s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{}, nil).Times(1) RecordActivityHeartbeat(ctx, "testDetails") RecordActivityHeartbeat(ctx, "testDetails") @@ -133,11 +127,11 @@ func (s *activityTestSuite) TestActivityHeartbeat_SuppressContinousInvokes() { // No HB timeout configured. service2 := workflowservicetest.NewMockClient(s.mockCtrl) - invoker2 := newServiceInvoker([]byte("task-token"), "identity", service2, cancel, 0, make(chan struct{}), featureFlags) + invoker2 := newServiceInvoker([]byte("task-token"), "identity", service2, cancel, 0, make(chan struct{}), FeatureFlags{}) ctx = context.WithValue(ctx, activityEnvContextKey, &activityEnvironment{ serviceInvoker: invoker2, logger: getTestLogger(s.T())}) - service2.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + service2.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{}, nil).Times(1) RecordActivityHeartbeat(ctx, "testDetails") RecordActivityHeartbeat(ctx, "testDetails") @@ -146,14 +140,14 @@ func (s *activityTestSuite) TestActivityHeartbeat_SuppressContinousInvokes() { // simulate batch picks before expiry. waitCh := make(chan struct{}) service3 := workflowservicetest.NewMockClient(s.mockCtrl) - invoker3 := newServiceInvoker([]byte("task-token"), "identity", service3, cancel, 2, make(chan struct{}), featureFlags) + invoker3 := newServiceInvoker([]byte("task-token"), "identity", service3, cancel, 2, make(chan struct{}), FeatureFlags{}) ctx = context.WithValue(ctx, activityEnvContextKey, &activityEnvironment{ serviceInvoker: invoker3, logger: getTestLogger(s.T())}) - service3.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + service3.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{}, nil).Times(1) - service3.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + service3.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{}, nil). Do(func(ctx context.Context, request *shared.RecordActivityTaskHeartbeatRequest, opts ...yarpc.CallOption) { ev := newEncodedValues(request.Details, nil) @@ -176,13 +170,13 @@ func (s *activityTestSuite) TestActivityHeartbeat_SuppressContinousInvokes() { // simulate batch picks before expiry, with out any progress specified. waitCh2 := make(chan struct{}) service4 := workflowservicetest.NewMockClient(s.mockCtrl) - invoker4 := newServiceInvoker([]byte("task-token"), "identity", service4, cancel, 2, make(chan struct{}), featureFlags) + invoker4 := newServiceInvoker([]byte("task-token"), "identity", service4, cancel, 2, make(chan struct{}), FeatureFlags{}) ctx = context.WithValue(ctx, activityEnvContextKey, &activityEnvironment{ serviceInvoker: invoker4, logger: getTestLogger(s.T())}) - service4.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + service4.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{}, nil).Times(1) - service4.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + service4.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{}, nil). Do(func(ctx context.Context, request *shared.RecordActivityTaskHeartbeatRequest, opts ...yarpc.CallOption) { require.Nil(s.T(), request.Details) @@ -200,14 +194,14 @@ func (s *activityTestSuite) TestActivityHeartbeat_SuppressContinousInvokes() { func (s *activityTestSuite) TestActivityHeartbeat_WorkerStop() { ctx, cancel := context.WithCancel(context.Background()) workerStopChannel := make(chan struct{}) - invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 5, workerStopChannel, featureFlags) + invoker := newServiceInvoker([]byte("task-token"), "identity", s.service, cancel, 5, workerStopChannel, FeatureFlags{}) ctx = context.WithValue(ctx, activityEnvContextKey, &activityEnvironment{serviceInvoker: invoker}) heartBeatDetail := "testDetails" waitCh := make(chan struct{}, 1) waitCh <- struct{}{} waitC2 := make(chan struct{}, 1) - s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...). + s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...). Return(&shared.RecordActivityTaskHeartbeatResponse{}, nil). Do(func(ctx context.Context, request *shared.RecordActivityTaskHeartbeatRequest, opts ...yarpc.CallOption) { if _, ok := <-waitCh; ok { diff --git a/internal/client.go b/internal/client.go index 0a4bdee53..0505d30f0 100644 --- a/internal/client.go +++ b/internal/client.go @@ -542,7 +542,6 @@ func NewClient(service workflowserviceclient.Interface, domain string, options * } else { tracer = opentracing.NoopTracer{} } - return &workflowClient{ workflowService: metrics.NewWorkflowServiceWrapper(service, metricScope), domain: domain, @@ -569,7 +568,6 @@ func NewDomainClient(service workflowserviceclient.Interface, options *ClientOpt metricScope = options.MetricsScope } metricScope = tagScope(metricScope, tagDomain, "domain-client", clientImplHeaderName, clientImplHeaderValue) - return &domainClient{ workflowService: metrics.NewWorkflowServiceWrapper(service, metricScope), metricsScope: metricScope, diff --git a/internal/context_test.go b/internal/context_test.go index 3386c249d..47d5ffcf9 100644 --- a/internal/context_test.go +++ b/internal/context_test.go @@ -26,7 +26,6 @@ import ( "time" "github.com/stretchr/testify/assert" - "go.uber.org/zap/zaptest" ) func TestContextChildParentCancelRace(t *testing.T) { @@ -81,9 +80,7 @@ func TestContextConcurrentCancelRace(t *testing.T) { In principle this must be safe to do - contexts are supposed to be concurrency-safe. Even if ours are not actually safe (for valid reasons), our execution model needs to ensure they *act* like it's safe. */ - s := WorkflowTestSuite{} - s.SetLogger(zaptest.NewLogger(t)) - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) wf := func(ctx Context) error { ctx, cancel := WithCancel(ctx) racyCancel := func(ctx Context) { diff --git a/internal/error_test.go b/internal/error_test.go index 8a99be395..eff218072 100644 --- a/internal/error_test.go +++ b/internal/error_test.go @@ -28,7 +28,7 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/cadence/.gen/go/shared" "go.uber.org/cadence/internal/common" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) const ( @@ -58,39 +58,48 @@ var ( testErrorDetails4 = testStruct2{"a string", 321, &[]string{"eat", "code"}} ) +// Creates a new workflow environment with the correct logger configured. +func newTestActivityEnv(t *testing.T) *TestActivityEnvironment { + s := &WorkflowTestSuite{} + s.SetLogger(zaptest.NewLogger(t)) + // same tally note + env := s.NewTestActivityEnvironment() + return env +} + func (tes *testErrorStruct) Error() string { return tes.message } func Test_GenericError(t *testing.T) { // test activity error - errorActivityFn := func() error { - return errors.New("error:foo") - } - s := &WorkflowTestSuite{} - env := s.NewTestActivityEnvironment() - env.RegisterActivity(errorActivityFn) - _, err := env.ExecuteActivity(errorActivityFn) - require.Error(t, err) - require.Equal(t, &GenericError{"error:foo"}, err) - + t.Run("activities", func(t *testing.T) { + errorActivityFn := func() error { + return errors.New("error:foo") + } + env := newTestActivityEnv(t) + env.RegisterActivity(errorActivityFn) + _, err := env.ExecuteActivity(errorActivityFn) + require.Error(t, err) + require.Equal(t, &GenericError{"error:foo"}, err) + }) // test workflow error - errorWorkflowFn := func(ctx Context) error { - return errors.New("error:foo") - } - wfEnv := s.NewTestWorkflowEnvironment() - wfEnv.RegisterWorkflow(errorWorkflowFn) - wfEnv.ExecuteWorkflow(errorWorkflowFn) - err = wfEnv.GetWorkflowError() - require.Error(t, err) - require.Equal(t, &GenericError{"error:foo"}, err) + t.Run("workflows", func(t *testing.T) { + errorWorkflowFn := func(ctx Context) error { + return errors.New("error:foo") + } + env := newTestWorkflowEnv(t) + env.RegisterWorkflow(errorWorkflowFn) + env.ExecuteWorkflow(errorWorkflowFn) + err := env.GetWorkflowError() + require.Error(t, err) + require.Equal(t, &GenericError{"error:foo"}, err) + }) } func Test_ActivityNotRegistered(t *testing.T) { registeredActivityFn, unregisteredActivitFn := "RegisteredActivity", "UnregisteredActivityFn" - s := &WorkflowTestSuite{} - s.SetLogger(zap.NewNop()) - env := s.NewTestActivityEnvironment() + env := newTestActivityEnv(t) env.RegisterActivityWithOptions(func() error { return nil }, RegisterActivityOptions{Name: registeredActivityFn}) _, err := env.ExecuteActivity(unregisteredActivitFn) require.Error(t, err) @@ -172,8 +181,7 @@ func Test_CustomError(t *testing.T) { errorActivityFn := func() error { return err0 } - s := &WorkflowTestSuite{} - env := s.NewTestActivityEnvironment() + env := newTestActivityEnv(t) env.RegisterActivity(errorActivityFn) _, err := env.ExecuteActivity(errorActivityFn) require.Error(t, err) @@ -203,7 +211,7 @@ func Test_CustomError(t *testing.T) { errorWorkflowFn := func(ctx Context) error { return err0 } - wfEnv := s.NewTestWorkflowEnvironment() + wfEnv := newTestWorkflowEnv(t) wfEnv.RegisterWorkflow(errorWorkflowFn) wfEnv.ExecuteWorkflow(errorWorkflowFn) err = wfEnv.GetWorkflowError() @@ -236,8 +244,7 @@ func Test_CustomError_Pointer(t *testing.T) { errorActivityFn := func() error { return err1 } - s := &WorkflowTestSuite{} - env := s.NewTestActivityEnvironment() + env := newTestActivityEnv(t) env.RegisterActivity(errorActivityFn) _, err = env.ExecuteActivity(errorActivityFn) require.Error(t, err) @@ -265,7 +272,7 @@ func Test_CustomError_Pointer(t *testing.T) { errorWorkflowFn := func(ctx Context) error { return err1 } - wfEnv := s.NewTestWorkflowEnvironment() + wfEnv := newTestWorkflowEnv(t) wfEnv.RegisterWorkflow(errorWorkflowFn) wfEnv.ExecuteWorkflow(errorWorkflowFn) err = wfEnv.GetWorkflowError() @@ -280,7 +287,7 @@ func Test_CustomError_Pointer(t *testing.T) { errorWorkflowFn2 := func(ctx Context) error { return err2 // pointer in details } - wfEnv = s.NewTestWorkflowEnvironment() + wfEnv = newTestWorkflowEnv(t) wfEnv.RegisterWorkflow(errorWorkflowFn2) wfEnv.ExecuteWorkflow(errorWorkflowFn2) err = wfEnv.GetWorkflowError() @@ -327,8 +334,7 @@ func Test_CanceledError(t *testing.T) { errorActivityFn := func() error { return err0 } - s := &WorkflowTestSuite{} - env := s.NewTestActivityEnvironment() + env := newTestActivityEnv(t) env.RegisterActivity(errorActivityFn) _, err := env.ExecuteActivity(errorActivityFn) require.Error(t, err) @@ -350,7 +356,7 @@ func Test_CanceledError(t *testing.T) { errorWorkflowFn := func(ctx Context) error { return err0 } - wfEnv := s.NewTestWorkflowEnvironment() + wfEnv := newTestWorkflowEnv(t) wfEnv.RegisterWorkflow(errorWorkflowFn) wfEnv.ExecuteWorkflow(errorWorkflowFn) err = wfEnv.GetWorkflowError() @@ -475,7 +481,9 @@ func Test_ContinueAsNewError(t *testing.T) { header: header, ctxProps: []ContextPropagator{NewStringMapPropagator([]string{"test"})}, } + s.SetLogger(zaptest.NewLogger(t)) wfEnv := s.NewTestWorkflowEnvironment() + wfEnv.Test(t) wfEnv.RegisterWorkflowWithOptions(continueAsNewWorkflowFn, RegisterWorkflowOptions{ Name: continueAsNewWfName, }) diff --git a/internal/internal_coroutines_test.go b/internal/internal_coroutines_test.go index 0c4b39210..bee4c0a86 100644 --- a/internal/internal_coroutines_test.go +++ b/internal/internal_coroutines_test.go @@ -33,15 +33,15 @@ import ( "github.com/stretchr/testify/require" ) -func createRootTestContext() (ctx Context) { - env := new(WorkflowUnitTest).NewTestWorkflowEnvironment() +func createRootTestContext(t *testing.T) (ctx Context) { + env := newTestWorkflowEnv(t) interceptors, envInterceptor := newWorkflowInterceptors(env.impl, env.impl.workflowInterceptors) return newWorkflowContext(env.impl, interceptors, envInterceptor) } func TestDispatcher(t *testing.T) { value := "foo" - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { value = "bar" }) + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { value = "bar" }) require.Equal(t, "foo", value) require.NoError(t, d.ExecuteUntilAllBlocked()) require.True(t, d.IsDone()) @@ -50,7 +50,7 @@ func TestDispatcher(t *testing.T) { func TestNonBlockingChildren(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { for i := 0; i < 10; i++ { ii := i Go(ctx, func(ctx Context) { @@ -68,7 +68,7 @@ func TestNonBlockingChildren(t *testing.T) { func TestNonbufferedChannel(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewChannel(ctx) Go(ctx, func(ctx Context) { history = append(history, "child-start") @@ -99,7 +99,7 @@ func TestNonbufferedChannel(t *testing.T) { func TestNonbufferedChannelBlockedReceive(t *testing.T) { var history []string var c2 Channel - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewChannel(ctx) c2 = NewChannel(ctx) Go(ctx, func(ctx Context) { @@ -139,7 +139,7 @@ func TestNonbufferedChannelBlockedReceive(t *testing.T) { func TestBufferedChannelPut(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewBufferedChannel(ctx, 1) Go(ctx, func(ctx Context) { history = append(history, "child-start") @@ -174,7 +174,7 @@ func TestBufferedChannelPut(t *testing.T) { func TestBufferedChannelGet(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewChannel(ctx) c2 := NewBufferedChannel(ctx, 2) @@ -229,7 +229,7 @@ func TestBufferedChannelGet(t *testing.T) { func TestNotBlockingSelect(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewBufferedChannel(ctx, 1) c2 := NewBufferedChannel(ctx, 1) s := NewSelector(ctx) @@ -266,7 +266,7 @@ func TestNotBlockingSelect(t *testing.T) { func TestBlockingSelect(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewChannel(ctx) c2 := NewChannel(ctx) Go(ctx, func(ctx Context) { @@ -319,7 +319,7 @@ func TestBlockingSelect(t *testing.T) { func TestBlockingSelectAsyncSend(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewChannel(ctx) s := NewSelector(ctx) @@ -361,7 +361,7 @@ func TestBlockingSelectAsyncSend(t *testing.T) { func TestSelectOnClosedChannel(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c := NewBufferedChannel(ctx, 1) c.Send(ctx, 5) c.Close() @@ -403,7 +403,7 @@ func TestSelectOnClosedChannel(t *testing.T) { func TestBlockingSelectAsyncSend2(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewBufferedChannel(ctx, 100) c2 := NewBufferedChannel(ctx, 100) s := NewSelector(ctx) @@ -448,7 +448,7 @@ func TestBlockingSelectAsyncSend2(t *testing.T) { func TestSendSelect(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewChannel(ctx) c2 := NewChannel(ctx) Go(ctx, func(ctx Context) { @@ -489,7 +489,7 @@ func TestSendSelect(t *testing.T) { func TestSendSelectWithAsyncReceive(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c1 := NewChannel(ctx) c2 := NewChannel(ctx) Go(ctx, func(ctx Context) { @@ -531,7 +531,7 @@ func TestSendSelectWithAsyncReceive(t *testing.T) { func TestChannelClose(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { jobs := NewBufferedChannel(ctx, 5) done := NewNamedChannel(ctx, "done") @@ -577,7 +577,7 @@ func TestChannelClose(t *testing.T) { } func TestSendClosedChannel(t *testing.T) { - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { defer func() { require.NotNil(t, recover(), "panic expected") }() @@ -592,7 +592,7 @@ func TestSendClosedChannel(t *testing.T) { } func TestBlockedSendClosedChannel(t *testing.T) { - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { defer func() { require.NotNil(t, recover(), "panic expected") }() @@ -606,7 +606,7 @@ func TestBlockedSendClosedChannel(t *testing.T) { } func TestAsyncSendClosedChannel(t *testing.T) { - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { defer func() { require.NotNil(t, recover(), "panic expected") }() @@ -621,12 +621,12 @@ func TestAsyncSendClosedChannel(t *testing.T) { func TestDispatchClose(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c := NewNamedChannel(ctx, "forever_blocked") for i := 0; i < 10; i++ { ii := i GoNamed(ctx, fmt.Sprintf("c-%v", i), func(ctx Context) { - defer func(){ + defer func() { // Trigger no-longer-valid context access within deferred function. // At this point deferred function should not continue and will be exited. getState(ctx) @@ -665,7 +665,7 @@ func TestDispatchClose(t *testing.T) { func TestPanic(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { c := NewNamedChannel(ctx, "forever_blocked") for i := 0; i < 10; i++ { ii := i @@ -693,7 +693,7 @@ func TestPanic(t *testing.T) { func TestAwait(t *testing.T) { flag := false - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { Await(ctx, func() bool { return flag }) }) err := d.ExecuteUntilAllBlocked() @@ -710,7 +710,7 @@ func TestAwait(t *testing.T) { func TestAwaitCancellation(t *testing.T) { var awaitError error - ctx := createRootTestContext() + ctx := createRootTestContext(t) ctx, cancelHandler := WithCancel(ctx) d, _ := newDispatcher(ctx, func(ctx Context) { awaitError = Await(ctx, func() bool { return false }) @@ -731,7 +731,7 @@ func TestFutureSetValue(t *testing.T) { var history []string var f Future var s Settable - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { f, s = NewFuture(ctx) Go(ctx, func(ctx Context) { history = append(history, "child-start") @@ -775,7 +775,7 @@ func TestFutureFail(t *testing.T) { var history []string var f Future var s Settable - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { f, s = NewFuture(ctx) Go(ctx, func(ctx Context) { history = append(history, "child-start") @@ -818,7 +818,7 @@ func TestFutureSet(t *testing.T) { var history []string var f1, f2 Future var s1, s2 Settable - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { f1, s1 = NewFuture(ctx) f2, s2 = NewFuture(ctx) Go(ctx, func(ctx Context) { @@ -888,7 +888,7 @@ func TestFutureChain(t *testing.T) { var f1, cf1, f2, cf2 Future var s1, cs1, s2, cs2 Settable - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { f1, s1 = NewFuture(ctx) cf1, cs1 = NewFuture(ctx) s1.Chain(cf1) @@ -957,7 +957,7 @@ func TestFutureChain(t *testing.T) { func TestSelectFuture(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { future1, settable1 := NewFuture(ctx) future2, settable2 := NewFuture(ctx) Go(ctx, func(ctx Context) { @@ -1006,7 +1006,7 @@ func TestSelectFuture(t *testing.T) { func TestSelectDecodeFuture(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { future1, settable1 := newDecodeFuture(ctx, "testFn1") future2, settable2 := newDecodeFuture(ctx, "testFn2") Go(ctx, func(ctx Context) { @@ -1058,7 +1058,7 @@ func TestDecodeFutureChain(t *testing.T) { var f1, cf1, f2, cf2 Future var s1, cs1, s2, cs2 Settable - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { f1, s1 = newDecodeFuture(ctx, "testFn") cf1, cs1 = newDecodeFuture(ctx, "testFun") f2, s2 = newDecodeFuture(ctx, "testFn") @@ -1131,7 +1131,7 @@ func TestDecodeFutureChain(t *testing.T) { func TestSelectFuture_WithBatchSets(t *testing.T) { var history []string - d, _ := newDispatcher(createRootTestContext(), func(ctx Context) { + d, _ := newDispatcher(createRootTestContext(t), func(ctx Context) { future1, settable1 := NewFuture(ctx) future2, settable2 := NewFuture(ctx) future3, settable3 := NewFuture(ctx) @@ -1192,8 +1192,7 @@ func TestChainedFuture(t *testing.T) { return out, nil } - s := WorkflowTestSuite{} - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) env.RegisterWorkflow(workflowFn) env.RegisterActivity(activityFn) diff --git a/internal/internal_event_handlers.go b/internal/internal_event_handlers.go index 1811286e3..26f63789e 100644 --- a/internal/internal_event_handlers.go +++ b/internal/internal_event_handlers.go @@ -374,9 +374,9 @@ func (wc *workflowEnvironmentImpl) RegisterCancelHandler(handler func()) { func (wc *workflowEnvironmentImpl) ExecuteChildWorkflow( params executeWorkflowParams, callback resultHandler, startedHandler func(r WorkflowExecution, e error)) error { if params.workflowID == "" { - if wc.workflowInfo.OriginalRunId != ""{ - params.workflowID = wc.workflowInfo.OriginalRunId + "_" + wc.GenerateSequenceID() - }else{ + if wc.workflowInfo.OriginalRunId != "" { + params.workflowID = wc.workflowInfo.OriginalRunId + "_" + wc.GenerateSequenceID() + } else { params.workflowID = wc.workflowInfo.WorkflowExecution.RunID + "_" + wc.GenerateSequenceID() } } diff --git a/internal/internal_event_handlers_test.go b/internal/internal_event_handlers_test.go index ea9570130..10b40f222 100644 --- a/internal/internal_event_handlers_test.go +++ b/internal/internal_event_handlers_test.go @@ -165,7 +165,7 @@ func Test_UpsertSearchAttributes(t *testing.T) { t.Parallel() env := &workflowEnvironmentImpl{ decisionsHelper: newDecisionsHelper(), - workflowInfo: GetWorkflowInfo(createRootTestContext()), + workflowInfo: GetWorkflowInfo(createRootTestContext(t)), } err := env.UpsertSearchAttributes(nil) require.Error(t, err) diff --git a/internal/internal_task_handlers_test.go b/internal/internal_task_handlers_test.go index f9200b658..84dfaafff 100644 --- a/internal/internal_task_handlers_test.go +++ b/internal/internal_task_handlers_test.go @@ -42,6 +42,7 @@ import ( "go.uber.org/cadence/internal/common" "go.uber.org/goleak" "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) const ( @@ -115,11 +116,11 @@ func getWorkflowInfoWorkflowFunc(ctx Context, expectedLastCompletionResult strin // Test suite. func (t *TaskHandlersTestSuite) SetupTest() { + t.logger = zaptest.NewLogger(t.T()) } func (t *TaskHandlersTestSuite) SetupSuite() { - logger, _ := zap.NewDevelopment() - t.logger = logger + t.logger = zaptest.NewLogger(t.T()) registerWorkflows(t.registry) } @@ -1189,7 +1190,7 @@ func (t *TaskHandlersTestSuite) TestHeartBeat_NoError() { cancelRequested := false heartbeatResponse := s.RecordActivityTaskHeartbeatResponse{CancelRequested: &cancelRequested} - mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...).Return(&heartbeatResponse, nil) + mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...).Return(&heartbeatResponse, nil) cadenceInvoker := &cadenceInvoker{ identity: "Test_Cadence_Invoker", @@ -1228,8 +1229,8 @@ func (t *TaskHandlersTestSuite) TestHeartBeat_Interleaved() { cancelRequested := false heartbeatResponse := s.RecordActivityTaskHeartbeatResponse{CancelRequested: &cancelRequested} - mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), newHeartbeatRequestMatcher([]byte("1")), callOptions...).Return(&heartbeatResponse, nil).Times(3) - mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), newHeartbeatRequestMatcher([]byte("2")), callOptions...).Return(&heartbeatResponse, nil).Times(3) + mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), newHeartbeatRequestMatcher([]byte("1")), callOptions()...).Return(&heartbeatResponse, nil).Times(3) + mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), newHeartbeatRequestMatcher([]byte("2")), callOptions()...).Return(&heartbeatResponse, nil).Times(3) cadenceInvoker := &cadenceInvoker{ identity: "Test_Cadence_Invoker", @@ -1264,7 +1265,7 @@ func (t *TaskHandlersTestSuite) TestHeartBeat_NilResponseWithError() { mockService := workflowservicetest.NewMockClient(mockCtrl) entityNotExistsError := &s.EntityNotExistsError{} - mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...).Return(nil, entityNotExistsError) + mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, entityNotExistsError) cadenceInvoker := newServiceInvoker( nil, @@ -1273,7 +1274,7 @@ func (t *TaskHandlersTestSuite) TestHeartBeat_NilResponseWithError() { func() {}, 0, make(chan struct{}), - featureFlags, + FeatureFlags{}, ) heartbeatErr := cadenceInvoker.BatchHeartbeat(nil) @@ -1287,7 +1288,7 @@ func (t *TaskHandlersTestSuite) TestHeartBeat_NilResponseWithDomainNotActiveErro mockService := workflowservicetest.NewMockClient(mockCtrl) domainNotActiveError := &s.DomainNotActiveError{} - mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...).Return(nil, domainNotActiveError) + mockService.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, domainNotActiveError) called := false cancelHandler := func() { called = true } @@ -1299,7 +1300,7 @@ func (t *TaskHandlersTestSuite) TestHeartBeat_NilResponseWithDomainNotActiveErro cancelHandler, 0, make(chan struct{}), - featureFlags, + FeatureFlags{}, ) heartbeatErr := cadenceInvoker.BatchHeartbeat(nil) @@ -1502,9 +1503,9 @@ func (t *TaskHandlersTestSuite) TestRegression_QueriesDoNotLeakGoroutines() { taskList := "tl1" params := workerExecutionParameters{ - TaskList: taskList, - Identity: "test-id-1", - Logger: t.logger, + TaskList: taskList, + Identity: "test-id-1", + Logger: t.logger, DisableStickyExecution: false, } taskHandler := newWorkflowTaskHandler(testDomain, params, nil, t.registry) diff --git a/internal/internal_worker_interfaces_test.go b/internal/internal_worker_interfaces_test.go index 06b05f15c..7b682b7b1 100644 --- a/internal/internal_worker_interfaces_test.go +++ b/internal/internal_worker_interfaces_test.go @@ -32,7 +32,7 @@ import ( "github.com/stretchr/testify/suite" "go.uber.org/cadence/.gen/go/cadence/workflowservicetest" m "go.uber.org/cadence/.gen/go/shared" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) const ( @@ -175,14 +175,13 @@ func (s *InterfacesTestSuite) TearDownTest() { } func (s *InterfacesTestSuite) TestInterface() { - logger, _ := zap.NewDevelopment() domain := "testDomain" // Workflow execution parameters. workflowExecutionParameters := workerExecutionParameters{ TaskList: "testTaskList", MaxConcurrentActivityPollers: 4, MaxConcurrentDecisionPollers: 4, - Logger: logger, + Logger: zaptest.NewLogger(s.T()), Tracer: opentracing.NoopTracer{}, } @@ -195,12 +194,12 @@ func (s *InterfacesTestSuite) TestInterface() { } // mocks - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(domainDesc, nil).AnyTimes() - s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForActivityTaskResponse{}, nil).AnyTimes() - s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).Return(nil).AnyTimes() - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForDecisionTaskResponse{}, nil).AnyTimes() - s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() - s.service.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(&m.StartWorkflowExecutionResponse{}, nil).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(domainDesc, nil).AnyTimes() + s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForActivityTaskResponse{}, nil).AnyTimes() + s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).AnyTimes() + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForDecisionTaskResponse{}, nil).AnyTimes() + s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() + s.service.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.StartWorkflowExecutionResponse{}, nil).AnyTimes() registry := newRegistry() // Launch worker. @@ -213,7 +212,7 @@ func (s *InterfacesTestSuite) TestInterface() { TaskList: "testTaskList", MaxConcurrentActivityPollers: 10, MaxConcurrentDecisionPollers: 10, - Logger: logger, + Logger: zaptest.NewLogger(s.T()), Tracer: opentracing.NoopTracer{}, } diff --git a/internal/internal_worker_test.go b/internal/internal_worker_test.go index 4308840c9..3143ca1f1 100644 --- a/internal/internal_worker_test.go +++ b/internal/internal_worker_test.go @@ -24,7 +24,6 @@ package internal import ( "context" "errors" - "fmt" "os" "reflect" "sync" @@ -128,7 +127,7 @@ func (s *internalWorkerTestSuite) testDecisionTaskHandlerHelper(params workerExe testEvents := []*shared.HistoryEvent{ createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ TaskList: &shared.TaskList{Name: common.StringPtr(taskList)}, - Input: testEncodeFunctionArgs(params.DataConverter), + Input: testEncodeFunctionArgs(s.T(), params.DataConverter), }), createTestEventDecisionTaskScheduled(2, &shared.DecisionTaskScheduledEventAttributes{}), createTestEventDecisionTaskStarted(3), @@ -177,24 +176,24 @@ func sampleWorkflowExecute(ctx Context, input []byte) (result []byte, err error) // test activity1 func testActivityByteArgs(ctx context.Context, input []byte) ([]byte, error) { - fmt.Println("Executing Activity1") + GetActivityLogger(ctx).Info("Executing Activity1") return nil, nil } // test testActivityMultipleArgs -func testActivityMultipleArgs(context.Context, int, []string, bool) ([]byte, error) { - fmt.Println("Executing Activity2") +func testActivityMultipleArgs(ctx context.Context, _ int, _ []string, _ bool) ([]byte, error) { + GetActivityLogger(ctx).Info("Executing Activity2") return nil, nil } // test testActivityMultipleArgsWithStruct -func testActivityMultipleArgsWithStruct(_ context.Context, i int, s testActivityArg) ([]byte, error) { - fmt.Printf("Executing testActivityMultipleArgsWithStruct: %d, %v\n", i, s) +func testActivityMultipleArgsWithStruct(ctx context.Context, i int, s testActivityArg) ([]byte, error) { + GetActivityLogger(ctx).Sugar().Infof("Executing testActivityMultipleArgsWithStruct: %d, %v\n", i, s) return nil, nil } func (s *internalWorkerTestSuite) TestCreateWorker() { - worker := createWorkerWithThrottle(s.service, float64(500.0), nil, nil) + worker := createWorkerWithThrottle(s.T(), s.service, float64(500.0), nil, nil) err := worker.Start() require.NoError(s.T(), err) time.Sleep(time.Millisecond * 200) @@ -202,7 +201,7 @@ func (s *internalWorkerTestSuite) TestCreateWorker() { } func (s *internalWorkerTestSuite) TestCreateWorker_WithDataConverter() { - worker := createWorkerWithDataConverter(s.service) + worker := createWorkerWithDataConverter(s.T(), s.service) err := worker.Start() require.NoError(s.T(), err) time.Sleep(time.Millisecond * 200) @@ -210,7 +209,7 @@ func (s *internalWorkerTestSuite) TestCreateWorker_WithDataConverter() { } func (s *internalWorkerTestSuite) TestCreateShadowWorker() { - worker := createShadowWorker(s.service, &ShadowOptions{}) + worker := createShadowWorker(s.T(), s.service, &ShadowOptions{}) s.Nil(worker.workflowWorker) s.Nil(worker.activityWorker) s.Nil(worker.locallyDispatchedActivityWorker) @@ -222,7 +221,7 @@ func (s *internalWorkerTestSuite) TestCreateWorkerRun() { mockCtrl := gomock.NewController(s.T()) service := workflowservicetest.NewMockClient(mockCtrl) - worker := createWorker(service) + worker := createWorker(s.T(), service) var wg sync.WaitGroup wg.Add(1) go func() { @@ -238,7 +237,7 @@ func (s *internalWorkerTestSuite) TestCreateWorkerRun() { func (s *internalWorkerTestSuite) TestNoActivitiesOrWorkflows() { t := s.T() - w := createWorker(s.service) + w := createWorker(s.T(), s.service) w.registry = newRegistry() assert.Empty(t, w.registry.getRegisteredActivities()) assert.Empty(t, w.registry.getRegisteredWorkflowTypes()) @@ -261,12 +260,12 @@ func (s *internalWorkerTestSuite) TestWorkerStartFailsWithInvalidDomain() { for _, tc := range testCases { service := workflowservicetest.NewMockClient(mockCtrl) - service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, tc.domainErr).Do( + service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, tc.domainErr).Do( func(ctx context.Context, request *shared.DescribeDomainRequest, opts ...yarpc.CallOption) { // log }).Times(2) - worker := createWorker(service) + worker := createWorker(s.T(), service) if tc.isErrFatal { err := worker.Start() assert.Error(t, err, "worker.start() MUST fail when domain is invalid") @@ -298,7 +297,7 @@ func (s *internalWorkerTestSuite) TestStartShadowWorkerFailWithInvalidOptions() } for _, opt := range invalidOptions { - worker := createShadowWorker(s.service, opt) + worker := createShadowWorker(s.T(), s.service, opt) err := worker.Start() assert.Error(s.T(), err, "worker.Start() should fail given invalid shadow options") } @@ -325,19 +324,22 @@ func (m *mockPollForActivityTaskRequest) String() string { } func createWorker( + t *testing.T, service *workflowservicetest.MockClient, ) *aggregatedWorker { - return createWorkerWithThrottle(service, float64(0.0), nil, nil) + return createWorkerWithThrottle(t, service, float64(0.0), nil, nil) } func createShadowWorker( + t *testing.T, service *workflowservicetest.MockClient, shadowOptions *ShadowOptions, ) *aggregatedWorker { - return createWorkerWithThrottle(service, float64(0.0), nil, shadowOptions) + return createWorkerWithThrottle(t, service, float64(0.0), nil, shadowOptions) } func createWorkerWithThrottle( + t *testing.T, service *workflowservicetest.MockClient, activitiesPerSecond float64, dc DataConverter, @@ -352,7 +354,7 @@ func createWorkerWithThrottle( }, } // mocks - service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(domainDesc, nil).Do( + service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(domainDesc, nil).Do( func(ctx context.Context, request *shared.DescribeDomainRequest, opts ...yarpc.CallOption) { // log }).AnyTimes() @@ -363,18 +365,19 @@ func createWorkerWithThrottle( expectedActivitiesPerSecond = defaultTaskListActivitiesPerSecond } service.EXPECT().PollForActivityTask( - gomock.Any(), ofPollForActivityTaskRequest(expectedActivitiesPerSecond), callOptions..., + gomock.Any(), ofPollForActivityTaskRequest(expectedActivitiesPerSecond), callOptions()..., ).Return(activityTask, nil).AnyTimes() - service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).Return(nil).AnyTimes() + service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).AnyTimes() decisionTask := &shared.PollForDecisionTaskResponse{} - service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(decisionTask, nil).AnyTimes() - service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() + service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(decisionTask, nil).AnyTimes() + service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() // Configure worker options. workerOptions := WorkerOptions{} workerOptions.WorkerActivitiesPerSecond = 20 workerOptions.TaskListActivitiesPerSecond = activitiesPerSecond + workerOptions.Logger = zaptest.NewLogger(t) if dc != nil { workerOptions.DataConverter = dc } @@ -395,9 +398,10 @@ func createWorkerWithThrottle( } func createWorkerWithDataConverter( + t *testing.T, service *workflowservicetest.MockClient, ) *aggregatedWorker { - return createWorkerWithThrottle(service, float64(0.0), newTestDataConverter(), nil) + return createWorkerWithThrottle(t, service, float64(0.0), newTestDataConverter(), nil) } func (s *internalWorkerTestSuite) testCompleteActivityHelper(opt *ClientOptions) { @@ -406,15 +410,15 @@ func (s *internalWorkerTestSuite) testCompleteActivityHelper(opt *ClientOptions) domain := "testDomain" wfClient := NewClient(mockService, domain, opt) var completedRequest, canceledRequest, failedRequest interface{} - mockService.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).Return(nil).Do( + mockService.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).Do( func(ctx context.Context, request *shared.RespondActivityTaskCompletedRequest, opts ...yarpc.CallOption) { completedRequest = request }) - mockService.EXPECT().RespondActivityTaskCanceled(gomock.Any(), gomock.Any(), callOptions...).Return(nil).Do( + mockService.EXPECT().RespondActivityTaskCanceled(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).Do( func(ctx context.Context, request *shared.RespondActivityTaskCanceledRequest, opts ...yarpc.CallOption) { canceledRequest = request }) - mockService.EXPECT().RespondActivityTaskFailed(gomock.Any(), gomock.Any(), callOptions...).Return(nil).Do( + mockService.EXPECT().RespondActivityTaskFailed(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).Do( func(ctx context.Context, request *shared.RespondActivityTaskFailedRequest, opts ...yarpc.CallOption) { failedRequest = request }) @@ -444,15 +448,15 @@ func (s *internalWorkerTestSuite) TestCompleteActivityById() { domain := "testDomain" wfClient := NewClient(mockService, domain, nil) var completedRequest, canceledRequest, failedRequest interface{} - mockService.EXPECT().RespondActivityTaskCompletedByID(gomock.Any(), gomock.Any(), callOptions...).Return(nil).Do( + mockService.EXPECT().RespondActivityTaskCompletedByID(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).Do( func(ctx context.Context, request *shared.RespondActivityTaskCompletedByIDRequest, opts ...yarpc.CallOption) { completedRequest = request }) - mockService.EXPECT().RespondActivityTaskCanceledByID(gomock.Any(), gomock.Any(), callOptions...).Return(nil).Do( + mockService.EXPECT().RespondActivityTaskCanceledByID(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).Do( func(ctx context.Context, request *shared.RespondActivityTaskCanceledByIDRequest, opts ...yarpc.CallOption) { canceledRequest = request }) - mockService.EXPECT().RespondActivityTaskFailedByID(gomock.Any(), gomock.Any(), callOptions...).Return(nil).Do( + mockService.EXPECT().RespondActivityTaskFailedByID(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).Do( func(ctx context.Context, request *shared.RespondActivityTaskFailedByIDRequest, opts ...yarpc.CallOption) { failedRequest = request }) @@ -477,7 +481,7 @@ func (s *internalWorkerTestSuite) TestRecordActivityHeartbeat() { var heartbeatRequest *shared.RecordActivityTaskHeartbeatRequest cancelRequested := false heartbeatResponse := shared.RecordActivityTaskHeartbeatResponse{CancelRequested: &cancelRequested} - s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...).Return(&heartbeatResponse, nil). + s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...).Return(&heartbeatResponse, nil). Do(func(ctx context.Context, request *shared.RecordActivityTaskHeartbeatRequest, opts ...yarpc.CallOption) { heartbeatRequest = request }).Times(2) @@ -501,7 +505,7 @@ func (s *internalWorkerTestSuite) TestRecordActivityHeartbeat_WithDataConverter( detail3 := 4 encodedDetail, err := dc.ToData(detail1, detail2, detail3) require.Nil(t, err) - s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions...).Return(&heartbeatResponse, nil). + s.service.EXPECT().RecordActivityTaskHeartbeat(gomock.Any(), gomock.Any(), callOptions()...).Return(&heartbeatResponse, nil). Do(func(ctx context.Context, request *shared.RecordActivityTaskHeartbeatRequest, opts ...yarpc.CallOption) { heartbeatRequest = request require.Equal(t, encodedDetail, request.Details) @@ -517,7 +521,7 @@ func (s *internalWorkerTestSuite) TestRecordActivityHeartbeatByID() { var heartbeatRequest *shared.RecordActivityTaskHeartbeatByIDRequest cancelRequested := false heartbeatResponse := shared.RecordActivityTaskHeartbeatResponse{CancelRequested: &cancelRequested} - s.service.EXPECT().RecordActivityTaskHeartbeatByID(gomock.Any(), gomock.Any(), callOptions...).Return(&heartbeatResponse, nil). + s.service.EXPECT().RecordActivityTaskHeartbeatByID(gomock.Any(), gomock.Any(), callOptions()...).Return(&heartbeatResponse, nil). Do(func(ctx context.Context, request *shared.RecordActivityTaskHeartbeatByIDRequest, opts ...yarpc.CallOption) { heartbeatRequest = request }).Times(2) @@ -728,8 +732,7 @@ func TestVariousActivitySchedulingOption(t *testing.T) { } func testVariousActivitySchedulingOption(t *testing.T, wf interface{}) { - ts := &WorkflowTestSuite{} - env := ts.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) env.RegisterWorkflow(wf) testInternalWorkerRegisterWithTestEnv(env) env.ExecuteWorkflow(wf, []byte{1, 2}) @@ -738,8 +741,7 @@ func testVariousActivitySchedulingOption(t *testing.T, wf interface{}) { } func testVariousActivitySchedulingOptionWithDataConverter(t *testing.T, wf interface{}) { - ts := &WorkflowTestSuite{} - env := ts.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) env.SetWorkerOptions(WorkerOptions{DataConverter: newTestDataConverter()}) env.RegisterWorkflow(wf) testInternalWorkerRegisterWithTestEnv(env) @@ -806,7 +808,7 @@ func testActivityErrorWithDetailsHelper(ctx context.Context, t *testing.T, dataC fn: func(arg1 int) (err error) { return NewCustomError("testReason", "testStringDetails") }} - _, e := a1.Execute(ctx, testEncodeFunctionArgs(dataConverter, 1)) + _, e := a1.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, 1)) require.Error(t, e) errWD := e.(*CustomError) require.Equal(t, "testReason", errWD.Reason()) @@ -819,7 +821,7 @@ func testActivityErrorWithDetailsHelper(ctx context.Context, t *testing.T, dataC fn: func(arg1 int) (err error) { return NewCustomError("testReason", testErrorDetails{T: "testErrorStack"}) }} - _, e = a2.Execute(ctx, testEncodeFunctionArgs(dataConverter, 1)) + _, e = a2.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, 1)) require.Error(t, e) errWD = e.(*CustomError) require.Equal(t, "testReason", errWD.Reason()) @@ -832,7 +834,7 @@ func testActivityErrorWithDetailsHelper(ctx context.Context, t *testing.T, dataC fn: func(arg1 int) (result string, err error) { return "testResult", NewCustomError("testReason", testErrorDetails{T: "testErrorStack3"}) }} - encResult, e := a3.Execute(ctx, testEncodeFunctionArgs(dataConverter, 1)) + encResult, e := a3.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, 1)) var result string err := dataConverter.FromData(encResult, &result) require.NoError(t, err) @@ -848,7 +850,7 @@ func testActivityErrorWithDetailsHelper(ctx context.Context, t *testing.T, dataC fn: func(arg1 int) (result string, err error) { return "testResult4", NewCustomError("testReason", "testMultipleString", testErrorDetails{T: "testErrorStack4"}) }} - encResult, e = a4.Execute(ctx, testEncodeFunctionArgs(dataConverter, 1)) + encResult, e = a4.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, 1)) err = dataConverter.FromData(encResult, &result) require.NoError(t, err) require.Equal(t, "testResult4", result) @@ -873,7 +875,7 @@ func testActivityCancelledErrorHelper(ctx context.Context, t *testing.T, dataCon fn: func(arg1 int) (err error) { return NewCanceledError("testCancelStringDetails") }} - _, e := a1.Execute(ctx, testEncodeFunctionArgs(dataConverter, 1)) + _, e := a1.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, 1)) require.Error(t, e) errWD := e.(*CanceledError) var strDetails string @@ -885,7 +887,7 @@ func testActivityCancelledErrorHelper(ctx context.Context, t *testing.T, dataCon fn: func(arg1 int) (err error) { return NewCanceledError(testErrorDetails{T: "testCancelErrorStack"}) }} - _, e = a2.Execute(ctx, testEncodeFunctionArgs(dataConverter, 1)) + _, e = a2.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, 1)) require.Error(t, e) errWD = e.(*CanceledError) var td testErrorDetails @@ -897,7 +899,7 @@ func testActivityCancelledErrorHelper(ctx context.Context, t *testing.T, dataCon fn: func(arg1 int) (result string, err error) { return "testResult", NewCanceledError(testErrorDetails{T: "testErrorStack3"}) }} - encResult, e := a3.Execute(ctx, testEncodeFunctionArgs(dataConverter, 1)) + encResult, e := a3.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, 1)) var r string err := dataConverter.FromData(encResult, &r) require.NoError(t, err) @@ -912,7 +914,7 @@ func testActivityCancelledErrorHelper(ctx context.Context, t *testing.T, dataCon fn: func(arg1 int) (result string, err error) { return "testResult4", NewCanceledError("testMultipleString", testErrorDetails{T: "testErrorStack4"}) }} - encResult, e = a4.Execute(ctx, testEncodeFunctionArgs(dataConverter, 1)) + encResult, e = a4.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, 1)) err = dataConverter.FromData(encResult, &r) require.NoError(t, err) require.Equal(t, "testResult4", r) @@ -935,7 +937,7 @@ func testActivityExecutionVariousTypesHelper(ctx context.Context, t *testing.T, fn: func(ctx context.Context, arg1 string) (*testWorkflowResult, error) { return &testWorkflowResult{V: 1}, nil }} - encResult, e := a1.Execute(ctx, testEncodeFunctionArgs(dataConverter, "test")) + encResult, e := a1.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, "test")) require.NoError(t, e) var r *testWorkflowResult err := dataConverter.FromData(encResult, &r) @@ -946,7 +948,7 @@ func testActivityExecutionVariousTypesHelper(ctx context.Context, t *testing.T, fn: func(ctx context.Context, arg1 *testWorkflowResult) (*testWorkflowResult, error) { return &testWorkflowResult{V: 2}, nil }} - encResult, e = a2.Execute(ctx, testEncodeFunctionArgs(dataConverter, r)) + encResult, e = a2.Execute(ctx, testEncodeFunctionArgs(t, dataConverter, r)) require.NoError(t, e) err = dataConverter.FromData(encResult, &r) require.NoError(t, err) @@ -1146,10 +1148,10 @@ func _TestThriftEncoding(t *testing.T) { */ // Encode function args -func testEncodeFunctionArgs(dataConverter DataConverter, args ...interface{}) []byte { +func testEncodeFunctionArgs(t *testing.T, dataConverter DataConverter, args ...interface{}) []byte { input, err := encodeArgs(dataConverter, args) if err != nil { - fmt.Println(err) + t.Error(err) panic("Failed to encode arguments") } return input diff --git a/internal/internal_workers_test.go b/internal/internal_workers_test.go index 2dde5d3ad..e61862fcd 100644 --- a/internal/internal_workers_test.go +++ b/internal/internal_workers_test.go @@ -36,6 +36,7 @@ import ( "go.uber.org/cadence/internal/common" "go.uber.org/yarpc" "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) // ActivityTaskHandler never returns response @@ -90,9 +91,9 @@ func (s *WorkersTestSuite) TestWorkflowWorker() { domain := "testDomain" logger, _ := zap.NewDevelopment() - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil) - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForDecisionTaskResponse{}, nil).AnyTimes() - s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil) + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForDecisionTaskResponse{}, nil).AnyTimes() + s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() ctx, cancel := context.WithCancel(context.Background()) executionParameters := workerExecutionParameters{ @@ -122,16 +123,14 @@ func (s *WorkersTestSuite) TestActivityWorkerWithLocalActivityDispatch() { func (s *WorkersTestSuite) testActivityWorker(useLocallyDispatched bool) { domain := "testDomain" - logger, _ := zap.NewDevelopment() - - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil) - s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForActivityTaskResponse{}, nil).AnyTimes() - s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).Return(nil).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil) + s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForActivityTaskResponse{}, nil).AnyTimes() + s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).AnyTimes() executionParameters := workerExecutionParameters{ TaskList: "testTaskList", MaxConcurrentActivityPollers: 5, - Logger: logger, + Logger: zaptest.NewLogger(s.T()), } overrides := &workerOverrides{activityTaskHandler: newSampleActivityTaskHandler(), useLocallyDispatchedActivityPoller: useLocallyDispatched} a := &greeterActivity{} @@ -146,7 +145,6 @@ func (s *WorkersTestSuite) testActivityWorker(useLocallyDispatched bool) { func (s *WorkersTestSuite) TestActivityWorkerStop() { domain := "testDomain" - logger, _ := zap.NewDevelopment() pats := &m.PollForActivityTaskResponse{ TaskToken: []byte("token"), @@ -166,9 +164,9 @@ func (s *WorkersTestSuite) TestActivityWorkerStop() { WorkflowDomain: common.StringPtr("domain"), } - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil) - s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions...).Return(pats, nil).AnyTimes() - s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).Return(nil).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil) + s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions()...).Return(pats, nil).AnyTimes() + s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).Return(nil).AnyTimes() stopC := make(chan struct{}) ctx, cancel := context.WithCancel(context.Background()) @@ -176,7 +174,7 @@ func (s *WorkersTestSuite) TestActivityWorkerStop() { TaskList: "testTaskList", MaxConcurrentActivityPollers: 5, ConcurrentActivityExecutionSize: 2, - Logger: logger, + Logger: zaptest.NewLogger(s.T()), UserContext: ctx, UserContextCancel: cancel, WorkerStopTimeout: time.Second * 2, @@ -206,13 +204,13 @@ func (s *WorkersTestSuite) TestActivityWorkerStop() { func (s *WorkersTestSuite) TestPollForDecisionTask_InternalServiceError() { domain := "testDomain" - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil) - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil) + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() executionParameters := workerExecutionParameters{ TaskList: "testDecisionTaskList", MaxConcurrentDecisionPollers: 5, - Logger: zap.NewNop(), + Logger: zaptest.NewLogger(s.T()), } overrides := &workerOverrides{workflowTaskHandler: newSampleWorkflowTaskHandler()} workflowWorker := newWorkflowWorkerInternal( @@ -290,7 +288,7 @@ func (s *WorkersTestSuite) TestLongRunningDecisionTask() { createTestEventDecisionTaskStarted(11), } - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() task := &m.PollForDecisionTaskResponse{ TaskToken: []byte("test-token"), WorkflowExecution: &m.WorkflowExecution{ @@ -306,11 +304,11 @@ func (s *WorkersTestSuite) TestLongRunningDecisionTask() { NextPageToken: nil, NextEventId: common.Int64Ptr(4), } - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(task, nil).Times(1) - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(task, nil).Times(1) + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() respondCounter := 0 - s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, + s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, ) (success *m.RespondDecisionTaskCompletedResponse, err error) { respondCounter++ switch respondCounter { @@ -336,7 +334,7 @@ func (s *WorkersTestSuite) TestLongRunningDecisionTask() { }).Times(2) options := WorkerOptions{ - Logger: zap.NewNop(), + Logger: zaptest.NewLogger(s.T()), DisableActivityWorker: true, Identity: "test-worker-identity", } @@ -447,7 +445,7 @@ func (s *WorkersTestSuite) TestQueryTask_WorkflowCacheEvicted() { }), } - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() task := &m.PollForDecisionTaskResponse{ TaskToken: []byte("test-token"), WorkflowExecution: &m.WorkflowExecution{ @@ -463,8 +461,8 @@ func (s *WorkersTestSuite) TestQueryTask_WorkflowCacheEvicted() { NextPageToken: nil, NextEventId: common.Int64Ptr(4), } - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(task, nil).Times(1) - s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(task, nil).Times(1) + s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, ) (success *m.RespondDecisionTaskCompletedResponse, err error) { s.Equal(1, len(request.Decisions)) s.Equal(m.DecisionTypeStartTimer, request.Decisions[0].GetDecisionType()) @@ -487,28 +485,28 @@ func (s *WorkersTestSuite) TestQueryTask_WorkflowCacheEvicted() { QueryType: common.StringPtr(queryType), }, } - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(ctx context.Context, request *m.PollForDecisionTaskRequest, opts ...yarpc.CallOption, + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(ctx context.Context, request *m.PollForDecisionTaskRequest, opts ...yarpc.CallOption, ) (success *m.PollForDecisionTaskResponse, err error) { getWorkflowCache().Delete(runID) // force remove the workflow state return queryTask, nil }).Times(1) - s.service.EXPECT().ResetStickyTaskList(gomock.Any(), gomock.Any(), callOptions...).Return(&m.ResetStickyTaskListResponse{}, nil).AnyTimes() - s.service.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&m.GetWorkflowExecutionHistoryResponse{ + s.service.EXPECT().ResetStickyTaskList(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.ResetStickyTaskListResponse{}, nil).AnyTimes() + s.service.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.GetWorkflowExecutionHistoryResponse{ History: &m.History{Events: testEvents}, // workflow has made progress, return all available events }, nil).Times(1) dc := getDefaultDataConverter() expectedResult, err := dc.ToData("waiting on timer") s.NoError(err) - s.service.EXPECT().RespondQueryTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(ctx context.Context, request *m.RespondQueryTaskCompletedRequest, opts ...yarpc.CallOption) error { + s.service.EXPECT().RespondQueryTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(ctx context.Context, request *m.RespondQueryTaskCompletedRequest, opts ...yarpc.CallOption) error { s.Equal(m.QueryTaskCompletedTypeCompleted, request.GetCompletedType()) s.Equal(expectedResult, request.GetQueryResult()) close(doneCh) return nil }).Times(1) - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() options := WorkerOptions{ - Logger: zap.NewNop(), + Logger: zaptest.NewLogger(s.T()), DisableActivityWorker: true, Identity: "test-worker-identity", DataConverter: dc, @@ -605,7 +603,7 @@ func (s *WorkersTestSuite) TestMultipleLocalActivities() { createTestEventDecisionTaskStarted(11), } - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() task := &m.PollForDecisionTaskResponse{ TaskToken: []byte("test-token"), WorkflowExecution: &m.WorkflowExecution{ @@ -621,11 +619,11 @@ func (s *WorkersTestSuite) TestMultipleLocalActivities() { NextPageToken: nil, NextEventId: common.Int64Ptr(4), } - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(task, nil).Times(1) - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(task, nil).Times(1) + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() respondCounter := 0 - s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, + s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, ) (success *m.RespondDecisionTaskCompletedResponse, err error) { respondCounter++ switch respondCounter { @@ -643,7 +641,7 @@ func (s *WorkersTestSuite) TestMultipleLocalActivities() { }).Times(1) options := WorkerOptions{ - Logger: zap.NewNop(), + Logger: zaptest.NewLogger(s.T()), DisableActivityWorker: true, Identity: "test-worker-identity", } @@ -719,7 +717,7 @@ func (s *WorkersTestSuite) TestLocallyDispatchedActivity() { createTestEventDecisionTaskStarted(3), } - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() task := &m.PollForDecisionTaskResponse{ TaskToken: []byte("test-token"), WorkflowExecution: &m.WorkflowExecution{ @@ -735,10 +733,10 @@ func (s *WorkersTestSuite) TestLocallyDispatchedActivity() { NextPageToken: nil, NextEventId: common.Int64Ptr(4), } - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(task, nil).Times(1) - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() - s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() - s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(task, nil).Times(1) + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() + s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() + s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, ) (success *m.RespondDecisionTaskCompletedResponse, err error) { s.Equal(1, len(request.Decisions)) activitiesToDispatchLocally := make(map[string]*m.ActivityLocalDispatchInfo) @@ -753,7 +751,7 @@ func (s *WorkersTestSuite) TestLocallyDispatchedActivity() { TaskToken: []byte("test-token")} return &m.RespondDecisionTaskCompletedResponse{ActivitiesToDispatchLocally: activitiesToDispatchLocally}, nil }).Times(1) - s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(ctx context.Context, request *m.RespondActivityTaskCompletedRequest, opts ...yarpc.CallOption, + s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(ctx context.Context, request *m.RespondActivityTaskCompletedRequest, opts ...yarpc.CallOption, ) error { defer close(doneCh) isActivityResponseCompleted = true @@ -761,7 +759,7 @@ func (s *WorkersTestSuite) TestLocallyDispatchedActivity() { }).Times(1) options := WorkerOptions{ - Logger: zap.NewNop(), + Logger: zaptest.NewLogger(s.T()), Identity: "test-worker-identity", } worker := newAggregatedWorker(s.service, domain, taskList, options) @@ -828,11 +826,11 @@ func (s *WorkersTestSuite) TestMultipleLocallyDispatchedActivity() { } options := WorkerOptions{ - Logger: zap.NewNop(), + Logger: zaptest.NewLogger(s.T()), Identity: "test-worker-identity", } - s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() + s.service.EXPECT().DescribeDomain(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() task := &m.PollForDecisionTaskResponse{ TaskToken: []byte("test-token"), WorkflowExecution: &m.WorkflowExecution{ @@ -848,10 +846,10 @@ func (s *WorkersTestSuite) TestMultipleLocallyDispatchedActivity() { NextPageToken: nil, NextEventId: common.Int64Ptr(4), } - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(task, nil).Times(1) - s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() - s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions...).Return(nil, nil).AnyTimes() - s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(task, nil).Times(1) + s.service.EXPECT().PollForDecisionTask(gomock.Any(), gomock.Any(), callOptions()...).Return(&m.PollForDecisionTaskResponse{}, &m.InternalServiceError{}).AnyTimes() + s.service.EXPECT().PollForActivityTask(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, nil).AnyTimes() + s.service.EXPECT().RespondDecisionTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(ctx context.Context, request *m.RespondDecisionTaskCompletedRequest, opts ...yarpc.CallOption, ) (success *m.RespondDecisionTaskCompletedResponse, err error) { s.Equal(int(activityCount), len(request.Decisions)) activitiesToDispatchLocally := make(map[string]*m.ActivityLocalDispatchInfo) @@ -868,7 +866,7 @@ func (s *WorkersTestSuite) TestMultipleLocallyDispatchedActivity() { return &m.RespondDecisionTaskCompletedResponse{ActivitiesToDispatchLocally: activitiesToDispatchLocally}, nil }).Times(1) var activityResponseCompletedCount uint32 = 0 - s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(ctx context.Context, request *m.RespondActivityTaskCompletedRequest, opts ...yarpc.CallOption, + s.service.EXPECT().RespondActivityTaskCompleted(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(ctx context.Context, request *m.RespondActivityTaskCompletedRequest, opts ...yarpc.CallOption, ) error { defer func() { if atomic.LoadUint32(&activityResponseCompletedCount) == activityCount { diff --git a/internal/internal_workflow_client_test.go b/internal/internal_workflow_client_test.go index a285cbe46..23e3a0d3b 100644 --- a/internal/internal_workflow_client_test.go +++ b/internal/internal_workflow_client_test.go @@ -340,7 +340,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_Success() { createResponse := &shared.StartWorkflowExecutionResponse{ RunId: common.StringPtr(runID), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(createResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(createResponse, nil).Times(1) filterType := shared.HistoryEventFilterTypeCloseEvent eventType := shared.EventTypeWorkflowExecutionCompleted @@ -360,7 +360,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_Success() { }, NextPageToken: nil, } - s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions...).Return(getResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions()...).Return(getResponse, nil).Times(1) workflowRun, err := s.workflowClient.ExecuteWorkflow( context.Background(), @@ -385,7 +385,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_RawHistory_Success() { createResponse := &shared.StartWorkflowExecutionResponse{ RunId: common.StringPtr(runID), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(createResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(createResponse, nil).Times(1) filterType := shared.HistoryEventFilterTypeCloseEvent eventType := shared.EventTypeWorkflowExecutionCompleted @@ -408,7 +408,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_RawHistory_Success() { }, NextPageToken: nil, } - s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions...).Return(getResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions()...).Return(getResponse, nil).Times(1) workflowRun, err := s.workflowClient.ExecuteWorkflow( context.Background(), @@ -435,7 +435,7 @@ func (s *workflowRunSuite) TestExecuteWorkflowWorkflowExecutionAlreadyStartedErr Message: common.StringPtr("Already Started"), StartRequestId: common.StringPtr(uuid.NewRandom().String()), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...). + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...). Return(nil, alreadyStartedErr).Times(1) eventType := shared.EventTypeWorkflowExecutionCompleted @@ -454,7 +454,7 @@ func (s *workflowRunSuite) TestExecuteWorkflowWorkflowExecutionAlreadyStartedErr }, NextPageToken: nil, } - getHistory := s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...). + getHistory := s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...). Return(getResponse, nil).Times(1) getHistory.Do(func(ctx interface{}, getRequest *shared.GetWorkflowExecutionHistoryRequest, opt1 interface{}, opt2 interface{}, opt3 interface{}, opt4 interface{}) { workflowID := getRequest.Execution.WorkflowId @@ -487,7 +487,7 @@ func (s *workflowRunSuite) TestExecuteWorkflowWorkflowExecutionAlreadyStartedErr Message: common.StringPtr("Already Started"), StartRequestId: common.StringPtr(uuid.NewRandom().String()), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...). + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...). Return(nil, alreadyStartedErr).Times(1) eventType := shared.EventTypeWorkflowExecutionCompleted @@ -510,7 +510,7 @@ func (s *workflowRunSuite) TestExecuteWorkflowWorkflowExecutionAlreadyStartedErr }, NextPageToken: nil, } - getHistory := s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...). + getHistory := s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...). Return(getResponse, nil).Times(1) getHistory.Do(func(ctx interface{}, getRequest *shared.GetWorkflowExecutionHistoryRequest, opt1 interface{}, opt2 interface{}, opt3 interface{}, opt4 interface{}) { workflowID := getRequest.Execution.WorkflowId @@ -543,7 +543,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoIdInOptions() { createResponse := &shared.StartWorkflowExecutionResponse{ RunId: common.StringPtr(runID), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(createResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(createResponse, nil).Times(1) eventType := shared.EventTypeWorkflowExecutionCompleted workflowResult := time.Hour * 59 @@ -562,7 +562,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoIdInOptions() { NextPageToken: nil, } var wid *string - getHistory := s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(getResponse, nil).Times(1) + getHistory := s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(getResponse, nil).Times(1) getHistory.Do(func(ctx interface{}, getRequest *shared.GetWorkflowExecutionHistoryRequest, opt1 interface{}, opt2 interface{}, opt3 interface{}, opt4 interface{}) { wid = getRequest.Execution.WorkflowId s.NotNil(wid) @@ -593,7 +593,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoIdInOptions_RawHistory() { createResponse := &shared.StartWorkflowExecutionResponse{ RunId: common.StringPtr(runID), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(createResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(createResponse, nil).Times(1) eventType := shared.EventTypeWorkflowExecutionCompleted workflowResult := time.Hour * 59 @@ -615,7 +615,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoIdInOptions_RawHistory() { NextPageToken: nil, } var wid *string - getHistory := s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(getResponse, nil).Times(1) + getHistory := s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(getResponse, nil).Times(1) getHistory.Do(func(ctx interface{}, getRequest *shared.GetWorkflowExecutionHistoryRequest, opt1 interface{}, opt2 interface{}, opt3 interface{}, opt4 interface{}) { wid = getRequest.Execution.WorkflowId s.NotNil(wid) @@ -644,7 +644,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_Cancelled() { createResponse := &shared.StartWorkflowExecutionResponse{ RunId: common.StringPtr(runID), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(createResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(createResponse, nil).Times(1) filterType := shared.HistoryEventFilterTypeCloseEvent eventType := shared.EventTypeWorkflowExecutionCanceled @@ -664,7 +664,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_Cancelled() { }, NextPageToken: nil, } - s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions...).Return(getResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions()...).Return(getResponse, nil).Times(1) workflowRun, err := s.workflowClient.ExecuteWorkflow( context.Background(), @@ -691,7 +691,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_Failed() { createResponse := &shared.StartWorkflowExecutionResponse{ RunId: common.StringPtr(runID), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(createResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(createResponse, nil).Times(1) filterType := shared.HistoryEventFilterTypeCloseEvent eventType := shared.EventTypeWorkflowExecutionFailed @@ -714,7 +714,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_Failed() { }, NextPageToken: nil, } - s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions...).Return(getResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions()...).Return(getResponse, nil).Times(1) workflowRun, err := s.workflowClient.ExecuteWorkflow( context.Background(), @@ -739,7 +739,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_Terminated() { createResponse := &shared.StartWorkflowExecutionResponse{ RunId: common.StringPtr(runID), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(createResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(createResponse, nil).Times(1) filterType := shared.HistoryEventFilterTypeCloseEvent eventType := shared.EventTypeWorkflowExecutionTerminated @@ -755,7 +755,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_Terminated() { }, NextPageToken: nil, } - s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions...).Return(getResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions()...).Return(getResponse, nil).Times(1) workflowRun, err := s.workflowClient.ExecuteWorkflow( context.Background(), @@ -780,7 +780,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_TimedOut() { createResponse := &shared.StartWorkflowExecutionResponse{ RunId: common.StringPtr(runID), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(createResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(createResponse, nil).Times(1) filterType := shared.HistoryEventFilterTypeCloseEvent eventType := shared.EventTypeWorkflowExecutionTimedOut @@ -799,7 +799,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_TimedOut() { }, NextPageToken: nil, } - s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions...).Return(getResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions()...).Return(getResponse, nil).Times(1) workflowRun, err := s.workflowClient.ExecuteWorkflow( context.Background(), @@ -827,7 +827,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_ContinueAsNew() { createResponse := &shared.StartWorkflowExecutionResponse{ RunId: common.StringPtr(runID), } - s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(createResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(createResponse, nil).Times(1) newRunID := "some other random run ID" filterType := shared.HistoryEventFilterTypeCloseEvent @@ -846,7 +846,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_ContinueAsNew() { }, NextPageToken: nil, } - s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest1, callOptions...).Return(getResponse1, nil).Times(1) + s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest1, callOptions()...).Return(getResponse1, nil).Times(1) workflowResult := time.Hour * 59 encodedResult, _ := encodeArg(getDefaultDataConverter(), workflowResult) @@ -866,7 +866,7 @@ func (s *workflowRunSuite) TestExecuteWorkflow_NoDup_ContinueAsNew() { }, NextPageToken: nil, } - s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest2, callOptions...).Return(getResponse2, nil).Times(1) + s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest2, callOptions()...).Return(getResponse2, nil).Times(1) workflowRun, err := s.workflowClient.ExecuteWorkflow( context.Background(), @@ -906,7 +906,7 @@ func (s *workflowRunSuite) TestGetWorkflow() { }, NextPageToken: nil, } - s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions...).Return(getResponse, nil).Times(1) + s.workflowServiceClient.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), getRequest, callOptions()...).Return(getResponse, nil).Times(1) workflowID := workflowID runID := runID diff --git a/internal/internal_workflow_test.go b/internal/internal_workflow_test.go index fb1efbab4..d657ad990 100644 --- a/internal/internal_workflow_test.go +++ b/internal/internal_workflow_test.go @@ -32,7 +32,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" "go.uber.org/cadence/internal/common/metrics" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) type WorkflowUnitTest struct { @@ -48,6 +48,9 @@ func (s *WorkflowUnitTest) SetupSuite() { HeartbeatTimeout: 20 * time.Second, } } +func (s *WorkflowUnitTest) SetupTest() { + s.SetLogger(zaptest.NewLogger(s.T())) +} func TestWorkflowUnitTest(t *testing.T) { suite.Run(t, new(WorkflowUnitTest)) @@ -58,7 +61,7 @@ func worldWorkflow(ctx Context, input string) (result string, err error) { } func (s *WorkflowUnitTest) Test_WorldWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(worldWorkflow, "Hello") s.True(env.IsWorkflowCompleted()) s.NoError(env.GetWorkflowError()) @@ -95,7 +98,7 @@ type key int const unitTestKey key = 1 func (s *WorkflowUnitTest) Test_SingleActivityWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) ctx := context.WithValue(context.Background(), unitTestKey, s) env.SetWorkerOptions(WorkerOptions{BackgroundActivityContext: ctx}) env.RegisterActivity(helloWorldAct) @@ -165,7 +168,7 @@ func returnPanicWorkflow(ctx Context) (err error) { } func (s *WorkflowUnitTest) Test_SplitJoinActivityWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflowWithOptions(splitJoinActivityWorkflow, RegisterWorkflowOptions{Name: "splitJoinActivityWorkflow"}) env.RegisterActivityWithOptions(testAct, RegisterActivityOptions{Name: "testActivityWithOptions"}) env.OnActivity(testAct, mock.Anything).Return(func(ctx context.Context) (string, error) { @@ -199,9 +202,7 @@ func (s *WorkflowUnitTest) Test_SplitJoinActivityWorkflow() { } func TestWorkflowPanic(t *testing.T) { - ts := &WorkflowTestSuite{} - ts.SetLogger(zap.NewNop()) // this test simulate panic, use nop logger to avoid logging noise - env := ts.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) env.RegisterActivity(testAct) env.ExecuteWorkflow(splitJoinActivityWorkflow, true) require.True(t, env.IsWorkflowCompleted()) @@ -212,9 +213,7 @@ func TestWorkflowPanic(t *testing.T) { } func TestWorkflowReturnsPanic(t *testing.T) { - ts := &WorkflowTestSuite{} - ts.SetLogger(zap.NewNop()) // this test simulate panic, use nop logger to avoid logging noise - env := ts.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) env.ExecuteWorkflow(returnPanicWorkflow) require.True(t, env.IsWorkflowCompleted()) require.NotNil(t, env.GetWorkflowError()) @@ -229,7 +228,7 @@ func testClockWorkflow(ctx Context) (time.Time, error) { } func (s *WorkflowUnitTest) Test_ClockWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(testClockWorkflow) s.True(env.IsWorkflowCompleted()) s.NoError(env.GetWorkflowError()) @@ -284,8 +283,7 @@ func (w *testTimerWorkflow) Execute(ctx Context, input []byte) (result []byte, e } func TestTimerWorkflow(t *testing.T) { - ts := &WorkflowTestSuite{} - env := ts.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) w := &testTimerWorkflow{t: t} env.RegisterWorkflow(w.Execute) env.ExecuteWorkflow(w.Execute, []byte{1, 2}) @@ -335,8 +333,7 @@ func (w *testActivityCancelWorkflow) Execute(ctx Context, input []byte) (result } func TestActivityCancellation(t *testing.T) { - ts := &WorkflowTestSuite{} - env := ts.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) env.RegisterActivity(testAct) w := &testActivityCancelWorkflow{t: t} env.RegisterWorkflow(w.Execute) @@ -394,7 +391,7 @@ func greetingsWorkflow(ctx Context) (result string, err error) { } func (s *WorkflowUnitTest) Test_ExternalExampleWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterActivity(getGreetingActivity) env.RegisterActivity(getNameActivity) env.RegisterActivity(sayGreetingActivity) @@ -413,7 +410,7 @@ func continueAsNewWorkflowTest(ctx Context) error { } func (s *WorkflowUnitTest) Test_ContinueAsNewWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(continueAsNewWorkflowTest) s.True(env.IsWorkflowCompleted()) s.NotNil(env.GetWorkflowError()) @@ -432,7 +429,7 @@ func cancelWorkflowTest(ctx Context) (string, error) { } func (s *WorkflowUnitTest) Test_CancelWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterDelayedCallback(func() { env.CancelWorkflow() }, time.Hour) @@ -469,7 +466,7 @@ func cancelWorkflowAfterActivityTest(ctx Context) ([]byte, error) { } func (s *WorkflowUnitTest) Test_CancelWorkflowAfterActivity() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterDelayedCallback(func() { env.CancelWorkflow() }, time.Hour) @@ -540,7 +537,7 @@ func (s *WorkflowUnitTest) Test_SignalWorkflow() { "Sig2Value7;", "Sig3Value1;", } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) // Setup signals. for i := 0; i < 2; i++ { @@ -651,6 +648,7 @@ func (s *WorkflowUnitTest) Test_CorruptedSignalWorkflow_ShouldLogMetricsAndNotPa scope, closer, reporter := metrics.NewTaggedMetricsScope() s.SetMetricsScope(scope) env := s.NewTestWorkflowEnvironment() + env.Test(s.T()) // Setup signals. env.RegisterDelayedCallback(func() { @@ -684,6 +682,7 @@ func (s *WorkflowUnitTest) Test_CorruptedSignalWorkflow_OnSelectorRead_ShouldLog scope, closer, reporter := metrics.NewTaggedMetricsScope() s.SetMetricsScope(scope) env := s.NewTestWorkflowEnvironment() + env.Test(s.T()) // Setup signals. env.RegisterDelayedCallback(func() { @@ -717,6 +716,7 @@ func (s *WorkflowUnitTest) Test_CorruptedSignalWorkflow_ReceiveAsync_ShouldLogMe scope, closer, reporter := metrics.NewTaggedMetricsScope() s.SetMetricsScope(scope) env := s.NewTestWorkflowEnvironment() + env.Test(s.T()) env.ExecuteWorkflow(receiveAsyncCorruptSignalWorkflowTest) s.True(env.IsWorkflowCompleted()) @@ -735,7 +735,7 @@ func (s *WorkflowUnitTest) Test_CorruptedSignalWorkflow_ReceiveAsync_ShouldLogMe } func (s *WorkflowUnitTest) Test_CorruptedSignalOnClosedChannelWorkflow_ReceiveAsync_ShouldComplete() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(receiveAsyncCorruptSignalOnClosedChannelWorkflowTest) s.True(env.IsWorkflowCompleted()) @@ -747,7 +747,7 @@ func (s *WorkflowUnitTest) Test_CorruptedSignalOnClosedChannelWorkflow_ReceiveAs } func (s *WorkflowUnitTest) Test_CorruptedSignalOnClosedChannelWorkflow_Receive_ShouldComplete() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) // Setup signals. env.RegisterDelayedCallback(func() { @@ -777,7 +777,7 @@ func closeChannelTest(ctx Context) error { } func (s *WorkflowUnitTest) Test_CloseChannelWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(closeChannelTest) s.True(env.IsWorkflowCompleted()) s.NoError(env.GetWorkflowError()) @@ -809,7 +809,7 @@ func closeChannelInSelectTest(ctx Context) error { } func (s *WorkflowUnitTest) Test_CloseChannelInSelectWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(closeChannelInSelectTest) s.True(env.IsWorkflowCompleted()) s.NoError(env.GetWorkflowError()) @@ -834,7 +834,7 @@ func bufferedChanWorkflowTest(ctx Context, bufferSize int) error { func (s *WorkflowUnitTest) Test_BufferedChanWorkflow() { bufferSizeList := []int{1, 5} for _, bufferSize := range bufferSizeList { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(bufferedChanWorkflowTest, bufferSize) s.True(env.IsWorkflowCompleted()) s.NoError(env.GetWorkflowError()) @@ -885,7 +885,8 @@ func bufferedChanWithSelectorWorkflowTest(ctx Context, bufferSize int) error { func (s *WorkflowUnitTest) Test_BufferedChanWithSelectorWorkflow() { bufferSizeList := []int{1, 5} for _, bufferSize := range bufferSizeList { - env := s.NewTestWorkflowEnvironment() + bufferSize := bufferSize + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(bufferedChanWithSelectorWorkflowTest, bufferSize) s.True(env.IsWorkflowCompleted()) s.NoError(env.GetWorkflowError()) @@ -910,7 +911,7 @@ func activityOptionsWorkflow(ctx Context) (result string, err error) { // Test that activity options are correctly spawned with WithActivityOptions is called. // See https://github.com/uber-go/cadence-client/issues/372 func (s *WorkflowUnitTest) Test_ActivityOptionsWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(activityOptionsWorkflow) s.True(env.IsWorkflowCompleted()) s.NoError(env.GetWorkflowError()) @@ -935,7 +936,7 @@ func getMemoTest(ctx Context) (result string, err error) { } func (s *WorkflowUnitTest) Test_MemoWorkflow() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) memo := map[string]interface{}{ memoTestKey: memoTestVal, } @@ -1114,7 +1115,7 @@ func waitGroupNegativeCounterPanicsWorkflowTest(ctx Context) (int, error) { } func (s *WorkflowUnitTest) Test_waitGroupNegativeCounterPanicsWorkflowTest() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(waitGroupNegativeCounterPanicsWorkflowTest) env.ExecuteWorkflow(waitGroupNegativeCounterPanicsWorkflowTest) s.True(env.IsWorkflowCompleted()) @@ -1125,7 +1126,7 @@ func (s *WorkflowUnitTest) Test_waitGroupNegativeCounterPanicsWorkflowTest() { } func (s *WorkflowUnitTest) Test_WaitGroupMultipleConcurrentWaitsPanicsWorkflowTest() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(waitGroupMultipleConcurrentWaitsPanicsWorkflowTest) env.RegisterWorkflow(sleepWorkflow) env.ExecuteWorkflow(waitGroupMultipleConcurrentWaitsPanicsWorkflowTest) @@ -1137,7 +1138,7 @@ func (s *WorkflowUnitTest) Test_WaitGroupMultipleConcurrentWaitsPanicsWorkflowTe } func (s *WorkflowUnitTest) Test_WaitGroupMultipleWaitsWorkflowTest() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(waitGroupMultipleWaitsWorkflowTest) env.RegisterWorkflow(sleepWorkflow) env.ExecuteWorkflow(waitGroupMultipleWaitsWorkflowTest) @@ -1150,7 +1151,7 @@ func (s *WorkflowUnitTest) Test_WaitGroupMultipleWaitsWorkflowTest() { } func (s *WorkflowUnitTest) Test_WaitGroupWaitForMWorkflowTest() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(waitGroupWaitForMWorkflowTest) env.RegisterWorkflow(sleepWorkflow) @@ -1166,7 +1167,7 @@ func (s *WorkflowUnitTest) Test_WaitGroupWaitForMWorkflowTest() { } func (s *WorkflowUnitTest) Test_WaitGroupWorkflowTest() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(waitGroupWorkflowTest) env.RegisterWorkflow(sleepWorkflow) @@ -1182,7 +1183,7 @@ func (s *WorkflowUnitTest) Test_WaitGroupWorkflowTest() { } func (s *WorkflowUnitTest) Test_StaleGoroutinesAreShutDown() { - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) deferred := make(chan struct{}) after := make(chan struct{}) wf := func(ctx Context) error { @@ -1207,14 +1208,18 @@ func (s *WorkflowUnitTest) Test_StaleGoroutinesAreShutDown() { maxWait := time.NewTimer(time.Second) defer maxWait.Stop() select { - case <-deferred: s.T().Logf("deferred callback executed after %v", time.Now().Sub(started)) - case <-maxWait.C: s.Fail("deferred func should have been called within 1 second") + case <-deferred: + s.T().Logf("deferred callback executed after %v", time.Now().Sub(started)) + case <-maxWait.C: + s.Fail("deferred func should have been called within 1 second") } // if deferred code has run, this has already occurred-or-not. // if it timed out waiting for the deferred code, it has waited long enough, and this is mostly a curiosity. select { - case <-after: s.Fail("code after sleep should not have run") - default: s.T().Log("code after sleep correctly not executed") + case <-after: + s.Fail("code after sleep should not have run") + default: + s.T().Log("code after sleep correctly not executed") } } diff --git a/internal/internal_workflow_testsuite_test.go b/internal/internal_workflow_testsuite_test.go index 072b9bbca..aff4f55e2 100644 --- a/internal/internal_workflow_testsuite_test.go +++ b/internal/internal_workflow_testsuite_test.go @@ -36,6 +36,7 @@ import ( "go.uber.org/cadence/.gen/go/shared" "go.uber.org/cadence/internal/common" "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) type WorkflowTestSuiteUnitTest struct { @@ -62,6 +63,10 @@ func (s *WorkflowTestSuiteUnitTest) SetupSuite() { s.ctxProps = []ContextPropagator{NewStringMapPropagator([]string{"test"})} } +func (s *WorkflowTestSuiteUnitTest) SetupTest() { + s.SetLogger(zaptest.NewLogger(s.T())) +} + func TestUnitTestSuite(t *testing.T) { suite.Run(t, new(WorkflowTestSuiteUnitTest)) } diff --git a/internal/session.go b/internal/session.go index 7f6e7701c..5032f1d11 100644 --- a/internal/session.go +++ b/internal/session.go @@ -553,7 +553,7 @@ func (env *sessionEnvironmentImpl) SignalCreationResponse(ctx context.Context, s activityEnv.workflowExecution.RunID, sessionID, signalInput, - ) + ) } func (env *sessionEnvironmentImpl) getCreationResponse() *sessionCreationResponse { diff --git a/internal/session_test.go b/internal/session_test.go index c2dde2147..44817da6d 100644 --- a/internal/session_test.go +++ b/internal/session_test.go @@ -79,7 +79,7 @@ func (s *SessionTestSuite) TestCreationCompletion() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.OnActivity(sessionCreationActivityName, mock.Anything, mock.Anything).Return(sessionCreationActivity).Once() env.OnActivity(sessionCompletionActivityName, mock.Anything, mock.Anything).Return(sessionCompletionActivity).Once() @@ -101,7 +101,7 @@ func (s *SessionTestSuite) TestCreationWithOpenSessionContext() { return err } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.ExecuteWorkflow(workflowFn) s.True(env.IsWorkflowCompleted()) @@ -131,7 +131,7 @@ func (s *SessionTestSuite) TestCreationWithClosedSessionContext() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.OnActivity(sessionCreationActivityName, mock.Anything, mock.Anything).Return(sessionCreationActivity).Once() env.OnActivity(sessionCompletionActivityName, mock.Anything, mock.Anything).Return(sessionCompletionActivity).Once() @@ -164,7 +164,7 @@ func (s *SessionTestSuite) TestCreationWithFailedSessionContext() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.OnActivity(sessionCreationActivityName, mock.Anything, mock.Anything).Return(sessionCreationActivity).Once() env.OnActivity(sessionCompletionActivityName, mock.Anything, mock.Anything).Return(sessionCompletionActivity).Once() @@ -186,7 +186,7 @@ func (s *SessionTestSuite) TestCompletionWithClosedSessionContext() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.ExecuteWorkflow(workflowFn) @@ -206,7 +206,7 @@ func (s *SessionTestSuite) TestCompletionWithFailedSessionContext() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.ExecuteWorkflow(workflowFn) @@ -248,7 +248,7 @@ func (s *SessionTestSuite) TestGetSessionInfo() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.ExecuteWorkflow(workflowFn) @@ -278,7 +278,7 @@ func (s *SessionTestSuite) TestRecreation() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.OnActivity(sessionCreationActivityName, mock.Anything, mock.Anything).Return(sessionCreationActivity).Once() env.OnActivity(sessionCompletionActivityName, mock.Anything, mock.Anything).Return(sessionCompletionActivity).Once() @@ -306,7 +306,7 @@ func (s *SessionTestSuite) TestMaxConcurrentSession_CreationOnly() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.SetWorkerOptions(WorkerOptions{ MaxConcurrentSessionExecutionSize: maxConcurrentSessionExecutionSize, @@ -348,7 +348,7 @@ func (s *SessionTestSuite) TestMaxConcurrentSession_WithRecreation() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.SetWorkerOptions(WorkerOptions{ MaxConcurrentSessionExecutionSize: maxConcurrentSessionExecutionSize, @@ -385,7 +385,7 @@ func (s *SessionTestSuite) TestSessionTaskList() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterActivity(testSessionActivity) var taskListUsed []string @@ -439,7 +439,7 @@ func (s *SessionTestSuite) TestSessionRecreationTaskList() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterActivity(testSessionActivity) var taskListUsed []string @@ -475,7 +475,7 @@ func (s *SessionTestSuite) TestExecuteActivityInFailedSession() { return ExecuteActivity(sessionCtx, testSessionActivity, "a random name").Get(sessionCtx, nil) } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.ExecuteWorkflow(workflowFn) @@ -500,7 +500,7 @@ func (s *SessionTestSuite) TestExecuteActivityInClosedSession() { return ExecuteActivity(sessionCtx, testSessionActivity, "some random message").Get(sessionCtx, nil) } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.RegisterActivity(testSessionActivity) var taskListUsed string @@ -557,7 +557,7 @@ func (s *SessionTestSuite) TestCompletionFailed() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.OnActivity(sessionCreationActivityName, mock.Anything, mock.Anything).Return(sessionCreationActivity).Once() env.OnActivity(sessionCompletionActivityName, mock.Anything, mock.Anything).Return(errors.New("some random error")).Once() @@ -584,7 +584,7 @@ func (s *SessionTestSuite) TestUserTimerWithinSession() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterWorkflow(workflowFn) env.ExecuteWorkflow(workflowFn) @@ -621,7 +621,7 @@ func (s *SessionTestSuite) TestActivityRetryWithinSession() { return nil } - env := s.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(s.T()) env.RegisterActivity(testSessionActivity) env.OnActivity(testSessionActivity, mock.Anything, mock.Anything).Return("", errors.New("some random error")) env.ExecuteWorkflow(workflowFn) diff --git a/internal/test_helpers_test.go b/internal/test_helpers_test.go new file mode 100644 index 000000000..0c9d2bca1 --- /dev/null +++ b/internal/test_helpers_test.go @@ -0,0 +1,53 @@ +// Copyright (c) 2017-2021 Uber Technologies Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package internal + +import ( + "testing" + + "github.com/golang/mock/gomock" + "go.uber.org/zap/zaptest" +) + +// A collection of cross-test helpers. +// When a function is not intended to be used outside a file / suite, consider an instance method or variable instead. + +// Creates a new workflow environment with the correct logger / testing.T configured. +func newTestWorkflowEnv(t *testing.T) *TestWorkflowEnvironment { + s := WorkflowTestSuite{} + s.SetLogger(zaptest.NewLogger(t)) + // tally is not set since metrics are not noisy by default, and the test-instance + // is largely useless without access to the instance for snapshots. + env := s.NewTestWorkflowEnvironment() + env.Test(t) + return env +} + +// this is the mock for yarpcCallOptions, as gomock requires the num of arguments to be the same. +// see getYarpcCallOptions for the default case. +func callOptions() []interface{} { + return []interface{}{ + gomock.Any(), // library version + gomock.Any(), // feature version + gomock.Any(), // client name + gomock.Any(), // feature flags + } +} diff --git a/internal/workflow.go b/internal/workflow.go index dff07e3f4..dce451e5f 100644 --- a/internal/workflow.go +++ b/internal/workflow.go @@ -1073,7 +1073,7 @@ func getWorkflowHeader(ctx Context, ctxProps []ContextPropagator) *s.Header { // WorkflowInfo information about currently executing workflow type WorkflowInfo struct { WorkflowExecution WorkflowExecution - OriginalRunId string // The original runID before resetting. Using it instead of current runID can make workflow decision determinstic after reset + OriginalRunId string // The original runID before resetting. Using it instead of current runID can make workflow decision determinstic after reset WorkflowType WorkflowType TaskListName string ExecutionStartToCloseTimeoutSeconds int32 @@ -1088,7 +1088,7 @@ type WorkflowInfo struct { Memo *s.Memo // Value can be decoded using data converter (DefaultDataConverter, or custom one if set). SearchAttributes *s.SearchAttributes // Value can be decoded using DefaultDataConverter. BinaryChecksum *string // The identifier(generated by md5sum by default) of worker code that is making the current decision(can be used for auto-reset feature) - DecisionStartedEventID int64 // the eventID of DecisionStarted that is making the current decision(can be used for reset API) + DecisionStartedEventID int64 // the eventID of DecisionStarted that is making the current decision(can be used for reset API) RetryPolicy *s.RetryPolicy } @@ -1103,7 +1103,7 @@ func (wInfo *WorkflowInfo) GetBinaryChecksum() string { } // GetDecisionCompletedEventID returns the eventID of DecisionStartedEvent that is making the current decision(can be used for reset API: decisionFinishEventID = DecisionStartedEventID + 1) -func (wInfo *WorkflowInfo) GetDecisionStartedEventID() int64 { +func (wInfo *WorkflowInfo) GetDecisionStartedEventID() int64 { return wInfo.DecisionStartedEventID } diff --git a/internal/workflow_replayer_test.go b/internal/workflow_replayer_test.go index 569849537..3ab1dad62 100644 --- a/internal/workflow_replayer_test.go +++ b/internal/workflow_replayer_test.go @@ -69,12 +69,12 @@ func (s *workflowReplayerSuite) SetupTest() { } func (s *workflowReplayerSuite) TestReplayWorkflowHistory_Full() { - err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowFullHistory()) + err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowFullHistory(s.T())) s.NoError(err) } func (s *workflowReplayerSuite) TestReplayWorkflowHistory_Full_ResultMisMatch() { - fullHistory := getTestReplayWorkflowFullHistory() + fullHistory := getTestReplayWorkflowFullHistory(s.T()) completedEvent := fullHistory.Events[len(fullHistory.Events)-1] s.Equal(shared.EventTypeWorkflowExecutionCompleted, completedEvent.GetEventType()) completedEvent.WorkflowExecutionCompletedEventAttributes.Result = []byte("some random result") @@ -84,7 +84,7 @@ func (s *workflowReplayerSuite) TestReplayWorkflowHistory_Full_ResultMisMatch() } func (s *workflowReplayerSuite) TestReplayWorkflowHistory_Full_ContinueAsNew() { - fullHistory := getTestReplayWorkflowFullHistory() + fullHistory := getTestReplayWorkflowFullHistory(s.T()) completedEventIdx := len(fullHistory.Events) - 1 s.Equal(shared.EventTypeWorkflowExecutionCompleted, fullHistory.Events[completedEventIdx].GetEventType()) fullHistory.Events[completedEventIdx] = createTestEventWorkflowExecutionContinuedAsNew(int64(completedEventIdx+1), nil) @@ -94,32 +94,32 @@ func (s *workflowReplayerSuite) TestReplayWorkflowHistory_Full_ContinueAsNew() { } func (s *workflowReplayerSuite) TestReplayWorkflowHistory_Partial_WithDecisionEvents() { - err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowPartialHistoryWithDecisionEvents()) + err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowPartialHistoryWithDecisionEvents(s.T())) s.NoError(err) } func (s *workflowReplayerSuite) TestReplayWorkflowHistory_Partial_NoDecisionEvents() { - err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowPartialHistoryNoDecisionEvents()) + err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowPartialHistoryNoDecisionEvents(s.T())) s.NoError(err) } func (s *workflowReplayerSuite) TestReplayWorkflowHistory_LocalActivity() { - err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowLocalActivityHistory()) + err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowLocalActivityHistory(s.T())) s.NoError(err) } func (s *workflowReplayerSuite) TestReplayWorkflowHistory_LocalActivity_Result_Mismatch() { - err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowLocalActivityResultMismatchHistory()) + err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowLocalActivityResultMismatchHistory(s.T())) s.Error(err) } func (s *workflowReplayerSuite) TestReplayWorkflowHistory_LocalActivity_Activity_Type_Mismatch() { - err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowLocalActivityTypeMismatchHistory()) + err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowLocalActivityTypeMismatchHistory(s.T())) s.Error(err) } func (s *workflowReplayerSuite) TestReplayWorkflowHistory_ContextPropagator() { - err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowContextPropagatorHistory()) + err := s.replayer.ReplayWorkflowHistory(s.logger, getTestReplayWorkflowContextPropagatorHistory(s.T())) s.NoError(err) } @@ -292,13 +292,13 @@ func (w localActivitiesCallingOptionsWorkflow) Execute(ctx Context, input []byte return []byte("Done"), nil } -func getTestReplayWorkflowFullHistory() *shared.History { +func getTestReplayWorkflowFullHistory(t *testing.T) *shared.History { return &shared.History{ Events: []*shared.HistoryEvent{ createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ WorkflowType: &shared.WorkflowType{Name: common.StringPtr("go.uber.org/cadence/internal.testReplayWorkflow")}, TaskList: &shared.TaskList{Name: common.StringPtr(testTaskList)}, - Input: testEncodeFunctionArgs(getDefaultDataConverter()), + Input: testEncodeFunctionArgs(t, getDefaultDataConverter()), }), createTestEventDecisionTaskScheduled(2, &shared.DecisionTaskScheduledEventAttributes{}), createTestEventDecisionTaskStarted(3), @@ -328,13 +328,13 @@ func getTestReplayWorkflowFullHistory() *shared.History { } } -func getTestReplayWorkflowPartialHistoryWithDecisionEvents() *shared.History { +func getTestReplayWorkflowPartialHistoryWithDecisionEvents(t *testing.T) *shared.History { return &shared.History{ Events: []*shared.HistoryEvent{ createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ WorkflowType: &shared.WorkflowType{Name: common.StringPtr("go.uber.org/cadence/internal.testReplayWorkflow")}, TaskList: &shared.TaskList{Name: common.StringPtr(testTaskList)}, - Input: testEncodeFunctionArgs(getDefaultDataConverter()), + Input: testEncodeFunctionArgs(t, getDefaultDataConverter()), }), createTestEventDecisionTaskScheduled(2, &shared.DecisionTaskScheduledEventAttributes{}), createTestEventDecisionTaskStarted(3), @@ -348,13 +348,13 @@ func getTestReplayWorkflowPartialHistoryWithDecisionEvents() *shared.History { } } -func getTestReplayWorkflowPartialHistoryNoDecisionEvents() *shared.History { +func getTestReplayWorkflowPartialHistoryNoDecisionEvents(t *testing.T) *shared.History { return &shared.History{ Events: []*shared.HistoryEvent{ createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ WorkflowType: &shared.WorkflowType{Name: common.StringPtr("go.uber.org/cadence/internal.testReplayWorkflow")}, TaskList: &shared.TaskList{Name: common.StringPtr(testTaskList)}, - Input: testEncodeFunctionArgs(getDefaultDataConverter()), + Input: testEncodeFunctionArgs(t, getDefaultDataConverter()), }), createTestEventDecisionTaskScheduled(2, &shared.DecisionTaskScheduledEventAttributes{}), createTestEventDecisionTaskStarted(3), @@ -365,13 +365,13 @@ func getTestReplayWorkflowPartialHistoryNoDecisionEvents() *shared.History { } } -func getTestReplayWorkflowMismatchHistory() *shared.History { +func getTestReplayWorkflowMismatchHistory(t *testing.T) *shared.History { return &shared.History{ Events: []*shared.HistoryEvent{ createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ WorkflowType: &shared.WorkflowType{Name: common.StringPtr("go.uber.org/cadence/internal.testReplayWorkflow")}, TaskList: &shared.TaskList{Name: common.StringPtr("taskList")}, - Input: testEncodeFunctionArgs(getDefaultDataConverter()), + Input: testEncodeFunctionArgs(t, getDefaultDataConverter()), }), createTestEventDecisionTaskScheduled(2, &shared.DecisionTaskScheduledEventAttributes{}), createTestEventDecisionTaskStarted(3), @@ -385,13 +385,13 @@ func getTestReplayWorkflowMismatchHistory() *shared.History { } } -func getTestReplayWorkflowLocalActivityHistory() *shared.History { +func getTestReplayWorkflowLocalActivityHistory(t *testing.T) *shared.History { return &shared.History{ Events: []*shared.HistoryEvent{ createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ WorkflowType: &shared.WorkflowType{Name: common.StringPtr("go.uber.org/cadence/internal.testReplayWorkflowLocalActivity")}, TaskList: &shared.TaskList{Name: common.StringPtr(testTaskList)}, - Input: testEncodeFunctionArgs(getDefaultDataConverter()), + Input: testEncodeFunctionArgs(t, getDefaultDataConverter()), }), createTestEventDecisionTaskScheduled(2, &shared.DecisionTaskScheduledEventAttributes{}), createTestEventDecisionTaskStarted(3), @@ -410,13 +410,13 @@ func getTestReplayWorkflowLocalActivityHistory() *shared.History { } } -func getTestReplayWorkflowLocalActivityResultMismatchHistory() *shared.History { +func getTestReplayWorkflowLocalActivityResultMismatchHistory(t *testing.T) *shared.History { return &shared.History{ Events: []*shared.HistoryEvent{ createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ WorkflowType: &shared.WorkflowType{Name: common.StringPtr("go.uber.org/cadence/internal.testReplayWorkflowLocalActivity")}, TaskList: &shared.TaskList{Name: common.StringPtr(testTaskList)}, - Input: testEncodeFunctionArgs(getDefaultDataConverter()), + Input: testEncodeFunctionArgs(t, getDefaultDataConverter()), }), createTestEventDecisionTaskScheduled(2, &shared.DecisionTaskScheduledEventAttributes{}), createTestEventDecisionTaskStarted(3), @@ -436,13 +436,13 @@ func getTestReplayWorkflowLocalActivityResultMismatchHistory() *shared.History { } } -func getTestReplayWorkflowLocalActivityTypeMismatchHistory() *shared.History { +func getTestReplayWorkflowLocalActivityTypeMismatchHistory(t *testing.T) *shared.History { return &shared.History{ Events: []*shared.HistoryEvent{ createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ WorkflowType: &shared.WorkflowType{Name: common.StringPtr("go.uber.org/cadence/internal.testReplayWorkflowLocalActivity")}, TaskList: &shared.TaskList{Name: common.StringPtr(testTaskList)}, - Input: testEncodeFunctionArgs(getDefaultDataConverter()), + Input: testEncodeFunctionArgs(t, getDefaultDataConverter()), }), createTestEventDecisionTaskScheduled(2, &shared.DecisionTaskScheduledEventAttributes{}), createTestEventDecisionTaskStarted(3), @@ -461,8 +461,8 @@ func getTestReplayWorkflowLocalActivityTypeMismatchHistory() *shared.History { } } -func getTestReplayWorkflowContextPropagatorHistory() *shared.History { - history := getTestReplayWorkflowFullHistory() +func getTestReplayWorkflowContextPropagatorHistory(t *testing.T) *shared.History { + history := getTestReplayWorkflowFullHistory(t) history.Events[0].WorkflowExecutionStartedEventAttributes.WorkflowType.Name = common.StringPtr("go.uber.org/cadence/internal.testReplayWorkflowContextPropagator") history.Events[0].WorkflowExecutionStartedEventAttributes.Header = &shared.Header{ Fields: map[string][]byte{testHeader: []byte("testValue")}, diff --git a/internal/workflow_shadower_activities_test.go b/internal/workflow_shadower_activities_test.go index 20f2e199b..bf22547c4 100644 --- a/internal/workflow_shadower_activities_test.go +++ b/internal/workflow_shadower_activities_test.go @@ -60,11 +60,12 @@ func (s *workflowShadowerActivitiesSuite) SetupTest() { s.controller = gomock.NewController(s.T()) s.mockService = workflowservicetest.NewMockClient(s.controller) + s.SetLogger(zaptest.NewLogger(s.T())) s.env = s.NewTestActivityEnvironment() s.testReplayer = NewWorkflowReplayer() s.testReplayer.RegisterWorkflow(testReplayWorkflow) - s.testWorkflowHistory = getTestReplayWorkflowFullHistory() + s.testWorkflowHistory = getTestReplayWorkflowFullHistory(s.T()) activityContext := context.Background() activityContext = context.WithValue(activityContext, serviceClientContextKey, s.mockService) @@ -87,7 +88,7 @@ func (s *workflowShadowerActivitiesSuite) TearDownTest() { func (s *workflowShadowerActivitiesSuite) TestScanWorkflowActivity_Succeed() { numExecutions := 1000 - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.ListWorkflowExecutionsResponse{ + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.ListWorkflowExecutionsResponse{ Executions: newTestWorkflowExecutions(numExecutions), NextPageToken: []byte{1, 2, 3}, }, nil).Times(1) @@ -110,7 +111,7 @@ func (s *workflowShadowerActivitiesSuite) TestScanWorkflowActivity_Succeed() { func (s *workflowShadowerActivitiesSuite) TestScanWorkflowActivity_MinResultSize() { numExecutionsPerScan := 3 - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.ListWorkflowExecutionsResponse{ + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.ListWorkflowExecutionsResponse{ Executions: newTestWorkflowExecutions(numExecutionsPerScan), NextPageToken: []byte{1, 2, 3}, }, nil).Times(int(math.Ceil(float64(minScanWorkflowResultSize) / float64(numExecutionsPerScan)))) @@ -132,7 +133,7 @@ func (s *workflowShadowerActivitiesSuite) TestScanWorkflowActivity_MinResultSize func (s *workflowShadowerActivitiesSuite) TestScanWorkflowActivity_CompletionTime() { activityTimeoutSeconds := int32(1) - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.ListWorkflowExecutionsResponse{ + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.ListWorkflowExecutionsResponse{ Executions: newTestWorkflowExecutions(1), NextPageToken: []byte{1, 2, 3}, }, nil).MaxTimes(int(time.Duration(activityTimeoutSeconds) * time.Second / scanWorkflowWaitPeriod)) @@ -160,7 +161,7 @@ func (s *workflowShadowerActivitiesSuite) TestScanWorkflowActivity_CompletionTim } func (s *workflowShadowerActivitiesSuite) TestScanWorkflowActivity_InvalidQuery() { - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(nil, &shared.BadRequestError{ + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, &shared.BadRequestError{ Message: "invalid query", }).Times(1) @@ -176,7 +177,7 @@ func (s *workflowShadowerActivitiesSuite) TestScanWorkflowActivity_InvalidQuery( func (s *workflowShadowerActivitiesSuite) TestReplayWorkflowExecutionActivity_NoPreviousProgress() { numExecutions := 10 - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ History: s.testWorkflowHistory, }, nil).Times(numExecutions) @@ -204,7 +205,7 @@ func (s *workflowShadowerActivitiesSuite) TestReplayWorkflowExecutionActivity_Wi s.env.SetHeartbeatDetails(progress) numExecutions := 10 - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ History: s.testWorkflowHistory, }, nil).Times(numExecutions - progress.NextExecutionIdx) @@ -226,20 +227,20 @@ func (s *workflowShadowerActivitiesSuite) TestReplayWorkflowExecutionActivity_Ra numSkipped := int32(0) numExecutions := 100 - mismatchWorkflowHistory := getTestReplayWorkflowMismatchHistory() + mismatchWorkflowHistory := getTestReplayWorkflowMismatchHistory(s.T()) for i := 0; i != numExecutions; i++ { switch rand.Intn(3) { case 0: numSucceed++ - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ History: s.testWorkflowHistory, }, nil).Times(1) case 1: numSkipped++ - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(nil, &shared.EntityNotExistsError{}).Times(1) + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, &shared.EntityNotExistsError{}).Times(1) case 2: numFailed++ - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ History: mismatchWorkflowHistory, }, nil).Times(1) } @@ -258,8 +259,8 @@ func (s *workflowShadowerActivitiesSuite) TestReplayWorkflowExecutionActivity_Ra } func (s *workflowShadowerActivitiesSuite) TestReplayWorkflowExecutionActivity_WorkflowNotRegistered() { - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ - History: getTestReplayWorkflowLocalActivityHistory(), // this workflow type is not registered + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + History: getTestReplayWorkflowLocalActivityHistory(s.T()), // this workflow type is not registered }, nil).Times(1) params := newTestReplayWorkflowActivityParams(5) diff --git a/internal/workflow_shadower_test.go b/internal/workflow_shadower_test.go index a408db33a..b9150e084 100644 --- a/internal/workflow_shadower_test.go +++ b/internal/workflow_shadower_test.go @@ -66,7 +66,7 @@ func (s *workflowShadowerSuite) SetupTest() { // register test workflow s.testShadower.RegisterWorkflow(testReplayWorkflow) - s.testWorkflowHistory = getTestReplayWorkflowFullHistory() + s.testWorkflowHistory = getTestReplayWorkflowFullHistory(s.T()) s.testTimestamp = time.Now() } @@ -251,11 +251,11 @@ func (s *workflowShadowerSuite) TestShadowWorkerExitCondition_ExpirationTime() { ExpirationInterval: expirationTime, } - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.ListWorkflowExecutionsResponse{ + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.ListWorkflowExecutionsResponse{ Executions: newTestWorkflowExecutions(totalWorkflows), NextPageToken: nil, }, nil).Times(1) - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn(func(...interface{}) (*shared.GetWorkflowExecutionHistoryResponse, error) { + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn(func(...interface{}) (*shared.GetWorkflowExecutionHistoryResponse, error) { s.testShadower.clock.(*clock.Mock).Add(timePerWorkflow) return &shared.GetWorkflowExecutionHistoryResponse{ History: s.testWorkflowHistory, @@ -272,11 +272,11 @@ func (s *workflowShadowerSuite) TestShadowWorkerExitCondition_MaxShadowingCount( ShadowCount: maxShadowCount, } - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.ListWorkflowExecutionsResponse{ + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.ListWorkflowExecutionsResponse{ Executions: newTestWorkflowExecutions(maxShadowCount * 2), NextPageToken: []byte{1, 2, 3}, }, nil).Times(1) - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ History: s.testWorkflowHistory, }, nil).Times(maxShadowCount) @@ -296,10 +296,10 @@ func (s *workflowShadowerSuite) TestShadowWorker_NormalMode() { if i == numScan-1 { scanResp.NextPageToken = nil } - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(scanResp, nil).Times(1) + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(scanResp, nil).Times(1) } - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ History: s.testWorkflowHistory, }, nil).Times(totalWorkflows) @@ -320,10 +320,10 @@ func (s *workflowShadowerSuite) TestShadowWorker_ContinuousMode() { scanResp := &shared.ListWorkflowExecutionsResponse{ Executions: workflowExecutions, } - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(scanResp, nil).Times(1) + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(scanResp, nil).Times(1) } - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ History: s.testWorkflowHistory, }, nil).Times(totalWorkflows) @@ -350,15 +350,15 @@ func (s *workflowShadowerSuite) TestShadowWorker_ContinuousMode() { func (s *workflowShadowerSuite) TestShadowWorker_ReplayFailed() { successfullyReplayed := 5 - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.ListWorkflowExecutionsResponse{ + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.ListWorkflowExecutionsResponse{ Executions: newTestWorkflowExecutions(successfullyReplayed * 2), NextPageToken: []byte{1, 2, 3}, }, nil).Times(1) - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ History: s.testWorkflowHistory, }, nil).Times(successfullyReplayed) - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.GetWorkflowExecutionHistoryResponse{ - History: getTestReplayWorkflowMismatchHistory(), + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.GetWorkflowExecutionHistoryResponse{ + History: getTestReplayWorkflowMismatchHistory(s.T()), }, nil).Times(1) s.Error(s.testShadower.shadowWorker()) @@ -378,7 +378,7 @@ func (s *workflowShadowerSuite) TestShadowWorker_ExpectedReplayError() { createTestEventWorkflowExecutionStarted(1, &shared.WorkflowExecutionStartedEventAttributes{ WorkflowType: &shared.WorkflowType{Name: common.StringPtr("testWorkflow")}, TaskList: &shared.TaskList{Name: common.StringPtr("taskList")}, - Input: testEncodeFunctionArgs(getDefaultDataConverter()), + Input: testEncodeFunctionArgs(s.T(), getDefaultDataConverter()), CronSchedule: common.StringPtr("* * * * *"), }), }, @@ -399,11 +399,11 @@ func (s *workflowShadowerSuite) TestShadowWorker_ExpectedReplayError() { for _, test := range testCases { s.T().Run(test.msg, func(t *testing.T) { - s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions...).Return(&shared.ListWorkflowExecutionsResponse{ + s.mockService.EXPECT().ScanWorkflowExecutions(gomock.Any(), gomock.Any(), callOptions()...).Return(&shared.ListWorkflowExecutionsResponse{ Executions: newTestWorkflowExecutions(1), NextPageToken: nil, }, nil).Times(1) - s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions...).Return(test.getHistoryResponse, test.getHistoryErr).Times(1) + s.mockService.EXPECT().GetWorkflowExecutionHistory(gomock.Any(), gomock.Any(), callOptions()...).Return(test.getHistoryResponse, test.getHistoryErr).Times(1) s.NoError(s.testShadower.shadowWorker()) }) diff --git a/internal/workflow_shadower_worker_test.go b/internal/workflow_shadower_worker_test.go index 38bf0c88d..f1ed1947a 100644 --- a/internal/workflow_shadower_worker_test.go +++ b/internal/workflow_shadower_worker_test.go @@ -33,6 +33,7 @@ import ( "go.uber.org/cadence/.gen/go/shared" "go.uber.org/cadence/internal/common" "go.uber.org/yarpc" + "go.uber.org/zap/zaptest" ) type shadowWorkerSuite struct { @@ -67,6 +68,7 @@ func (s *shadowWorkerSuite) TestNewShadowWorker() { ShadowOptions{}, workerExecutionParameters{ TaskList: testTaskList, + Logger: zaptest.NewLogger(s.T()), }, registry, ) @@ -97,6 +99,7 @@ func (s *shadowWorkerSuite) TestStartShadowWorker_Failed_InvalidShadowOption() { }, workerExecutionParameters{ TaskList: testTaskList, + Logger: zaptest.NewLogger(s.T()), }, newRegistry(), ) @@ -107,7 +110,7 @@ func (s *shadowWorkerSuite) TestStartShadowWorker_Failed_InvalidShadowOption() { func (s *shadowWorkerSuite) TestStartShadowWorker_Failed_DomainNotExist() { s.mockService.EXPECT().DescribeDomain(gomock.Any(), &shared.DescribeDomainRequest{ Name: common.StringPtr(testDomain), - }, callOptions...).Return(nil, &shared.EntityNotExistsError{}).Times(1) + }, callOptions()...).Return(nil, &shared.EntityNotExistsError{}).Times(1) shadowWorker := newShadowWorker( s.mockService, @@ -115,6 +118,7 @@ func (s *shadowWorkerSuite) TestStartShadowWorker_Failed_DomainNotExist() { ShadowOptions{}, workerExecutionParameters{ TaskList: testTaskList, + Logger: zaptest.NewLogger(s.T()), }, newRegistry(), ) @@ -125,13 +129,15 @@ func (s *shadowWorkerSuite) TestStartShadowWorker_Failed_DomainNotExist() { func (s *shadowWorkerSuite) TestStartShadowWorker_Failed_TaskListNotSpecified() { s.mockService.EXPECT().DescribeDomain(gomock.Any(), &shared.DescribeDomainRequest{ Name: common.StringPtr(testDomain), - }, callOptions...).Return(&shared.DescribeDomainResponse{}, nil).Times(1) + }, callOptions()...).Return(&shared.DescribeDomainResponse{}, nil).Times(1) shadowWorker := newShadowWorker( s.mockService, testDomain, ShadowOptions{}, - workerExecutionParameters{}, + workerExecutionParameters{ + Logger: zaptest.NewLogger(s.T()), + }, newRegistry(), ) @@ -141,11 +147,11 @@ func (s *shadowWorkerSuite) TestStartShadowWorker_Failed_TaskListNotSpecified() func (s *shadowWorkerSuite) TestStartShadowWorker_Failed_StartWorkflowError() { s.mockService.EXPECT().DescribeDomain(gomock.Any(), &shared.DescribeDomainRequest{ Name: common.StringPtr(testDomain), - }, callOptions...).Return(&shared.DescribeDomainResponse{}, nil).Times(1) + }, callOptions()...).Return(&shared.DescribeDomainResponse{}, nil).Times(1) // first return a retryable error to check if retry policy is configured - s.mockService.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(nil, &shared.ServiceBusyError{}).Times(1) + s.mockService.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, &shared.ServiceBusyError{}).Times(1) // then return a non-retryable error - s.mockService.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).Return(nil, &shared.BadRequestError{}).Times(1) + s.mockService.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).Return(nil, &shared.BadRequestError{}).Times(1) shadowWorker := newShadowWorker( s.mockService, @@ -153,6 +159,7 @@ func (s *shadowWorkerSuite) TestStartShadowWorker_Failed_StartWorkflowError() { ShadowOptions{}, workerExecutionParameters{ TaskList: testTaskList, + Logger: zaptest.NewLogger(s.T()), }, newRegistry(), ) @@ -172,11 +179,11 @@ func (s *shadowWorkerSuite) TestStartShadowWorker_Succeed() { var startRequest *shared.StartWorkflowExecutionRequest s.mockService.EXPECT().DescribeDomain(gomock.Any(), &shared.DescribeDomainRequest{ Name: common.StringPtr(testDomain), - }, callOptions...).Return(&shared.DescribeDomainResponse{}, nil).Times(1) + }, callOptions()...).Return(&shared.DescribeDomainResponse{}, nil).Times(1) s.mockService.EXPECT().DescribeDomain(gomock.Any(), &shared.DescribeDomainRequest{ Name: common.StringPtr(shadower.LocalDomainName), - }, callOptions...).Return(&shared.DescribeDomainResponse{}, nil).Times(1) - s.mockService.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions...).DoAndReturn( + }, callOptions()...).Return(&shared.DescribeDomainResponse{}, nil).Times(1) + s.mockService.EXPECT().StartWorkflowExecution(gomock.Any(), gomock.Any(), callOptions()...).DoAndReturn( func(_ context.Context, request *shared.StartWorkflowExecutionRequest, _ ...yarpc.CallOption) (*shared.StartWorkflowExecutionResponse, error) { startRequest = request return nil, &shared.WorkflowExecutionAlreadyStartedError{} @@ -195,6 +202,7 @@ func (s *shadowWorkerSuite) TestStartShadowWorker_Succeed() { }, workerExecutionParameters{ TaskList: testTaskList, + Logger: zaptest.NewLogger(s.T()), }, newRegistry(), ) diff --git a/internal/workflow_testsuite_test.go b/internal/workflow_testsuite_test.go index 3a2a8cda3..ca1123247 100644 --- a/internal/workflow_testsuite_test.go +++ b/internal/workflow_testsuite_test.go @@ -32,8 +32,7 @@ import ( func TestSetMemoOnStart(t *testing.T) { t.Parallel() - testSuite := &WorkflowTestSuite{} - env := testSuite.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) memo := map[string]interface{}{ "key": make(chan int), @@ -52,8 +51,7 @@ func TestSetMemoOnStart(t *testing.T) { func TestSetSearchAttributesOnStart(t *testing.T) { t.Parallel() - testSuite := &WorkflowTestSuite{} - env := testSuite.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) invalidSearchAttr := map[string]interface{}{ "key": make(chan int), @@ -71,8 +69,7 @@ func TestSetSearchAttributesOnStart(t *testing.T) { func TestUnregisteredActivity(t *testing.T) { t.Parallel() - testSuite := &WorkflowTestSuite{} - env := testSuite.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) workflow := func(ctx Context) error { ctx = WithActivityOptions(ctx, ActivityOptions{ ScheduleToStartTimeout: time.Minute, @@ -89,8 +86,7 @@ func TestUnregisteredActivity(t *testing.T) { } func TestNoExplicitRegistrationRequired(t *testing.T) { - testSuite := &WorkflowTestSuite{} - env := testSuite.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) activity := func(ctx context.Context, arg string) (string, error) { return arg + " World!", nil } env.RegisterActivity(activity) env.ExecuteWorkflow(func(ctx Context, arg1 string) (string, error) { @@ -114,8 +110,7 @@ func TestNoExplicitRegistrationRequired(t *testing.T) { } func TestWorkflowReturnNil(t *testing.T) { - testSuite := &WorkflowTestSuite{} - env := testSuite.NewTestWorkflowEnvironment() + env := newTestWorkflowEnv(t) var isExecuted bool testWF := func(ctx Context) error { diff --git a/mocks/Client.go b/mocks/Client.go index fbd2410e5..53c199d65 100644 --- a/mocks/Client.go +++ b/mocks/Client.go @@ -376,7 +376,7 @@ func (_m *Client) QueryWorkflowWithOptions(ctx context.Context, request *client. return r0, r1 } -func (_m *Client) ResetWorkflow(ctx context.Context, request *s.ResetWorkflowExecutionRequest) (*s.ResetWorkflowExecutionResponse, error){ +func (_m *Client) ResetWorkflow(ctx context.Context, request *s.ResetWorkflowExecutionRequest) (*s.ResetWorkflowExecutionResponse, error) { var _ca []interface{} _ca = append(_ca, ctx, request) ret := _m.Called(_ca...) diff --git a/test/integration_test.go b/test/integration_test.go index dd977d81b..c710419e5 100644 --- a/test/integration_test.go +++ b/test/integration_test.go @@ -40,7 +40,7 @@ import ( "go.uber.org/cadence/worker" "go.uber.org/cadence/workflow" "go.uber.org/goleak" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) type IntegrationTestSuite struct { @@ -144,17 +144,15 @@ func (ts *IntegrationTestSuite) SetupTest() { ts.seq++ ts.activities.clearInvoked() ts.taskListName = fmt.Sprintf("tl-%v", ts.seq) - logger, err := zap.NewDevelopment() - ts.NoError(err) ts.worker = worker.New(ts.rpcClient.Interface, domainName, ts.taskListName, worker.Options{ DisableStickyExecution: ts.config.IsStickyOff, - Logger: logger, + Logger: zaptest.NewLogger(ts.T()), ContextPropagators: []workflow.ContextPropagator{NewStringMapPropagator([]string{testContextKey})}, }) ts.tracer = newtracingInterceptorFactory() options := worker.Options{ DisableStickyExecution: ts.config.IsStickyOff, - Logger: logger, + Logger: zaptest.NewLogger(ts.T()), WorkflowInterceptorChainFactories: []interceptors.WorkflowInterceptorFactory{ts.tracer}, ContextPropagators: []workflow.ContextPropagator{NewStringMapPropagator([]string{testContextKey})}, } @@ -436,11 +434,9 @@ func (ts *IntegrationTestSuite) TestChildWFWithParentClosePolicyAbandon() { } func (ts *IntegrationTestSuite) TestActivityCancelUsingReplay() { - logger, err := zap.NewDevelopment() - ts.NoError(err) replayer := worker.NewWorkflowReplayer() replayer.RegisterWorkflowWithOptions(ts.workflows.ActivityCancelRepro, workflow.RegisterOptions{DisableAlreadyRegisteredCheck: true}) - err = replayer.ReplayPartialWorkflowHistoryFromJSONFile(logger, "fixtures/activity.cancel.sm.repro.json", 12) + err := replayer.ReplayPartialWorkflowHistoryFromJSONFile(zaptest.NewLogger(ts.T()), "fixtures/activity.cancel.sm.repro.json", 12) ts.NoError(err) } @@ -490,8 +486,8 @@ func (ts *IntegrationTestSuite) TestDomainUpdate() { name := domainName description := "test-description" err := ts.domainClient.Update(ctx, &shared.UpdateDomainRequest{ - Name: &name, - UpdatedInfo: &shared.UpdateDomainInfo{Description: &description}, + Name: &name, + UpdatedInfo: &shared.UpdateDomainInfo{Description: &description}, }) ts.NoError(err) @@ -547,6 +543,7 @@ func (ts *IntegrationTestSuite) executeWorkflowWithOption( return err } err = run.Get(ctx, retValPtr) + logger := zaptest.NewLogger(ts.T()) if ts.config.Debug { iter := ts.libClient.GetWorkflowHistory(ctx, options.ID, run.GetRunID(), false, shared.HistoryEventFilterTypeAllEvent) for iter.HasNext() { @@ -554,7 +551,7 @@ func (ts *IntegrationTestSuite) executeWorkflowWithOption( if err1 != nil { break } - fmt.Println(event.String()) + logger.Info(event.String()) } } return err diff --git a/tools.go b/tools.go index 5dd04603e..e502e2921 100644 --- a/tools.go +++ b/tools.go @@ -18,6 +18,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +//go:build tools // +build tools package cadence