@@ -486,6 +486,106 @@ func (s *contextTestSuite) TestCreateWorkflowExecution() {
486
486
}
487
487
}
488
488
489
+ func (s * contextTestSuite ) TestUpdateWorkflowExecution () {
490
+ cases := []struct {
491
+ name string
492
+ err error
493
+ domainLookupErr error
494
+ response * persistence.UpdateWorkflowExecutionResponse
495
+ setup func ()
496
+ asserts func (* persistence.UpdateWorkflowExecutionResponse , error )
497
+ }{
498
+ {
499
+ name : "Success" ,
500
+ response : & persistence.UpdateWorkflowExecutionResponse {},
501
+ asserts : func (response * persistence.UpdateWorkflowExecutionResponse , 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.UpdateWorkflowExecutionResponse , 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.UpdateWorkflowExecutionResponse , 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.UpdateWorkflowExecutionResponse , 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.UpdateWorkflowExecutionResponse , 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.UpdateWorkflowExecutionResponse , 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.UpdateWorkflowExecutionRequest {
559
+ RangeID : 123 ,
560
+ Mode : persistence .UpdateWorkflowModeUpdateCurrent ,
561
+ UpdateWorkflowMutation : persistence.WorkflowMutation {
562
+ ExecutionInfo : & persistence.WorkflowExecutionInfo {
563
+ DomainID : testDomainID ,
564
+ WorkflowID : testWorkflowID ,
565
+ },
566
+ },
567
+ NewWorkflowSnapshot : & persistence.WorkflowSnapshot {},
568
+ DomainName : testDomain ,
569
+ }
570
+
571
+ domainCacheEntry := cache .NewLocalDomainCacheEntryForTest (
572
+ & persistence.DomainInfo {ID : testDomainID },
573
+ & persistence.DomainConfig {Retention : 7 },
574
+ testCluster ,
575
+ )
576
+ s .mockResource .DomainCache .EXPECT ().GetDomainByID (testDomainID ).Return (domainCacheEntry , tc .domainLookupErr )
577
+ if tc .setup != nil {
578
+ tc .setup ()
579
+ }
580
+
581
+ s .mockResource .ExecutionMgr .On ("UpdateWorkflowExecution" , ctx , mock .Anything ).Once ().Return (tc .response , tc .err )
582
+
583
+ resp , err := s .context .UpdateWorkflowExecution (ctx , request )
584
+ tc .asserts (resp , err )
585
+ })
586
+ }
587
+ }
588
+
489
589
func (s * contextTestSuite ) TestValidateAndUpdateFailoverMarkers () {
490
590
domainFailoverVersion := 100
491
591
domainCacheEntryInactiveCluster := cache .NewGlobalDomainCacheEntryForTest (
0 commit comments