diff options
author | James M Snell <jasnell@gmail.com> | 2017-12-12 11:34:17 -0800 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2017-12-18 10:19:21 -0800 |
commit | 0babd181a0c5d775e62a12b3b04fe4d7654fe80a (patch) | |
tree | cf02bdb6a71b8d346109d1ab66e18c559dbf5a23 /test/parallel/test-http2-dont-lose-data.js | |
parent | 18ca0b64422337cc6844949b9b97f39fef82f512 (diff) | |
download | android-node-v8-0babd181a0c5d775e62a12b3b04fe4d7654fe80a.tar.gz android-node-v8-0babd181a0c5d775e62a12b3b04fe4d7654fe80a.tar.bz2 android-node-v8-0babd181a0c5d775e62a12b3b04fe4d7654fe80a.zip |
http2: cleanup Http2Stream/Http2Session destroy
PR-URL: https://github.com/nodejs/node/pull/17406
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
This is a significant cleanup and refactoring of the
cleanup/close/destroy logic for Http2Stream and Http2Session.
There are significant changes here in the timing and ordering
of cleanup logic, JS apis. and various related necessary edits.
Diffstat (limited to 'test/parallel/test-http2-dont-lose-data.js')
-rw-r--r-- | test/parallel/test-http2-dont-lose-data.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/parallel/test-http2-dont-lose-data.js b/test/parallel/test-http2-dont-lose-data.js new file mode 100644 index 0000000000..eb85277b7b --- /dev/null +++ b/test/parallel/test-http2-dont-lose-data.js @@ -0,0 +1,58 @@ +'use strict'; + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); +const assert = require('assert'); +const http2 = require('http2'); + +const server = http2.createServer(); + +server.on('stream', (s) => { + assert(s.pushAllowed); + + s.pushStream({ ':path': '/file' }, common.mustCall((err, pushStream) => { + assert.ifError(err); + pushStream.respond(); + pushStream.end('a push stream'); + })); + + s.respond(); + s.end('hello world'); +}); + +server.listen(0, () => { + server.unref(); + + const url = `http://localhost:${server.address().port}`; + + const client = http2.connect(url); + const req = client.request(); + + let pushStream; + + client.on('stream', common.mustCall((s, headers) => { + assert.strictEqual(headers[':path'], '/file'); + pushStream = s; + })); + + req.on('response', common.mustCall((headers) => { + let pushData = ''; + pushStream.setEncoding('utf8'); + pushStream.on('data', (d) => pushData += d); + pushStream.on('end', common.mustCall(() => { + assert.strictEqual(pushData, 'a push stream'); + + // removing the setImmediate causes the test to pass + setImmediate(function() { + let data = ''; + req.setEncoding('utf8'); + req.on('data', (d) => data += d); + req.on('end', common.mustCall(() => { + assert.strictEqual(data, 'hello world'); + client.close(); + })); + }); + })); + })); +}); |