123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- 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)
|