Blame view

node_modules/stream-http/test/server/index.js 3.3 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
  var cookieParser = require('cookie-parser')
  var basicAuth = require('basic-auth')
  var express = require('express')
  var fs = require('fs')
  var http = require('http')
  var path = require('path')
  var url = require('url')
  
  var app = express()
  var server = http.createServer(app)
  
  // Otherwise, use 'application/octet-stream'
  var copiesMimeTypes = {
  	'/basic.txt': 'text/plain'
  }
  
  var maxDelay = 5000 // ms
  
  // This should make sure bodies aren't cached
  // so the streaming tests always pass
  app.use(function (req, res, next) {
  	res.setHeader('Cache-Control', 'no-store')
  	next()
  })
  
  app.get('/testHeaders', function (req, res) {
  	var parsed = url.parse(req.url, true)
  
  	// Values in query parameters are sent as response headers
  	Object.keys(parsed.query).forEach(function (key) {
  		res.setHeader('Test-' + key, parsed.query[key])
  	})
  
  	res.setHeader('Content-Type', 'application/json')
  	res.setHeader('Cache-Control', 'no-cache')
  
  	// Request headers are sent in the body as json
  	var reqHeaders = {}
  	Object.keys(req.headers).forEach(function (key) {
  		key = key.toLowerCase()
  		if (key.indexOf('test-') === 0) {
  			// different browsers format request headers with multiple values
  			// slightly differently, so normalize
  			reqHeaders[key] = req.headers[key].replace(', ', ',')
  		}
  	})
  
  	var body = JSON.stringify(reqHeaders)
  	res.setHeader('Content-Length', body.length)
  	res.write(body)
  	res.end()
  })
  
  app.get('/cookie', cookieParser(), function (req, res) {
  	res.setHeader('Content-Type', 'text/plain')
  	res.write('hello=' + req.cookies.hello)
  	res.end()
  })
  
  app.get('/auth', function (req, res) {
  	var user = basicAuth(req)
  
  	if (!user || user.name !== 'TestUser' || user.pass !== 'trustno1') {
  		res.setHeader('WWW-Authenticate', 'Basic realm="example"')
  		res.end('Access denied')
  	} else {
  		res.setHeader('Content-Type', 'text/plain')
  		res.write('You\'re in!')
  		res.end()
  	}
  })
  
  app.post('/echo', function (req, res) {
  	res.setHeader('Content-Type', 'application/octet-stream')
  	req.pipe(res)
  })
  
  app.use('/verifyEmpty', function (req, res) {
  	var empty = true
  	req.on('data', function (buf) {
  		if (buf.length > 0) {
  			empty = false
  		}
  	})
  	req.on('end', function () {
  		res.setHeader('Content-Type', 'text/plain')
  
  		if (empty) {
  			res.end('empty')
  		} else {
  			res.end('not empty')
  		}
  	})
  })
  
  app.use(function (req, res, next) {
  	var parsed = url.parse(req.url, true)
  
  	if ('copies' in parsed.query) {
  		var totalCopies = parseInt(parsed.query.copies, 10)
  		function fail () {
  			res.statusCode = 500
  			res.end()
  		}
  		fs.readFile(path.join(__dirname, 'static', parsed.pathname), function (err, data) {
  			if (err)
  				return fail()
  
  			var mimeType = copiesMimeTypes[parsed.pathname] || 'application/octet-stream'
  			res.setHeader('Content-Type', mimeType)
  			res.setHeader('Content-Length', data.length * totalCopies)
  			var pieceDelay = maxDelay / totalCopies
  			if (pieceDelay > 100)
  				pieceDelay = 100
  
  			function write (copies) {
  				if (copies === 0) 
  					return res.end()
  
  				res.write(data, function (err) {
  					if (err)
  						return fail()
  					setTimeout(write.bind(null, copies - 1), pieceDelay)
  				})
  			}
  			write(totalCopies)
  		})
  		return
  	}
  	next()
  })
  
  app.use(express.static(path.join(__dirname, 'static')))
  
  var port = parseInt(process.env.AIRTAP_PORT) || 8199
  console.log('Test server listening on port', port)
  server.listen(port)