| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | 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 passapp.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) || 8199console.log('Test server listening on port', port)server.listen(port)
 |