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.
 
 
 

97 lines
3.1 KiB

/*
* simple-test.js: Simple tests for basic streaming and non-streaming HTTP requests with union.
*
* (C) 2011, Charlie Robbins & the Contributors
* MIT LICENSE
*
*/
var assert = require('assert'),
fs = require('fs'),
path = require('path'),
spawn = require('child_process').spawn,
request = require('request'),
vows = require('vows'),
macros = require('./helpers/macros');
var examplesDir = path.join(__dirname, '..', 'examples', 'simple'),
simpleScript = path.join(examplesDir, 'simple.js'),
pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')),
fooURI = 'http://localhost:9090/foo',
server;
vows.describe('union/simple').addBatch({
"When using union": {
"a simple http server": {
topic: function () {
server = spawn(process.argv[0], [simpleScript]);
server.stdout.on('data', this.callback.bind(this, null));
},
"a GET request to `/foo`": {
topic: function () {
request({ uri: fooURI }, this.callback);
},
"it should respond with `hello world`": function (err, res, body) {
macros.assertValidResponse(err, res);
assert.equal(body, 'hello world\n');
},
"it should respond with 'x-powered-by': 'union <version>'": function (err, res, body) {
assert.isNull(err);
assert.equal(res.headers['x-powered-by'], 'union ' + pkg.version);
}
},
"a POST request to `/foo`": {
topic: function () {
request.post({ uri: fooURI }, this.callback);
},
"it should respond with `wrote to a stream!`": function (err, res, body) {
macros.assertValidResponse(err, res);
assert.equal(body, 'wrote to a stream!');
}
},
"a GET request to `/redirect`": {
topic: function () {
request.get({
url: 'http://localhost:9090/redirect',
followRedirect: false
}, this.callback);
},
"it should redirect to `http://www.google.com`": function (err, res, body) {
assert.equal(res.statusCode, 302);
assert.equal(res.headers.location, "http://www.google.com");
}
},
"a GET request to `/custom_redirect`": {
topic: function () {
request.get({
url: 'http://localhost:9090/custom_redirect',
followRedirect: false
}, this.callback);
},
"it should redirect to `/foo`": function (err, res, body) {
assert.equal(res.statusCode, 301);
assert.equal(res.headers.location, "http://localhost:9090/foo");
}
},
"a GET request to `/async`": {
topic: function () {
request.get({
url: 'http://localhost:9090/async',
timeout: 500
}, this.callback);
},
"it should not timeout": function (err, res, body) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
}
}
}
}
}).addBatch({
"When the tests are over": {
"the server should close": function () {
server.kill();
}
}
}).export(module);