Skip to content

Commit 6d420fd

Browse files
committed
adding server tests
1 parent 5ce7933 commit 6d420fd

File tree

13 files changed

+407
-64
lines changed

13 files changed

+407
-64
lines changed

lib/server/app_registrar.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1+
var fs = require('fs');
12
var path = require('path');
23
var lib_dir = path.resolve(__dirname, '../');
34
var router = require('./router');
4-
var ENV = process.env.NODE_ENV;
55

6-
function AppRegistrar(server, app_name, options) {
7-
options = options || {};
8-
var self = this;
9-
self.server = server;
10-
self.app_path = path.join(lib_dir, 'apps', app_name);
6+
function AppRegistrar(server, app_name) {
7+
this.server = server;
8+
if (!this.server) {
9+
throw new Error('AppRegistrar requires a server instance');
10+
}
11+
12+
this.app_path = path.join(lib_dir, 'apps', app_name);
13+
if (!fs.existsSync(this.app_path)) {
14+
throw new Error('AppRegistrar: app not found at path ' + this.app_path);
15+
}
1116
}
1217

1318
AppRegistrar.prototype.register = function () {
14-
var self = this;
15-
var routes = require(path.join(self.app_path, 'routes'));
16-
if (routes) {
17-
//log.debug("register routes for: " + app_name);
18-
router.register_routes(self.server, routes);
19-
}
19+
var routes = require(path.join(this.app_path, 'routes'));
20+
router.register_routes(this.server, routes);
2021
};
2122

2223
module.exports = AppRegistrar;

lib/server/app_server.js

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,15 @@ function AppServer(config, options) {
2222
})
2323
}));
2424

25-
26-
//self.logger = self.server.Logger;
27-
28-
//process.on('uncaughtException', uncaught_exception_handler.handle);
29-
process.on('SIGHUP', function () {
30-
process.exit();
31-
});
25+
process.on('SIGHUP', function () { process.exit(); });
3226
}
3327

