var server = require('./server') , events = require('events') , stream = require('stream') , assert = require('assert') , request = require('../main.js') ; var s = server.createServer(); var expectedBody = "waited"; var remainingTests = 5; s.listen(s.port, function () { // Request that waits for 200ms s.on('/timeout', function (req, resp) { setTimeout(function(){ resp.writeHead(200, {'content-type':'text/plain'}) resp.write(expectedBody) resp.end() }, 200); }); // Scenario that should timeout var shouldTimeout = { url: s.url + "/timeout", timeout:100 } request(shouldTimeout, function (err, resp, body) { assert.equal(err.code, "ETIMEDOUT"); checkDone(); }) // Scenario that shouldn't timeout var shouldntTimeout = { url: s.url + "/timeout", timeout:300 } request(shouldntTimeout, function (err, resp, body) { assert.equal(err, null); assert.equal(expectedBody, body) checkDone(); }) // Scenario with no timeout set, so shouldn't timeout var noTimeout = { url: s.url + "/timeout" } request(noTimeout, function (err, resp, body) { assert.equal(err); assert.equal(expectedBody, body) checkDone(); }) // Scenario with a negative timeout value, should be treated a zero or the minimum delay var negativeTimeout = { url: s.url + "/timeout", timeout:-1000 } request(negativeTimeout, function (err, resp, body) { assert.equal(err.code, "ETIMEDOUT"); checkDone(); }) // Scenario with a float timeout value, should be rounded by setTimeout anyway var floatTimeout = { url: s.url + "/timeout", timeout: 100.76 } request(floatTimeout, function (err, resp, body) { assert.equal(err.code, "ETIMEDOUT"); checkDone(); }) function checkDone() { if(--remainingTests == 0) { s.close(); console.log("All tests passed."); } } })