123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /* eslint-disable no-console */
- const crypto = require('crypto');
- const http = require('http');
- const https = require('https');
- const url = require('url');
- const assert = require('assert');
- const localtunnel = require('./localtunnel');
- let fakePort;
- before(done => {
- const server = http.createServer();
- server.on('request', (req, res) => {
- res.write(req.headers.host);
- res.end();
- });
- server.listen(() => {
- const { port } = server.address();
- fakePort = port;
- done();
- });
- });
- it('query localtunnel server w/ ident', async done => {
- const tunnel = await localtunnel({ port: fakePort });
- assert.ok(new RegExp('^https://.*localtunnel.me$').test(tunnel.url));
- const parsed = url.parse(tunnel.url);
- const opt = {
- host: parsed.host,
- port: 443,
- headers: { host: parsed.hostname },
- path: '/',
- };
- const req = https.request(opt, res => {
- res.setEncoding('utf8');
- let body = '';
- res.on('data', chunk => {
- body += chunk;
- });
- res.on('end', () => {
- assert(/.*[.]localtunnel[.]me/.test(body), body);
- tunnel.close();
- done();
- });
- });
- req.end();
- });
- it('request specific domain', async () => {
- const subdomain = Math.random()
- .toString(36)
- .substr(2);
- const tunnel = await localtunnel({ port: fakePort, subdomain });
- assert.ok(new RegExp(`^https://${subdomain}.localtunnel.me$`).test(tunnel.url));
- tunnel.close();
- });
- describe('--local-host localhost', () => {
- it('override Host header with local-host', async done => {
- const tunnel = await localtunnel({ port: fakePort, local_host: 'localhost' });
- assert.ok(new RegExp('^https://.*localtunnel.me$').test(tunnel.url));
- const parsed = url.parse(tunnel.url);
- const opt = {
- host: parsed.host,
- port: 443,
- headers: { host: parsed.hostname },
- path: '/',
- };
- const req = https.request(opt, res => {
- res.setEncoding('utf8');
- let body = '';
- res.on('data', chunk => {
- body += chunk;
- });
- res.on('end', () => {
- assert.strictEqual(body, 'localhost');
- tunnel.close();
- done();
- });
- });
- req.end();
- });
- });
- describe('--local-host 127.0.0.1', () => {
- it('override Host header with local-host', async done => {
- const tunnel = await localtunnel({ port: fakePort, local_host: '127.0.0.1' });
- assert.ok(new RegExp('^https://.*localtunnel.me$').test(tunnel.url));
- const parsed = url.parse(tunnel.url);
- const opt = {
- host: parsed.host,
- port: 443,
- headers: {
- host: parsed.hostname,
- },
- path: '/',
- };
- const req = https.request(opt, res => {
- res.setEncoding('utf8');
- let body = '';
- res.on('data', chunk => {
- body += chunk;
- });
- res.on('end', () => {
- assert.strictEqual(body, '127.0.0.1');
- tunnel.close();
- done();
- });
- });
- req.end();
- });
- it('send chunked request', async done => {
- const tunnel = await localtunnel({ port: fakePort, local_host: '127.0.0.1' });
- assert.ok(new RegExp('^https://.*localtunnel.me$').test(tunnel.url));
- const parsed = url.parse(tunnel.url);
- const opt = {
- host: parsed.host,
- port: 443,
- headers: {
- host: parsed.hostname,
- 'Transfer-Encoding': 'chunked',
- },
- path: '/',
- };
- const req = https.request(opt, res => {
- res.setEncoding('utf8');
- let body = '';
- res.on('data', chunk => {
- body += chunk;
- });
- res.on('end', () => {
- assert.strictEqual(body, '127.0.0.1');
- tunnel.close();
- done();
- });
- });
- req.end(crypto.randomBytes(1024 * 8).toString('base64'));
- });
- });
|