@@ -486,6 +486,105 @@ func (s *contextTestSuite) TestCreateWorkflowExecution() {
486
486
}
487
487
}
488
488
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
+
489
588
func (s * contextTestSuite ) TestValidateAndUpdateFailoverMarkers () {
490
589
domainFailoverVersion := 100
491
590
domainCacheEntryInactiveCluster := cache .NewGlobalDomainCacheEntryForTest (
0 commit comments