Skip to content

Commit

Permalink
tests: add test for 404 path escaping
Browse files Browse the repository at this point in the history
  • Loading branch information
dougwilson committed Feb 7, 2017
1 parent aaa5b90 commit c8788c5
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 2 deletions.
60 changes: 60 additions & 0 deletions test/support/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ exports.assert = assert
exports.createError = createError
exports.createServer = createServer
exports.createSlowWriteStream = createSlowWriteStream
exports.rawrequest = rawrequest
exports.request = request
exports.shouldHaveStatusMessage = shouldHaveStatusMessage
exports.shouldNotHaveHeader = shouldNotHaveHeader
Expand Down Expand Up @@ -41,6 +42,65 @@ function createSlowWriteStream () {
return new SlowWriteStream()
}

function rawrequest (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 addr = this.address()
var hostname = addr.family === 'IPv6' ? '::1' : '127.0.0.1'
var port = addr.port

var req = http.get({
host: hostname,
path: _path,
port: port
})
req.on('response', function onresponse (res) {
var buf = ''

res.setEncoding('utf8')
res.on('data', function ondata (s) { buf += s })
res.on('end', function onend () {
var err = null

try {
for (var key in _headers) {
assert.equal(res.headers[key], _headers[key])
}

assert.equal(res.statusCode, status)
assert.equal(buf, body)
} catch (e) {
err = e
}

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

function get (path) {
_path = path

return {
expect: expect
}
}

return {
get: get
}
}

function shouldHaveStatusMessage (statusMessage) {
return function (test) {
assert.equal(test.res.statusMessage, statusMessage, 'should have statusMessage "' + statusMessage + '"')
Expand Down
11 changes: 9 additions & 2 deletions test/test.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@

var assert = require('assert')
var finalhandler = require('..')
var http = require('http')
var request = require('supertest')
var utils = require('./support/utils')

var assert = utils.assert
var createError = utils.createError
var createServer = utils.createServer
var createSlowWriteStream = utils.createSlowWriteStream
var rawrequest = utils.rawrequest
var request = utils.request
var shouldHaveStatusMessage = utils.shouldHaveStatusMessage
var shouldNotHaveHeader = utils.shouldNotHaveHeader

Expand Down Expand Up @@ -193,6 +194,12 @@ describe('finalhandler(req, res)', function () {
.expect(404, 'Cannot GET /foo\n', done)
})

it('should escape method and path characters', function (done) {
rawrequest(createServer())
.get('/<la\'me>')
.expect(404, 'Cannot GET /&lt;la&#39;me&gt;\n', done)
})

it('should handle HEAD', function (done) {
request(createServer())
.head('/foo')
Expand Down

0 comments on commit c8788c5

Please sign in to comment.