From abbdcaa6e833864905ded87c3c6b26eefaf7deda Mon Sep 17 00:00:00 2001 From: Trivikram Kamat Date: Tue, 3 Oct 2017 00:44:09 -0700 Subject: [PATCH] test: http2 session operations after destroy Refs #14985 PR-URL: https://github.com/nodejs/node/pull/15758 Reviewed-By: James M Snell Reviewed-By: Minwoo Jung --- ...st-http2-server-destroy-before-shutdown.js | 30 ------------- ...est-http2-server-stream-session-destroy.js | 42 ++++++++++++++----- 2 files changed, 31 insertions(+), 41 deletions(-) delete mode 100644 test/parallel/test-http2-server-destroy-before-shutdown.js 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 f6221c8815..0000000000 --- a/test/parallel/test-http2-server-destroy-before-shutdown.js +++ /dev/null @@ -1,30 +0,0 @@ -'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-stream-session-destroy.js b/test/parallel/test-http2-server-stream-session-destroy.js index 2426216580..f2cc4a1f77 100644 --- a/test/parallel/test-http2-server-stream-session-destroy.js +++ b/test/parallel/test-http2-server-stream-session-destroy.js @@ -11,11 +11,6 @@ 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 @@ -24,15 +19,40 @@ server.on( // 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); + const invalidStreamError = { + type: Error, + code: 'ERR_HTTP2_INVALID_STREAM', + message: 'The stream has been destroyed' + }; + common.expectsError(() => stream.additionalHeaders(), invalidStreamError); + common.expectsError(() => stream.priority(), invalidStreamError); common.expectsError( () => stream.pushStream({}, common.mustNotCall()), - errorObj + invalidStreamError ); - common.expectsError(() => stream.respond(), errorObj); - common.expectsError(() => stream.rstStream(), errorObj); - common.expectsError(() => stream.write('data'), errorObj); + common.expectsError(() => stream.respond(), invalidStreamError); + common.expectsError(() => stream.rstStream(), invalidStreamError); + common.expectsError(() => stream.write('data'), invalidStreamError); + + // Test that ERR_HTTP2_INVALID_SESSION is thrown while calling + // session operations after the stream session has been destroyed + const invalidSessionError = { + type: Error, + code: 'ERR_HTTP2_INVALID_SESSION', + message: 'The session has been destroyed' + }; + common.expectsError(() => stream.session.priority(), invalidSessionError); + common.expectsError(() => stream.session.settings(), invalidSessionError); + common.expectsError(() => stream.session.shutdown(), invalidSessionError); + + // Wait for setImmediate call from destroy() to complete + // so that state.destroyed is set to true + setImmediate((session) => { + common.expectsError(() => session.priority(), invalidSessionError); + common.expectsError(() => session.settings(), invalidSessionError); + common.expectsError(() => session.shutdown(), invalidSessionError); + common.expectsError(() => session.rstStream(), invalidSessionError); + }, stream.session); }) );