Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: ignore status message for HTTP/2 #53

Merged
merged 6 commits into from
Aug 31, 2024
Merged
Show file tree
Hide file tree
Changes from all 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
94 changes: 92 additions & 2 deletions test/support/utils.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
var assert = require('assert')
var finalhandler = require('../..')
var http = require('http')

var http2

try {
http2 = require('http2')
} catch (_err) {
// Nothing
}

var request = require('supertest')
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.rawrequestHTTP2 = rawrequestHTTP2
exports.request = request
exports.shouldHaveStatusMessage = shouldHaveStatusMessage
exports.shouldNotHaveBody = shouldNotHaveBody
Expand All @@ -26,7 +37,7 @@ 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)

Expand All @@ -39,6 +50,19 @@ function createServer (err, opts) {
})
}

function createHTTP2Server (err, opts) {
return http2.createServer(function (req, res) {
var done = finalhandler(req, res, opts)

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

done(err)
})
}

function createSlowWriteStream () {
return new SlowWriteStream()
}
Expand Down Expand Up @@ -107,6 +131,72 @@ function rawrequest (server) {
}
}

function rawrequestHTTP2 (server) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

For testing raw HTTP2 request

var _headers = {}
var _path

function expect (status, body, callback) {
if (arguments.length === 2) {
_headers[status.toLowerCase()] = body
return this
}

server.listen(function onlisten () {
var buf = ''
var resHeaders
var addr = this.address()
var port = addr.port

var client = http2.connect('http://127.0.0.1:' + port)
var req = client.request({
':method': 'GET',
':path': _path.replace(/http:\/\/localhost/, '')
})
req.on('error', callback)
req.on('response', function onresponse (responseHeaders) {
resHeaders = responseHeaders
})
req.on('data', function ondata (s) { buf += s })
req.on('end', function onend () {
var err = null

try {
for (var key in _headers) {
assert.strictEqual(resHeaders[key], _headers[key])
}

assert.strictEqual(resHeaders[':status'], status)

if (body instanceof RegExp) {
assert.ok(body.test(buf), 'expected body ' + buf + ' to match ' + body)
} else {
assert.strictEqual(buf, body, 'expected ' + body + ' response body, got ' + buf)
}
} catch (e) {
err = e
}

req.close()
client.close()
server.close()
callback(err)
})
})
}

function get (path) {
_path = path

return {
expect: expect
}
}

return {
get: get
}
}

function shouldHaveStatusMessage (statusMessage) {
return function (test) {
assert.strictEqual(test.res.statusMessage, statusMessage, 'should have statusMessage "' + statusMessage + '"')
Expand Down
Loading
Loading