aboutsummaryrefslogtreecommitdiff
path: root/test/parallel/test-http2-server-push-stream-errors-args.js
diff options
context:
space:
mode:
authorAnatoli Papirovski <apapirovski@mac.com>2017-09-13 09:34:14 -0400
committerMatteo Collina <hello@matteocollina.com>2017-09-13 18:14:03 +0200
commit1aca135cb9a8cacda5d01206d7a8e4a31c521d44 (patch)
treeca51f32f91b804d116be7d28f1dc4a656a33e3ec /test/parallel/test-http2-server-push-stream-errors-args.js
parent0dad97cdec754f4be82f32645342a1a28ea06501 (diff)
downloadandroid-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.js57
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();
+}));