test-protocol-changing-redirect.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. var server = require('./server')
  2. , assert = require('assert')
  3. , request = require('../index')
  4. var s = server.createServer()
  5. var ss = server.createSSLServer()
  6. var sUrl = 'http://localhost:' + s.port
  7. var ssUrl = 'https://localhost:' + ss.port
  8. s.listen(s.port, bouncy(s, ssUrl))
  9. ss.listen(ss.port, bouncy(ss, sUrl))
  10. var hits = {}
  11. var expect = {}
  12. var pending = 0
  13. function bouncy (s, server) { return function () {
  14. var redirs = { a: 'b'
  15. , b: 'c'
  16. , c: 'd'
  17. , d: 'e'
  18. , e: 'f'
  19. , f: 'g'
  20. , g: 'h'
  21. , h: 'end' }
  22. var perm = true
  23. Object.keys(redirs).forEach(function (p) {
  24. var t = redirs[p]
  25. // switch type each time
  26. var type = perm ? 301 : 302
  27. perm = !perm
  28. s.on('/' + p, function (req, res) {
  29. res.writeHead(type, { location: server + '/' + t })
  30. res.end()
  31. })
  32. })
  33. s.on('/end', function (req, res) {
  34. var h = req.headers['x-test-key']
  35. hits[h] = true
  36. pending --
  37. if (pending === 0) done()
  38. })
  39. }}
  40. for (var i = 0; i < 5; i ++) {
  41. pending ++
  42. var val = 'test_' + i
  43. expect[val] = true
  44. request({ url: (i % 2 ? sUrl : ssUrl) + '/a'
  45. , headers: { 'x-test-key': val }
  46. , rejectUnauthorized: false })
  47. }
  48. function done () {
  49. assert.deepEqual(hits, expect)
  50. process.exit(0)
  51. }