diff --git a/test/bodyEncoding.js b/test/bodyEncoding.js index 22360e2..9bc1d10 100644 --- a/test/bodyEncoding.js +++ b/test/bodyEncoding.js @@ -6,6 +6,7 @@ var fs = require('fs'); var os = require('os'); var proxy = require('../'); var startProxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('body encoding', function () { @@ -19,7 +20,7 @@ describe('body encoding', function () { server.close(); }); - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var pngHex = '89504e470d0a1a0a0' + '000000d4948445200' + diff --git a/test/catchingErrors.js b/test/catchingErrors.js index 1bac406..90aba7a 100644 --- a/test/catchingErrors.js +++ b/test/catchingErrors.js @@ -4,10 +4,12 @@ var assert = require('assert'); var express = require('express'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('when server responds with an error', function () { - this.timeout(10000); + this.timeout(TIMEOUT.QUICK); var app; var slowTarget; diff --git a/test/constants.js b/test/constants.js new file mode 100644 index 0000000..50fda00 --- /dev/null +++ b/test/constants.js @@ -0,0 +1,18 @@ +'use strict'; + +/** + * Test timeout constants in milliseconds + */ +module.exports = { + // Standard timeout for most tests + STANDARD: 10000, + + // Shorter timeout for quick tests + QUICK: 2000, + + // Medium timeout for tests that need a bit more time + MEDIUM: 3000, + + // Extended timeout for tests that need more time + EXTENDED: 15000 +}; diff --git a/test/cookies.js b/test/cookies.js index 493f1f0..a7c3c48 100644 --- a/test/cookies.js +++ b/test/cookies.js @@ -4,8 +4,9 @@ var assert = require('assert'); var express = require('express'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); -var proxyTarget = require('../test/support/proxyTarget'); var proxyRouteFn = [{ method: 'get', path: '/cookieTest', @@ -18,7 +19,7 @@ var proxyRouteFn = [{ }]; describe('proxies cookie', function () { - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var app; var proxyServer; diff --git a/test/decorateUserResHeaders.js b/test/decorateUserResHeaders.js index 6fd925b..66e528f 100644 --- a/test/decorateUserResHeaders.js +++ b/test/decorateUserResHeaders.js @@ -4,10 +4,11 @@ var assert = require('assert'); var express = require('express'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('when userResHeaderDecorator is defined', function () { - - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var app; var serverReference; diff --git a/test/defineMultipleProxyHandlers.js b/test/defineMultipleProxyHandlers.js index 85a83c4..852d899 100644 --- a/test/defineMultipleProxyHandlers.js +++ b/test/defineMultipleProxyHandlers.js @@ -5,6 +5,8 @@ var express = require('express'); var http = require('http'); var startProxyTarget = require('./support/proxyTarget'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); function fakeProxyServer({path, port, response}) { var proxyRouteFn = [{ @@ -37,7 +39,7 @@ function simulateUserRequest() { } describe('handle multiple proxies in the same runtime', function () { - this.timeout(3000); + this.timeout(TIMEOUT.MEDIUM); var server; var targetServer, targetServer2; diff --git a/test/getBody.js b/test/getBody.js index 8872ea4..fc9f8d4 100644 --- a/test/getBody.js +++ b/test/getBody.js @@ -6,6 +6,8 @@ var express = require('express'); var nock = require('nock'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); function createLocalApplicationServer() { @@ -14,8 +16,7 @@ function createLocalApplicationServer() { } describe('when proxy request is a GET', function () { - - this.timeout(10000); + this.timeout(TIMEOUT.QUICK); var localServer; diff --git a/test/headers.js b/test/headers.js index 81a8ddd..31ae730 100644 --- a/test/headers.js +++ b/test/headers.js @@ -5,9 +5,10 @@ var express = require('express'); var request = require('supertest'); var proxy = require('../'); var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('proxies headers', function () { - this.timeout(2000); + this.timeout(TIMEOUT.QUICK); var http; var proxyServer; diff --git a/test/host.js b/test/host.js index a42ac24..97e2ca4 100644 --- a/test/host.js +++ b/test/host.js @@ -1,12 +1,14 @@ 'use strict'; +var assert = require('assert'); var express = require('express'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('host can be a dynamic function', function () { - - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var app = express(); describe('and memoization can be disabled', function () { diff --git a/test/https.js b/test/https.js index b7b4ac2..3b39b49 100644 --- a/test/https.js +++ b/test/https.js @@ -5,9 +5,10 @@ var express = require('express'); var request = require('supertest'); var proxy = require('../'); var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('proxies https', function () { - this.timeout(10000); + this.timeout(TIMEOUT.QUICK); var app; var proxyServer; diff --git a/test/maybeSkipToNextHandler.js b/test/maybeSkipToNextHandler.js index d045a88..666558d 100644 --- a/test/maybeSkipToNextHandler.js +++ b/test/maybeSkipToNextHandler.js @@ -5,10 +5,12 @@ var request = require('supertest'); var proxy = require('../'); var http = require('http'); var assert = require('assert'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('when skipToNextHandlerFilter is defined', function () { - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var app; var slowTarget; diff --git a/test/params.js b/test/params.js index 94f96aa..72b7a5c 100644 --- a/test/params.js +++ b/test/params.js @@ -4,8 +4,9 @@ var assert = require('assert'); var express = require('express'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); -var proxyTarget = require('../test/support/proxyTarget'); var proxyRouteFn = [{ method: 'get', path: '/test', @@ -15,7 +16,7 @@ var proxyRouteFn = [{ }]; describe('proxies query parameters', function () { - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var app; var proxyServer; diff --git a/test/path.js b/test/path.js index f480e3b..d475dd2 100644 --- a/test/path.js +++ b/test/path.js @@ -1,14 +1,16 @@ 'use strict'; +var assert = require('assert'); var express = require('express'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); var startProxyTarget = require('./support/proxyTarget'); var expect = require('chai').expect; describe('uses remote path', function () { - - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var app = express(); var proxyRoutes = ['/somePath/', '/somePath/longer/path', '/somePath/long/path/with/many/tokens']; @@ -52,10 +54,9 @@ describe('uses remote path', function () { }); }); - describe('host can be a dynamic function', function () { - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var app = express(); var firstProxyApp = express(); diff --git a/test/postBody.js b/test/postBody.js index ebf490f..35389a1 100644 --- a/test/postBody.js +++ b/test/postBody.js @@ -6,6 +6,8 @@ var express = require('express'); var nock = require('nock'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); function createLocalApplicationServer() { @@ -14,8 +16,7 @@ function createLocalApplicationServer() { } describe('when proxy request is a POST', function () { - - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var localServer; diff --git a/test/preserveHostHdr.js b/test/preserveHostHdr.js index 26cf1e1..be0d6cf 100644 --- a/test/preserveHostHdr.js +++ b/test/preserveHostHdr.js @@ -4,8 +4,9 @@ var assert = require('assert'); var express = require('express'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); -var proxyTarget = require('../test/support/proxyTarget'); var proxyRouteFn = [{ method: 'get', path: '/hostHdrTest', @@ -16,7 +17,7 @@ var proxyRouteFn = [{ describe('preserves host header only when requested', function () { - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); var app; var proxyServer; diff --git a/test/proxyReqPathResolver.js b/test/proxyReqPathResolver.js index 2e0f3bb..7410eb8 100644 --- a/test/proxyReqPathResolver.js +++ b/test/proxyReqPathResolver.js @@ -5,14 +5,15 @@ var express = require('express'); var http = require('http'); var request = require('supertest'); var proxy = require('../'); -var proxyTarget = require('../test/support/proxyTarget'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); var aliases = ['forwardPath', 'forwardPathAsync', 'proxyReqPathResolver']; describe('resolveProxyReqPath', function () { var server; - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); before(function () { var handlers = [{ diff --git a/test/setsContentLength.js b/test/setsContentLength.js index 827ef52..e7ffb2a 100644 --- a/test/setsContentLength.js +++ b/test/setsContentLength.js @@ -6,6 +6,7 @@ var fs = require('fs'); var os = require('os'); var proxy = require('../'); var startProxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('headers: [content-length]', function () { var server; @@ -18,7 +19,7 @@ describe('headers: [content-length]', function () { server.close(); }); - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); describe('on proxy request', function () { it('a `GET` request should have a content-length header, and it should be 0', function (done) { diff --git a/test/streaming.js b/test/streaming.js index ab5aef5..dc571ea 100644 --- a/test/streaming.js +++ b/test/streaming.js @@ -5,6 +5,8 @@ var express = require('express'); var http = require('http'); var startProxyTarget = require('./support/proxyTarget'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); function chunkingProxyServer() { var proxyRouteFn = [{ @@ -45,7 +47,7 @@ function startLocalServer(proxyOptions) { } describe('streams / piped requests', function () { - this.timeout(3000); + this.timeout(TIMEOUT.MEDIUM); var server; var targetServer; diff --git a/test/urlParsing.js b/test/urlParsing.js index 339492f..fd39415 100644 --- a/test/urlParsing.js +++ b/test/urlParsing.js @@ -4,10 +4,11 @@ var assert = require('assert'); var express = require('express'); var request = require('supertest'); var proxy = require('../'); +var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('url parsing', function () { - - this.timeout(10000); + this.timeout(TIMEOUT.STANDARD); it('can parse a url with a port', function (done) { var app = express(); diff --git a/test/userResDecorator.js b/test/userResDecorator.js index eba8ffc..9440482 100644 --- a/test/userResDecorator.js +++ b/test/userResDecorator.js @@ -5,8 +5,10 @@ var express = require('express'); var request = require('supertest'); var proxy = require('../'); var proxyTarget = require('./support/proxyTarget'); +var TIMEOUT = require('./constants'); describe('userResDecorator', function () { + this.timeout(TIMEOUT.QUICK); var proxyServer; beforeEach(function () { @@ -215,6 +217,29 @@ describe('userResDecorator', function () { done(); }); }); + + describe('when userResDecorator returns a Promise', function () { + this.timeout(TIMEOUT.EXTENDED); // give it some extra time to get response + + it('is able to read and manipulate the response', function (done) { + var app = express(); + app.use(proxy('https://github.com/villadora/express-http-proxy', { + userResDecorator: function (targetResponse, data) { + data = data.toString().replace('DOCTYPE', 'WINNING'); + assert(data !== ''); + return data; + } + })); + + request(app) + .get('/html') + .end(function (err, res) { + if (err) { return done(err); } + assert(res.text.indexOf('WINNING') > -1); + done(); + }); + }); + }); }); describe('test userResDecorator on html response from mock server', function () {