From fadf48103b37d46bf55c792cffa70684134d1b3c Mon Sep 17 00:00:00 2001 From: Trivikram Kamat Date: Sun, 15 Oct 2017 22:20:44 -0700 Subject: [PATCH] test: consolidate http2 tests in one file PR-URL: https://github.com/nodejs/node/pull/15624 Refs: https://github.com/nodejs/node/issues/14985 Reviewed-By: Matteo Collina Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Ruben Bridgewater --- ...-http2-server-destroy-before-additional.js | 40 ---------------- ...st-http2-server-destroy-before-priority.js | 41 ---------------- .../test-http2-server-destroy-before-push.js | 40 ---------------- ...est-http2-server-destroy-before-respond.js | 40 ---------------- .../test-http2-server-destroy-before-rst.js | 41 ---------------- ...st-http2-server-destroy-before-shutdown.js | 31 ------------ .../test-http2-server-destroy-before-state.js | 37 -------------- .../test-http2-server-destroy-before-write.js | 40 ---------------- ...est-http2-server-stream-session-destroy.js | 48 +++++++++++++++++++ 9 files changed, 48 insertions(+), 310 deletions(-) delete mode 100644 test/parallel/test-http2-server-destroy-before-additional.js delete mode 100644 test/parallel/test-http2-server-destroy-before-priority.js delete mode 100644 test/parallel/test-http2-server-destroy-before-push.js delete mode 100644 test/parallel/test-http2-server-destroy-before-respond.js delete mode 100644 test/parallel/test-http2-server-destroy-before-rst.js delete mode 100644 test/parallel/test-http2-server-destroy-before-shutdown.js delete mode 100644 test/parallel/test-http2-server-destroy-before-state.js delete mode 100644 test/parallel/test-http2-server-destroy-before-write.js create mode 100644 test/parallel/test-http2-server-stream-session-destroy.js diff --git a/test/parallel/test-http2-server-destroy-before-additional.js b/test/parallel/test-http2-server-destroy-before-additional.js deleted file mode 100644 index 5e04a87323e4c1..00000000000000 --- a/test/parallel/test-http2-server-destroy-before-additional.js +++ /dev/null @@ -1,40 +0,0 @@ -// Flags: --expose-http2 -'use strict'; - -const common = require('../common'); -if (!common.hasCrypto) - common.skip('missing crypto'); -const assert = require('assert'); -const h2 = require('http2'); - -const server = h2.createServer(); - -// we use the lower-level API here -server.on('stream', common.mustCall(onStream)); - -function onStream(stream, headers, flags) { - stream.session.destroy(); - assert.throws(() => stream.additionalHeaders({}), - common.expectsError({ - code: 'ERR_HTTP2_INVALID_STREAM', - message: /^The stream has been destroyed$/ - })); -} - -server.listen(0); - -server.on('listening', common.mustCall(() => { - - const client = h2.connect(`http://localhost:${server.address().port}`); - - const req = client.request({ ':path': '/' }); - - req.on('response', common.mustNotCall()); - req.resume(); - req.on('end', common.mustCall(() => { - server.close(); - client.destroy(); - })); - req.end(); - -})); diff --git a/test/parallel/test-http2-server-destroy-before-priority.js b/test/parallel/test-http2-server-destroy-before-priority.js deleted file mode 100644 index 74d7c011ba0be1..00000000000000 --- a/test/parallel/test-http2-server-destroy-before-priority.js +++ /dev/null @@ -1,41 +0,0 @@ -// Flags: --expose-http2 -'use strict'; - -const common = require('../common'); -if (!common.hasCrypto) - common.skip('missing crypto'); -const assert = require('assert'); -const http2 = require('http2'); - -const server = http2.createServer(); - -// Test that ERR_HTTP2_INVALID_STREAM is thrown when a stream is destroyed -// before calling stream.priority -server.on('stream', common.mustCall(onStream)); - -function onStream(stream, headers, flags) { - stream.session.destroy(); - assert.throws(() => stream.priority(), - common.expectsError({ - code: 'ERR_HTTP2_INVALID_STREAM', - message: /^The stream has been destroyed$/ - })); -} - -server.listen(0); - -server.on('listening', common.mustCall(() => { - - const client = http2.connect(`http://localhost:${server.address().port}`); - - const req = client.request({ ':path': '/' }); - - req.on('response', common.mustNotCall()); - req.resume(); - req.on('end', common.mustCall(() => { - server.close(); - client.destroy(); - })); - req.end(); - -})); diff --git a/test/parallel/test-http2-server-destroy-before-push.js b/test/parallel/test-http2-server-destroy-before-push.js deleted file mode 100644 index 429f37e2c68362..00000000000000 --- a/test/parallel/test-http2-server-destroy-before-push.js +++ /dev/null @@ -1,40 +0,0 @@ -// Flags: --expose-http2 -'use strict'; - -const common = require('../common'); -if (!common.hasCrypto) - common.skip('missing crypto'); -const assert = require('assert'); -const h2 = require('http2'); - -const server = h2.createServer(); - -// we use the lower-level API here -server.on('stream', common.mustCall(onStream)); - -function onStream(stream, headers, flags) { - stream.session.destroy(); - assert.throws(() => stream.pushStream({}, common.mustNotCall()), - common.expectsError({ - code: 'ERR_HTTP2_INVALID_STREAM', - message: /^The stream has been destroyed$/ - })); -} - -server.listen(0); - -server.on('listening', common.mustCall(() => { - - const client = h2.connect(`http://localhost:${server.address().port}`); - - const req = client.request({ ':path': '/' }); - - req.on('response', common.mustNotCall()); - req.resume(); - req.on('end', common.mustCall(() => { - server.close(); - client.destroy(); - })); - req.end(); - -})); diff --git a/test/parallel/test-http2-server-destroy-before-respond.js b/test/parallel/test-http2-server-destroy-before-respond.js deleted file mode 100644 index 4ea64e82812be1..00000000000000 --- a/test/parallel/test-http2-server-destroy-before-respond.js +++ /dev/null @@ -1,40 +0,0 @@ -// Flags: --expose-http2 -'use strict'; - -const common = require('../common'); -if (!common.hasCrypto) - common.skip('missing crypto'); -const assert = require('assert'); -const h2 = require('http2'); - -const server = h2.createServer(); - -// we use the lower-level API here -server.on('stream', common.mustCall(onStream)); - -function onStream(stream, headers, flags) { - stream.session.destroy(); - assert.throws(() => stream.respond({}), - common.expectsError({ - code: 'ERR_HTTP2_INVALID_STREAM', - message: /^The stream has been destroyed$/ - })); -} - -server.listen(0); - -server.on('listening', common.mustCall(() => { - - const client = h2.connect(`http://localhost:${server.address().port}`); - - const req = client.request({ ':path': '/' }); - - req.on('response', common.mustNotCall()); - req.resume(); - req.on('end', common.mustCall(() => { - server.close(); - client.destroy(); - })); - req.end(); - -})); diff --git a/test/parallel/test-http2-server-destroy-before-rst.js b/test/parallel/test-http2-server-destroy-before-rst.js deleted file mode 100644 index f066e76b5f97de..00000000000000 --- a/test/parallel/test-http2-server-destroy-before-rst.js +++ /dev/null @@ -1,41 +0,0 @@ -// Flags: --expose-http2 -'use strict'; - -const common = require('../common'); -if (!common.hasCrypto) - common.skip('missing crypto'); -const assert = require('assert'); -const http2 = require('http2'); - -const server = http2.createServer(); - -// Test that ERR_HTTP2_INVALID_STREAM is thrown when a stream is destroyed -// before calling stream.rstStream -server.on('stream', common.mustCall(onStream)); - -function onStream(stream, headers, flags) { - stream.session.destroy(); - assert.throws(() => stream.rstStream(), - common.expectsError({ - code: 'ERR_HTTP2_INVALID_STREAM', - message: /^The stream has been destroyed$/ - })); -} - -server.listen(0); - -server.on('listening', common.mustCall(() => { - - const client = http2.connect(`http://localhost:${server.address().port}`); - - const req = client.request({ ':path': '/' }); - - req.on('response', common.mustNotCall()); - req.resume(); - req.on('end', common.mustCall(() => { - server.close(); - client.destroy(); - })); - req.end(); - -})); diff --git a/test/parallel/test-http2-server-destroy-before-shutdown.js b/test/parallel/test-http2-server-destroy-before-shutdown.js deleted file mode 100644 index 87bf2438c12015..00000000000000 --- a/test/parallel/test-http2-server-destroy-before-shutdown.js +++ /dev/null @@ -1,31 +0,0 @@ -// Flags: --expose-http2 -'use strict'; - -const common = require('../common'); -if (!common.hasCrypto) - common.skip('missing crypto'); -const http2 = require('http2'); - -const server = http2.createServer(); - -// Test that ERR_HTTP2_INVALID_SESSION is thrown when a stream is destroyed -// before calling stream.session.shutdown -server.on('stream', common.mustCall((stream) => { - stream.session.destroy(); - common.expectsError( - () => stream.session.shutdown(), - { - type: Error, - code: 'ERR_HTTP2_INVALID_SESSION', - message: 'The session has been destroyed' - } - ); -})); - -server.listen(0, common.mustCall(() => { - const client = http2.connect(`http://localhost:${server.address().port}`); - - const req = client.request(); - req.resume(); - req.on('end', common.mustCall(() => server.close())); -})); diff --git a/test/parallel/test-http2-server-destroy-before-state.js b/test/parallel/test-http2-server-destroy-before-state.js deleted file mode 100644 index f5dce3e30a272d..00000000000000 --- a/test/parallel/test-http2-server-destroy-before-state.js +++ /dev/null @@ -1,37 +0,0 @@ -// Flags: --expose-http2 -'use strict'; - -const common = require('../common'); -if (!common.hasCrypto) - common.skip('missing crypto'); -const assert = require('assert'); -const http2 = require('http2'); - -const server = http2.createServer(); - -// Test that stream.state getter returns and empty object -// if the stream session has been destroyed -server.on('stream', common.mustCall(onStream)); - -function onStream(stream, headers, flags) { - stream.session.destroy(); - assert.deepStrictEqual(Object.create(null), stream.state); -} - -server.listen(0); - -server.on('listening', common.mustCall(() => { - - const client = http2.connect(`http://localhost:${server.address().port}`); - - const req = client.request({ ':path': '/' }); - - req.on('response', common.mustNotCall()); - req.resume(); - req.on('end', common.mustCall(() => { - server.close(); - client.destroy(); - })); - req.end(); - -})); diff --git a/test/parallel/test-http2-server-destroy-before-write.js b/test/parallel/test-http2-server-destroy-before-write.js deleted file mode 100644 index 724e12624ef608..00000000000000 --- a/test/parallel/test-http2-server-destroy-before-write.js +++ /dev/null @@ -1,40 +0,0 @@ -// Flags: --expose-http2 -'use strict'; - -const common = require('../common'); -if (!common.hasCrypto) - common.skip('missing crypto'); -const assert = require('assert'); -const h2 = require('http2'); - -const server = h2.createServer(); - -// we use the lower-level API here -server.on('stream', common.mustCall(onStream)); - -function onStream(stream, headers, flags) { - stream.session.destroy(); - assert.throws(() => stream.write('data'), - common.expectsError({ - code: 'ERR_HTTP2_INVALID_STREAM', - type: Error - })); -} - -server.listen(0); - -server.on('listening', common.mustCall(() => { - - const client = h2.connect(`http://localhost:${server.address().port}`); - - const req = client.request({ ':path': '/' }); - - req.on('response', common.mustNotCall()); - req.resume(); - req.on('end', common.mustCall(() => { - server.close(); - client.destroy(); - })); - req.end(); - -})); diff --git a/test/parallel/test-http2-server-stream-session-destroy.js b/test/parallel/test-http2-server-stream-session-destroy.js new file mode 100644 index 00000000000000..05e519cce405cd --- /dev/null +++ b/test/parallel/test-http2-server-stream-session-destroy.js @@ -0,0 +1,48 @@ +// Flags: --expose-http2 +'use strict'; + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); +const assert = require('assert'); +const h2 = require('http2'); + +const server = h2.createServer(); + +server.on( + 'stream', + common.mustCall((stream) => { + const errorObj = { + type: Error, + code: 'ERR_HTTP2_INVALID_STREAM', + message: 'The stream has been destroyed' + }; + stream.session.destroy(); + + // Test that stream.state getter returns an empty object + // when the stream session has been destroyed + assert.deepStrictEqual(Object.create(null), stream.state); + + // Test that ERR_HTTP2_INVALID_STREAM is thrown while calling + // stream operations after the stream session has been destroyed + common.expectsError(() => stream.additionalHeaders(), errorObj); + common.expectsError(() => stream.priority(), errorObj); + common.expectsError( + () => stream.pushStream({}, common.mustNotCall()), + errorObj + ); + common.expectsError(() => stream.respond(), errorObj); + common.expectsError(() => stream.rstStream(), errorObj); + common.expectsError(() => stream.write('data'), errorObj); + }) +); + +server.listen( + 0, + common.mustCall(() => { + const client = h2.connect(`http://localhost:${server.address().port}`); + const req = client.request(); + req.resume(); + req.on('end', common.mustCall(() => server.close())); + }) +);