| // test that we can tunnel a https request over an http proxy |
| // keeping all the CA and whatnot intact. |
| // |
| // Note: this requires that squid is installed. |
| // If the proxy fails to start, we'll just log a warning and assume success. |
| |
| var server = require('./server') |
| , assert = require('assert') |
| , request = require('../main.js') |
| , fs = require('fs') |
| , path = require('path') |
| , caFile = path.resolve(__dirname, 'ssl/npm-ca.crt') |
| , ca = fs.readFileSync(caFile) |
| , child_process = require('child_process') |
| , sqConf = path.resolve(__dirname, 'squid.conf') |
| , sqArgs = ['-f', sqConf, '-N', '-d', '5'] |
| , proxy = 'http://localhost:3128' |
| , hadError = null |
| |
| var squid = child_process.spawn('squid', sqArgs); |
| var ready = false |
| |
| squid.stderr.on('data', function (c) { |
| console.error('SQUIDERR ' + c.toString().trim().split('\n') |
| .join('\nSQUIDERR ')) |
| ready = c.toString().match(/ready to serve requests/i) |
| }) |
| |
| squid.stdout.on('data', function (c) { |
| console.error('SQUIDOUT ' + c.toString().trim().split('\n') |
| .join('\nSQUIDOUT ')) |
| }) |
| |
| squid.on('exit', function (c) { |
| console.error('exit '+c) |
| if (c && !ready) { |
| console.error('squid must be installed to run this test.') |
| c = null |
| hadError = null |
| process.exit(0) |
| return |
| } |
| |
| if (c) { |
| hadError = hadError || new Error('Squid exited with '+c) |
| } |
| if (hadError) throw hadError |
| }) |
| |
| setTimeout(function F () { |
| if (!ready) return setTimeout(F, 100) |
| request({ uri: 'https://registry.npmjs.org/request/' |
| , proxy: 'http://localhost:3128' |
| , ca: ca |
| , json: true }, function (er, body) { |
| hadError = er |
| console.log(er || typeof body) |
| if (!er) console.log("ok") |
| squid.kill('SIGKILL') |
| }) |
| }, 100) |