Hex Artifact Content
Not logged in

Artifact 882a7220d507b5c194a3009b9d327c6bddb44eb7:


0000: 27 75 73 65 20 73 74 72 69 63 74 27 0a 0a 76 61  'use strict'..va
0010: 72 20 68 74 74 70 20 3d 20 72 65 71 75 69 72 65  r http = require
0020: 28 27 68 74 74 70 27 29 0a 20 20 2c 20 72 65 71  ('http').  , req
0030: 75 65 73 74 20 3d 20 72 65 71 75 69 72 65 28 27  uest = require('
0040: 2e 2e 2f 69 6e 64 65 78 27 29 0a 20 20 2c 20 74  ../index').  , t
0050: 61 70 65 20 3d 20 72 65 71 75 69 72 65 28 27 74  ape = require('t
0060: 61 70 65 27 29 0a 0a 76 61 72 20 73 65 72 76 65  ape')..var serve
0070: 72 20 3d 20 68 74 74 70 2e 63 72 65 61 74 65 53  r = http.createS
0080: 65 72 76 65 72 28 66 75 6e 63 74 69 6f 6e 20 28  erver(function (
0090: 72 65 71 2c 20 72 65 73 29 20 7b 0a 20 20 2f 2f  req, res) {.  //
00a0: 20 72 65 64 69 72 65 63 74 20 65 76 65 72 79 74   redirect everyt
00b0: 68 69 6e 67 20 33 20 74 69 6d 65 73 2c 20 6e 6f  hing 3 times, no
00c0: 20 6d 61 74 74 65 72 20 77 68 61 74 2e 0a 20 20   matter what..  
00d0: 76 61 72 20 63 20 3d 20 72 65 71 2e 68 65 61 64  var c = req.head
00e0: 65 72 73 2e 63 6f 6f 6b 69 65 0a 0a 20 20 69 66  ers.cookie..  if
00f0: 20 28 21 63 29 20 7b 0a 20 20 20 20 63 20 3d 20   (!c) {.    c = 
0100: 30 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  0.  } else {.   
0110: 20 63 20 3d 20 2b 63 2e 73 70 6c 69 74 28 27 3d   c = +c.split('=
0120: 27 29 5b 31 5d 20 7c 7c 20 30 0a 20 20 7d 0a 0a  ')[1] || 0.  }..
0130: 20 20 69 66 20 28 63 20 3e 20 33 29 20 7b 0a 20    if (c > 3) {. 
0140: 20 20 20 72 65 73 2e 65 6e 64 28 27 6f 6b 27 29     res.end('ok')
0150: 0a 20 20 20 20 72 65 74 75 72 6e 0a 20 20 7d 0a  .    return.  }.
0160: 0a 20 20 72 65 73 2e 73 65 74 48 65 61 64 65 72  .  res.setHeader
0170: 28 27 73 65 74 2d 63 6f 6f 6b 69 65 27 2c 20 27  ('set-cookie', '
0180: 63 3d 27 20 2b 20 28 63 20 2b 20 31 29 29 0a 20  c=' + (c + 1)). 
0190: 20 72 65 73 2e 73 65 74 48 65 61 64 65 72 28 27   res.setHeader('
01a0: 6c 6f 63 61 74 69 6f 6e 27 2c 20 72 65 71 2e 75  location', req.u
01b0: 72 6c 29 0a 20 20 72 65 73 2e 73 74 61 74 75 73  rl).  res.status
01c0: 43 6f 64 65 20 3d 20 33 30 32 0a 20 20 72 65 73  Code = 302.  res
01d0: 2e 65 6e 64 28 27 74 72 79 20 61 67 61 69 6e 27  .end('try again'
01e0: 29 0a 7d 29 0a 0a 74 61 70 65 28 27 73 65 74 75  ).})..tape('setu
01f0: 70 27 2c 20 66 75 6e 63 74 69 6f 6e 28 74 29 20  p', function(t) 
0200: 7b 0a 20 20 73 65 72 76 65 72 2e 6c 69 73 74 65  {.  server.liste
0210: 6e 28 36 37 36 37 2c 20 66 75 6e 63 74 69 6f 6e  n(6767, function
0220: 28 29 20 7b 0a 20 20 20 20 74 2e 65 6e 64 28 29  () {.    t.end()
0230: 0a 20 20 7d 29 0a 7d 29 0a 0a 74 61 70 65 28 27  .  }).})..tape('
0240: 66 6f 6c 6c 6f 77 41 6c 6c 52 65 64 69 72 65 63  followAllRedirec
0250: 74 73 27 2c 20 66 75 6e 63 74 69 6f 6e 28 74 29  ts', function(t)
0260: 20 7b 0a 20 20 76 61 72 20 72 65 64 69 72 65 63   {.  var redirec
0270: 74 73 20 3d 20 30 0a 0a 20 20 72 65 71 75 65 73  ts = 0..  reques
0280: 74 2e 70 6f 73 74 28 7b 0a 20 20 20 20 75 72 6c  t.post({.    url
0290: 3a 20 27 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68  : 'http://localh
02a0: 6f 73 74 3a 36 37 36 37 2f 66 6f 6f 27 2c 0a 20  ost:6767/foo',. 
02b0: 20 20 20 66 6f 6c 6c 6f 77 41 6c 6c 52 65 64 69     followAllRedi
02c0: 72 65 63 74 73 3a 20 74 72 75 65 2c 0a 20 20 20  rects: true,.   
02d0: 20 6a 61 72 3a 20 74 72 75 65 2c 0a 20 20 20 20   jar: true,.    
02e0: 66 6f 72 6d 3a 20 7b 20 66 6f 6f 3a 20 27 62 61  form: { foo: 'ba
02f0: 72 27 20 7d 0a 20 20 7d 2c 20 66 75 6e 63 74 69  r' }.  }, functi
0300: 6f 6e 20 28 65 72 72 2c 20 72 65 73 2c 20 62 6f  on (err, res, bo
0310: 64 79 29 20 7b 0a 20 20 20 20 74 2e 65 71 75 61  dy) {.    t.equa
0320: 6c 28 65 72 72 2c 20 6e 75 6c 6c 29 0a 20 20 20  l(err, null).   
0330: 20 74 2e 65 71 75 61 6c 28 62 6f 64 79 2c 20 27   t.equal(body, '
0340: 6f 6b 27 29 0a 20 20 20 20 74 2e 65 71 75 61 6c  ok').    t.equal
0350: 28 72 65 64 69 72 65 63 74 73 2c 20 34 29 0a 20  (redirects, 4). 
0360: 20 20 20 74 2e 65 6e 64 28 29 0a 20 20 7d 29 2e     t.end().  }).
0370: 6f 6e 28 27 72 65 64 69 72 65 63 74 27 2c 20 66  on('redirect', f
0380: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20  unction() {.    
0390: 72 65 64 69 72 65 63 74 73 2b 2b 0a 20 20 7d 29  redirects++.  })
03a0: 0a 7d 29 0a 0a 74 61 70 65 28 27 63 6c 65 61 6e  .})..tape('clean
03b0: 75 70 27 2c 20 66 75 6e 63 74 69 6f 6e 28 74 29  up', function(t)
03c0: 20 7b 0a 20 20 73 65 72 76 65 72 2e 63 6c 6f 73   {.  server.clos
03d0: 65 28 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20  e(function() {. 
03e0: 20 20 20 74 2e 65 6e 64 28 29 0a 20 20 7d 29 0a     t.end().  }).
03f0: 7d 29 0a                                         }).