@@ -18,7 +18,7 @@ let offset = 0;
18
18
*/
19
19
20
20
function testRunnerMain ( ) {
21
- spawnMaster ( {
21
+ let defaultPortCase = spawnMaster ( {
22
22
execArgv : [ '--inspect' ] ,
23
23
workers : [ { expectedPort : 9230 } ]
24
24
} ) ;
@@ -77,42 +77,251 @@ function testRunnerMain() {
77
77
workers : [ { expectedPort : port + 1 , expectedHost : '::1' } ]
78
78
} ) ;
79
79
}
80
- }
81
80
81
+ // These tests check that setting inspectPort in cluster.settings
82
+ // would take effect and override port incrementing behavior
83
+
84
+ port = debuggerPort + offset ++ * 5 ;
85
+
86
+ spawnMaster ( {
87
+ execArgv : [ `--inspect=${ port } ` ] ,
88
+ clusterSettings : { inspectPort : port + 2 } ,
89
+ workers : [ { expectedPort : port + 2 } ]
90
+ } ) ;
91
+
92
+ port = debuggerPort + offset ++ * 5 ;
93
+
94
+ spawnMaster ( {
95
+ execArgv : [ `--inspect=${ port } ` ] ,
96
+ clusterSettings : { inspectPort : 'addTwo' } ,
97
+ workers : [
98
+ { expectedPort : port + 2 } ,
99
+ { expectedPort : port + 4 }
100
+ ]
101
+ } ) ;
102
+
103
+ port = debuggerPort + offset ++ * 5 ;
104
+
105
+ spawnMaster ( {
106
+ execArgv : [ `--inspect=${ port } ` ] ,
107
+ clusterSettings : { inspectPort : 'string' } ,
108
+ workers : [ { } ]
109
+ } ) ;
110
+
111
+ port = debuggerPort + offset ++ * 5 ;
112
+
113
+ spawnMaster ( {
114
+ execArgv : [ `--inspect=${ port } ` ] ,
115
+ clusterSettings : { inspectPort : 'null' } ,
116
+ workers : [ { } ]
117
+ } ) ;
118
+
119
+ port = debuggerPort + offset ++ * 5 ;
120
+
121
+ spawnMaster ( {
122
+ execArgv : [ `--inspect=${ port } ` ] ,
123
+ clusterSettings : { inspectPort : 'bignumber' } ,
124
+ workers : [ { } ]
125
+ } ) ;
126
+
127
+ port = debuggerPort + offset ++ * 5 ;
128
+
129
+ spawnMaster ( {
130
+ execArgv : [ `--inspect=${ port } ` ] ,
131
+ clusterSettings : { inspectPort : 'negativenumber' } ,
132
+ workers : [ { } ]
133
+ } ) ;
134
+
135
+ port = debuggerPort + offset ++ * 5 ;
136
+
137
+ spawnMaster ( {
138
+ execArgv : [ `--inspect=${ port } ` ] ,
139
+ clusterSettings : { inspectPort : 'bignumberfunc' } ,
140
+ workers : [ { } ]
141
+ } ) ;
142
+
143
+ port = debuggerPort + offset ++ * 5 ;
144
+
145
+ spawnMaster ( {
146
+ execArgv : [ `--inspect=${ port } ` ] ,
147
+ clusterSettings : { inspectPort : 'strfunc' } ,
148
+ workers : [ { } ]
149
+ } ) ;
150
+
151
+ port = debuggerPort + offset ++ * 5 ;
152
+
153
+ spawnMaster ( {
154
+ execArgv : [ ] ,
155
+ clusterSettings : { inspectPort : port , execArgv : [ '--inspect' ] } ,
156
+ workers : [
157
+ { expectedPort : port }
158
+ ]
159
+ } ) ;
160
+
161
+ port = debuggerPort + offset ++ * 5 ;
162
+
163
+ spawnMaster ( {
164
+ execArgv : [ `--inspect=${ port } ` ] ,
165
+ clusterSettings : { inspectPort : 0 } ,
166
+ workers : [
167
+ { expectedInitialPort : 0 } ,
168
+ { expectedInitialPort : 0 } ,
169
+ { expectedInitialPort : 0 }
170
+ ]
171
+ } ) ;
172
+
173
+ port = debuggerPort + offset ++ * 5 ;
174
+
175
+ spawnMaster ( {
176
+ execArgv : [ ] ,
177
+ clusterSettings : { inspectPort : 0 } ,
178
+ workers : [
179
+ { expectedInitialPort : 0 } ,
180
+ { expectedInitialPort : 0 } ,
181
+ { expectedInitialPort : 0 }
182
+ ]
183
+ } ) ;
184
+
185
+ defaultPortCase . then ( ( ) => {
186
+ port = debuggerPort + offset ++ * 5 ;
187
+ defaultPortCase = spawnMaster ( {
188
+ execArgv : [ '--inspect' ] ,
189
+ clusterSettings : { inspectPort : port + 2 } ,
190
+ workers : [
191
+ { expectedInitialPort : port + 2 }
192
+ ]
193
+ } ) ;
194
+ } ) ;
195
+ }
82
196
function masterProcessMain ( ) {
83
197
const workers = JSON . parse ( process . env . workers ) ;
198
+ const clusterSettings = JSON . parse ( process . env . clusterSettings ) ;
199
+ let debugPort = process . debugPort ;
84
200
85
201
for ( const worker of workers ) {
86
- cluster . fork ( {
87
- expectedPort : worker . expectedPort ,
88
- expectedHost : worker . expectedHost
89
- } ) . on ( 'exit' , common . mustCall ( checkExitCode ) ) ;
202
+ const params = { } ;
203
+
204
+ if ( worker . expectedPort ) {
205
+ params . expectedPort = worker . expectedPort ;
206
+ }
207
+
208
+ if ( worker . expectedInitialPort ) {
209
+ params . expectedInitialPort = worker . expectedInitialPort ;
210
+ }
211
+
212
+ if ( worker . expectedHost ) {
213
+ params . expectedHost = worker . expectedHost ;
214
+ }
215
+
216
+ if ( clusterSettings ) {
217
+ if ( clusterSettings . inspectPort === 'addTwo' ) {
218
+ clusterSettings . inspectPort = common . mustCall (
219
+ ( ) => { return debugPort += 2 ; } ,
220
+ workers . length
221
+ ) ;
222
+ } else if ( clusterSettings . inspectPort === 'string' ) {
223
+ clusterSettings . inspectPort = 'string' ;
224
+ cluster . setupMaster ( clusterSettings ) ;
225
+
226
+ assert . throws ( ( ) => {
227
+ cluster . fork ( params ) . on ( 'exit' , common . mustCall ( checkExitCode ) ) ;
228
+ } , TypeError ) ;
229
+
230
+ return ;
231
+ } else if ( clusterSettings . inspectPort === 'null' ) {
232
+ clusterSettings . inspectPort = null ;
233
+ cluster . setupMaster ( clusterSettings ) ;
234
+
235
+ assert . throws ( ( ) => {
236
+ cluster . fork ( params ) . on ( 'exit' , common . mustCall ( checkExitCode ) ) ;
237
+ } , TypeError ) ;
238
+
239
+ return ;
240
+ } else if ( clusterSettings . inspectPort === 'bignumber' ) {
241
+ clusterSettings . inspectPort = 1293812 ;
242
+ cluster . setupMaster ( clusterSettings ) ;
243
+
244
+ assert . throws ( ( ) => {
245
+ cluster . fork ( params ) . on ( 'exit' , common . mustCall ( checkExitCode ) ) ;
246
+ } , TypeError ) ;
247
+
248
+ return ;
249
+ } else if ( clusterSettings . inspectPort === 'negativenumber' ) {
250
+ clusterSettings . inspectPort = - 9776 ;
251
+ cluster . setupMaster ( clusterSettings ) ;
252
+
253
+ assert . throws ( ( ) => {
254
+ cluster . fork ( params ) . on ( 'exit' , common . mustCall ( checkExitCode ) ) ;
255
+ } , TypeError ) ;
256
+
257
+ return ;
258
+ } else if ( clusterSettings . inspectPort === 'bignumberfunc' ) {
259
+ clusterSettings . inspectPort = common . mustCall (
260
+ ( ) => 123121 ,
261
+ workers . length
262
+ ) ;
263
+
264
+ cluster . setupMaster ( clusterSettings ) ;
265
+
266
+ assert . throws ( ( ) => {
267
+ cluster . fork ( params ) . on ( 'exit' , common . mustCall ( checkExitCode ) ) ;
268
+ } , TypeError ) ;
269
+
270
+ return ;
271
+ } else if ( clusterSettings . inspectPort === 'strfunc' ) {
272
+ clusterSettings . inspectPort = common . mustCall (
273
+ ( ) => 'invalidPort' ,
274
+ workers . length
275
+ ) ;
276
+
277
+ cluster . setupMaster ( clusterSettings ) ;
278
+
279
+ assert . throws ( ( ) => {
280
+ cluster . fork ( params ) . on ( 'exit' , common . mustCall ( checkExitCode ) ) ;
281
+ } , TypeError ) ;
282
+
283
+ return ;
284
+ }
285
+ cluster . setupMaster ( clusterSettings ) ;
286
+ }
287
+
288
+ cluster . fork ( params ) . on ( 'exit' , common . mustCall ( checkExitCode ) ) ;
90
289
}
91
290
}
92
291
93
292
function workerProcessMain ( ) {
94
- const { expectedPort, expectedHost} = process . env ;
293
+ const { expectedPort, expectedInitialPort, expectedHost} = process . env ;
294
+ const debugOptions = process . binding ( 'config' ) . debugOptions ;
295
+
296
+ if ( 'expectedPort' in process . env ) {
297
+ assert . strictEqual ( process . debugPort , + expectedPort ) ;
298
+ }
95
299
96
- assert . strictEqual ( process . debugPort , + expectedPort ) ;
300
+ if ( 'expectedInitialPort' in process . env ) {
301
+ assert . strictEqual ( debugOptions . port , + expectedInitialPort ) ;
302
+ }
97
303
98
- if ( expectedHost !== 'undefined' ) {
99
- assert . strictEqual (
100
- process . binding ( 'config' ) . debugOptions . host ,
101
- expectedHost
102
- ) ;
304
+ if ( 'expectedHost' in process . env ) {
305
+ assert . strictEqual ( debugOptions . host , expectedHost ) ;
103
306
}
104
307
105
308
process . exit ( ) ;
106
309
}
107
310
108
- function spawnMaster ( { execArgv, workers} ) {
109
- childProcess . fork ( __filename , {
110
- env : {
111
- workers : JSON . stringify ( workers ) ,
112
- testProcess : true
113
- } ,
114
- execArgv
115
- } ) . on ( 'exit' , common . mustCall ( checkExitCode ) ) ;
311
+ function spawnMaster ( { execArgv, workers, clusterSettings = { } } ) {
312
+ return new Promise ( ( resolve ) => {
313
+ childProcess . fork ( __filename , {
314
+ env : {
315
+ workers : JSON . stringify ( workers ) ,
316
+ clusterSettings : JSON . stringify ( clusterSettings ) ,
317
+ testProcess : true
318
+ } ,
319
+ execArgv
320
+ } ) . on ( 'exit' , common . mustCall ( ( code , signal ) => {
321
+ checkExitCode ( code , signal ) ;
322
+ resolve ( ) ;
323
+ } ) ) ;
324
+ } ) ;
116
325
}
117
326
118
327
function checkExitCode ( code , signal ) {
0 commit comments