Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,10 @@ function send (req, res, status, headers, message) {

// response status
res.statusCode = status
res.statusMessage = statuses.message[status]

if (req.httpVersionMajor < 2) {
res.statusMessage = statuses.message[status]
}

// remove any content headers
res.removeHeader('Content-Encoding')
Expand Down
18 changes: 16 additions & 2 deletions test/support/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ var SlowWriteStream = require('./sws')

exports.assert = assert
exports.createError = createError
exports.createServer = createServer
exports.createHTTPServer = createHTTPServer
exports.createHTTP2Server = createHTTP2Server
exports.createSlowWriteStream = createSlowWriteStream
exports.rawrequest = rawrequest
exports.request = request
Expand All @@ -26,7 +27,20 @@ function createError (message, props) {
return err
}

function createServer (err, opts) {
function createHTTPServer (err, opts) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just rename

return http.createServer(function (req, res) {
var done = finalhandler(req, res, opts)

if (typeof err === 'function') {
err(req, res, done)
return
}

done(err)
})
}

function createHTTP2Server (err, opts) {
return http.createServer(function (req, res) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Am I missing something here? Is this supposed to be using http2? Sorry if I am being silly here, barely started my morning coffee.

var done = finalhandler(req, res, opts)

Expand Down
124 changes: 112 additions & 12 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ var utils = require('./support/utils')

var assert = utils.assert
var createError = utils.createError
var createServer = utils.createServer
var createHTTPServer = utils.createHTTPServer
var createHTTP2Server = utils.createHTTP2Server
var createSlowWriteStream = utils.createSlowWriteStream
var rawrequest = utils.rawrequest
var request = utils.request
Expand All @@ -18,7 +19,7 @@ var describeStatusMessage = !/statusMessage/.test(http.IncomingMessage.toString(
? describe.skip
: describe

describe('finalhandler(req, res)', function () {
var topDescribe = function (createServer) {
describe('headers', function () {
it('should ignore err.headers without status code', function (done) {
request(createServer(createError('oops!', {
Expand Down Expand Up @@ -387,7 +388,7 @@ describe('finalhandler(req, res)', function () {

describe('when res.statusCode set', function () {
it('should keep when >= 400', function (done) {
var server = http.createServer(function (req, res) {
var server = createServer(function (req, res) {
var done = finalhandler(req, res)
res.statusCode = 503
done(new Error('oops'))
Expand All @@ -399,7 +400,7 @@ describe('finalhandler(req, res)', function () {
})

it('should convert to 500 is not a number', function (done) {
var server = http.createServer(function (req, res) {
var server = createServer(function (req, res) {
var done = finalhandler(req, res)
res.statusCode = 'oh no'
done(new Error('oops'))
Expand All @@ -411,7 +412,7 @@ describe('finalhandler(req, res)', function () {
})

it('should override with err.status', function (done) {
var server = http.createServer(function (req, res) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use createServer instead http.createServer to test using http2 too, the same for tests below

var server = createServer(function (req, res) {
var done = finalhandler(req, res)
var err = createError('oops', {
status: 414,
Expand Down Expand Up @@ -439,7 +440,7 @@ describe('finalhandler(req, res)', function () {

describe('when res.statusCode undefined', function () {
it('should set to 500', function (done) {
var server = http.createServer(function (req, res) {
var server = createServer(function (req, res) {
var done = finalhandler(req, res)
res.statusCode = undefined
done(new Error('oops'))
Expand All @@ -454,7 +455,7 @@ describe('finalhandler(req, res)', function () {

describe('headers set', function () {
it('should persist set headers', function (done) {
var server = http.createServer(function (req, res) {
var server = createServer(function (req, res) {
var done = finalhandler(req, res)
res.setHeader('Server', 'foobar')
done()
Expand All @@ -468,7 +469,7 @@ describe('finalhandler(req, res)', function () {
})

it('should override content-type and length', function (done) {
var server = http.createServer(function (req, res) {
var server = createServer(function (req, res) {
var done = finalhandler(req, res)
res.setHeader('Content-Type', 'image/png')
res.setHeader('Content-Length', '50')
Expand All @@ -484,7 +485,7 @@ describe('finalhandler(req, res)', function () {
})

it('should remove other content headers', function (done) {
var server = http.createServer(function (req, res) {
var server = createServer(function (req, res) {
var done = finalhandler(req, res)
res.setHeader('Content-Encoding', 'gzip')
res.setHeader('Content-Language', 'jp')
Expand All @@ -504,7 +505,7 @@ describe('finalhandler(req, res)', function () {

describe('request started', function () {
it('should not respond', function (done) {
var server = http.createServer(function (req, res) {
var server = createServer(function (req, res) {
var done = finalhandler(req, res)
res.statusCode = 301
res.write('0')
Expand All @@ -520,7 +521,7 @@ describe('finalhandler(req, res)', function () {
})

it('should terminate on error', function (done) {
var server = http.createServer(function (req, res) {
var server = createServer(function (req, res) {
var done = finalhandler(req, res)
res.statusCode = 301
res.write('0')
Expand Down Expand Up @@ -571,4 +572,103 @@ describe('finalhandler(req, res)', function () {
})
})
})
})

describe('no deprecation warnings', function () {
it('should respond 404 on no error', function (done) {
var http2
try {
http2 = require('http2')
} catch (e) {
return done()
}

var warned = false

process.once('warning', function (warning) {
if (/The http2 module is an experimental API/.test(warning)) return
assert.fail(warning)
})

var server = http2.createServer(function (req, res) {
var done = finalhandler(req, res)
done()
})

server.listen(function () {
var port = server.address().port
var client = http2.connect('http://localhost:' + port)
var req = client.request({
':method': 'GET',
':path': '/foo'
})

req.on('response', function (headers) {
assert.strictEqual(headers[':status'], 404)
req.close()
client.close()
server.close()
assert.strictEqual(warned, false)
done()
})
})
})

it('should respond 500 on error', function (done) {
var http2
try {
http2 = require('http2')
} catch (e) {
return done()
}

var warned = false

process.once('warning', function (warning) {
if (/The http2 module is an experimental API/.test(warning)) return
assert.fail(warning)
})

var err = createError()

var server = http2.createServer(function (req, res) {
var done = finalhandler(req, res)

if (typeof err === 'function') {
err(req, res, done)
return
}

done(err)
})

server.listen(function () {
var port = server.address().port
var client = http2.connect('http://localhost:' + port)
var req = client.request({
':method': 'GET',
':path': '/foo'
})

req.on('response', function (headers) {
assert.strictEqual(headers[':status'], 500)
req.close()
client.close()
server.close()
assert.strictEqual(warned, false)
done()
})
})
})
})
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's make these test for http and http2


var servers = [
['http', createHTTPServer],
['http2', createHTTP2Server]
]

for (var i = 0; i < servers.length; i++) {
var tests = topDescribe.bind(undefined, servers[i][1])

describe(servers[i][0], tests)
}