Skip to content

Commit a8773c9

Browse files
committed
Tests for ConflictResolveWorkflowExecution
1 parent ca70959 commit a8773c9

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
@@ -486,6 +486,105 @@ func (s *contextTestSuite) TestCreateWorkflowExecution() {
486486
}
487487
}
488488

489+
func (s *contextTestSuite) TestConflictResolveWorkflowExecution() {
490+
cases := []struct {
491+
name string
492+
err error
493+
domainLookupErr error
494+
response *persistence.ConflictResolveWorkflowExecutionResponse
495+
setup func()
496+
asserts func(*persistence.ConflictResolveWorkflowExecutionResponse, error)
497+
}{
498+
{
499+
name: "Success",
500+
response: &persistence.ConflictResolveWorkflowExecutionResponse{},
501+
asserts: func(response *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
502+
s.NoError(err)
503+
s.NotNil(response)
504+
},
505+
},
506+
{
507+
name: "No special handling",
508+
err: &types.ServiceBusyError{},
509+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
510+
s.Equal(err, &types.ServiceBusyError{})
511+
s.NoError(s.context.closedError())
512+
},
513+
},
514+
{
515+
name: "Shard ownership lost error",
516+
err: &persistence.ShardOwnershipLostError{},
517+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
518+
s.Equal(err, &persistence.ShardOwnershipLostError{})
519+
s.ErrorContains(s.context.closedError(), "shard closed")
520+
},
521+
},
522+
{
523+
name: "Other error - update shard succeed",
524+
err: assert.AnError,
525+
setup: func() {
526+
s.mockShardManager.On("UpdateShard", mock.Anything, mock.Anything).Return(nil)
527+
},
528+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
529+
s.Equal(assert.AnError, err)
530+
s.NoError(s.context.closedError())
531+
},
532+
},
533+
{
534+
name: "Other error - update shard failed",
535+
err: assert.AnError,
536+
setup: func() {
537+
s.mockShardManager.On("UpdateShard", mock.Anything, mock.Anything).Return(assert.AnError)
538+
},
539+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
540+
s.Equal(assert.AnError, err)
541+
s.ErrorContains(s.context.closedError(), "shard closed")
542+
},
543+
},
544+
{
545+
name: "Domain lookup failed",
546+
domainLookupErr: assert.AnError,
547+
asserts: func(resp *persistence.ConflictResolveWorkflowExecutionResponse, err error) {
548+
s.ErrorIs(err, assert.AnError)
549+
},
550+
},
551+
}
552+
553+
for _, tc := range cases {
554+
s.Run(tc.name, func() {
555+
// Need setup the suite manually, since we are in a subtest
556+
s.SetupTest()
557+
ctx := context.Background()
558+
request := &persistence.ConflictResolveWorkflowExecutionRequest{
559+
ResetWorkflowSnapshot: persistence.WorkflowSnapshot{
560+
ExecutionInfo: &persistence.WorkflowExecutionInfo{
561+
DomainID: testDomainID,
562+
WorkflowID: testWorkflowID,
563+
},
564+
},
565+
NewWorkflowSnapshot: &persistence.WorkflowSnapshot{},
566+
CurrentWorkflowMutation: &persistence.WorkflowMutation{},
567+
DomainName: testDomain,
568+
}
569+
570+
domainCacheEntry := cache.NewLocalDomainCacheEntryForTest(
571+
&persistence.DomainInfo{ID: testDomainID},
572+
&persistence.DomainConfig{Retention: 7},
573+
testCluster,
574+
)
575+
s.mockResource.DomainCache.EXPECT().GetDomainByID(testDomainID).Return(domainCacheEntry, tc.domainLookupErr)
576+
if tc.setup != nil {
577+
tc.setup()
578+
}
579+
580+
s.mockResource.ExecutionMgr.On("ConflictResolveWorkflowExecution", ctx, mock.Anything).Once().Return(tc.response, tc.err)
581+
582+
resp, err := s.context.ConflictResolveWorkflowExecution(ctx, request)
583+
tc.asserts(resp, err)
584+
})
585+
}
586+
}
587+
489588
func (s *contextTestSuite) TestValidateAndUpdateFailoverMarkers() {
490589
domainFailoverVersion := 100
491590
domainCacheEntryInactiveCluster := cache.NewGlobalDomainCacheEntryForTest(

0 commit comments

Comments
 (0)