mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
test: fix test-child-process-fork-net
The child processes are supposed to get 4 messages (2 ends, 2 writes). Previously the mustCall() wrapping the message listener attempts to match exactly 1 invocation which is bound to fail but could be swallowed if the child happens to be killed before the exit event is fired for the mustCall() check to work. In the CI, on some machines the kill() could happen after the child process finishes with the mustCall() check, resulting in EPERM errors in kill(). This patch fixes the mustCall() checks (updating the expected invocation count to 4) and swallow the errors when kill() fails, which should be fine because they are only there for cleanup. PR-URL: https://github.com/nodejs/node/pull/51841 Refs: https://github.com/nodejs/node/issues/51813 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
a492646ff1
commit
ec7a2680b2
@ -19,6 +19,9 @@
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// This tests that a socket sent to the forked process works.
|
||||
// See https://github.com/nodejs/node/commit/dceebbfa
|
||||
|
||||
'use strict';
|
||||
const {
|
||||
mustCall,
|
||||
@ -65,7 +68,7 @@ if (process.argv[2] === 'child') {
|
||||
socket.on('finish', mustCall(() => {
|
||||
debug(`[${id}] socket finished ${m}`);
|
||||
}));
|
||||
}));
|
||||
}, 4));
|
||||
|
||||
process.on('message', mustCall((m) => {
|
||||
if (m !== 'close') return;
|
||||
@ -74,7 +77,7 @@ if (process.argv[2] === 'child') {
|
||||
debug(`[${id}] ending ${i}/${needEnd.length}`);
|
||||
endMe.end('end');
|
||||
});
|
||||
}));
|
||||
}, 4));
|
||||
|
||||
process.on('disconnect', mustCall(() => {
|
||||
debug(`[${id}] process disconnect, ending`);
|
||||
@ -146,9 +149,22 @@ if (process.argv[2] === 'child') {
|
||||
server.on('close', mustCall(function() {
|
||||
closeEmitted = true;
|
||||
|
||||
child1.kill();
|
||||
child2.kill();
|
||||
child3.kill();
|
||||
// Clean up child processes.
|
||||
try {
|
||||
child1.kill();
|
||||
} catch {
|
||||
debug('child process already terminated');
|
||||
}
|
||||
try {
|
||||
child2.kill();
|
||||
} catch {
|
||||
debug('child process already terminated');
|
||||
}
|
||||
try {
|
||||
child3.kill();
|
||||
} catch {
|
||||
debug('child process already terminated');
|
||||
}
|
||||
}));
|
||||
|
||||
server.listen(0, '127.0.0.1');
|
||||
|
Loading…
Reference in New Issue
Block a user