summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnatoli Papirovski <apapirovski@mac.com>2018-05-09 12:12:43 +0200
committerAnatoli Papirovski <apapirovski@mac.com>2018-05-17 17:59:25 +0400
commit8d38288a8099fa282f4e86657f4f7d696039cf96 (patch)
treec96d73abc099c97db67c8bae1d87f3d5c4ead50f /test
parentf9de6f580460d01309b5d9e4d980ed37624de1a9 (diff)
downloadandroid-node-v8-8d38288a8099fa282f4e86657f4f7d696039cf96.tar.gz
android-node-v8-8d38288a8099fa282f4e86657f4f7d696039cf96.tar.bz2
android-node-v8-8d38288a8099fa282f4e86657f4f7d696039cf96.zip
http2: fix end without read
Adjust http2 behaviour to allow ending a stream even after some data comes in (when the user has no intention of reading that data). Also correctly end a stream when trailers are present. PR-URL: https://github.com/nodejs/node/pull/20621 Fixes: https://github.com/nodejs/node/issues/20060 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-http2-client-upload-reject.js15
-rw-r--r--test/parallel/test-http2-compat-client-upload-reject.js44
2 files changed, 53 insertions, 6 deletions
diff --git a/test/parallel/test-http2-client-upload-reject.js b/test/parallel/test-http2-client-upload-reject.js
index ece7cbdf23..678114130e 100644
--- a/test/parallel/test-http2-client-upload-reject.js
+++ b/test/parallel/test-http2-client-upload-reject.js
@@ -20,12 +20,15 @@ fs.readFile(loc, common.mustCall((err, data) => {
const server = http2.createServer();
server.on('stream', common.mustCall((stream) => {
- stream.on('close', common.mustCall(() => {
- assert.strictEqual(stream.rstCode, 0);
- }));
-
- stream.respond({ ':status': 400 });
- stream.end();
+ // Wait for some data to come through.
+ setImmediate(() => {
+ stream.on('close', common.mustCall(() => {
+ assert.strictEqual(stream.rstCode, 0);
+ }));
+
+ stream.respond({ ':status': 400 });
+ stream.end();
+ });
}));
server.listen(0, common.mustCall(() => {
diff --git a/test/parallel/test-http2-compat-client-upload-reject.js b/test/parallel/test-http2-compat-client-upload-reject.js
new file mode 100644
index 0000000000..e6a187cb12
--- /dev/null
+++ b/test/parallel/test-http2-compat-client-upload-reject.js
@@ -0,0 +1,44 @@
+'use strict';
+
+// Verifies that uploading data from a client works
+
+const common = require('../common');
+if (!common.hasCrypto)
+ common.skip('missing crypto');
+const assert = require('assert');
+const http2 = require('http2');
+const fs = require('fs');
+const fixtures = require('../common/fixtures');
+
+const loc = fixtures.path('person-large.jpg');
+
+assert(fs.existsSync(loc));
+
+fs.readFile(loc, common.mustCall((err, data) => {
+ assert.ifError(err);
+
+ const server = http2.createServer(common.mustCall((req, res) => {
+ setImmediate(() => {
+ res.writeHead(400);
+ res.end();
+ });
+ }));
+
+ server.listen(0, common.mustCall(() => {
+ const client = http2.connect(`http://localhost:${server.address().port}`);
+
+ const req = client.request({ ':method': 'POST' });
+ req.on('response', common.mustCall((headers) => {
+ assert.strictEqual(headers[':status'], 400);
+ }));
+
+ req.resume();
+ req.on('end', common.mustCall(() => {
+ server.close();
+ client.close();
+ }));
+
+ const str = fs.createReadStream(loc);
+ str.pipe(req);
+ }));
+}));