
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
'use strict';
var assert = require('assert');
var express = require('express');
var http = require('http');
var request = require('supertest');
var proxy = require('../');
var proxyTarget = require('../test/support/proxyTarget');
describe('proxyReqOptDecorator', function () {
var server;
this.timeout(10000);
before(function () {
var handlers = [{
method: 'get',
path: '/working',
fn: function (req, res) {
res.send({ headers: req.headers });
}
}];
server = proxyTarget(12345, 100, handlers);
});
after(function () {
server.close();
});
this.timeout(10000);
var app;
beforeEach(function () {
app = express();
app.use(proxy('localhost:12345'));
});
describe('allows authors to modify a number of request parameters', function () {
it('modify headers', function (done) {
app = express();
app.use(proxy('localhost:12345', {
proxyReqOptDecorator: function (reqOpt) {
reqOpt.headers['user-agent'] = 'test user agent';
reqOpt.headers.mmmmmmmmmm = 'misty mountain hop';
return reqOpt;
}
}));
request(app)
.get('/working')
.end(function (err, res) {
if (err) { return done(err); }
assert.equal(res.body.headers['user-agent'], 'test user agent');
assert.equal(res.body.headers.mmmmmmmmmm, 'misty mountain hop');
done();
});
});
describe('when proxyReqOptDecorator is a simple function (non Promise)', function () {
it('can modify headers', function (done) {
var app = express();
app.use(proxy('localhost:12345', {
proxyReqOptDecorator: function (reqOpt, req) {
reqOpt.headers['user-agent'] = 'test user agent';
assert(req instanceof http.IncomingMessage);
return reqOpt;
}
}));
request(app)
.get('/working')
.end(function (err, res) {
if (err) { return done(err); }
assert.equal(res.body.headers['user-agent'], 'test user agent');
done();
});
});
});
describe('when proxyReqOptDecorator is a Promise', function () {
it('should mutate the proxied request', function (done) {
var app = express();
app.use(proxy('localhost:12345', {
proxyReqOptDecorator: function (reqOpt, req) {
assert(req instanceof http.IncomingMessage);
return new Promise(function (resolve) {
reqOpt.headers['user-agent'] = 'test user agent';
resolve(reqOpt);
});
}
}));
request(app)
.get('/working')
.end(function (err, res) {
if (err) { return done(err); }
assert.equal(res.body.headers['user-agent'], 'test user agent');
done();
});
});
describe('when the Promise is rejected', function () {
it('returns err to host application for processing', function (done) {
var app = express();
app.use(proxy('/reject-promise', {
proxyReqOptDecorator: function () {
return Promise.reject('An arbitrary rejection message.');
}
}));
/* jshint ignore:start */
app.use(function (err, req, res, next) { // eslint-disable-line no-unused-vars
assert(err === 'An arbitrary rejection message.');
res.status(221).send(err);
});
/* jshint ignore:end */
request(app)
.get('/reject-promise')
.expect(221, done); // ensures we've entered the handler with assert above
});
});
});
});
describe('proxyReqOptDecorator has access to the source request\'s data', function () {
it('should have access to ip', function (done) {
var app = express();
app.use(proxy('localhost:12345', {
proxyReqOptDecorator: function (reqOpts, req) {
assert(req instanceof http.IncomingMessage);
assert(req.ip);
return reqOpts;
}
}));
request(app)
.get('/working')
.end(function (err) {
if (err) { return done(err); }
done();
});
});
});
});
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151'use strict';var assert = require('assert');var express = require('express');var http = require('http');var request = require('supertest');var proxy = require('../');var proxyTarget = require('../test/support/proxyTarget');describe('proxyReqOptDecorator', function () {var server;this.timeout(10000);before(function () {var handlers = [{method: 'get',path: '/working',fn: function (req, res) {res.send({ headers: req.headers });}}];server = proxyTarget(12345, 100, handlers);});after(function () {server.close();});this.timeout(10000);var app;beforeEach(function () {app = express();app.use(proxy('localhost:12345'));});describe('allows authors to modify a number of request parameters', function () {it('modify headers', function (done) {app = express();app.use(proxy('localhost:12345', {proxyReqOptDecorator: function (reqOpt) {reqOpt.headers['user-agent'] = 'test user agent';reqOpt.headers.mmmmmmmmmm = 'misty mountain hop';return reqOpt;}}));request(app).get('/working').end(function (err, res) {if (err) { return done(err); }assert.equal(res.body.headers['user-agent'], 'test user agent');assert.equal(res.body.headers.mmmmmmmmmm, 'misty mountain hop');done();});});describe('when proxyReqOptDecorator is a simple function (non Promise)', function () {it('can modify headers', function (done) {var app = express();app.use(proxy('localhost:12345', {proxyReqOptDecorator: function (reqOpt, req) {reqOpt.headers['user-agent'] = 'test user agent';assert(req instanceof http.IncomingMessage);return reqOpt;}}));request(app).get('/working').end(function (err, res) {if (err) { return done(err); }assert.equal(res.body.headers['user-agent'], 'test user agent');done();});});});describe('when proxyReqOptDecorator is a Promise', function () {it('should mutate the proxied request', function (done) {var app = express();app.use(proxy('localhost:12345', {proxyReqOptDecorator: function (reqOpt, req) {assert(req instanceof http.IncomingMessage);return new Promise(function (resolve) {reqOpt.headers['user-agent'] = 'test user agent';resolve(reqOpt);});}}));request(app).get('/working').end(function (err, res) {if (err) { return done(err); }assert.equal(res.body.headers['user-agent'], 'test user agent');done();});});describe('when the Promise is rejected', function () {it('returns err to host application for processing', function (done) {var app = express();app.use(proxy('/reject-promise', {proxyReqOptDecorator: function () {return Promise.reject('An arbitrary rejection message.');}}));/* jshint ignore:start */app.use(function (err, req, res, next) { // eslint-disable-line no-unused-varsassert(err === 'An arbitrary rejection message.');res.status(221).send(err);});/* jshint ignore:end */request(app).get('/reject-promise').expect(221, done); // ensures we've entered the handler with assert above});});});});describe('proxyReqOptDecorator has access to the source request\'s data', function () {it('should have access to ip', function (done) {var app = express();app.use(proxy('localhost:12345', {proxyReqOptDecorator: function (reqOpts, req) {assert(req instanceof http.IncomingMessage);assert(req.ip);return reqOpts;}}));request(app).get('/working').end(function (err) {if (err) { return done(err); }done();});});});});