5
5
6
6
import * as assert from 'assert' ;
7
7
import * as child_process from 'child_process' ;
8
+ import * as path from 'path' ;
8
9
import { getProcessTree , getProcessList , getProcessCpuUsage , ProcessDataFlag , buildProcessTree , filterProcessList } from './index' ;
9
-
10
+ import { Worker , isMainThread } from 'worker_threads' ;
10
11
const native = require ( '../build/Release/windows_process_tree.node' ) ;
11
12
12
13
function pollUntil ( makePromise : ( ) => Promise < boolean > , cb : ( ) => void , interval : number , timeout : number ) : void {
@@ -39,15 +40,15 @@ describe('getRawProcessList', () => {
39
40
40
41
it ( 'should return a list containing this process' , ( done ) => {
41
42
native . getProcessList ( ( list ) => {
42
- assert . notEqual ( list . find ( p => p . pid === process . pid ) , undefined ) ;
43
+ assert . notStrictEqual ( list . find ( p => p . pid === process . pid ) , undefined ) ;
43
44
done ( ) ;
44
45
} , 0 ) ;
45
46
} ) ;
46
47
47
48
it ( 'should handle multiple calls gracefully' , ( done ) => {
48
49
let counter = 0 ;
49
50
const callback = ( list ) => {
50
- assert . notEqual ( list . find ( p => p . pid === process . pid ) , undefined ) ;
51
+ assert . notStrictEqual ( list . find ( p => p . pid === process . pid ) , undefined ) ;
51
52
if ( ++ counter === 2 ) {
52
53
done ( ) ;
53
54
}
@@ -59,11 +60,11 @@ describe('getRawProcessList', () => {
59
60
it ( 'should return memory information only when the flag is set' , ( done ) => {
60
61
// Memory should be undefined when flag is not set
61
62
native . getProcessList ( ( list ) => {
62
- assert . equal ( list . every ( p => p . memory === undefined ) , true ) ;
63
+ assert . strictEqual ( list . every ( p => p . memory === undefined ) , true ) ;
63
64
64
65
// Memory should be a number when flag is set
65
66
native . getProcessList ( ( list ) => {
66
- assert . equal ( list . some ( p => p . memory > 0 ) , true ) ;
67
+ assert . strictEqual ( list . some ( p => p . memory > 0 ) , true ) ;
67
68
done ( ) ;
68
69
} , ProcessDataFlag . Memory ) ;
69
70
} , ProcessDataFlag . None ) ;
@@ -72,11 +73,11 @@ describe('getRawProcessList', () => {
72
73
it ( 'should return command line information only when the flag is set' , ( done ) => {
73
74
// commandLine should be undefined when flag is not set
74
75
native . getProcessList ( ( list ) => {
75
- assert . equal ( list . every ( p => p . commandLine === undefined ) , true ) ;
76
+ assert . strictEqual ( list . every ( p => p . commandLine === undefined ) , true ) ;
76
77
77
78
// commandLine should be a string when flag is set
78
79
native . getProcessList ( ( list ) => {
79
- assert . equal ( list . every ( p => typeof p . commandLine === 'string' ) , true ) ;
80
+ assert . strictEqual ( list . every ( p => typeof p . commandLine === 'string' ) , true ) ;
80
81
done ( ) ;
81
82
} , ProcessDataFlag . CommandLine ) ;
82
83
} , ProcessDataFlag . None ) ;
@@ -98,34 +99,34 @@ describe('getProcessList', () => {
98
99
99
100
it ( 'should return a list containing this process' , ( done ) => {
100
101
getProcessList ( process . pid , ( list ) => {
101
- assert . equal ( list . length , 1 ) ;
102
- assert . equal ( list [ 0 ] . name , 'node.exe' ) ;
103
- assert . equal ( list [ 0 ] . pid , process . pid ) ;
104
- assert . equal ( list [ 0 ] . memory , undefined ) ;
105
- assert . equal ( list [ 0 ] . commandLine , undefined ) ;
102
+ assert . strictEqual ( list . length , 1 ) ;
103
+ assert . strictEqual ( list [ 0 ] . name , 'node.exe' ) ;
104
+ assert . strictEqual ( list [ 0 ] . pid , process . pid ) ;
105
+ assert . strictEqual ( list [ 0 ] . memory , undefined ) ;
106
+ assert . strictEqual ( list [ 0 ] . commandLine , undefined ) ;
106
107
done ( ) ;
107
108
} ) ;
108
109
} ) ;
109
110
110
111
it ( 'should return a list containing this process\'s memory if the flag is set' , done => {
111
112
getProcessList ( process . pid , ( list ) => {
112
- assert . equal ( list . length , 1 ) ;
113
- assert . equal ( list [ 0 ] . name , 'node.exe' ) ;
114
- assert . equal ( list [ 0 ] . pid , process . pid ) ;
115
- assert . equal ( typeof list [ 0 ] . memory , 'number' ) ;
113
+ assert . strictEqual ( list . length , 1 ) ;
114
+ assert . strictEqual ( list [ 0 ] . name , 'node.exe' ) ;
115
+ assert . strictEqual ( list [ 0 ] . pid , process . pid ) ;
116
+ assert . strictEqual ( typeof list [ 0 ] . memory , 'number' ) ;
116
117
done ( ) ;
117
118
} , ProcessDataFlag . Memory ) ;
118
119
} ) ;
119
120
120
121
it ( 'should return command line information only if the flag is set' , ( done ) => {
121
122
getProcessList ( process . pid , ( list ) => {
122
- assert . equal ( list . length , 1 ) ;
123
- assert . equal ( list [ 0 ] . name , 'node.exe' ) ;
124
- assert . equal ( list [ 0 ] . pid , process . pid ) ;
125
- assert . equal ( typeof list [ 0 ] . commandLine , 'string' ) ;
123
+ assert . strictEqual ( list . length , 1 ) ;
124
+ assert . strictEqual ( list [ 0 ] . name , 'node.exe' ) ;
125
+ assert . strictEqual ( list [ 0 ] . pid , process . pid ) ;
126
+ assert . strictEqual ( typeof list [ 0 ] . commandLine , 'string' ) ;
126
127
// CommandLine is "<path to node> <path to mocha> lib/test.js"
127
- assert . equal ( list [ 0 ] . commandLine . indexOf ( 'mocha' ) > 0 , true ) ;
128
- assert . equal ( list [ 0 ] . commandLine . indexOf ( 'lib/test.js' ) > 0 , true ) ;
128
+ assert . strictEqual ( list [ 0 ] . commandLine . indexOf ( 'mocha' ) > 0 , true ) ;
129
+ assert . strictEqual ( list [ 0 ] . commandLine . indexOf ( 'lib/test.js' ) > 0 , true ) ;
129
130
done ( ) ;
130
131
} , ProcessDataFlag . CommandLine ) ;
131
132
} ) ;
@@ -146,22 +147,22 @@ describe('getProcessCpuUsage', () => {
146
147
147
148
it ( 'should get process cpu usage' , ( done ) => {
148
149
getProcessCpuUsage ( [ { pid : process . pid , ppid : process . ppid , name : 'node.exe' } ] , ( annotatedList ) => {
149
- assert . equal ( annotatedList . length , 1 ) ;
150
- assert . equal ( annotatedList [ 0 ] . name , 'node.exe' ) ;
151
- assert . equal ( annotatedList [ 0 ] . pid , process . pid ) ;
152
- assert . equal ( annotatedList [ 0 ] . memory , undefined ) ;
153
- assert . equal ( typeof annotatedList [ 0 ] . cpu , 'number' ) ;
154
- assert . equal ( 0 <= annotatedList [ 0 ] . cpu && annotatedList [ 0 ] . cpu <= 100 , true ) ;
150
+ assert . strictEqual ( annotatedList . length , 1 ) ;
151
+ assert . strictEqual ( annotatedList [ 0 ] . name , 'node.exe' ) ;
152
+ assert . strictEqual ( annotatedList [ 0 ] . pid , process . pid ) ;
153
+ assert . strictEqual ( annotatedList [ 0 ] . memory , undefined ) ;
154
+ assert . strictEqual ( typeof annotatedList [ 0 ] . cpu , 'number' ) ;
155
+ assert . strictEqual ( 0 <= annotatedList [ 0 ] . cpu && annotatedList [ 0 ] . cpu <= 100 , true ) ;
155
156
done ( ) ;
156
157
} ) ;
157
158
} ) ;
158
159
159
- it ( 'should handle multiple calls gracefully' , function ( done : MochaDone ) : void {
160
+ it ( 'should handle multiple calls gracefully' , function ( done : Mocha . Done ) : void {
160
161
this . timeout ( 3000 ) ;
161
162
162
163
let counter = 0 ;
163
164
const callback = ( list ) => {
164
- assert . notEqual ( list . find ( p => p . pid === process . pid ) , undefined ) ;
165
+ assert . notStrictEqual ( list . find ( p => p . pid === process . pid ) , undefined ) ;
165
166
if ( ++ counter === 2 ) {
166
167
done ( ) ;
167
168
}
@@ -186,31 +187,31 @@ describe('getProcessTree', () => {
186
187
187
188
it ( 'should return a tree containing this process' , done => {
188
189
getProcessTree ( process . pid , ( tree ) => {
189
- assert . equal ( tree . name , 'node.exe' ) ;
190
- assert . equal ( tree . pid , process . pid ) ;
191
- assert . equal ( tree . memory , undefined ) ;
192
- assert . equal ( tree . commandLine , undefined ) ;
193
- assert . equal ( tree . children . length , 0 ) ;
190
+ assert . strictEqual ( tree . name , 'node.exe' ) ;
191
+ assert . strictEqual ( tree . pid , process . pid ) ;
192
+ assert . strictEqual ( tree . memory , undefined ) ;
193
+ assert . strictEqual ( tree . commandLine , undefined ) ;
194
+ assert . strictEqual ( tree . children . length , 0 ) ;
194
195
done ( ) ;
195
196
} ) ;
196
197
} ) ;
197
198
198
199
it ( 'should return a tree containing this process\'s memory if the flag is set' , done => {
199
200
getProcessTree ( process . pid , ( tree ) => {
200
- assert . equal ( tree . name , 'node.exe' ) ;
201
- assert . equal ( tree . pid , process . pid ) ;
202
- assert . notEqual ( tree . memory , undefined ) ;
203
- assert . equal ( tree . children . length , 0 ) ;
201
+ assert . strictEqual ( tree . name , 'node.exe' ) ;
202
+ assert . strictEqual ( tree . pid , process . pid ) ;
203
+ assert . notStrictEqual ( tree . memory , undefined ) ;
204
+ assert . strictEqual ( tree . children . length , 0 ) ;
204
205
done ( ) ;
205
206
} , ProcessDataFlag . Memory ) ;
206
207
} ) ;
207
208
208
209
it ( 'should return a tree containing this process\'s command line if the flag is set' , done => {
209
210
getProcessTree ( process . pid , ( tree ) => {
210
- assert . equal ( tree . name , 'node.exe' ) ;
211
- assert . equal ( tree . pid , process . pid ) ;
212
- assert . equal ( typeof tree . commandLine , 'string' ) ;
213
- assert . equal ( tree . children . length , 0 ) ;
211
+ assert . strictEqual ( tree . name , 'node.exe' ) ;
212
+ assert . strictEqual ( tree . pid , process . pid ) ;
213
+ assert . strictEqual ( typeof tree . commandLine , 'string' ) ;
214
+ assert . strictEqual ( tree . children . length , 0 ) ;
214
215
done ( ) ;
215
216
} , ProcessDataFlag . CommandLine ) ;
216
217
} ) ;
@@ -250,14 +251,14 @@ describe('buildProcessTree', () => {
250
251
const tree = buildProcessTree ( 0 , [
251
252
{ pid : 0 , ppid : 0 , name : '0' }
252
253
] , 3 ) ;
253
- assert . equal ( tree . pid , 0 ) ;
254
- assert . equal ( tree . children . length , 1 ) ;
255
- assert . equal ( tree . children [ 0 ] . pid , 0 ) ;
256
- assert . equal ( tree . children [ 0 ] . children . length , 1 ) ;
257
- assert . equal ( tree . children [ 0 ] . children [ 0 ] . pid , 0 ) ;
258
- assert . equal ( tree . children [ 0 ] . children [ 0 ] . children . length , 1 ) ;
259
- assert . equal ( tree . children [ 0 ] . children [ 0 ] . children [ 0 ] . pid , 0 ) ;
260
- assert . equal ( tree . children [ 0 ] . children [ 0 ] . children [ 0 ] . children . length , 0 ) ;
254
+ assert . strictEqual ( tree . pid , 0 ) ;
255
+ assert . strictEqual ( tree . children . length , 1 ) ;
256
+ assert . strictEqual ( tree . children [ 0 ] . pid , 0 ) ;
257
+ assert . strictEqual ( tree . children [ 0 ] . children . length , 1 ) ;
258
+ assert . strictEqual ( tree . children [ 0 ] . children [ 0 ] . pid , 0 ) ;
259
+ assert . strictEqual ( tree . children [ 0 ] . children [ 0 ] . children . length , 1 ) ;
260
+ assert . strictEqual ( tree . children [ 0 ] . children [ 0 ] . children [ 0 ] . pid , 0 ) ;
261
+ assert . strictEqual ( tree . children [ 0 ] . children [ 0 ] . children [ 0 ] . children . length , 0 ) ;
261
262
} ) ;
262
263
} ) ;
263
264
@@ -266,10 +267,87 @@ describe('filterProcessList', () => {
266
267
const list = filterProcessList ( 0 , [
267
268
{ pid : 0 , ppid : 0 , name : '0' }
268
269
] , 3 ) ;
269
- assert . equal ( list . length , 4 ) ;
270
- assert . equal ( list [ 0 ] . pid , 0 ) ;
271
- assert . equal ( list [ 1 ] . pid , 0 ) ;
272
- assert . equal ( list [ 2 ] . pid , 0 ) ;
273
- assert . equal ( list [ 3 ] . pid , 0 ) ;
270
+ assert . strictEqual ( list . length , 4 ) ;
271
+ assert . strictEqual ( list [ 0 ] . pid , 0 ) ;
272
+ assert . strictEqual ( list [ 1 ] . pid , 0 ) ;
273
+ assert . strictEqual ( list [ 2 ] . pid , 0 ) ;
274
+ assert . strictEqual ( list [ 3 ] . pid , 0 ) ;
275
+ } ) ;
276
+ } ) ;
277
+
278
+ describe ( 'contextAware' , ( ) => {
279
+ it ( 'should be context aware get process list' , async ( ) => {
280
+ if ( isMainThread ) {
281
+ const workerPromise : Promise < boolean > = new Promise ( resolve => {
282
+ const workerDir = path . join ( __dirname , './testWorker.js' ) ;
283
+ const worker = new Worker ( workerDir ) ;
284
+ worker . on ( 'message' , ( message : string ) => {
285
+ assert . strictEqual ( message , 'done' ) ;
286
+ } ) ;
287
+ worker . on ( 'error' , ( ) => {
288
+ resolve ( false ) ;
289
+ } ) ;
290
+ worker . on ( 'exit' , ( code ) => {
291
+ resolve ( code === 0 ) ;
292
+ } ) ;
293
+ } ) ;
294
+ const processListPromise : Promise < boolean > = new Promise ( resolve => {
295
+ getProcessList ( process . pid , ( list ) => {
296
+ assert . strictEqual ( list . length >= 1 , true ) ;
297
+ assert . strictEqual ( list [ 0 ] . name , 'node.exe' ) ;
298
+ assert . strictEqual ( list [ 0 ] . pid , process . pid ) ;
299
+ assert . strictEqual ( list [ 0 ] . memory , undefined ) ;
300
+ assert . strictEqual ( list [ 0 ] . commandLine , undefined ) ;
301
+ resolve ( true ) ;
302
+ } ) ;
303
+ } ) ;
304
+ const combinedResult = await Promise . all ( [ workerPromise , processListPromise ] ) . then ( results => {
305
+ return results . every ( result => result ) ;
306
+ } , ( ) => {
307
+ return false ;
308
+ } ) ;
309
+ assert . strictEqual ( combinedResult , true ) ;
310
+ }
311
+ } ) ;
312
+
313
+ it ( 'should be context aware multiple workers' , async ( ) => {
314
+ if ( isMainThread ) {
315
+ const makeWorkerPromise = ( ) : Promise < boolean > => {
316
+ return new Promise ( resolve => {
317
+ const workerDir = path . join ( __dirname , './testWorker.js' ) ;
318
+ const worker = new Worker ( workerDir ) ;
319
+ worker . on ( 'message' , ( message : string ) => {
320
+ assert . strictEqual ( message , 'done' ) ;
321
+ } ) ;
322
+ worker . on ( 'error' , ( ) => {
323
+ resolve ( false ) ;
324
+ } ) ;
325
+ worker . on ( 'exit' , ( code ) => {
326
+ resolve ( code === 0 ) ;
327
+ } ) ;
328
+ } ) ;
329
+ } ;
330
+ const workerPromises = [ ] ;
331
+ for ( let i = 0 ; i < 50 ; i ++ ) {
332
+ workerPromises . push ( makeWorkerPromise ( ) ) ;
333
+ }
334
+ const processListPromise : Promise < boolean > = new Promise ( resolve => {
335
+ getProcessList ( process . pid , ( list ) => {
336
+ assert . strictEqual ( list . length >= 1 , true ) ;
337
+ assert . strictEqual ( list [ 0 ] . name , 'node.exe' ) ;
338
+ assert . strictEqual ( list [ 0 ] . pid , process . pid ) ;
339
+ assert . strictEqual ( list [ 0 ] . memory , undefined ) ;
340
+ assert . strictEqual ( list [ 0 ] . commandLine , undefined ) ;
341
+ resolve ( true ) ;
342
+ } ) ;
343
+ } ) ;
344
+ const allPromises = [ ...workerPromises , processListPromise ] ;
345
+ const workerResult = await Promise . all ( allPromises ) . then ( results => {
346
+ return results . every ( result => result ) ;
347
+ } , ( ) => {
348
+ return false ;
349
+ } ) ;
350
+ assert . strictEqual ( workerResult , true ) ;
351
+ }
274
352
} ) ;
275
353
} ) ;
0 commit comments