@@ -586,6 +586,105 @@ func (s *contextTestSuite) TestUpdateWorkflowExecution() {
586
586
}
587
587
}
588
588
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
+
589
688
func (s * contextTestSuite ) TestValidateAndUpdateFailoverMarkers () {
590
689
domainFailoverVersion := 100
591
690
domainCacheEntryInactiveCluster := cache .NewGlobalDomainCacheEntryForTest (
0 commit comments