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.') } }