123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- var server = require('./server')
- , events = require('events')
- , stream = require('stream')
- , assert = require('assert')
- , fs = require('fs')
- , request = require('../index')
- , path = require('path')
- , util = require('util')
- ;
- var s = server.createServer(3453);
- function ValidationStream(str) {
- this.str = str
- this.buf = ''
- this.on('data', function (data) {
- this.buf += data
- })
- this.on('end', function () {
- assert.equal(this.str, this.buf)
- })
- this.writable = true
- }
- util.inherits(ValidationStream, stream.Stream)
- ValidationStream.prototype.write = function (chunk) {
- this.emit('data', chunk)
- }
- ValidationStream.prototype.end = function (chunk) {
- if (chunk) this.emit('data', chunk)
- this.emit('end')
- }
- s.listen(s.port, function () {
- var counter = 0;
- var check = function () {
- counter = counter - 1
- if (counter === 0) {
- console.log('All tests passed.')
- setTimeout(function () {
- process.exit();
- }, 500)
- }
- }
- // Test pipeing to a request object
- s.once('/push', server.createPostValidator("mydata"));
- var mydata = new stream.Stream();
- mydata.readable = true
- counter++
- var r1 = request.put({url:'http://localhost:3453/push'}, function () {
- check();
- })
- mydata.pipe(r1)
- mydata.emit('data', 'mydata');
- mydata.emit('end');
- // Test pipeing to a request object with a json body
- s.once('/push-json', server.createPostValidator("{\"foo\":\"bar\"}", "application/json"));
- var mybodydata = new stream.Stream();
- mybodydata.readable = true
- counter++
- var r2 = request.put({url:'http://localhost:3453/push-json',json:true}, function () {
- check();
- })
- mybodydata.pipe(r2)
- mybodydata.emit('data', JSON.stringify({foo:"bar"}));
- mybodydata.emit('end');
- // Test pipeing from a request object.
- s.once('/pull', server.createGetResponse("mypulldata"));
- var mypulldata = new stream.Stream();
- mypulldata.writable = true
- counter++
- request({url:'http://localhost:3453/pull'}).pipe(mypulldata)
- var d = '';
- mypulldata.write = function (chunk) {
- d += chunk;
- }
- mypulldata.end = function () {
- assert.equal(d, 'mypulldata');
- check();
- };
- s.on('/cat', function (req, resp) {
- if (req.method === "GET") {
- resp.writeHead(200, {'content-type':'text/plain-test', 'content-length':4});
- resp.end('asdf')
- } else if (req.method === "PUT") {
- assert.equal(req.headers['content-type'], 'text/plain-test');
- assert.equal(req.headers['content-length'], 4)
- var validate = '';
- req.on('data', function (chunk) {validate += chunk})
- req.on('end', function () {
- resp.writeHead(201);
- resp.end();
- assert.equal(validate, 'asdf');
- check();
- })
- }
- })
- s.on('/pushjs', function (req, resp) {
- if (req.method === "PUT") {
- assert.equal(req.headers['content-type'], 'application/javascript');
- check();
- }
- })
- s.on('/catresp', function (req, resp) {
- request.get('http://localhost:3453/cat').pipe(resp)
- })
- s.on('/doodle', function (req, resp) {
- if (req.headers['x-oneline-proxy']) {
- resp.setHeader('x-oneline-proxy', 'yup')
- }
- resp.writeHead('200', {'content-type':'image/jpeg'})
- fs.createReadStream(path.join(__dirname, 'googledoodle.jpg')).pipe(resp)
- })
- s.on('/onelineproxy', function (req, resp) {
- var x = request('http://localhost:3453/doodle')
- req.pipe(x)
- x.pipe(resp)
- })
- counter++
- fs.createReadStream(__filename).pipe(request.put('http://localhost:3453/pushjs'))
- counter++
- request.get('http://localhost:3453/cat').pipe(request.put('http://localhost:3453/cat'))
- counter++
- request.get('http://localhost:3453/catresp', function (e, resp, body) {
- assert.equal(resp.headers['content-type'], 'text/plain-test');
- assert.equal(resp.headers['content-length'], 4)
- check();
- })
- var doodleWrite = fs.createWriteStream(path.join(__dirname, 'test.jpg'))
- counter++
- request.get('http://localhost:3453/doodle').pipe(doodleWrite)
- doodleWrite.on('close', function () {
- assert.deepEqual(fs.readFileSync(path.join(__dirname, 'googledoodle.jpg')), fs.readFileSync(path.join(__dirname, 'test.jpg')))
- check()
- })
- process.on('exit', function () {
- fs.unlinkSync(path.join(__dirname, 'test.jpg'))
- })
- counter++
- request.get({uri:'http://localhost:3453/onelineproxy', headers:{'x-oneline-proxy':'nope'}}, function (err, resp, body) {
- assert.equal(resp.headers['x-oneline-proxy'], 'yup')
- check()
- })
- s.on('/afterresponse', function (req, resp) {
- resp.write('d')
- resp.end()
- })
- counter++
- var afterresp = request.post('http://localhost:3453/afterresponse').on('response', function () {
- var v = new ValidationStream('d')
- afterresp.pipe(v)
- v.on('end', check)
- })
- s.on('/forward1', function (req, resp) {
- resp.writeHead(302, {location:'/forward2'})
- resp.end()
- })
- s.on('/forward2', function (req, resp) {
- resp.writeHead('200', {'content-type':'image/png'})
- resp.write('d')
- resp.end()
- })
- counter++
- var validateForward = new ValidationStream('d')
- validateForward.on('end', check)
- request.get('http://localhost:3453/forward1').pipe(validateForward)
- // Test pipe options
- s.once('/opts', server.createGetResponse('opts response'));
- var optsStream = new stream.Stream();
- optsStream.writable = true
- var optsData = '';
- optsStream.write = function (buf) {
- optsData += buf;
- if (optsData === 'opts response') {
- setTimeout(check, 10);
- }
- }
- optsStream.end = function () {
- assert.fail('end called')
- };
- counter++
- request({url:'http://localhost:3453/opts'}).pipe(optsStream, { end : false })
- // test request.pipefilter is called correctly
- counter++
- s.on('/pipefilter', function(req, resp) {
- resp.end('d')
- })
- var validatePipeFilter = new ValidationStream('d')
- var r3 = request.get('http://localhost:3453/pipefilter')
- r3.pipe(validatePipeFilter)
- r3.pipefilter = function(resp, dest) {
- assert.equal(resp, r3.response)
- assert.equal(dest, validatePipeFilter)
- check()
- }
- })
|