@@ -15,7 +15,7 @@ import (
15
15
16
16
var e2eRemovalTests = []backendTest {
17
17
{
18
- name : "RemoveWorkflowInstances_Removes " ,
18
+ name : "RemoveWorkflowInstances/Removes " ,
19
19
f : func (t * testing.T , ctx context.Context , c * client.Client , w * worker.Worker , b TestBackend ) {
20
20
wf := func (ctx workflow.Context ) (bool , error ) {
21
21
return true , nil
@@ -28,20 +28,100 @@ var e2eRemovalTests = []backendTest{
28
28
require .NoError (t , err )
29
29
30
30
now := time .Now ()
31
- time .Sleep (300 * time .Millisecond )
32
31
33
- _ , err = runWorkflowWithResult [bool ](t , ctx , c , wf )
32
+ for i := 0 ; i < 10 ; i ++ {
33
+ time .Sleep (300 * time .Millisecond )
34
+
35
+ err = b .RemoveWorkflowInstances (ctx , backend .RemoveFinishedBefore (now ))
36
+ if errors .As (err , & backend.ErrNotSupported {}) {
37
+ t .Skip ()
38
+ return
39
+ }
40
+
41
+ require .NoError (t , err )
42
+
43
+ _ , err = c .GetWorkflowInstanceState (ctx , workflowA )
44
+ if errors .Is (err , backend .ErrInstanceNotFound ) {
45
+ break
46
+ }
47
+ }
48
+
49
+ require .ErrorIs (t , err , backend .ErrInstanceNotFound )
50
+ },
51
+ },
52
+ {
53
+ name : "AutoExpiration/StartsWorkflowAndRemoves" ,
54
+ f : func (t * testing.T , ctx context.Context , c * client.Client , w * worker.Worker , b TestBackend ) {
55
+ wf := func (ctx workflow.Context ) (bool , error ) {
56
+ return true , nil
57
+ }
58
+
59
+ register (t , ctx , w , []interface {}{wf }, nil )
60
+
61
+ err := c .StartAutoExpiration (ctx , time .Millisecond )
62
+ if errors .As (err , & backend.ErrNotSupported {}) {
63
+ t .Skip ()
64
+ return
65
+ }
66
+
34
67
require .NoError (t , err )
35
68
36
- err = b .RemoveWorkflowInstances (ctx , backend .RemoveFinishedBefore (now ))
69
+ workflowA := runWorkflow (t , ctx , c , wf )
70
+ _ , err = client .GetWorkflowResult [bool ](ctx , c , workflowA , time .Second * 10 )
71
+ require .NoError (t , err )
72
+
73
+ for i := 0 ; i < 10 ; i ++ {
74
+ time .Sleep (100 * time .Millisecond )
75
+ _ , err = c .GetWorkflowInstanceState (ctx , workflowA )
76
+ if err != backend .ErrInstanceNotFound {
77
+ continue
78
+ } else {
79
+ break
80
+ }
81
+ }
82
+
83
+ require .ErrorIs (t , err , backend .ErrInstanceNotFound )
84
+ },
85
+ },
86
+ {
87
+ name : "AutoExpiration/UpdateDelay" ,
88
+ f : func (t * testing.T , ctx context.Context , c * client.Client , w * worker.Worker , b TestBackend ) {
89
+ wf := func (ctx workflow.Context ) (bool , error ) {
90
+ return true , nil
91
+ }
92
+
93
+ register (t , ctx , w , []interface {}{wf }, nil )
94
+
95
+ err := c .StartAutoExpiration (ctx , time .Hour )
37
96
if errors .As (err , & backend.ErrNotSupported {}) {
38
97
t .Skip ()
39
98
return
40
99
}
41
100
42
101
require .NoError (t , err )
43
102
103
+ workflowA := runWorkflow (t , ctx , c , wf )
104
+ _ , err = client .GetWorkflowResult [bool ](ctx , c , workflowA , time .Second * 10 )
105
+ require .NoError (t , err )
106
+
107
+ time .Sleep (1000 * time .Millisecond )
44
108
_ , err = c .GetWorkflowInstanceState (ctx , workflowA )
109
+ require .NotErrorIs (t , err , backend .ErrInstanceNotFound )
110
+
111
+ // update delay
112
+ err = c .StartAutoExpiration (ctx , time .Millisecond )
113
+ require .NoError (t , err )
114
+
115
+ for i := 0 ; i < 10 ; i ++ {
116
+ time .Sleep (100 * time .Millisecond )
117
+ _ , err = c .GetWorkflowInstanceState (ctx , workflowA )
118
+ if err != backend .ErrInstanceNotFound {
119
+ continue
120
+ } else {
121
+ break
122
+ }
123
+ }
124
+
45
125
require .ErrorIs (t , err , backend .ErrInstanceNotFound )
46
126
},
47
127
},
0 commit comments