You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
363 lines
8.6 KiB
363 lines
8.6 KiB
var concat = require('concat-stream') |
|
var http = require('http') |
|
var get = require('../') |
|
var selfSignedHttps = require('self-signed-https') |
|
var str = require('string-to-stream') |
|
var test = require('tape') |
|
var zlib = require('zlib') |
|
|
|
// Allow self-signed certs |
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' |
|
|
|
test('simple get', function (t) { |
|
t.plan(4) |
|
|
|
var server = http.createServer(function (req, res) { |
|
t.equal(req.url, '/path') |
|
res.statusCode = 200 |
|
res.end('response') |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
get('http://localhost:' + port + '/path', function (err, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) |
|
res.pipe(concat(function (data) { |
|
t.equal(data.toString(), 'response') |
|
server.close() |
|
})) |
|
}) |
|
}) |
|
}) |
|
|
|
test('follow redirects (up to 10)', function (t) { |
|
t.plan(13) |
|
|
|
var num = 1 |
|
var server = http.createServer(function (req, res) { |
|
t.equal(req.url, '/' + num, 'visited /' + num) |
|
num += 1 |
|
|
|
if (num <= 10) { |
|
res.statusCode = 301 |
|
res.setHeader('Location', '/' + num) |
|
res.end() |
|
} else { |
|
res.statusCode = 200 |
|
res.end('response') |
|
} |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
get('http://localhost:' + port + '/1', function (err, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) |
|
res.pipe(concat(function (data) { |
|
t.equal(data.toString(), 'response') |
|
server.close() |
|
})) |
|
}) |
|
}) |
|
}) |
|
|
|
test('do not follow redirects', function (t) { |
|
t.plan(2) |
|
|
|
var server = http.createServer(function (req, res) { |
|
t.equal(req.url, '/1', 'visited /1') |
|
|
|
res.statusCode = 301 |
|
res.setHeader('Location', '/2') |
|
res.end() |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
get({ |
|
url: 'http://localhost:' + port + '/1', |
|
maxRedirects: 0 |
|
}, function (err) { |
|
t.ok(err instanceof Error, 'got error') |
|
server.close() |
|
}) |
|
}) |
|
}) |
|
|
|
test('follow redirects (11 is too many)', function (t) { |
|
t.plan(11) |
|
|
|
var num = 1 |
|
var server = http.createServer(function (req, res) { |
|
t.equal(req.url, '/' + num, 'visited /' + num) |
|
num += 1 |
|
|
|
res.statusCode = 301 |
|
res.setHeader('Location', '/' + num) |
|
res.end() |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
get('http://localhost:' + port + '/1', function (err) { |
|
t.ok(err instanceof Error, 'got error') |
|
server.close() |
|
}) |
|
}) |
|
}) |
|
|
|
test('custom headers', function (t) { |
|
t.plan(2) |
|
|
|
var server = http.createServer(function (req, res) { |
|
t.equal(req.headers['custom-header'], 'custom-value') |
|
res.statusCode = 200 |
|
res.end('response') |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
get({ |
|
url: 'http://localhost:' + port, |
|
headers: { |
|
'custom-header': 'custom-value' |
|
} |
|
}, function (err, res) { |
|
t.error(err) |
|
res.resume() |
|
server.close() |
|
}) |
|
}) |
|
}) |
|
|
|
test('gzip response', function (t) { |
|
t.plan(3) |
|
|
|
var server = http.createServer(function (req, res) { |
|
res.statusCode = 200 |
|
res.setHeader('content-encoding', 'gzip') |
|
str('response').pipe(zlib.createGzip()).pipe(res) |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
get('http://localhost:' + port, function (err, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) // statusCode still works on gunzip stream |
|
res.pipe(concat(function (data) { |
|
t.equal(data.toString(), 'response') |
|
server.close() |
|
})) |
|
}) |
|
}) |
|
}) |
|
|
|
test('deflate response', function (t) { |
|
t.plan(3) |
|
|
|
var server = http.createServer(function (req, res) { |
|
res.statusCode = 200 |
|
res.setHeader('content-encoding', 'deflate') |
|
str('response').pipe(zlib.createDeflate()).pipe(res) |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
get('http://localhost:' + port, function (err, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) // statusCode still works on inflate stream |
|
res.pipe(concat(function (data) { |
|
t.equal(data.toString(), 'response') |
|
server.close() |
|
})) |
|
}) |
|
}) |
|
}) |
|
|
|
test('https', function (t) { |
|
t.plan(4) |
|
|
|
var server = selfSignedHttps(function (req, res) { |
|
t.equal(req.url, '/path') |
|
res.statusCode = 200 |
|
res.end('response') |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
get('https://localhost:' + port + '/path', function (err, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) |
|
res.pipe(concat(function (data) { |
|
t.equal(data.toString(), 'response') |
|
server.close() |
|
})) |
|
}) |
|
}) |
|
}) |
|
|
|
test('redirect https to http', function (t) { |
|
t.plan(5) |
|
|
|
var httpPort = null |
|
var httpsPort = null |
|
|
|
var httpsServer = selfSignedHttps(function (req, res) { |
|
t.equal(req.url, '/path1') |
|
res.statusCode = 301 |
|
res.setHeader('Location', 'http://localhost:' + httpPort + '/path2') |
|
res.end() |
|
}) |
|
|
|
var httpServer = http.createServer(function (req, res) { |
|
t.equal(req.url, '/path2') |
|
res.statusCode = 200 |
|
res.end('response') |
|
}) |
|
|
|
httpsServer.listen(0, function () { |
|
httpsPort = httpsServer.address().port |
|
httpServer.listen(0, function () { |
|
httpPort = httpServer.address().port |
|
get('https://localhost:' + httpsPort + '/path1', function (err, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) |
|
res.pipe(concat(function (data) { |
|
t.equal(data.toString(), 'response') |
|
httpsServer.close() |
|
httpServer.close() |
|
})) |
|
}) |
|
}) |
|
}) |
|
}) |
|
|
|
test('redirect http to https', function (t) { |
|
t.plan(5) |
|
|
|
var httpsPort = null |
|
var httpPort = null |
|
|
|
var httpServer = http.createServer(function (req, res) { |
|
t.equal(req.url, '/path1') |
|
res.statusCode = 301 |
|
res.setHeader('Location', 'https://localhost:' + httpsPort + '/path2') |
|
res.end() |
|
}) |
|
|
|
var httpsServer = selfSignedHttps(function (req, res) { |
|
t.equal(req.url, '/path2') |
|
res.statusCode = 200 |
|
res.end('response') |
|
}) |
|
|
|
httpServer.listen(0, function () { |
|
httpPort = httpServer.address().port |
|
httpsServer.listen(0, function () { |
|
httpsPort = httpsServer.address().port |
|
get('http://localhost:' + httpPort + '/path1', function (err, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) |
|
res.pipe(concat(function (data) { |
|
t.equal(data.toString(), 'response') |
|
httpsServer.close() |
|
httpServer.close() |
|
})) |
|
}) |
|
}) |
|
}) |
|
}) |
|
|
|
test('post (text body)', function (t) { |
|
t.plan(4) |
|
|
|
var server = http.createServer(function (req, res) { |
|
t.equal(req.method, 'POST') |
|
res.statusCode = 200 |
|
req.pipe(res) |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
var opts = { |
|
url: 'http://localhost:' + port, |
|
body: 'this is the body' |
|
} |
|
get.post(opts, function (err, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) |
|
res.pipe(concat(function (data) { |
|
t.equal(data.toString(), 'this is the body') |
|
server.close() |
|
})) |
|
}) |
|
}) |
|
}) |
|
|
|
test('post (buffer body)', function (t) { |
|
t.plan(4) |
|
|
|
var server = http.createServer(function (req, res) { |
|
t.equal(req.method, 'POST') |
|
res.statusCode = 200 |
|
req.pipe(res) |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
var opts = { |
|
url: 'http://localhost:' + port, |
|
body: new Buffer('this is the body') |
|
} |
|
get.post(opts, function (err, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) |
|
res.pipe(concat(function (data) { |
|
t.equal(data.toString(), 'this is the body') |
|
server.close() |
|
})) |
|
}) |
|
}) |
|
}) |
|
|
|
test('get.concat', function (t) { |
|
t.plan(4) |
|
var server = http.createServer(function (req, res) { |
|
res.statusCode = 200 |
|
res.end('blah blah blah') |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
get.concat('http://localhost:' + port, function (err, data, res) { |
|
t.error(err) |
|
t.equal(res.statusCode, 200) |
|
t.ok(Buffer.isBuffer(data), '`data` is type buffer') |
|
t.equal(data.toString(), 'blah blah blah') |
|
server.close() |
|
}) |
|
}) |
|
}) |
|
|
|
test('access `req` object', function (t) { |
|
t.plan(2) |
|
|
|
var server = http.createServer(function (req, res) { |
|
res.statusCode = 200 |
|
res.end('response') |
|
}) |
|
|
|
server.listen(0, function () { |
|
var port = server.address().port |
|
var req = get('http://localhost:' + port, function (err, res) { |
|
t.error(err) |
|
res.resume() // discard data |
|
server.close() |
|
}) |
|
|
|
req.on('socket', function () { |
|
t.pass('got `socket` event') |
|
}) |
|
}) |
|
})
|
|
|