/* * 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);