3428
AppServer.prototype.start = function (options) {
3529
options = options || {};
3630
var self = this;
37-
var port = options.port;
38-
39-
//self.logger.debug("Started with ENV: " + ENV);
40-
41-
port = port || self.config.server.port;
31+
var port = options.port || self.config.server.port;
4232

4333
self.server.listen(parseInt(port, 10));
44-
//self.logger.debug("Server Listening on Port: " + port);
4534

4635
self.server.use(restify.bodyParser());
4736
self.server.use(restify.queryParser());

lib/server/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var server = {
2-
app_registrar: require('./app_registrar'),
3-
app_server: require('./app_server'),
2+
AppRegistrar: require('./app_registrar'),
3+
AppServer: require('./app_server'),
44
responder: require('./responder'),
55
router: require('./router')
66
};

lib/server/responder.js

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,6 @@ var util = require('util');
44
var responder = {
55
error: function (res, err, next) {
66
next(err);
7-
/*
8-
options = options || {};
9-
10-
if (!res) {
11-
var msg = "No res passed into responder.error()";
12-
throw new Error(msg);
13-
}
14-
15-
res.header('Content-Type', 'application/json; charset=utf-8');
16-
res.charSet = "utf-8";
17-
res.status(formatted_error.status_code);
18-
delete formatted_error.status_code;
19-
res.mog_response = formatted_error;
20-
res.json(formatted_error);
21-
next();
22-
*/
237
},
248

259
success: function (res, data, next) {

lib/server/router.js

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,13 @@ var router = {
33
if (!Array.isArray(routes)) { throw new Error('routes must be an array'); }
44

55
routes.forEach(function (route) {
6-
try {
7-
//log.debug("Registering route: ", route);
8-
9-
if (!route.middleware) {
10-
route.middleware = [];
11-
}
12-
13-
server[route.method](route.url, route.middleware, function (req, res, next) {
14-
if (req.middleware_error !== true) {
15-
route.func(req, res, next);
16-
} else if (next) {
17-
return next();
18-
}
19-
});
20-
} catch (e) {
21-
console.log("Failed to load route: ", route, e);
22-
//log.error("Failed to load route: ", route, e);
6+
if (!route.middleware) {
7+
route.middleware = [];
238
}
9+
10+
server[route.method](route.url, route.middleware, function (req, res, next) {
11+
route.func(req, res, next);
12+
});
2413
});
2514
}
2615
};

test/run.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var walk_dir = require('./support/walk_dir');
99

1010
var argv = optimist
1111
.usage("Usage: $0 -t [types] --reporter [reporter] --timeout [timeout]")
12-
.default({types: 'unit,component', reporter: 'spec', timeout: 6000})
13-
.describe('types', 'The types of tests to run, separated by commas. E.g., unit,component,acceptance')
12+
.default({types: 'unit,functional', reporter: 'spec', timeout: 6000})
13+
.describe('types', 'The types of tests to run, separated by commas. E.g., unit,functional,acceptance')
1414
.describe('reporter', 'The mocha test reporter to use.')
1515
.describe('timeout', 'The mocha timeout to use per test (ms).')
1616
.boolean('help')

test/server/app_registrar.unit.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
var assert = require('assert');
2+
var restify = require('restify');
3+
var sinon = require('sinon');
4+
var support = require('../support');
5+
var path = require('path');
6+
var AppRegistrar = main.server.AppRegistrar;
7+
8+
var settings_path = path.join(__dirname, '..', 'support', 'data', 'fake_app_settings.js');
9+
var empty_settings_path = path.join(__dirname, '..', 'support', 'data', 'empty_app_settings.js');
10+
11+
describe("app_registrar.js", function () {
12+
var server;
13+
14+
beforeEach(function () {
15+
server = restify.createServer({
16+
name: 'test'
17+
});
18+
19+
server.listen(support.http.port);
20+
});
21+
22+
afterEach(function (done) {
23+
setTimeout(function () {
24+
server.close();
25+
done();
26+
}, 10);
27+
});
28+
29+
describe("instantiating", function () {
30+
context("when server missing", function () {
31+
it("throws an error", function () {
32+
assert.throws(function () {
33+
var registrar = new AppRegistrar(null, 'users');
34+
}, /AppRegistrar.*server/);
35+
});
36+
});
37+
38+
context("when app_name not found in apps path", function () {
39+
it("throws an error", function () {
40+
assert.throws(function () {
41+
var registrar = new AppRegistrar(server, 'foo');
42+
}, /AppRegistrar.*app not found/);
43+
});
44+
});
45+
});
46+
47+
describe("instance methods", function () {
48+
var registrar;
49+
50+
describe("register()", function () {
51+
context("when server and app_name are valid", function () {
52+
it("does not throw error", function (done) {
53+
registrar = new AppRegistrar(server, 'users');
54+
registrar.register();
55+
56+
setTimeout(function () {
57+
assert.ok(true);
58+
done();
59+
}, 10);
60+
});
61+
});
62+
});
63+
});
64+
});

test/server/app_server.unit.js

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
var assert = require('assert');
2+
var sinon = require('sinon');
3+
var support = require('../support');
4+
var path = require('path');
5+
var Settings = require('settings');
6+
var config = new Settings(require('../../config'));
7+
var AppServer = main.server.AppServer;
8+
9+
describe('app_server.js', function () {
10+
describe("instantiating", function () {
11+
context("when config is not passed in", function () {
12+
it("throws an error", function () {
13+
assert.throws(function () {
14+
var new_server = new AppServer(null);
15+
}, /AppServer.*config/);
16+
});
17+
});
18+
});
19+
20+
describe("start()", function () {
21+
context("with no args", function () {
22+
it("starts the server", function (done) {
23+
var new_server = new AppServer(config);
24+
new_server.start();
25+
setTimeout(function () {
26+
assert.ok(new_server.server.server._handle);
27+
new_server.close();
28+
done();
29+
}, 20);
30+
});
31+
});
32+
});
33+
34+
describe("close()", function () {
35+
context("when server has been started", function () {
36+
it("closes the server", function (done) {
37+
var new_server = new AppServer(config);
38+
39+
new_server.start();
40+
41+
setTimeout(function () {
42+
assert.ok(new_server.server.server._handle);
43+
44+
new_server.close();
45+
setTimeout(function () {
46+
assert.strictEqual(new_server.server.server._handle, null);
47+
done();
48+
}, 10);
49+
}, 30);
50+
});
51+
});
52+
53+
context("when server hasn't been started", function () {
54+
it("doesn't blow up", function (done) {
55+
var new_server = new AppServer(config);
56+
57+
setTimeout(function () {
58+
new_server.close();
59+
setTimeout(function () {
60+
done();
61+
}, 10);
62+
}, 10);
63+
});
64+
});
65+
66+
context("when server has already been closed", function () {
67+
it("doesn't blow up", function (done) {
68+
var new_server = new AppServer(config);
69+
70+
new_server.start();
71+
72+
setTimeout(function () {
73+
new_server.close();
74+
75+
setTimeout(function () {
76+
new_server.close();
77+
78+
setTimeout(function () {
79+
done();
80+
}, 10);
81+
}, 10);
82+
}, 10);
83+
});
84+
});
85+
});
86+
});
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
var assert = require('assert');
2+
var restify = require('restify');
3+
var sinon = require('sinon');
4+
var support = require('../support');
5+
var http = support.http;
6+
var responder = main.server.responder;
7+
8+
var methods = {
9+
get_restify_error: function (req, res, next) {
10+
var error = new restify.InvalidArgumentError('foo arg invalid');
11+
return responder.error(res, error, next);
12+
}
13+
};
14+
15+
var routes = [
16+
{
17+
method: "get",
18+
url: "/test/errors/restify",
19+
func: methods.get_restify_error,
20+
middleware: []
21+
}
22+
];
23+
24+
describe("functional - server/responder.js", function () {
25+
var server;
26+
var http_client;
27+
28+
before(function () {
29+
server = http.server.create(routes);
30+
server.start();
31+
http_client = http.client();
32+
});
33+
34+
after(function () {
35+
server.stop();
36+
});
37+
38+
describe("error responses", function () {
39+
describe("restify errors", function () {
40+
it("returns correct response body", function (done) {
41+
http_client.get('/test/errors/restify', function (err, result, raw_res) {
42+
var expected = {
43+
code: 'InvalidArgument',
44+
message: 'foo arg invalid'
45+
};
46+
47+
assert.strictEqual(err.statusCode, 409);
48+
assert.deepEqual(result, expected);
49+
done();
50+
});
51+
});
52+
});
53+
});
54+
});

0 commit comments

Comments
 (0)