Skip to content

Commit

Permalink
http2: fix flaky test-http2-https-fallback
Browse files Browse the repository at this point in the history
The test was flaky because it relied on a specific order of
asynchronous operation that were fired paralellely. This was true
on most platform and conditions, but not all the time.

See: nodejs#18986

PR-URL: nodejs#19093
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
  • Loading branch information
mcollina authored and kjin committed May 1, 2018
1 parent 74212aa commit 16e9b8d
Showing 1 changed file with 29 additions and 16 deletions.
45 changes: 29 additions & 16 deletions test/parallel/test-http2-https-fallback.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ function onRequest(request, response) {
}));
}

function onSession(session) {
function onSession(session, next) {
const headers = {
':path': '/',
':method': 'GET',
Expand All @@ -54,6 +54,10 @@ function onSession(session) {

session.close();
this.cleanup();

if (typeof next === 'function') {
next();
}
}));
request.end();
}
Expand Down Expand Up @@ -126,22 +130,31 @@ function onSession(session) {
connect(
origin,
clientOptions,
common.mustCall(onSession.bind({ cleanup, server }))
common.mustCall(function(session) {
onSession.call({ cleanup, server },
session,
common.mustCall(testNoTls));
})
);

// HTTP/1.1 client
get(Object.assign(parse(origin), clientOptions), common.mustNotCall())
.on('error', common.mustCall(cleanup))
.end();

// Incompatible ALPN TLS client
let text = '';
tls(Object.assign({ port, ALPNProtocols: ['fake'] }, clientOptions))
.setEncoding('utf8')
.on('data', (chunk) => text += chunk)
.on('end', common.mustCall(() => {
ok(/Unknown ALPN Protocol, expected `h2` to be available/.test(text));
cleanup();
}));
function testNoTls() {
// HTTP/1.1 client
get(Object.assign(parse(origin), clientOptions), common.mustNotCall)
.on('error', common.mustCall(cleanup))
.on('error', common.mustCall(testWrongALPN))
.end();
}

function testWrongALPN() {
// Incompatible ALPN TLS client
let text = '';
tls(Object.assign({ port, ALPNProtocols: ['fake'] }, clientOptions))
.setEncoding('utf8')
.on('data', (chunk) => text += chunk)
.on('end', common.mustCall(() => {
ok(/Unknown ALPN Protocol, expected `h2` to be available/.test(text));
cleanup();
}));
}
}));
}

0 comments on commit 16e9b8d

Please sign in to comment.