-
Notifications
You must be signed in to change notification settings - Fork 29.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
child_process: allow promisified exec to be cancel
Using new AbortController, add support for promisified exec to be cancelled. PR-URL: #34249 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
- Loading branch information
1 parent
d76400a
commit 7b78c67
Showing
4 changed files
with
158 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
51 changes: 51 additions & 0 deletions
51
test/parallel/test-child-process-exec-abortcontroller-promisified.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
'use strict'; | ||
const common = require('../common'); | ||
const assert = require('assert'); | ||
const exec = require('child_process').exec; | ||
const { promisify } = require('util'); | ||
|
||
let pwdcommand, dir; | ||
const execPromisifed = promisify(exec); | ||
const invalidArgTypeError = { | ||
code: 'ERR_INVALID_ARG_TYPE', | ||
name: 'TypeError' | ||
}; | ||
|
||
|
||
if (common.isWindows) { | ||
pwdcommand = 'echo %cd%'; | ||
dir = 'c:\\windows'; | ||
} else { | ||
pwdcommand = 'pwd'; | ||
dir = '/dev'; | ||
} | ||
|
||
|
||
{ | ||
const ac = new AbortController(); | ||
const signal = ac.signal; | ||
const promise = execPromisifed(pwdcommand, { cwd: dir, signal }); | ||
assert.rejects(promise, /AbortError/).then(common.mustCall()); | ||
ac.abort(); | ||
} | ||
|
||
{ | ||
assert.throws(() => { | ||
execPromisifed(pwdcommand, { cwd: dir, signal: {} }); | ||
}, invalidArgTypeError); | ||
} | ||
|
||
{ | ||
function signal() {} | ||
assert.throws(() => { | ||
execPromisifed(pwdcommand, { cwd: dir, signal }); | ||
}, invalidArgTypeError); | ||
} | ||
|
||
{ | ||
const ac = new AbortController(); | ||
const signal = (ac.abort(), ac.signal); | ||
const promise = execPromisifed(pwdcommand, { cwd: dir, signal }); | ||
|
||
assert.rejects(promise, /AbortError/).then(common.mustCall()); | ||
} |
58 changes: 58 additions & 0 deletions
58
test/parallel/test-child-process-execFile-promisified-abortController.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
'use strict'; | ||
|
||
const common = require('../common'); | ||
const assert = require('assert'); | ||
const { promisify } = require('util'); | ||
const execFile = require('child_process').execFile; | ||
const fixtures = require('../common/fixtures'); | ||
|
||
const echoFixture = fixtures.path('echo.js'); | ||
const promisified = promisify(execFile); | ||
const invalidArgTypeError = { | ||
code: 'ERR_INVALID_ARG_TYPE', | ||
name: 'TypeError' | ||
}; | ||
|
||
{ | ||
// Verify that the signal option works properly | ||
const ac = new AbortController(); | ||
const signal = ac.signal; | ||
const promise = promisified(process.execPath, [echoFixture, 0], { signal }); | ||
|
||
ac.abort(); | ||
|
||
assert.rejects( | ||
promise, | ||
{ name: 'AbortError' } | ||
).then(common.mustCall()); | ||
} | ||
|
||
{ | ||
// Verify that the signal option works properly when already aborted | ||
const ac = new AbortController(); | ||
const { signal } = ac; | ||
ac.abort(); | ||
|
||
assert.rejects( | ||
promisified(process.execPath, [echoFixture, 0], { signal }), | ||
{ name: 'AbortError' } | ||
).then(common.mustCall()); | ||
} | ||
|
||
{ | ||
// Verify that if something different than Abortcontroller.signal | ||
// is passed, ERR_INVALID_ARG_TYPE is thrown | ||
const signal = {}; | ||
assert.throws(() => { | ||
promisified(process.execPath, [echoFixture, 0], { signal }); | ||
}, invalidArgTypeError); | ||
} | ||
|
||
{ | ||
// Verify that if something different than Abortcontroller.signal | ||
// is passed, ERR_INVALID_ARG_TYPE is thrown | ||
const signal = 'world!'; | ||
assert.throws(() => { | ||
promisified(process.execPath, [echoFixture, 0], { signal }); | ||
}, invalidArgTypeError); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters