1+ const test = require ( 'ava' ) ;
2+
3+ const WorkerNodes = require ( '../' ) ;
4+ const { fixture, unique, repeatCall, eventually } = require ( './utils' ) ;
5+
6+ module . exports = function describe ( workerType ) {
7+ test ( `should be disabled by default` , async t => {
8+ // given
9+ const workerNodes = new WorkerNodes ( fixture ( 'process-info' ) , { workerType } ) ;
10+
11+ // when
12+ const callTime = new Date ( ) ;
13+ await workerNodes . call . noop ( ) ;
14+
15+ // then
16+ workerNodes . workersQueue . forEach ( worker => {
17+ const startDate = worker . process . startDate ;
18+
19+ if ( startDate ) {
20+ t . true ( startDate >= callTime ) ;
21+ }
22+ } ) ;
23+ } ) ;
24+
25+ test ( `should result in spawn of the workers before the first call if active` , async t => {
26+ // given
27+ const workerNodes = new WorkerNodes ( fixture ( 'process-info' ) , { autoStart : true , minWorkers : 1 , maxWorkers : 1 , workerType } ) ;
28+ await workerNodes . ready ( ) ;
29+
30+ // when
31+ const callTime = Date . now ( ) ;
32+ const workerStartTime = await workerNodes . call . getStartTime ( ) ;
33+
34+ // then
35+ t . true ( workerStartTime <= callTime ) ;
36+ } ) ;
37+
38+ test ( `should force the workerNodes to wait for all the required workers to start before reporting ready` , async t => {
39+ // given
40+ const workerNodes = new WorkerNodes ( fixture ( 'process-info' ) , { autoStart : true , minWorkers : 4 , maxWorkers : 4 , workerType } ) ;
41+ await workerNodes . ready ( ) ;
42+ const callStartTime = Date . now ( ) ;
43+
44+ // when
45+ const results = await repeatCall ( workerNodes . call . getStartTime , 4 ) ;
46+
47+ // then
48+ t . is ( results . length , 4 ) ;
49+
50+ results . forEach ( result => t . true ( result <= callStartTime ) ) ;
51+ } ) ;
52+
53+ test ( `should only use workers that are fully initialized` , async t => {
54+ // given
55+ const workerNodes = new WorkerNodes ( fixture ( 'slow-module' ) , {
56+ autoStart : true ,
57+ minWorkers : 2 ,
58+ maxWorkers : 2 ,
59+ taskMaxRetries : Infinity ,
60+ workerType
61+ } ) ;
62+ await workerNodes . ready ( ) ;
63+
64+ await repeatCall ( workerNodes . call . getPid , 4 ) ;
65+
66+ // when
67+ workerNodes . workersQueue . storage [ 0 ] . process . exit ( ) ;
68+ await repeatCall ( workerNodes . call . getPid , 4 ) ;
69+
70+ // then
71+ // we wait for all workers to come back a live
72+ const getLiveWorkers = ( ) => workerNodes . workersQueue . filter ( worker => worker . isProcessAlive ) ;
73+ await eventually ( ( ) => unique ( getLiveWorkers ( ) ) . length === 2 ) ;
74+ t . is ( unique ( getLiveWorkers ( ) ) . length , 2 ) ;
75+ } ) ;
76+ }
0 commit comments