@@ -51,11 +51,11 @@ func activity1(ctx context.Context, r int) (int, error) {
51
51
func Test_Executor (t * testing.T ) {
52
52
tests := []struct {
53
53
name string
54
- f func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider )
54
+ f func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider )
55
55
}{
56
56
{
57
57
name : "Simple_workflow_to_completion" ,
58
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
58
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
59
59
workflowHits := 0
60
60
wf := func (ctx sync.Context ) error {
61
61
workflowHits ++
@@ -77,7 +77,7 @@ func Test_Executor(t *testing.T) {
77
77
},
78
78
{
79
79
name : "Workflow with activity command" ,
80
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
80
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
81
81
workflowActivityHit := 0
82
82
workflowWithActivity := func (ctx sync.Context ) error {
83
83
workflowActivityHit ++
@@ -123,7 +123,7 @@ func Test_Executor(t *testing.T) {
123
123
},
124
124
{
125
125
name : "Workflow with activity replay" ,
126
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
126
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
127
127
workflowActivityHit := 0
128
128
workflowWithActivity := func (ctx sync.Context ) error {
129
129
workflowActivityHit ++
@@ -188,7 +188,7 @@ func Test_Executor(t *testing.T) {
188
188
},
189
189
{
190
190
name : "Workflow with new events" ,
191
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
191
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
192
192
workflowActivityHit := 0
193
193
workflowWithActivity := func (ctx sync.Context ) error {
194
194
workflowActivityHit ++
@@ -270,7 +270,7 @@ func Test_Executor(t *testing.T) {
270
270
},
271
271
{
272
272
name : "Workflow with selector" ,
273
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
273
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
274
274
var workflowWithSelectorHits int
275
275
276
276
workflowWithSelector := func (ctx sync.Context ) error {
@@ -326,7 +326,7 @@ func Test_Executor(t *testing.T) {
326
326
},
327
327
{
328
328
name : "Workflow with timer" ,
329
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
329
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
330
330
workflowTimerHits := 0
331
331
332
332
workflowWithTimer := func (ctx sync.Context ) error {
@@ -370,9 +370,45 @@ func Test_Executor(t *testing.T) {
370
370
require .IsType (t , & command.ScheduleTimerCommand {}, e .workflowState .Commands ()[0 ])
371
371
},
372
372
},
373
+ {
374
+ name : "Cancel timer multiple times" ,
375
+ f : func (t * testing.T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
376
+ workflowWithTimer := func (ctx sync.Context ) error {
377
+ tctx , cancel := wf .WithCancel (ctx )
378
+
379
+ wf .ScheduleTimer (tctx , time .Millisecond * 5 )
380
+
381
+ // Cause checkpoint
382
+ wf .ExecuteActivity [any ](ctx , wf .DefaultActivityOptions , activity1 , 42 ).Get (ctx )
383
+
384
+ cancel ()
385
+ cancel ()
386
+
387
+ return nil
388
+ }
389
+
390
+ r .RegisterWorkflow (workflowWithTimer )
391
+ r .RegisterActivity (activity1 )
392
+
393
+ task := startWorkflowTask (i .InstanceID , workflowWithTimer )
394
+
395
+ result , err := e .ExecuteTask (context .Background (), task )
396
+ require .NoError (t , err )
397
+ require .NoError (t , e .workflow .err )
398
+ require .Len (t , e .workflowState .Commands (), 2 )
399
+
400
+ task2 := continueTask (i .InstanceID , []history.Event {
401
+ history .NewPendingEvent (time .Now (), history .EventType_ActivityCompleted , & history.ActivityCompletedAttributes {}, history .ScheduleEventID (2 )),
402
+ }, result .Executed [len (result .Executed )- 1 ].SequenceID )
403
+
404
+ result , err = e .ExecuteTask (context .Background (), task2 )
405
+ require .NoError (t , err )
406
+ require .NoError (t , e .workflow .err )
407
+ },
408
+ },
373
409
{
374
410
name : "Workflow with signal" ,
375
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
411
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
376
412
workflowSignalHits := 0
377
413
378
414
workflowWithSignal := func (ctx sync.Context ) error {
@@ -423,7 +459,7 @@ func Test_Executor(t *testing.T) {
423
459
},
424
460
{
425
461
name : "Completes workflow on unhandled error" ,
426
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
462
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
427
463
workflowPanic := func (ctx sync.Context ) error {
428
464
panic ("wf error" )
429
465
}
@@ -457,7 +493,7 @@ func Test_Executor(t *testing.T) {
457
493
},
458
494
{
459
495
name : "Schedule subworkflow" ,
460
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
496
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
461
497
subworkflow := func (ctx wf.Context ) error {
462
498
return nil
463
499
}
@@ -485,7 +521,7 @@ func Test_Executor(t *testing.T) {
485
521
},
486
522
{
487
523
name : "Schedule and cancel subworkflow" ,
488
- f : func (r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
524
+ f : func (t * testing. T , r * Registry , e * executor , i * core.WorkflowInstance , hp * testHistoryProvider ) {
489
525
subworkflow := func (ctx wf.Context ) error {
490
526
return nil
491
527
}
@@ -544,7 +580,7 @@ func Test_Executor(t *testing.T) {
544
580
i := core .NewWorkflowInstance (uuid .NewString (), "" )
545
581
hp := & testHistoryProvider {}
546
582
e := newExecutor (r , i , hp )
547
- tt .f (r , e , i , hp )
583
+ tt .f (t , r , e , i , hp )
548
584
})
549
585
}
550
586
}
0 commit comments