index.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. var http = require('http');
  2. var https = require('https');
  3. var url = require('url');
  4. var assert = require('assert');
  5. var localtunnel = require('../');
  6. test('setup local http server', function(done) {
  7. var server = http.createServer();
  8. server.on('request', function(req, res) {
  9. res.write(req.headers.host);
  10. res.end();
  11. });
  12. server.listen(function() {
  13. var port = server.address().port;
  14. test._fake_port = port;
  15. console.log('local http on:', port);
  16. done();
  17. });
  18. });
  19. test('setup localtunnel client', function(done) {
  20. localtunnel(test._fake_port, function(err, tunnel) {
  21. assert.ifError(err);
  22. assert.ok(new RegExp('^https:\/\/.*localtunnel.me' + '$').test(tunnel.url));
  23. test._fake_url = tunnel.url;
  24. done();
  25. });
  26. });
  27. test('query localtunnel server w/ ident', function(done) {
  28. var uri = test._fake_url;
  29. var parsed = url.parse(uri);
  30. var opt = {
  31. host: parsed.host,
  32. port: 443,
  33. headers: {
  34. host: parsed.hostname
  35. },
  36. path: '/'
  37. };
  38. var req = https.request(opt, function(res) {
  39. res.setEncoding('utf8');
  40. var body = '';
  41. res.on('data', function(chunk) {
  42. body += chunk;
  43. });
  44. res.on('end', function() {
  45. assert(/.*[.]localtunnel[.]me/.test(body), body);
  46. done();
  47. });
  48. });
  49. req.end();
  50. });
  51. test('request specific domain', function(done) {
  52. localtunnel(test._fake_port, { subdomain: 'abcd' }, function(err, tunnel) {
  53. assert.ifError(err);
  54. assert.ok(new RegExp('^https:\/\/abcd.localtunnel.me' + '$').test(tunnel.url));
  55. tunnel.close();
  56. done();
  57. });
  58. });
  59. suite('--local-host localhost');
  60. test('setup localtunnel client', function(done) {
  61. var opt = {
  62. local_host: 'localhost'
  63. };
  64. localtunnel(test._fake_port, opt, function(err, tunnel) {
  65. assert.ifError(err);
  66. assert.ok(new RegExp('^https:\/\/.*localtunnel.me' + '$').test(tunnel.url));
  67. test._fake_url = tunnel.url;
  68. done();
  69. });
  70. });
  71. test('override Host header with local-host', function(done) {
  72. var uri = test._fake_url;
  73. var parsed = url.parse(uri);
  74. var opt = {
  75. host: parsed.host,
  76. port: 443,
  77. headers: {
  78. host: parsed.hostname
  79. },
  80. path: '/'
  81. };
  82. var req = https.request(opt, function(res) {
  83. res.setEncoding('utf8');
  84. var body = '';
  85. res.on('data', function(chunk) {
  86. body += chunk;
  87. });
  88. res.on('end', function() {
  89. assert.equal(body, 'localhost');
  90. done();
  91. });
  92. });
  93. req.end();
  94. });
  95. suite('--local-host 127.0.0.1');
  96. test('setup localtunnel client', function(done) {
  97. var opt = {
  98. local_host: '127.0.0.1'
  99. };
  100. localtunnel(test._fake_port, opt, function(err, tunnel) {
  101. assert.ifError(err);
  102. assert.ok(new RegExp('^https:\/\/.*localtunnel.me' + '$').test(tunnel.url));
  103. test._fake_url = tunnel.url;
  104. done();
  105. });
  106. });
  107. test('override Host header with local-host', function(done) {
  108. var uri = test._fake_url;
  109. var parsed = url.parse(uri);
  110. var opt = {
  111. host: parsed.host,
  112. port: 443,
  113. headers: {
  114. host: parsed.hostname
  115. },
  116. path: '/'
  117. };
  118. var req = https.request(opt, function(res) {
  119. res.setEncoding('utf8');
  120. var body = '';
  121. res.on('data', function(chunk) {
  122. body += chunk;
  123. });
  124. res.on('end', function() {
  125. assert.equal(body, '127.0.0.1');
  126. done();
  127. });
  128. });
  129. req.end();
  130. });
  131. test('send chunked request', function(done) {
  132. var uri = test._fake_url;
  133. var parsed = url.parse(uri);
  134. var opt = {
  135. host: parsed.host,
  136. port: 443,
  137. headers: {
  138. host: parsed.hostname,
  139. 'Transfer-Encoding': 'chunked'
  140. },
  141. path: '/'
  142. };
  143. var req = https.request(opt, function(res) {
  144. res.setEncoding('utf8');
  145. var body = '';
  146. res.on('data', function(chunk) {
  147. body += chunk;
  148. });
  149. res.on('end', function() {
  150. assert.equal(body, '127.0.0.1');
  151. done();
  152. });
  153. });
  154. req.end(require('crypto').randomBytes(1024 * 8).toString('base64'));
  155. });