From f0b9309dd287ae9863fadc0dc1bd02810aa62d56 Mon Sep 17 00:00:00 2001 From: Gaziza Yestemirova Date: Fri, 25 Oct 2024 11:37:31 +0200 Subject: [PATCH 1/2] Add tests for NoSql Visibility Store --- .../nosql/nosql_visibility_store_test.go | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) diff --git a/common/persistence/nosql/nosql_visibility_store_test.go b/common/persistence/nosql/nosql_visibility_store_test.go index 6c182770778..eab3fd991a1 100644 --- a/common/persistence/nosql/nosql_visibility_store_test.go +++ b/common/persistence/nosql/nosql_visibility_store_test.go @@ -23,13 +23,28 @@ package nosql import ( + "context" + "github.com/golang/mock/gomock" + "github.com/uber/cadence/common/definition" + "github.com/uber/cadence/common/persistence" + "github.com/uber/cadence/common/persistence/nosql/nosqlplugin" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/uber/cadence/common/log" ) +const ( + testDomainID = "test-domain-id" + testDomainName = "test-domain" + testTaskListName = "test-tasklist" + testWorkflowID = "test-workflow-id" + testRunID = "test-run-id" + testWorkflowTypeName = "test-workflow-type" +) + func TestNewNoSQLVisibilityStore(t *testing.T) { cfg := getValidShardedNoSQLConfig() @@ -37,3 +52,189 @@ func TestNewNoSQLVisibilityStore(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, store) } + +func setupNoSQLVisibilityStoreMocks(t *testing.T) (*nosqlVisibilityStore, *nosqlplugin.MockDB) { + ctrl := gomock.NewController(t) + dbMock := nosqlplugin.NewMockDB(ctrl) + + nosqlSt := nosqlStore{ + logger: log.NewNoop(), + db: dbMock, + } + + shardedNosqlStoreMock := NewMockshardedNosqlStore(ctrl) + shardedNosqlStoreMock.EXPECT(). + GetStoreShardByTaskList( + TestDomainID, + TestTaskListName, + TestTaskType). + Return(&nosqlSt, nil). + AnyTimes() + shardedNosqlStoreMock.EXPECT().GetDefaultShard().Return(nosqlStore{db: dbMock}).AnyTimes() + visibilityStore := &nosqlVisibilityStore{ + nosqlStore: shardedNosqlStoreMock.GetDefaultShard(), + sortByCloseTime: false, + } + return visibilityStore, dbMock +} + +func TestRecordWorkflowExecutionStarted(t *testing.T) { + visibilityStore, db := setupNoSQLVisibilityStoreMocks(t) + + db.EXPECT().InsertVisibility(gomock.Any(), gomock.Any(), gomock.Any()).Return(assert.AnError) + // The error _is_ a NotFoundError + db.EXPECT().IsNotFoundError(assert.AnError).Return(true) + + err := visibilityStore.RecordWorkflowExecutionStarted(context.Background(), &persistence.InternalRecordWorkflowExecutionStartedRequest{ + DomainUUID: testDomainID, + WorkflowID: testWorkflowID, + RunID: testRunID, + WorkflowTypeName: testWorkflowTypeName, + WorkflowTimeout: 20 * 60, + StartTimestamp: time.Time{}, + ExecutionTimestamp: time.Time{}, + Memo: nil, + TaskList: testTaskListName, + IsCron: false, + NumClusters: 2, + UpdateTimestamp: time.Time{}, + ShardID: 2, + }) + + assert.Error(t, err) + assert.ErrorContains(t, err, "RecordWorkflowExecutionStarted failed. Error:") +} + +func TestRecordWorkflowExecutionClosed(t *testing.T) { + visibilityStore, db := setupNoSQLVisibilityStoreMocks(t) + + db.EXPECT().UpdateVisibility(gomock.Any(), gomock.Any(), gomock.Any()).Return(assert.AnError) + // The error _is_ a NotFoundError + db.EXPECT().IsNotFoundError(assert.AnError).Return(true) + + err := visibilityStore.RecordWorkflowExecutionClosed(context.Background(), &persistence.InternalRecordWorkflowExecutionClosedRequest{ + DomainUUID: testDomainID, + WorkflowID: testWorkflowID, + RunID: testRunID, + WorkflowTypeName: testWorkflowTypeName, + StartTimestamp: time.Time{}, + ExecutionTimestamp: time.Time{}, + Memo: nil, + TaskList: testTaskListName, + IsCron: false, + NumClusters: 2, + UpdateTimestamp: time.Time{}, + ShardID: 2, + }) + + assert.Error(t, err) + assert.ErrorContains(t, err, "RecordWorkflowExecutionClosed failed. Error:") +} + +func TestRecordWorkflowExecutionUninitialized(t *testing.T) { + visibilityStore, _ := setupNoSQLVisibilityStoreMocks(t) + err := visibilityStore.RecordWorkflowExecutionUninitialized(context.Background(), &persistence.InternalRecordWorkflowExecutionUninitializedRequest{}) + assert.NoError(t, err) +} + +func TestUpsertWorkflowExecution(t *testing.T) { + visibilityStore, _ := setupNoSQLVisibilityStoreMocks(t) + + err := visibilityStore.UpsertWorkflowExecution(context.Background(), &persistence.InternalUpsertWorkflowExecutionRequest{ + SearchAttributes: map[string][]byte{ + definition.CadenceChangeVersion: nil, + }, + }) + + assert.NoError(t, err) + + err = visibilityStore.UpsertWorkflowExecution(context.Background(), &persistence.InternalUpsertWorkflowExecutionRequest{}) + + assert.Error(t, err) + assert.Equal(t, persistence.ErrVisibilityOperationNotSupported, err) +} + +func TestListOpenWorkflowExecutions_Success(t *testing.T) { + visibilityStore, db := setupNoSQLVisibilityStoreMocks(t) + + db.EXPECT().SelectVisibility(gomock.Any(), gomock.Any()).Return(&nosqlplugin.SelectVisibilityResponse{ + Executions: []*nosqlplugin.VisibilityRow{{ + DomainID: testDomainID, + WorkflowType: testWorkflowTypeName, + WorkflowID: testWorkflowID, + RunID: testRunID, + TypeName: "test-name", + StartTime: time.Time{}, + ExecutionTime: time.Time{}, + CloseTime: time.Time{}, + Status: nil, + HistoryLength: 2, + Memo: nil, + TaskList: testTaskListName, + IsCron: false, + NumClusters: 0, + UpdateTime: time.Time{}, + SearchAttributes: nil, + ShardID: 2, + }}, + NextPageToken: nil, + }, nil) + + response, err := visibilityStore.ListOpenWorkflowExecutions(context.Background(), &persistence.InternalListWorkflowExecutionsRequest{ + DomainUUID: testDomainID, + Domain: testDomainName, + EarliestTime: time.Time{}, + LatestTime: time.Time{}, + PageSize: 2, + NextPageToken: nil, + }) + + assert.NoError(t, err) + assert.Equal(t, len(response.Executions), 1) +} + +func TestListOpenWorkflowExecutions_Failed(t *testing.T) { + visibilityStore, db := setupNoSQLVisibilityStoreMocks(t) + + db.EXPECT().SelectVisibility(gomock.Any(), gomock.Any()).Return(nil, assert.AnError) + // The error _is_ a NotFoundError + db.EXPECT().IsNotFoundError(assert.AnError).Return(true) + _, err := visibilityStore.ListOpenWorkflowExecutions(context.Background(), &persistence.InternalListWorkflowExecutionsRequest{ + DomainUUID: testDomainID, + Domain: testDomainName, + EarliestTime: time.Time{}, + LatestTime: time.Time{}, + PageSize: 2, + NextPageToken: nil, + }) + + assert.Error(t, err) + assert.ErrorContains(t, err, "ListOpenWorkflowExecutions failed. Error:") +} + +func TestDeleteUninitializedWorkflowExecution(t *testing.T) { + visibilityStore, _ := setupNoSQLVisibilityStoreMocks(t) + err := visibilityStore.DeleteUninitializedWorkflowExecution(context.Background(), &persistence.VisibilityDeleteWorkflowExecutionRequest{}) + assert.NoError(t, err) +} + +func TestListWorkflowExecutions(t *testing.T) { + visibilityStore, _ := setupNoSQLVisibilityStoreMocks(t) + _, err := visibilityStore.ListWorkflowExecutions(context.Background(), &persistence.ListWorkflowExecutionsByQueryRequest{}) + assert.Error(t, err) + assert.Equal(t, persistence.ErrVisibilityOperationNotSupported, err) +} + +func TestScanWorkflowExecutions(t *testing.T) { + visibilityStore, _ := setupNoSQLVisibilityStoreMocks(t) + _, err := visibilityStore.ScanWorkflowExecutions(context.Background(), &persistence.ListWorkflowExecutionsByQueryRequest{}) + assert.Error(t, err) + assert.Equal(t, persistence.ErrVisibilityOperationNotSupported, err) +} + +func TestCountWorkflowExecutions(t *testing.T) { + visibilityStore, _ := setupNoSQLVisibilityStoreMocks(t) + _, err := visibilityStore.CountWorkflowExecutions(context.Background(), &persistence.CountWorkflowExecutionsRequest{}) + assert.Error(t, err) + assert.Equal(t, persistence.ErrVisibilityOperationNotSupported, err) +} From 2e5ce17638ce001fe588fe072208b694472f5ce6 Mon Sep 17 00:00:00 2001 From: Gaziza Yestemirova Date: Fri, 25 Oct 2024 11:40:32 +0200 Subject: [PATCH 2/2] Fix linter --- common/persistence/nosql/nosql_visibility_store_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/persistence/nosql/nosql_visibility_store_test.go b/common/persistence/nosql/nosql_visibility_store_test.go index eab3fd991a1..4d521e17353 100644 --- a/common/persistence/nosql/nosql_visibility_store_test.go +++ b/common/persistence/nosql/nosql_visibility_store_test.go @@ -24,16 +24,16 @@ package nosql import ( "context" - "github.com/golang/mock/gomock" - "github.com/uber/cadence/common/definition" - "github.com/uber/cadence/common/persistence" - "github.com/uber/cadence/common/persistence/nosql/nosqlplugin" "testing" "time" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" + "github.com/uber/cadence/common/definition" "github.com/uber/cadence/common/log" + "github.com/uber/cadence/common/persistence" + "github.com/uber/cadence/common/persistence/nosql/nosqlplugin" ) const (