Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2017-10-18 01:41:28 +0300
committerMyles Borins <mylesborins@google.com>2017-10-24 00:35:53 +0300
commit63036a8d6db1ed2e1eeb075270f9cac5eceab02c (patch)
tree0b47eca687a29db0127b22c42289b61574cbfc07 /test
parent80b0dcfd2b9424024770757445ece48d5eccabea (diff)
http2: support generic `Duplex` streams
Support generic `Duplex` streams through using `StreamWrap` on the server and client sides, and adding a `createConnection` method option similar to what the HTTP/1 API provides. Since HTTP2 is, as a protocol, independent of its underlying transport layer, Node.js should not enforce any restrictions on what streams its internals may use. Ref: https://github.com/nodejs/node/issues/16256 PR-URL: https://github.com/nodejs/node/pull/16269 Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-http2-generic-streams-sendfile.js40
-rw-r--r--test/parallel/test-http2-generic-streams.js45
2 files changed, 85 insertions, 0 deletions
diff --git a/test/parallel/test-http2-generic-streams-sendfile.js b/test/parallel/test-http2-generic-streams-sendfile.js
new file mode 100644
index 00000000000..1054574a8b1
--- /dev/null
+++ b/test/parallel/test-http2-generic-streams-sendfile.js
@@ -0,0 +1,40 @@
+'use strict';
+const common = require('../common');
+if (!common.hasCrypto)
+ common.skip('missing crypto');
+const assert = require('assert');
+const http2 = require('http2');
+const fs = require('fs');
+const makeDuplexPair = require('../common/duplexpair');
+
+{
+ const server = http2.createServer();
+ server.on('stream', common.mustCall((stream, headers) => {
+ stream.respondWithFile(__filename);
+ }));
+
+ const { clientSide, serverSide } = makeDuplexPair();
+ server.emit('connection', serverSide);
+
+ const client = http2.connect('http://localhost:80', {
+ createConnection: common.mustCall(() => clientSide)
+ });
+
+ const req = client.request({ ':path': '/' });
+
+ req.on('response', common.mustCall((headers) => {
+ assert.strictEqual(headers[':status'], 200);
+ }));
+
+ req.setEncoding('utf8');
+ let data = '';
+ req.on('data', (chunk) => {
+ data += chunk;
+ });
+ req.on('end', common.mustCall(() => {
+ assert.strictEqual(data, fs.readFileSync(__filename, 'utf8'));
+ clientSide.destroy();
+ clientSide.end();
+ }));
+ req.end();
+}
diff --git a/test/parallel/test-http2-generic-streams.js b/test/parallel/test-http2-generic-streams.js
new file mode 100644
index 00000000000..d97e86a5ece
--- /dev/null
+++ b/test/parallel/test-http2-generic-streams.js
@@ -0,0 +1,45 @@
+'use strict';
+const common = require('../common');
+if (!common.hasCrypto)
+ common.skip('missing crypto');
+const assert = require('assert');
+const http2 = require('http2');
+const makeDuplexPair = require('../common/duplexpair');
+
+{
+ const testData = '<h1>Hello World</h1>';
+ const server = http2.createServer();
+ server.on('stream', common.mustCall((stream, headers) => {
+ stream.respond({
+ 'content-type': 'text/html',
+ ':status': 200
+ });
+ stream.end(testData);
+ }));
+
+ const { clientSide, serverSide } = makeDuplexPair();
+ server.emit('connection', serverSide);
+
+ const client = http2.connect('http://localhost:80', {
+ createConnection: common.mustCall(() => clientSide)
+ });
+
+ const req = client.request({ ':path': '/' });
+
+ req.on('response', common.mustCall((headers) => {
+ assert.strictEqual(headers[':status'], 200);
+ }));
+
+ req.setEncoding('utf8');
+ // Note: This is checking that this small amount of data is passed through in
+ // a single chunk, which is unusual for our test suite but seems like a
+ // reasonable assumption here.
+ req.on('data', common.mustCall((data) => {
+ assert.strictEqual(data, testData);
+ }));
+ req.on('end', common.mustCall(() => {
+ clientSide.destroy();
+ clientSide.end();
+ }));
+ req.end();
+}