From e5b45d49ecaf5fae3bc5d0fb399a30a7c10e2ab9 Mon Sep 17 00:00:00 2001 From: sogaani Date: Fri, 21 Sep 2018 23:43:12 +0900 Subject: [PATCH] use endAfterHeaders --- .travis.yml | 5 +---- index.js | 2 +- package.json | 1 + test/test.js | 63 +++++++++++++++++++++++++++++++++++++++++++--------- 4 files changed, 55 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8267130..ff253a7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,6 @@ before_install: - "test $TRAVIS_NODE_VERSION != '0.6' || npm rm --save-dev istanbul" - "test $TRAVIS_NODE_VERSION != '0.8' || npm rm --save-dev istanbul" - "test $(echo $TRAVIS_NODE_VERSION | cut -d. -f1) -ge 4 || npm rm --save-dev $(grep -E '\"eslint\\S*\"' package.json | cut -d'\"' -f2)" - - "test -z $(echo $HTTP2_TEST) || npm install https://github.com/visionmedia/superagent.git" # Update Node.js modules - "test ! -d node_modules || npm prune" @@ -40,7 +39,5 @@ after_script: - "test -e ./coverage/lcov.info && npm install coveralls@2 && cat ./coverage/lcov.info | coveralls" matrix: include: - - node_js: "9.5" - env: HTTP2_TEST=1 - - node_js: "8.9" + - node_js: "10.11" env: HTTP2_TEST=1 diff --git a/index.js b/index.js index 62e409d..5e685a7 100644 --- a/index.js +++ b/index.js @@ -97,7 +97,7 @@ function typeis (value, types_) { */ function hasbody (req) { - return (ishttp2(req) && (req.stream.readable || !req.stream._readableState.sync)) || + return (ishttp2(req) && !req.stream.endAfterHeaders) || req.headers['transfer-encoding'] !== undefined || !isNaN(req.headers['content-length']) } diff --git a/package.json b/package.json index 5b8e207..32aebcf 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "scripts": { "lint": "eslint --plugin markdown --ext js,md .", "test": "mocha --reporter spec --check-leaks --bail test/", + "test-http2": "HTTP2_TEST=1 mocha --reporter spec --check-leaks --bail test/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" }, diff --git a/test/test.js b/test/test.js index 52773eb..ab28bc9 100644 --- a/test/test.js +++ b/test/test.js @@ -7,8 +7,6 @@ var Readable if (process.env.HTTP2_TEST) { http2 = require('http2') - request = require('superagent') - request.http2 = true Readable = require('stream').Readable } @@ -216,9 +214,11 @@ describe('typeis.hasBody(req)', function () { assert.strictEqual(typeis.hasBody(req), true) }) - it('should be true when 0', function () { - var req = {headers: {'content-length': '0'}} - assert.strictEqual(typeis.hasBody(req), true) + it('should be true when 0', function (done) { + createZeroLengthBodyRequest('', function (req) { + assert.strictEqual(typeis.hasBody(req), true) + done() + }) }) it('should be false when bogus', function () { @@ -333,9 +333,15 @@ function createRequest (type, callback) { var s = new Readable() s.push('hello') s.push(null) - var req = request.post('localhost:' + server.address().port + '/') - .set('content-type', type || undefined) - s.pipe(req) + + var session = http2.connect('http://localhost:' + server.address().port) + var headers = { + ':path': '/', + ':method': 'post', + 'content-type': type || undefined + } + var request = session.request(headers) + s.pipe(request) }) } else { var req = { @@ -356,9 +362,16 @@ function createBodylessRequest (type, callback) { }) server = server.listen(function () { - request.get('localhost:' + server.address().port + '/') - .set('content-type', type || undefined) - .end() + var session = http2.connect('http://localhost:' + server.address().port) + var headers = { + ':path': '/', + ':method': 'get', + 'content-type': type || '' + } + var option = { + endStream: true + } + session.request(headers, option) }) } else { var req = { @@ -369,3 +382,31 @@ function createBodylessRequest (type, callback) { callback(req) } } + +function createZeroLengthBodyRequest (type, callback) { + if (process.env.HTTP2_TEST) { + var server = http2.createServer(function (req, res) { + callback(req) + server.close() + }) + + server = server.listen(function () { + var session = http2.connect('http://localhost:' + server.address().port) + var headers = { + ':path': '/', + ':method': 'get', + 'content-type': type || '' + } + var request = session.request(headers) + request.end() + }) + } else { + var req = { + headers: { + 'content-type': type || '', + 'content-length': 0 + } + } + callback(req) + } +}