From 65f13fbc215694f80b184a221e1f6a476c3890a3 Mon Sep 17 00:00:00 2001 From: dead_horse Date: Wed, 2 Dec 2015 13:58:24 +0800 Subject: [PATCH] fix http keep-alive test case --- lib/response.js | 6 ++--- package.json | 2 ++ test/application.js | 62 ++++++++++++++++++++++++++++++--------------- 3 files changed, 45 insertions(+), 25 deletions(-) diff --git a/lib/response.js b/lib/response.js index fd86dcbe6..0cb9a930d 100644 --- a/lib/response.js +++ b/lib/response.js @@ -17,8 +17,8 @@ var statuses = require('statuses'); var assert = require('assert'); var Stream = require('stream'); var path = require('path'); -var extname = path.extname; var vary = require('vary'); +var extname = path.extname; /** * Prototype. @@ -165,9 +165,7 @@ module.exports = { if (val instanceof Stream) { onFinish(this.res, function(){ // make sure stream's data has been read - if (val.readable) { - val.pipe(new BlackHoleStream()); - } + if (val.readable) val.pipe(new BlackHoleStream()); }); ensureErrorHandler(val, this.ctx.onerror); diff --git a/package.json b/package.json index e268d5f6c..a94f864a1 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,9 @@ "vary": "^1.0.0" }, "devDependencies": { + "agentkeepalive": "~2.0.3", "babel": "^5.0.0", + "freeport": "~1.0.5", "istanbul": "^0.4.0", "make-lint": "^1.0.1", "mocha": "^2.0.1", diff --git a/test/application.js b/test/application.js index b580093e5..7eaf148b8 100644 --- a/test/application.js +++ b/test/application.js @@ -2,8 +2,10 @@ 'use strict'; var stderr = require('test-console').stderr; +var Agent = require('agentkeepalive'); var request = require('supertest'); var statuses = require('statuses'); +var freeport = require('freeport'); var pedding = require('pedding'); var assert = require('assert'); var urllib = require('urllib'); @@ -896,29 +898,47 @@ describe('app.respond', function(){ }) }) - it('should not destroy keepalive connection', function(done){ - done = pedding(2, done); - var app = koa(); - app.use(function *(){ - var remote = yield urllib.request('http://koajs.com', { - streaming: true, - headers: { - connection: 'keep-alive' - } + describe('when .body is a http keepalive IncommingMessage', () => { + var target; + var port; + before(function(done){ + var app = koa(); + app.use(function *(){ + this.body = fs.createReadStream(__filename); }); - var res = remote.res; - this.body = res; - res.once('end', function(){ - assert.equal(res.readable, false); - assert.equal(res.socket.destroyed, false); - done(); - }.bind(this)); - }); - var server = app.listen(); - request(server) - .head('/') - .expect(200, done); + freeport(function(err, p){ + port = p || 12384; + target = app.listen(port, done); + }); + }) + + after(function(){ + target.close(); + }) + + it('should not destroy keepalive connection', function(done){ + done = pedding(2, done); + var app = koa(); + app.use(function *(){ + var remote = yield urllib.request('http://127.0.0.1:' + port, { + streaming: true, + agent: new Agent() + }); + var res = remote.res; + this.body = res; + res.once('end', function(){ + assert.equal(res.readable, false); + assert.equal(res.socket.destroyed, false); + done(); + }); + }); + + var server = app.listen(); + request(server) + .head('/') + .expect(200, done); + }) }) describe('when .body is an Object', function(){