test: mock the lookup function in parallel tests
These tests should not make any DNS calls. The lookup would fail when the DNS requests are hijacked and time out instead of erroring out. PR-URL: https://github.com/nodejs/node/pull/17296 Refs: https://github.com/nodejs/help/issues/687 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
59ed40a8a6
commit
0fb1e07689
@ -1,11 +1,21 @@
|
||||
'use strict';
|
||||
|
||||
// This tests that the error emitted on the socket does
|
||||
// not get fired again when the 'error' event handler throws
|
||||
// an error.
|
||||
|
||||
const assert = require('assert');
|
||||
const http = require('http');
|
||||
const common = require('../common');
|
||||
const { addresses } = require('../common/internet');
|
||||
const { errorLookupMock } = require('../common/dns');
|
||||
|
||||
// Invalid hostname as per https://tools.ietf.org/html/rfc2606#section-2
|
||||
const host = 'this.hostname.is.invalid';
|
||||
const req = http.get({ host });
|
||||
const host = addresses.INVALID_HOST;
|
||||
|
||||
const req = http.get({
|
||||
host,
|
||||
lookup: common.mustCall(errorLookupMock())
|
||||
});
|
||||
const err = new Error('mock unexpected code error');
|
||||
req.on('error', common.mustCall(() => {
|
||||
throw err;
|
||||
|
@ -1,21 +1,30 @@
|
||||
'use strict';
|
||||
|
||||
// This tests that the error thrown from net.createConnection
|
||||
// comes with host and port properties.
|
||||
// See https://github.com/nodejs/node-v0.x-archive/issues/7005
|
||||
|
||||
const common = require('../common');
|
||||
const net = require('net');
|
||||
const assert = require('assert');
|
||||
|
||||
const { addresses } = require('../common/internet');
|
||||
const {
|
||||
errorLookupMock,
|
||||
mockedErrorCode
|
||||
} = require('../common/dns');
|
||||
|
||||
// Using port 0 as hostname used is already invalid.
|
||||
const c = net.createConnection(0, 'this.hostname.is.invalid');
|
||||
const c = net.createConnection({
|
||||
port: 0,
|
||||
host: addresses.INVALID_HOST,
|
||||
lookup: common.mustCall(errorLookupMock())
|
||||
});
|
||||
|
||||
c.on('connect', common.mustNotCall());
|
||||
|
||||
c.on('error', common.mustCall(function(e) {
|
||||
// If Name Service Switch is available on the operating system then it
|
||||
// might be configured differently (/etc/nsswitch.conf).
|
||||
// If the system is configured with no dns the error code will be EAI_AGAIN,
|
||||
// but if there are more services after the dns entry, for example some
|
||||
// linux distributions ship a myhostname service by default which would
|
||||
// still produce the ENOTFOUND error.
|
||||
assert.ok(e.code === 'ENOTFOUND' || e.code === 'EAI_AGAIN');
|
||||
assert.strictEqual(e.code, mockedErrorCode);
|
||||
assert.strictEqual(e.port, 0);
|
||||
assert.strictEqual(e.hostname, 'this.hostname.is.invalid');
|
||||
assert.strictEqual(e.hostname, addresses.INVALID_HOST);
|
||||
}));
|
||||
|
@ -20,28 +20,35 @@
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
'use strict';
|
||||
|
||||
// This tests that if the socket is still in the 'connecting' state
|
||||
// when the user calls socket.end() ('finish'), the socket would emit
|
||||
// 'connect' and defer the handling until the 'connect' event is handled.
|
||||
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const net = require('net');
|
||||
|
||||
const { addresses } = require('../common/internet');
|
||||
const {
|
||||
errorLookupMock,
|
||||
mockedErrorCode,
|
||||
mockedSysCall
|
||||
} = require('../common/dns');
|
||||
|
||||
const client = net.connect({
|
||||
host: 'this.hostname.is.invalid',
|
||||
port: common.PORT
|
||||
host: addresses.INVALID_HOST,
|
||||
port: common.PORT,
|
||||
lookup: common.mustCall(errorLookupMock())
|
||||
});
|
||||
|
||||
client.once('error', common.mustCall((err) => {
|
||||
assert(err);
|
||||
assert.strictEqual(err.code, err.errno);
|
||||
// If Name Service Switch is available on the operating system then it
|
||||
// might be configured differently (/etc/nsswitch.conf).
|
||||
// If the system is configured with no dns the error code will be EAI_AGAIN,
|
||||
// but if there are more services after the dns entry, for example some
|
||||
// linux distributions ship a myhostname service by default which would
|
||||
// still produce the ENOTFOUND error.
|
||||
assert.ok(err.code === 'ENOTFOUND' || err.code === 'EAI_AGAIN');
|
||||
assert.strictEqual(err.code, mockedErrorCode);
|
||||
assert.strictEqual(err.host, err.hostname);
|
||||
assert.strictEqual(err.host, 'this.hostname.is.invalid');
|
||||
assert.strictEqual(err.syscall, 'getaddrinfo');
|
||||
assert.strictEqual(err.host, addresses.INVALID_HOST);
|
||||
assert.strictEqual(err.syscall, mockedSysCall);
|
||||
}));
|
||||
|
||||
client.end();
|
||||
|
Loading…
x
Reference in New Issue
Block a user