diff options
author | Anatoli Papirovski <apapirovski@mac.com> | 2017-09-13 09:34:14 -0400 |
---|---|---|
committer | Matteo Collina <hello@matteocollina.com> | 2017-09-13 18:14:03 +0200 |
commit | 1aca135cb9a8cacda5d01206d7a8e4a31c521d44 (patch) | |
tree | ca51f32f91b804d116be7d28f1dc4a656a33e3ec /test/parallel/test-http2-server-push-stream-errors-args.js | |
parent | 0dad97cdec754f4be82f32645342a1a28ea06501 (diff) | |
download | android-node-v8-1aca135cb9a8cacda5d01206d7a8e4a31c521d44.tar.gz android-node-v8-1aca135cb9a8cacda5d01206d7a8e4a31c521d44.tar.bz2 android-node-v8-1aca135cb9a8cacda5d01206d7a8e4a31c521d44.zip |
http2: add tests for push stream error handling
Add tests that cover errors for wrong arguments, as well as
tests for error codes from nghttp2. Fix pushStream to emit
NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE on session rather than
stream.
PR-URL: https://github.com/nodejs/node/pull/15281
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'test/parallel/test-http2-server-push-stream-errors-args.js')
-rw-r--r-- | test/parallel/test-http2-server-push-stream-errors-args.js | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/parallel/test-http2-server-push-stream-errors-args.js b/test/parallel/test-http2-server-push-stream-errors-args.js new file mode 100644 index 0000000000..7d0c104594 --- /dev/null +++ b/test/parallel/test-http2-server-push-stream-errors-args.js @@ -0,0 +1,57 @@ +// Flags: --expose-http2 +'use strict'; + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); +const assert = require('assert'); +const http2 = require('http2'); + +// Check that pushStream handles being passed wrong arguments +// in the expected manner + +const server = http2.createServer(); +server.on('stream', common.mustCall((stream, headers) => { + const port = server.address().port; + + // Must receive a callback (function) + common.expectsError( + () => stream.pushStream({ + ':scheme': 'http', + ':path': '/foobar', + ':authority': `localhost:${port}`, + }, {}, 'callback'), + { + code: 'ERR_INVALID_CALLBACK', + message: 'Callback must be a function' + } + ); + + // Must validate headers + common.expectsError( + () => stream.pushStream({ 'connection': 'test' }, {}, () => {}), + { + code: 'ERR_HTTP2_INVALID_CONNECTION_HEADERS', + message: 'HTTP/1 Connection specific headers are forbidden' + } + ); + + stream.end('test'); +})); + +server.listen(0, common.mustCall(() => { + const port = server.address().port; + const headers = { ':path': '/' }; + const client = http2.connect(`http://localhost:${port}`); + const req = client.request(headers); + req.setEncoding('utf8'); + + let data = ''; + req.on('data', common.mustCall((d) => data += d)); + req.on('end', common.mustCall(() => { + assert.strictEqual(data, 'test'); + server.close(); + client.destroy(); + })); + req.end(); +})); |