mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.3 KiB
57 lines
1.3 KiB
11 years ago
|
// a fake registry server.
|
||
|
|
||
|
var http = require('http')
|
||
|
var server = http.createServer(handler)
|
||
|
var port = server.port = process.env.PORT || 1337
|
||
|
server.listen(port)
|
||
|
|
||
|
module.exports = server
|
||
|
|
||
|
server._expect = {}
|
||
|
|
||
|
var expect = {}
|
||
|
function handler (req, res) {
|
||
|
req.connection.setTimeout(1000)
|
||
|
|
||
|
var u = '* ' + req.url
|
||
|
, mu = req.method + ' ' + req.url
|
||
|
|
||
|
var k = server._expect[mu] ? mu : server._expect[u] ? u : null
|
||
|
if (!k) throw Error('unexpected request', req.method, req.url)
|
||
|
|
||
|
var fn = server._expect[k].shift()
|
||
|
if (!fn) throw Error('unexpected request', req.method, req.url)
|
||
|
|
||
|
|
||
|
var remain = (Object.keys(server._expect).reduce(function (s, k) {
|
||
|
return s + server._expect[k].length
|
||
|
}, 0))
|
||
|
if (remain === 0) server.close()
|
||
|
else console.error("TEST SERVER: %d reqs remain", remain)
|
||
|
console.error(Object.keys(server._expect).map(function(k) {
|
||
|
return [k, server._expect[k].length]
|
||
|
}).reduce(function (acc, kv) {
|
||
|
acc[kv[0]] = kv[1]
|
||
|
return acc
|
||
|
}, {}))
|
||
|
|
||
|
res.json = json
|
||
|
fn(req, res)
|
||
|
}
|
||
|
|
||
|
function json (o) {
|
||
|
this.setHeader('content-type', 'application/json')
|
||
|
this.end(JSON.stringify(o))
|
||
|
}
|
||
|
|
||
|
server.expect = function (method, u, fn) {
|
||
|
if (typeof u === 'function') {
|
||
|
fn = u
|
||
|
u = method
|
||
|
method = '*'
|
||
|
}
|
||
|
u = method + ' ' + u
|
||
|
server._expect[u] = server._expect[u] || []
|
||
|
server._expect[u].push(fn)
|
||
|
}
|