Skip to content

Commit e9a63ff

Browse files
committed
Tests for ConflictResolveWorkflowExecution
1 parent 6bf8b86 commit e9a63ff

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

service/history/shard/context_test.go

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,105 @@ func (s *contextTestSuite) TestUpdateWorkflowExecution() {
586586
}
587587
}
588588

589+
func (s *contextTestSuite) TestConflictResolveWorkflowExecution() {
590+
cases := []struct {
591+
name string
592+
err error
593+
domainLookupErr error
594+
response *persistence.ConflictResolveWorkflowExecutionResponse
595+
setup func()
596+
asserts func(*persistence.ConflictResolveWorkflowExecutionResponse, error)
597+
}{
598+
{
599+
name: "Success",
600+
response: &persistence.ConflictResolveWorkflowExecutionResponse{},
601+
asserts: func(response *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
602+
s.NoError(err)
603+
s.NotNil(response)
604+
},
605+
},
606+
{
607+
name: "No special handling",
608+
err: &types.ServiceBusyError{},
609+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
610+
s.Equal(err, &types.ServiceBusyError{})
611+
s.NoError(s.context.closedError())
612+
},
613+
},
614+
{
615+
name: "Shard ownership lost error",
616+
err: &persistence.ShardOwnershipLostError{},
617+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
618+
s.Equal(err, &persistence.ShardOwnershipLostError{})
619+
s.ErrorContains(s.context.closedError(), "shard closed")
620+
},
621+
},
622+
{
623+
name: "Other error - update shard succeed",
624+
err: assert.AnError,
625+
setup: func() {
626+
s.mockShardManager.On("UpdateShard", mock.Anything, mock.Anything).Return(nil)
627+
},
628+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
629+
s.Equal(assert.AnError, err)
630+
s.NoError(s.context.closedError())
631+
},
632+
},
633+
{
634+
name: "Other error - update shard failed",
635+
err: assert.AnError,
636+
setup: func() {
637+
s.mockShardManager.On("UpdateShard", mock.Anything, mock.Anything).Return(assert.AnError)
638+
},
639+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
640+
s.Equal(assert.AnError, err)
641+
s.ErrorContains(s.context.closedError(), "shard closed")
642+
},
643+
},
644+
{
645+
name: "Domain lookup failed",
646+
domainLookupErr: assert.AnError,
647+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
648+
s.ErrorIs(err, assert.AnError)
649+
},
650+
},
651+
}
652+
653+
for _, tc := range cases {
654+
s.Run(tc.name, func() {
655+
// Need setup the suite manually, since we are in a subtest
656+
s.SetupTest()
657+
ctx := context.Background()
658+
request := &persistence.ConflictResolveWorkflowExecutionRequest{
659+
ResetWorkflowSnapshot: persistence.WorkflowSnapshot{
660+
ExecutionInfo: &persistence.WorkflowExecutionInfo{
661+
DomainID: testDomainID,
662+
WorkflowID: testWorkflowID,
663+
},
664+
},
665+
NewWorkflowSnapshot: &persistence.WorkflowSnapshot{},
666+
CurrentWorkflowMutation: &persistence.WorkflowMutation{},
667+
DomainName: testDomain,
668+
}
669+
670+
domainCacheEntry := cache.NewLocalDomainCacheEntryForTest(
671+
&persistence.DomainInfo{ID: testDomainID},
672+
&persistence.DomainConfig{Retention: 7},
673+
testCluster,
674+
)
675+
s.mockResource.DomainCache.EXPECT().GetDomainByID(testDomainID).Return(domainCacheEntry, tc.domainLookupErr)
676+
if tc.setup != nil {
677+
tc.setup()
678+
}
679+
680+
s.mockResource.ExecutionMgr.On("ConflictResolveWorkflowExecution", ctx, mock.Anything).Once().Return(tc.response, tc.err)
681+
682+
resp, err := s.context.ConflictResolveWorkflowExecution(ctx, request)
683+
tc.asserts(resp, err)
684+
})
685+
}
686+
}
687+
589688
func (s *contextTestSuite) TestValidateAndUpdateFailoverMarkers() {
590689
domainFailoverVersion := 100
591690
domainCacheEntryInactiveCluster := cache.NewGlobalDomainCacheEntryForTest(

0 commit comments

Comments
 (0)