diff --git a/doc/api/errors.md b/doc/api/errors.md
index 5127b9f571acc0..2d4f3f02e94e79 100644
--- a/doc/api/errors.md
+++ b/doc/api/errors.md
@@ -580,6 +580,11 @@ by the `assert` module.
Used when attempting to perform an operation outside the bounds of a `Buffer`.
+
+### ERR_CHILD_CLOSED_BEFORE_REPLY
+
+Used when a child process is closed before the parent received a reply.
+
### ERR_CONSOLE_WRITABLE_STREAM
diff --git a/lib/internal/errors.js b/lib/internal/errors.js
index 31c8fa945aeb64..1634a09a893c56 100644
--- a/lib/internal/errors.js
+++ b/lib/internal/errors.js
@@ -102,6 +102,7 @@ module.exports = exports = {
E('ERR_ARG_NOT_ITERABLE', '%s must be iterable');
E('ERR_ASSERTION', '%s');
E('ERR_BUFFER_OUT_OF_BOUNDS', bufferOutOfBounds);
+E('ERR_CHILD_CLOSED_BEFORE_REPLY','Child closed before reply received');
E('ERR_CONSOLE_WRITABLE_STREAM',
'Console expects a writable stream instance for %s');
E('ERR_CPU_USAGE', 'Unable to obtain cpu usage %s');
@@ -176,7 +177,7 @@ E('ERR_UNKNOWN_STDIN_TYPE', 'Unknown stdin file type');
E('ERR_UNKNOWN_STREAM_TYPE', 'Unknown stream file type');
E('ERR_V8BREAKITERATOR', 'Full ICU data not installed. ' +
'See https://github.com/nodejs/node/wiki/Intl');
-// Add new errors from here...
+
function invalidArgType(name, expected, actual) {
assert(name, 'name is required');
diff --git a/lib/internal/socket_list.js b/lib/internal/socket_list.js
index 15e880ba8c13d4..f6091c0c66055d 100644
--- a/lib/internal/socket_list.js
+++ b/lib/internal/socket_list.js
@@ -1,5 +1,7 @@
'use strict';
+const errors = require('internal/errors');
+
const EventEmitter = require('events');
// This object keeps track of the sockets that are sent
@@ -18,7 +20,7 @@ class SocketListSend extends EventEmitter {
function onclose() {
self.child.removeListener('internalMessage', onreply);
- callback(new Error('child closed before reply'));
+ callback(new errors.Error('ERR_CHILD_CLOSED_BEFORE_REPLY'));
}
function onreply(msg) {
diff --git a/test/parallel/test-internal-socket-list-send.js b/test/parallel/test-internal-socket-list-send.js
index 10413bfdbcb839..797baf43f4dd76 100644
--- a/test/parallel/test-internal-socket-list-send.js
+++ b/test/parallel/test-internal-socket-list-send.js
@@ -17,7 +17,11 @@ const key = 'test-key';
const list = new SocketListSend(child, 'test');
list._request('msg', 'cmd', common.mustCall((err) => {
- assert.strictEqual(err.message, 'child closed before reply');
+ common.expectsError({
+ code: 'ERR_CHILD_CLOSED_BEFORE_REPLY',
+ type: Error,
+ message: 'Child closed before reply received'
+ })(err);
assert.strictEqual(child.listenerCount('internalMessage'), 0);
}));
}
@@ -55,7 +59,11 @@ const key = 'test-key';
const list = new SocketListSend(child, key);
list._request('msg', 'cmd', common.mustCall((err) => {
- assert.strictEqual(err.message, 'child closed before reply');
+ common.expectsError({
+ code: 'ERR_CHILD_CLOSED_BEFORE_REPLY',
+ type: Error,
+ message: 'Child closed before reply received'
+ })(err);
assert.strictEqual(child.listenerCount('internalMessage'), 0);
}));
}
@@ -119,7 +127,7 @@ const key = 'test-key';
const count = 1;
const child = Object.assign(new EventEmitter(), {
connected: true,
- send: function(msg) {
+ send: function() {
process.nextTick(() => {
this.emit('disconnect');
this.emit('internalMessage', { key, count, cmd: 'NODE_SOCKET_COUNT' });
@@ -129,8 +137,12 @@ const key = 'test-key';
const list = new SocketListSend(child, key);
- list.getConnections(common.mustCall((err, msg) => {
- assert.strictEqual(err.message, 'child closed before reply');
+ list.getConnections(common.mustCall((err) => {
+ common.expectsError({
+ code: 'ERR_CHILD_CLOSED_BEFORE_REPLY',
+ type: Error,
+ message: 'Child closed before reply received'
+ })(err);
assert.strictEqual(child.listenerCount('internalMessage'), 0);
}));
}