diff options
author | Anna Henningsen <anna@addaleax.net> | 2017-10-18 01:41:28 +0300 |
---|---|---|
committer | Myles Borins <mylesborins@google.com> | 2017-10-24 00:35:53 +0300 |
commit | 63036a8d6db1ed2e1eeb075270f9cac5eceab02c (patch) | |
tree | 0b47eca687a29db0127b22c42289b61574cbfc07 /test | |
parent | 80b0dcfd2b9424024770757445ece48d5eccabea (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.js | 40 | ||||
-rw-r--r-- | test/parallel/test-http2-generic-streams.js | 45 |
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(); +} |