Skip to content

Commit

Permalink
Merge pull request #2923 from gareth-robinson/cifixes
Browse files Browse the repository at this point in the history
Alterations for failing CI tests
  • Loading branch information
simov committed May 2, 2018
2 parents bbb3a0b + 3745cec commit 0d29635
Showing 1 changed file with 53 additions and 37 deletions.
90 changes: 53 additions & 37 deletions tests/test-headers.js
Expand Up @@ -5,6 +5,15 @@ var request = require('../index')
var util = require('util')
var tape = require('tape')
var url = require('url')
var os = require('os')

var interfaces = os.networkInterfaces()
var loopbackKeyTest = os.platform() === 'win32' ? /Loopback Pseudo-Interface/ : /lo/
var hasIPv6interface = Object.keys(interfaces).some(function (name) {
return loopbackKeyTest.test(name) && interfaces[name].some(function (info) {
return info.family === 'IPv6'
})
})

var s = server.createServer()

Expand Down Expand Up @@ -171,17 +180,22 @@ tape('undefined headers', function (t) {
})
})

var isExpectedHeaderCharacterError = function (headerName, err) {
return err.message === 'The header content contains invalid characters' ||
err.message === ('Invalid character in header content ["' + headerName + '"]')
}

tape('catch invalid characters error - GET', function (t) {
request({
url: s.url + '/headers.json',
headers: {
'test': 'אבגד'
}
}, function (err, res, body) {
t.equal(err.message, 'The header content contains invalid characters')
t.true(isExpectedHeaderCharacterError('test', err))
})
.on('error', function (err) {
t.equal(err.message, 'The header content contains invalid characters')
t.true(isExpectedHeaderCharacterError('test', err))
t.end()
})
})
Expand All @@ -195,49 +209,51 @@ tape('catch invalid characters error - POST', function (t) {
},
body: 'beep'
}, function (err, res, body) {
t.equal(err.message, 'The header content contains invalid characters')
t.true(isExpectedHeaderCharacterError('test', err))
})
.on('error', function (err) {
t.equal(err.message, 'The header content contains invalid characters')
t.true(isExpectedHeaderCharacterError('test', err))
t.end()
})
})

tape('IPv6 Host header', function (t) {
// Horrible hack to observe the raw data coming to the server
var rawData = ''
if (hasIPv6interface) {
tape('IPv6 Host header', function (t) {
// Horrible hack to observe the raw data coming to the server
var rawData = ''

s.on('connection', function (socket) {
if (socket.ondata) {
var ondata = socket.ondata
}
function handledata (d, start, end) {
if (ondata) {
rawData += d.slice(start, end).toString()
return ondata.apply(this, arguments)
} else {
rawData += d
s.on('connection', function (socket) {
if (socket.ondata) {
var ondata = socket.ondata
}
}
socket.on('data', handledata)
socket.ondata = handledata
})
function handledata (d, start, end) {
if (ondata) {
rawData += d.slice(start, end).toString()
return ondata.apply(this, arguments)
} else {
rawData += d
}
}
socket.on('data', handledata)
socket.ondata = handledata
})

function checkHostHeader (host) {
t.ok(
new RegExp('^Host: ' + host + '$', 'im').test(rawData),
util.format(
'Expected "Host: %s" in data "%s"',
host, rawData.trim().replace(/\r?\n/g, '\\n')))
rawData = ''
}
function checkHostHeader (host) {
t.ok(
new RegExp('^Host: ' + host + '$', 'im').test(rawData),
util.format(
'Expected "Host: %s" in data "%s"',
host, rawData.trim().replace(/\r?\n/g, '\\n')))
rawData = ''
}

request({
url: s.url.replace(url.parse(s.url).hostname, '[::1]') + '/headers.json'
}, function (err, res, body) {
t.equal(err, null)
t.equal(res.statusCode, 200)
checkHostHeader('\\[::1\\]:' + s.port)
t.end()
request({
url: s.url.replace(url.parse(s.url).hostname, '[::1]') + '/headers.json'
}, function (err, res, body) {
t.equal(err, null)
t.equal(res.statusCode, 200)
checkHostHeader('\\[::1\\]:' + s.port)
t.end()
})
})
})
}

0 comments on commit 0d29635

Please sign in to comment.