diff --git a/README.md b/README.md index 57b9ee9..88507ae 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # localtunnel-server -[![Build Status](https://travis-ci.org/localtunnel/server.svg?branch=master)](https://travis-ci.org/localtunnel/server) +[![Build Status](https://travis-ci.org/gojisystems/gojiconnect-server.svg?branch=master)](https://travis-ci.org/gojisystems/gojiconnect-server) localtunnel exposes your localhost to the world for easy testing and sharing! No need to mess with DNS or deploy just to have others test out your changes. @@ -30,6 +30,7 @@ bin/server --port 1234 The localtunnel server is now running and waiting for client requests on port 1234. You will most likely want to set up a reverse proxy to listen on port 80 (or start localtunnel on port 80 directly). **Note** that to use sub-hosts you should pass `--sub-host` option during set up. Pass this argument for every sub-host level. +Alternatively, `--sub-host` may be passed in as a single argument with the all sub hosts in a string `"nested.sub"` ```shell # server set to run on port 1234 w/ a sub host to allow for this URL to work "http://sub.example.com" @@ -43,6 +44,12 @@ bin/server --port 1234 \ --sub-host nested \ --sub-host sub ``` +**Alternative** +```shell +# server set to run on port 1234 w/ a sub host to allow for this URL to work "http://nested.sub.example.com" +bin/server --port 1234 \ +--sub-host "nested.sub" +``` ## use your server diff --git a/test/nested-sub.js b/test/nested-sub.js new file mode 100644 index 0000000..21ed90f --- /dev/null +++ b/test/nested-sub.js @@ -0,0 +1,68 @@ +var http = require('http'); +var url = require('url'); +var assert = require('assert'); +var localtunnel = require('localtunnel'); + +var localtunnel_server = require('../server')({ + max_tcp_sockets: 2, + subHost: ['nested','sub'] +}); + +var lt_server_port + +suite('nested-sub'); + +test('set up localtunnel server', function(done) { + var server = localtunnel_server.listen(function() { + lt_server_port = server.address().port; + done(); + }); +}); + +test('set up local http server', function(done) { + var server = http.createServer(function(req, res) { + res.end('hello world!'); + }); + + server.listen(function() { + test._fake_port = server.address().port; + done(); + }); +}); +test('set up localtunnel client (sub-host)', function (done) { + var opt = { + host: 'http://nested.sub.host:' + lt_server_port, + subdomain: 'txy-z' + }; + + localtunnel(test._fake_port, opt, function (err, tunnel) { + assert.ifError(err); + var url = tunnel.url; + assert.ok(new RegExp('^http:\/\/.*nested.sub.host:' + lt_server_port + '$').test(url)); + test._fake_url = url; + done(err); + }); +}); + +test('should respond to request (sub-host)', function (done) { + var hostname = url.parse(test._fake_url).hostname; + var opt = { + host: 'nested.sub.host', + port: lt_server_port, + headers: { + host: hostname + '.tld' + } + }; + http.get(opt, function (res) { + var body = ''; + res.setEncoding('utf-8'); + res.on('data', function (chunk) { + body += chunk; + }); + + res.on('end', function () { + assert.equal(body, 'hello world!'); + done(); + }); + }); +}); \ No newline at end of file diff --git a/test/nested.sub.js b/test/nested.sub.js new file mode 100644 index 0000000..e9f243b --- /dev/null +++ b/test/nested.sub.js @@ -0,0 +1,68 @@ +var http = require('http'); +var url = require('url'); +var assert = require('assert'); +var localtunnel = require('localtunnel'); + +var localtunnel_server = require('../server')({ + max_tcp_sockets: 2, + subHost: ['nested.sub'] +}); + +var lt_server_port + +suite('nested.sub'); + +test('set up localtunnel server', function(done) { + var server = localtunnel_server.listen(function() { + lt_server_port = server.address().port; + done(); + }); +}); + +test('set up local http server', function(done) { + var server = http.createServer(function(req, res) { + res.end('hello world!'); + }); + + server.listen(function() { + test._fake_port = server.address().port; + done(); + }); +}); +test('set up localtunnel client (sub-host)', function (done) { + var opt = { + host: 'http://nested.sub.host:' + lt_server_port, + subdomain: 'txy-z' + }; + + localtunnel(test._fake_port, opt, function (err, tunnel) { + assert.ifError(err); + var url = tunnel.url; + assert.ok(new RegExp('^http:\/\/.*nested.sub.host:' + lt_server_port + '$').test(url)); + test._fake_url = url; + done(err); + }); +}); + +test('should respond to request (sub-host)', function (done) { + var hostname = url.parse(test._fake_url).hostname; + var opt = { + host: 'nested.sub.host', + port: lt_server_port, + headers: { + host: hostname + '.tld' + } + }; + http.get(opt, function (res) { + var body = ''; + res.setEncoding('utf-8'); + res.on('data', function (chunk) { + body += chunk; + }); + + res.on('end', function () { + assert.equal(body, 'hello world!'); + done(); + }); + }); +}); \ No newline at end of file diff --git a/test/simple.js b/test/simple.js index 05d68bc..100f95b 100644 --- a/test/simple.js +++ b/test/simple.js @@ -67,41 +67,4 @@ test('should respond to request', function(done) { done(); }); }); -}); -test('set up localtunnel client (sub-host)', function (done) { - var opt = { - host: 'http://nested.sub.host:' + lt_server_port, - subdomain: 'txy-z' - }; - - localtunnel(test._fake_port, opt, function (err, tunnel) { - assert.ifError(err); - var url = tunnel.url; - assert.ok(new RegExp('^http:\/\/.*nested.sub.host:' + lt_server_port + '$').test(url)); - test._fake_url = url; - done(err); - }); -}); - -test('should respond to request (sub-host)', function (done) { - var hostname = url.parse(test._fake_url).hostname; - var opt = { - host: 'nested.sub.host', - port: lt_server_port, - headers: { - host: hostname + '.tld' - } - }; - http.get(opt, function (res) { - var body = ''; - res.setEncoding('utf-8'); - res.on('data', function (chunk) { - body += chunk; - }); - - res.on('end', function () { - assert.equal(body, 'hello world!'); - done(); - }); - }); }); \ No newline at end of file diff --git a/test/websocket.js b/test/websocket.js index 48b46f7..ae4b6a4 100644 --- a/test/websocket.js +++ b/test/websocket.js @@ -69,37 +69,6 @@ test('websocket server request', function(done) { done(); }); - ws.on('open', function open() { - ws.send('something'); - }); -}); -test('set up localtunnel client (sub host)', function (done) { - var opt = { - host: 'http://sub.host:' + lt_server_port - }; - - localtunnel(test._fake_port, opt, function (err, tunnel) { - assert.ifError(err); - var url = tunnel.url; - assert.ok(new RegExp('^http:\/\/.*sub.host:' + lt_server_port + '$').test(url)); - test._fake_url = url; - done(err); - }); -}); - -test('websocket server request (sub-host)', function (done) { - var hostname = url.parse(test._fake_url).hostname; - var ws = new WebSocket('http://sub.host:' + lt_server_port, { - headers: { - host: hostname + '.tld' - } - }); - - ws.on('message', function (msg) { - assert.equal(msg, 'something'); - done(); - }); - ws.on('open', function open() { ws.send('something'); }); diff --git a/test/websocket.sub.js b/test/websocket.sub.js new file mode 100644 index 0000000..f9c0f35 --- /dev/null +++ b/test/websocket.sub.js @@ -0,0 +1,74 @@ +var http = require('http'); +var url = require('url'); +var assert = require('assert'); +var localtunnel = require('localtunnel'); +var WebSocket = require('ws'); +var WebSocketServer = require('ws').Server; + +var localtunnel_server = require('../server')({ + max_tcp_sockets: 2, + subHost: ['sub'] +}); + +var lt_server_port + +suite('websocket.sub'); + +before('set up localtunnel server', function(done) { + var server = localtunnel_server.listen(function() { + lt_server_port = server.address().port; + done(); + }); +}); + +before('set up local websocket server', function(done) { + var wss = new WebSocketServer({ port: 0 }, function() { + test._fake_port = wss._server.address().port; + done(); + }); + + wss.on('error', function(err) { + done(err); + }); + + wss.on('connection', function connection(ws) { + ws.on('error', function(err) { + done(err); + }); + + ws.on('message', function incoming(message) { + ws.send(message); + }); + }); +}); +test('set up localtunnel client (sub host)', function (done) { + var opt = { + host: 'http://sub.host:' + lt_server_port + }; + + localtunnel(test._fake_port, opt, function (err, tunnel) { + assert.ifError(err); + var url = tunnel.url; + assert.ok(new RegExp('^http:\/\/.*sub.host:' + lt_server_port + '$').test(url)); + test._fake_url = url; + done(err); + }); +}); + +test('websocket server request (sub-host)', function (done) { + var hostname = url.parse(test._fake_url).hostname; + var ws = new WebSocket('http://sub.host:' + lt_server_port, { + headers: { + host: hostname + '.tld' + } + }); + + ws.on('message', function (msg) { + assert.equal(msg, 'something'); + done(); + }); + + ws.on('open', function open() { + ws.send('something'); + }); +}); \ No newline at end of file