Skip to content

Commit

Permalink
fix: ignore status message for HTTP/2 (#53)
Browse files Browse the repository at this point in the history
* fix: ignore status message for HTTP/2

* test: fix

* test: fix node@9

* refactor: tests

* test: fix

* test: fix syntax
  • Loading branch information
alexander-akait authored and wesleytodd committed Sep 2, 2024
1 parent 45cf67c commit 1e3f2ae
Show file tree
Hide file tree
Showing 3 changed files with 297 additions and 108 deletions.
5 changes: 4 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,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) {
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) {
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

0 comments on commit 1e3f2ae

Please sign in to comment.