123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- var http = require('http');
- var https = require('https');
- var url = require('url');
- var assert = require('assert');
- var localtunnel = require('../');
- test('setup local http server', function(done) {
- var server = http.createServer();
- server.on('request', function(req, res) {
- res.write(req.headers.host);
- res.end();
- });
- server.listen(function() {
- var port = server.address().port;
- test._fake_port = port;
- console.log('local http on:', port);
- done();
- });
- });
- test('setup localtunnel client', function(done) {
- localtunnel(test._fake_port, function(err, tunnel) {
- assert.ifError(err);
- assert.ok(new RegExp('^https:\/\/.*localtunnel.me' + '$').test(tunnel.url));
- test._fake_url = tunnel.url;
- done();
- });
- });
- test('query localtunnel server w/ ident', function(done) {
- var uri = test._fake_url;
- var parsed = url.parse(uri);
- var opt = {
- host: parsed.host,
- port: 443,
- headers: {
- host: parsed.hostname
- },
- path: '/'
- };
- var req = https.request(opt, function(res) {
- res.setEncoding('utf8');
- var body = '';
- res.on('data', function(chunk) {
- body += chunk;
- });
- res.on('end', function() {
- assert(/.*[.]localtunnel[.]me/.test(body), body);
- done();
- });
- });
- req.end();
- });
- test('request specific domain', function(done) {
- localtunnel(test._fake_port, { subdomain: 'abcd' }, function(err, tunnel) {
- assert.ifError(err);
- assert.ok(new RegExp('^https:\/\/abcd.localtunnel.me' + '$').test(tunnel.url));
- tunnel.close();
- done();
- });
- });
- suite('--local-host localhost');
- test('setup localtunnel client', function(done) {
- var opt = {
- local_host: 'localhost'
- };
- localtunnel(test._fake_port, opt, function(err, tunnel) {
- assert.ifError(err);
- assert.ok(new RegExp('^https:\/\/.*localtunnel.me' + '$').test(tunnel.url));
- test._fake_url = tunnel.url;
- done();
- });
- });
- test('override Host header with local-host', function(done) {
- var uri = test._fake_url;
- var parsed = url.parse(uri);
- var opt = {
- host: parsed.host,
- port: 443,
- headers: {
- host: parsed.hostname
- },
- path: '/'
- };
- var req = https.request(opt, function(res) {
- res.setEncoding('utf8');
- var body = '';
- res.on('data', function(chunk) {
- body += chunk;
- });
- res.on('end', function() {
- assert.equal(body, 'localhost');
- done();
- });
- });
- req.end();
- });
- suite('--local-host 127.0.0.1');
- test('setup localtunnel client', function(done) {
- var opt = {
- local_host: '127.0.0.1'
- };
- localtunnel(test._fake_port, opt, function(err, tunnel) {
- assert.ifError(err);
- assert.ok(new RegExp('^https:\/\/.*localtunnel.me' + '$').test(tunnel.url));
- test._fake_url = tunnel.url;
- done();
- });
- });
- test('override Host header with local-host', function(done) {
- var uri = test._fake_url;
- var parsed = url.parse(uri);
- var opt = {
- host: parsed.host,
- port: 443,
- headers: {
- host: parsed.hostname
- },
- path: '/'
- };
- var req = https.request(opt, function(res) {
- res.setEncoding('utf8');
- var body = '';
- res.on('data', function(chunk) {
- body += chunk;
- });
- res.on('end', function() {
- assert.equal(body, '127.0.0.1');
- done();
- });
- });
- req.end();
- });
- test('send chunked request', function(done) {
- var uri = test._fake_url;
- var parsed = url.parse(uri);
- var opt = {
- host: parsed.host,
- port: 443,
- headers: {
- host: parsed.hostname,
- 'Transfer-Encoding': 'chunked'
- },
- path: '/'
- };
- var req = https.request(opt, function(res) {
- res.setEncoding('utf8');
- var body = '';
- res.on('data', function(chunk) {
- body += chunk;
- });
- res.on('end', function() {
- assert.equal(body, '127.0.0.1');
- done();
- });
- });
- req.end(require('crypto').randomBytes(1024 * 8).toString('base64'));
- });
|