5
5
* @module
6
6
*/
7
7
import { Worker } from '@temporalio/worker' ;
8
+ import { Runtime } from '@temporalio/worker' ;
8
9
import test from 'ava' ;
9
10
import { RUN_INTEGRATION_TESTS } from './helpers' ;
10
11
import { defaultOptions , isolateFreeWorker } from './mock-native-worker' ;
@@ -27,23 +28,59 @@ if (RUN_INTEGRATION_TESTS) {
27
28
t . is ( worker . getState ( ) , 'STOPPED' ) ;
28
29
await t . throwsAsync ( worker . run ( ) , { message : 'Poller was already started' } ) ;
29
30
} ) ;
31
+
32
+ test . serial ( 'Worker shuts down gracefully if interrupted before running' , async ( t ) => {
33
+ const worker = await Worker . create ( {
34
+ ...defaultOptions ,
35
+ shutdownGraceTime : '500ms' ,
36
+ taskQueue : 'shutdown-test' ,
37
+ } ) ;
38
+ t . is ( worker . getState ( ) , 'INITIALIZED' ) ;
39
+ process . emit ( 'SIGINT' , 'SIGINT' ) ;
40
+ const p = worker . run ( ) ;
41
+ t . is ( worker . getState ( ) , 'RUNNING' ) ;
42
+ await p ;
43
+ t . is ( worker . getState ( ) , 'STOPPED' ) ;
44
+ } ) ;
30
45
}
31
46
32
47
test . serial ( 'Mocked run shuts down gracefully' , async ( t ) => {
33
- const worker = isolateFreeWorker ( {
34
- shutdownGraceTime : '500ms' ,
35
- taskQueue : 'shutdown-test' ,
36
- } ) ;
37
- t . is ( worker . getState ( ) , 'INITIALIZED' ) ;
38
- const p = worker . run ( ) ;
39
- t . is ( worker . getState ( ) , 'RUNNING' ) ;
40
- process . emit ( 'SIGINT' , 'SIGINT' ) ;
41
- await p ;
42
- t . is ( worker . getState ( ) , 'STOPPED' ) ;
43
- await t . throwsAsync ( worker . run ( ) , { message : 'Poller was already started' } ) ;
48
+ try {
49
+ const worker = isolateFreeWorker ( {
50
+ shutdownGraceTime : '500ms' ,
51
+ taskQueue : 'shutdown-test' ,
52
+ } ) ;
53
+ t . is ( worker . getState ( ) , 'INITIALIZED' ) ;
54
+ const p = worker . run ( ) ;
55
+ t . is ( worker . getState ( ) , 'RUNNING' ) ;
56
+ process . emit ( 'SIGINT' , 'SIGINT' ) ;
57
+ await p ;
58
+ t . is ( worker . getState ( ) , 'STOPPED' ) ;
59
+ await t . throwsAsync ( worker . run ( ) , { message : 'Poller was already started' } ) ;
60
+ } finally {
61
+ if ( Runtime . _instance ) await Runtime . _instance . shutdown ( ) ;
62
+ }
63
+ } ) ;
64
+
65
+ test . serial ( 'Mocked run shuts down gracefully if interrupted before running' , async ( t ) => {
66
+ try {
67
+ const worker = isolateFreeWorker ( {
68
+ shutdownGraceTime : '500ms' ,
69
+ taskQueue : 'shutdown-test' ,
70
+ } ) ;
71
+ // worker.native.initiateShutdown = () => new Promise(() => undefined);
72
+ t . is ( worker . getState ( ) , 'INITIALIZED' ) ;
73
+ process . emit ( 'SIGINT' , 'SIGINT' ) ;
74
+ const p = worker . run ( ) ;
75
+ t . is ( worker . getState ( ) , 'RUNNING' ) ;
76
+ await p ;
77
+ t . is ( worker . getState ( ) , 'STOPPED' ) ;
78
+ } finally {
79
+ if ( Runtime . _instance ) await Runtime . _instance . shutdown ( ) ;
80
+ }
44
81
} ) ;
45
82
46
- test ( 'Mocked run throws if not shut down gracefully' , async ( t ) => {
83
+ test . serial ( 'Mocked run throws if not shut down gracefully' , async ( t ) => {
47
84
const worker = isolateFreeWorker ( {
48
85
shutdownGraceTime : '5ms' ,
49
86
taskQueue : 'shutdown-test' ,
0 commit comments