The first group of tests makes one more connection and leave the server alive for longer. Otherwise the test is just catching that the server has closed the socket, depending on timing. This does not quite make the test pass yet, however. There are some quirks with how the http2 code handles errors which actually affect 1.0.2 as well. PR-URL: https://github.com/nodejs/node/pull/16130 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Rod Vagg <rod@vagg.org>
88 lines
2.4 KiB
JavaScript
88 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
// Tests http2.connect()
|
|
|
|
const common = require('../common');
|
|
const Countdown = require('../common/countdown');
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
const fixtures = require('../common/fixtures');
|
|
const h2 = require('http2');
|
|
const url = require('url');
|
|
const URL = url.URL;
|
|
|
|
{
|
|
const server = h2.createServer();
|
|
server.listen(0);
|
|
|
|
server.on('listening', common.mustCall(function() {
|
|
const port = this.address().port;
|
|
|
|
const items = [
|
|
[`http://localhost:${port}`],
|
|
[new URL(`http://localhost:${port}`)],
|
|
[url.parse(`http://localhost:${port}`)],
|
|
[{ port: port }, { protocol: 'http:' }],
|
|
[{ port: port, hostname: '127.0.0.1' }, { protocol: 'http:' }]
|
|
];
|
|
|
|
const serverClose = new Countdown(items.length + 1,
|
|
() => setImmediate(() => server.close()));
|
|
|
|
const maybeClose = common.mustCall((client) => {
|
|
client.destroy();
|
|
serverClose.dec();
|
|
}, items.length);
|
|
|
|
items.forEach((i) => {
|
|
const client =
|
|
h2.connect.apply(null, i)
|
|
.on('connect', common.mustCall(() => maybeClose(client)));
|
|
});
|
|
|
|
// Will fail because protocol does not match the server.
|
|
h2.connect({ port: port, protocol: 'https:' })
|
|
.on('socketError', common.mustCall(() => serverClose.dec()));
|
|
}));
|
|
}
|
|
|
|
|
|
{
|
|
|
|
const options = {
|
|
key: fixtures.readKey('agent3-key.pem'),
|
|
cert: fixtures.readKey('agent3-cert.pem')
|
|
};
|
|
|
|
const server = h2.createSecureServer(options);
|
|
server.listen(0);
|
|
|
|
server.on('listening', common.mustCall(function() {
|
|
const port = this.address().port;
|
|
|
|
const opts = { rejectUnauthorized: false };
|
|
|
|
const items = [
|
|
[`https://localhost:${port}`, opts],
|
|
[new URL(`https://localhost:${port}`), opts],
|
|
[url.parse(`https://localhost:${port}`), opts],
|
|
[{ port: port, protocol: 'https:' }, opts],
|
|
[{ port: port, hostname: '127.0.0.1', protocol: 'https:' }, opts]
|
|
];
|
|
|
|
const serverClose = new Countdown(items.length,
|
|
() => setImmediate(() => server.close()));
|
|
|
|
const maybeClose = common.mustCall((client) => {
|
|
client.destroy();
|
|
serverClose.dec();
|
|
}, items.length);
|
|
|
|
items.forEach((i) => {
|
|
const client =
|
|
h2.connect.apply(null, i)
|
|
.on('connect', common.mustCall(() => maybeClose(client)));
|
|
});
|
|
}));
|
|
}
|