From 9b8d317d9916dd44b2b3678df05f9daf6eb14c90 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 2 Jul 2020 10:28:23 -0700 Subject: [PATCH] test: fix flaky test-http2-invalidheaderfield Separate test cases to avoid side effects and race conditions. Fixes: https://github.com/nodejs/node/issues/34172 PR-URL: https://github.com/nodejs/node/pull/34173 Reviewed-By: Anna Henningsen Reviewed-By: Andrey Pechkurov --- .../parallel/test-http2-invalidheaderfield.js | 113 +++++++++++------- 1 file changed, 67 insertions(+), 46 deletions(-) diff --git a/test/parallel/test-http2-invalidheaderfield.js b/test/parallel/test-http2-invalidheaderfield.js index 0ff8503b8cf79b..0544113f0bd7a7 100644 --- a/test/parallel/test-http2-invalidheaderfield.js +++ b/test/parallel/test-http2-invalidheaderfield.js @@ -10,56 +10,77 @@ if (!common.hasCrypto) { common.skip('missing crypto'); } const http2 = require('http2'); const { throws, strictEqual } = require('assert'); -const server = http2.createServer(common.mustCall((req, res) => { - throws(() => { - res.setHeader(':path', '/'); - }, { - code: 'ERR_HTTP2_PSEUDOHEADER_NOT_ALLOWED' - }); - throws(() => { - res.setHeader('t est', 123); - }, { - code: 'ERR_INVALID_HTTP_TOKEN' - }); - res.setHeader('TEST', 123); - res.setHeader('test_', 123); - res.setHeader(' test', 123); - res.end(); -})); +{ + const server = http2.createServer(common.mustCall((req, res) => { + throws(() => { + res.setHeader(':path', '/'); + }, { + code: 'ERR_HTTP2_PSEUDOHEADER_NOT_ALLOWED' + }); + throws(() => { + res.setHeader('t est', 123); + }, { + code: 'ERR_INVALID_HTTP_TOKEN' + }); + res.setHeader('TEST', 123); + res.setHeader('test_', 123); + res.setHeader(' test', 123); + res.end(); + })); + + server.listen(0, common.mustCall(() => { + const session = http2.connect(`http://localhost:${server.address().port}`); + session.request({ 'test_': 123, 'TEST': 123 }) + .on('end', common.mustCall(() => { + session.close(); + server.close(); + })); + })); +} -server.listen(0, common.mustCall(() => { - const session1 = http2.connect(`http://localhost:${server.address().port}`); - session1.request({ 'test_': 123, 'TEST': 123 }) - .on('end', common.mustCall(() => { - session1.close(); +{ + const server = http2.createServer(); + server.listen(0, common.mustCall(() => { + const session = http2.connect(`http://localhost:${server.address().port}`); + session.on('error', common.mustCall((e) => { + strictEqual(e.code, 'ERR_INVALID_HTTP_TOKEN'); server.close(); })); - - const session2 = http2.connect(`http://localhost:${server.address().port}`); - session2.on('error', common.mustCall((e) => { - strictEqual(e.code, 'ERR_INVALID_HTTP_TOKEN'); + throws(() => { + session.request({ 't est': 123 }); + }, { + code: 'ERR_INVALID_HTTP_TOKEN' + }); })); - throws(() => { - session2.request({ 't est': 123 }); - }, { - code: 'ERR_INVALID_HTTP_TOKEN' - }); +} - const session3 = http2.connect(`http://localhost:${server.address().port}`); - session3.on('error', common.mustCall((e) => { - strictEqual(e.code, 'ERR_INVALID_HTTP_TOKEN'); + +{ + const server = http2.createServer(); + server.listen(0, common.mustCall(() => { + const session = http2.connect(`http://localhost:${server.address().port}`); + session.on('error', common.mustCall((e) => { + strictEqual(e.code, 'ERR_INVALID_HTTP_TOKEN'); + server.close(); + })); + throws(() => { + session.request({ ' test': 123 }); + }, { + code: 'ERR_INVALID_HTTP_TOKEN' + }); })); - throws(() => { - session3.request({ ' test': 123 }); - }, { - code: 'ERR_INVALID_HTTP_TOKEN' - }); +} - const session4 = http2.connect(`http://localhost:${server.address().port}`); - throws(() => { - session4.request({ ':test': 123 }); - }, { - code: 'ERR_HTTP2_INVALID_PSEUDOHEADER' - }); - session4.close(); -})); +{ + const server = http2.createServer(); + server.listen(0, common.mustCall(() => { + const session4 = http2.connect(`http://localhost:${server.address().port}`); + throws(() => { + session4.request({ ':test': 123 }); + }, { + code: 'ERR_HTTP2_INVALID_PSEUDOHEADER' + }); + session4.close(); + server.close(); + })); +}