| var http = require('http') |
| , https = require('https') |
| , server = require('./server') |
| , assert = require('assert') |
| , request = require('../main.js') |
| |
| |
| var faux_requests_made = {'http':0, 'https':0} |
| function wrap_request(name, module) { |
| // Just like the http or https module, but note when a request is made. |
| var wrapped = {} |
| Object.keys(module).forEach(function(key) { |
| var value = module[key]; |
| |
| if(key != 'request') |
| wrapped[key] = value; |
| else |
| wrapped[key] = function(options, callback) { |
| faux_requests_made[name] += 1 |
| return value.apply(this, arguments) |
| } |
| }) |
| |
| return wrapped; |
| } |
| |
| |
| var faux_http = wrap_request('http', http) |
| , faux_https = wrap_request('https', https) |
| , plain_server = server.createServer() |
| , https_server = server.createSSLServer() |
| |
| |
| plain_server.listen(plain_server.port, function() { |
| plain_server.on('/plain', function (req, res) { |
| res.writeHead(200) |
| res.end('plain') |
| }) |
| plain_server.on('/to_https', function (req, res) { |
| res.writeHead(301, {'location':'https://localhost:'+https_server.port + '/https'}) |
| res.end() |
| }) |
| |
| https_server.listen(https_server.port, function() { |
| https_server.on('/https', function (req, res) { |
| res.writeHead(200) |
| res.end('https') |
| }) |
| https_server.on('/to_plain', function (req, res) { |
| res.writeHead(302, {'location':'http://localhost:'+plain_server.port + '/plain'}) |
| res.end() |
| }) |
| |
| run_tests() |
| run_tests({}) |
| run_tests({'http:':faux_http}) |
| run_tests({'https:':faux_https}) |
| run_tests({'http:':faux_http, 'https:':faux_https}) |
| }) |
| }) |
| |
| function run_tests(httpModules) { |
| var to_https = 'http://localhost:'+plain_server.port+'/to_https' |
| var to_plain = 'https://localhost:'+https_server.port+'/to_plain' |
| |
| request(to_https, {'httpModules':httpModules}, function (er, res, body) { |
| assert.ok(!er, 'Bounce to SSL worked') |
| assert.equal(body, 'https', 'Received HTTPS server body') |
| done() |
| }) |
| |
| request(to_plain, {'httpModules':httpModules}, function (er, res, body) { |
| assert.ok(!er, 'Bounce to plaintext server worked') |
| assert.equal(body, 'plain', 'Received HTTPS server body') |
| done() |
| }) |
| } |
| |
| |
| var passed = 0; |
| function done() { |
| passed += 1 |
| var expected = 10 |
| |
| if(passed == expected) { |
| plain_server.close() |
| https_server.close() |
| |
| assert.equal(faux_requests_made.http, 4, 'Wrapped http module called appropriately') |
| assert.equal(faux_requests_made.https, 4, 'Wrapped https module called appropriately') |
| |
| console.log((expected+2) + ' tests passed.') |
| } |
| } |