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.
144 lines
3.5 KiB
144 lines
3.5 KiB
1 month ago
|
var needle = require('../'),
|
||
|
fs = require('fs'),
|
||
|
should = require('should'),
|
||
|
helpers = require('./helpers');
|
||
|
|
||
|
describe('stream events', function() {
|
||
|
|
||
|
var server,
|
||
|
port = 3456,
|
||
|
responseData,
|
||
|
serverOpts = {},
|
||
|
requestHandler = function(req, res) { res.end('OK') }
|
||
|
|
||
|
before(function() {
|
||
|
var opts = {
|
||
|
port: port,
|
||
|
handler: function(req, res) { requestHandler(req, res) }
|
||
|
}
|
||
|
server = helpers.server(opts);
|
||
|
})
|
||
|
|
||
|
after(function() {
|
||
|
server.close();
|
||
|
})
|
||
|
|
||
|
beforeEach(function() {
|
||
|
responseData = '';
|
||
|
})
|
||
|
|
||
|
describe('when consuming data directly', function() {
|
||
|
|
||
|
function send_request(opts, cb) {
|
||
|
return needle
|
||
|
.get('http://localhost:' + port, opts)
|
||
|
.on('data', function(data) { responseData += data })
|
||
|
}
|
||
|
|
||
|
describe('and request stream fails', function() {
|
||
|
|
||
|
it('emits done event with error', function(done) {
|
||
|
requestHandler = function(req, res) { req.socket.destroy() }
|
||
|
|
||
|
send_request({}).on('done', function(err) {
|
||
|
err.code.should.eql('ECONNRESET');
|
||
|
responseData.should.eql('');
|
||
|
done()
|
||
|
})
|
||
|
})
|
||
|
|
||
|
})
|
||
|
|
||
|
describe('and request succeeds but decoding fails', function() {
|
||
|
|
||
|
it('emits done event without error', function(done) {
|
||
|
requestHandler = function(req, res) {
|
||
|
res.setHeader('Content-Type', 'application/json')
|
||
|
res.end('invalid:json')
|
||
|
}
|
||
|
|
||
|
send_request({ json: true }).on('done', function(err) {
|
||
|
should.not.exist(err);
|
||
|
responseData.should.eql('invalid:json');
|
||
|
done()
|
||
|
})
|
||
|
})
|
||
|
|
||
|
})
|
||
|
|
||
|
describe('and request succeeds and pipeline works ok', function() {
|
||
|
|
||
|
it('emits done event without error', function(done) {
|
||
|
requestHandler = function(req, res) { res.end('{"ok":1}') }
|
||
|
|
||
|
send_request({ json: true }).on('done', function(err) {
|
||
|
should.not.exist(err);
|
||
|
responseData.should.eql('{"ok":1}');
|
||
|
done()
|
||
|
})
|
||
|
})
|
||
|
|
||
|
})
|
||
|
|
||
|
})
|
||
|
|
||
|
describe('when piping to a fs writableStream', function() {
|
||
|
|
||
|
var outFile = 'test/tmp.dat';
|
||
|
|
||
|
function send_request(opts, cb) {
|
||
|
return needle
|
||
|
.get('http://localhost:' + port, opts)
|
||
|
.pipe(fs.createWriteStream(outFile))
|
||
|
.on('data', function(data) { responseData += data })
|
||
|
}
|
||
|
|
||
|
after(function(done) {
|
||
|
fs.unlink(outFile, done)
|
||
|
})
|
||
|
|
||
|
describe('and request stream fails', function() {
|
||
|
|
||
|
it('final stream emits done event with error', function(done) {
|
||
|
requestHandler = function(req, res) { req.socket.destroy() }
|
||
|
|
||
|
send_request({}).on('done', function(err) {
|
||
|
err.code.should.eql('ECONNRESET');
|
||
|
done()
|
||
|
})
|
||
|
})
|
||
|
|
||
|
})
|
||
|
|
||
|
describe('and request succeeds but decoding fails', function() {
|
||
|
|
||
|
it('final stream emits done event without error', function(done) {
|
||
|
requestHandler = function(req, res) {
|
||
|
res.setHeader('Content-Type', 'application/json')
|
||
|
res.end('invalid:json')
|
||
|
}
|
||
|
|
||
|
send_request({ json: true }).on('done', function(err) {
|
||
|
should.not.exist(err);
|
||
|
done()
|
||
|
})
|
||
|
})
|
||
|
|
||
|
})
|
||
|
|
||
|
describe('and request succeeds and pipeline works ok', function() {
|
||
|
|
||
|
it('final stream emits done event without error', function(done) {
|
||
|
requestHandler = function(req, res) { res.end('{"ok":1}') }
|
||
|
|
||
|
send_request({ json: true }).on('done', function(err) {
|
||
|
should.not.exist(err);
|
||
|
done()
|
||
|
})
|
||
|
})
|
||
|
|
||
|
})
|
||
|
|
||
|
})
|
||
|
|
||
|
})
|