diff --git a/server.js b/server.js index c036803..325b9eb 100644 --- a/server.js +++ b/server.js @@ -7,6 +7,7 @@ var http = require("http"); var mime = require("mime"); var url = require("url"); var fs = require("fs"); +var server = null; var routes = { index: require("./routes/index"), @@ -53,22 +54,22 @@ function requestHandler(req, res) { try { switch (local_path) { case "": - routes.index(request, res); - break; + routes.index(request, res); + break; case "avatars": - routes.avatars(request, res); - break; + routes.avatars(request, res); + break; case "skins": - routes.skins(request, res); - break; + routes.skins(request, res); + break; case "renders": - routes.renders(request, res); - break; + routes.renders(request, res); + break; case "capes": - routes.capes(request, res); - break; + routes.capes(request, res); + break; default: - asset_request(request, res); + asset_request(request, res); } } catch(e) { var error = JSON.stringify(req.headers) + "\n" + e.stack; @@ -86,15 +87,27 @@ function requestHandler(req, res) { } } -var boot = module.exports = function () { +var exp = {}; + +exp.boot = function(callback) { var port = process.env.PORT || 3000; var bind_ip = process.env.BIND || "127.0.0.1"; console.log("Server running on http://" + bind_ip + ":" + port + "/"); - http.createServer(requestHandler).listen(port, bind_ip); + server = http.createServer(requestHandler).listen(port, bind_ip, function() { + callback(); + }); }; +exp.close = function(callback) { + server.close(function() { + callback(); + }); +} + +module.exports = exp; + if (require.main === module) { - boot(); + exp.boot(function(){}); // cleaning worker setInterval(clean.run, config.cleaning_interval * 1000); diff --git a/test/test.js b/test/test.js index 0c38539..08950f0 100644 --- a/test/test.js +++ b/test/test.js @@ -8,7 +8,8 @@ var config = require("../modules/config"); var skins = require("../modules/skins"); var cache = require("../modules/cache"); var renders = require("../modules/renders"); -var cleaner = require("../modules/cleaner"); +var server = require("../server"); +var request = require("request"); // we don't want tests to fail because of slow internet config.http_timeout *= 3; @@ -33,7 +34,7 @@ var ids = [ uuid.toLowerCase(), name.toLowerCase(), uuid.toUpperCase(), - name.toUpperCase() + name.toUpperCase(), ]; describe("Crafatar", function() { @@ -42,7 +43,6 @@ describe("Crafatar", function() { before(function() { cache.get_redis().flushall(); - cleaner.run(); }); describe("UUID/username", function() { @@ -330,4 +330,63 @@ describe("Crafatar", function() { }); })(id, id_type); } + describe("Server", function() { + before(function(done) { + server.boot(function() { + done(); + }); + }); + + // Test the home page + it("should return a 200", function(done) { + request.get('http://localhost:3000', function(error, res, body) { + assert.equal(200, res.statusCode); + done(); + }); + }); + + // invalid method, we only allow GET and HEAD requests + it("should return a 405", function(done) { + request.post('http://localhost:3000/avatars/Jake0oo0', function(error, res, body) { + assert.equal(405, res.statusCode); + done(); + }); + }); + + it("should return a 422 (invalid scale)", function(done) { + var scale = config.max_scale + 1; + request.get('http://localhost:3000/avatars/Jake0oo0?scale=' + scale, function(error, res, body) { + assert.equal(422, res.statusCode); + done(); + }); + }); + + it("should return a 422 (invalid uuid)", function(done) { + request.get('http://localhost:3000/avatars/thisisaninvaliduuid', function(error, res, body) { + assert.equal(422, res.statusCode); + done(); + }); + }); + + it("should return a 422 (invalid size)", function(done) { + var size = config.max_size + 1; + request.get('http://localhost:3000/renders/Jake0oo0?size=' + size, function(error, res, body) { + assert.equal(422, res.statusCode); + done(); + }); + }); + + it("should return a 301 (default image)", function(done) { + request.get('http://localhost:3000/renders/invalidjsvns?def=steve', function(error, res, body) { + assert.equal(301, res.statusCode); + done(); + }); + }); + + after(function(done) { + server.close(function() { + done(); + }) + }); + }); }); \ No newline at end of file