You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

redirect.js 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /**
  2. * Module dependencies.
  3. */
  4. var fs = require('fs');
  5. var st = require('st');
  6. var path = require('path');
  7. var http = require('http');
  8. var https = require('https');
  9. var getUri = require('../');
  10. var assert = require('assert');
  11. var streamToArray = require('stream-to-array');
  12. describe('get-uri', function () {
  13. describe('http/https redirects', function () {
  14. var httpServer;
  15. var httpsServer;
  16. var httpPort;
  17. var httpsPort;
  18. before(function(done) {
  19. httpServer = http.createServer();
  20. httpServer.listen(function() {
  21. httpPort = httpServer.address().port;
  22. done();
  23. });
  24. });
  25. before(function(done) {
  26. var options = {
  27. key: fs.readFileSync(__dirname + '/server.key'),
  28. cert: fs.readFileSync(__dirname + '/server.crt')
  29. };
  30. httpsServer = https.createServer(options);
  31. httpsServer.listen(function() {
  32. httpsPort = httpsServer.address().port;
  33. done();
  34. });
  35. });
  36. after(function (done) {
  37. httpsServer.once('close', function () {
  38. done();
  39. });
  40. httpsServer.close();
  41. });
  42. after(function (done) {
  43. httpServer.once('close', function () {
  44. done();
  45. });
  46. httpServer.close();
  47. });
  48. it('should handle http -> https redirect', function (done) {
  49. httpsServer.once('request', st(__dirname));
  50. httpServer.once('request', function(req, res) {
  51. res.writeHead(301, {'Location': 'https://127.0.0.1:' + httpsPort + '/' + path.basename(__filename)});
  52. res.end('Moved');
  53. });
  54. var uri = 'http://127.0.0.1:' + httpPort + '/' + path.basename(__filename);
  55. fs.readFile(__filename, 'utf8', function (err, real) {
  56. if (err) return done(err);
  57. getUri(uri, { rejectUnauthorized: false }, function (err, rs) {
  58. if (err) return done(err);
  59. streamToArray(rs, function (err, array) {
  60. if (err) return done(err);
  61. var str = Buffer.concat(array).toString('utf8');
  62. assert.equal(str, real);
  63. done();
  64. });
  65. });
  66. });
  67. });
  68. it('should handle https -> http redirect', function (done) {
  69. httpServer.once('request', st(__dirname));
  70. httpsServer.once('request', function(req, res) {
  71. res.writeHead(301, {'Location': 'http://127.0.0.1:' + httpPort + '/' + path.basename(__filename)});
  72. res.end('Moved');
  73. });
  74. var uri = 'http://127.0.0.1:' + httpPort + '/' + path.basename(__filename);
  75. fs.readFile(__filename, 'utf8', function (err, real) {
  76. if (err) return done(err);
  77. getUri(uri, function (err, rs) {
  78. if (err) return done(err);
  79. streamToArray(rs, function (err, array) {
  80. if (err) return done(err);
  81. var str = Buffer.concat(array).toString('utf8');
  82. assert.equal(str, real);
  83. done();
  84. });
  85. });
  86. });
  87. });
  88. });
  89. });