200 lines
6.1 KiB
JavaScript
200 lines
6.1 KiB
JavaScript
'use strict';
|
|
|
|
/* global it:false */
|
|
/* global describe:false */
|
|
/* global before:false */
|
|
/* global after:false */
|
|
|
|
var Server = require('../sync/server.js'),
|
|
request = require('superagent'),
|
|
path = require('path'),
|
|
crypto = require('crypto'),
|
|
rimraf = require('rimraf'),
|
|
os = require('os'),
|
|
expect = require('expect.js');
|
|
|
|
var SERVER_URL = 'http://localhost:3456';
|
|
var BASE_DIR = path.resolve(os.tmpdir(), 'volume-test-' + crypto.randomBytes(4).readUInt32LE(0));
|
|
var CONFIG = {
|
|
port: 3456,
|
|
dataRoot: path.resolve(BASE_DIR, 'data'),
|
|
configRoot: path.resolve(BASE_DIR, 'config'),
|
|
mountRoot: path.resolve(BASE_DIR, 'mount'),
|
|
silent: true
|
|
};
|
|
|
|
// remove all temporary folders
|
|
function cleanup(done) {
|
|
rimraf(BASE_DIR, function (error) {
|
|
done();
|
|
});
|
|
}
|
|
|
|
describe('Server', function () {
|
|
this.timeout(5000);
|
|
|
|
after(cleanup);
|
|
|
|
describe('startup', function () {
|
|
var server;
|
|
|
|
it('constructor fails due to wrong arguments', function (done) {
|
|
expect(function () { var s = new Server(function () {}); }).to.throwException();
|
|
expect(function () { var s = new Server('foobar'); }).to.throwException();
|
|
expect(function () { var s = new Server(1337); }).to.throwException();
|
|
|
|
done();
|
|
});
|
|
|
|
it('start fails due to wrong arguments', function (done) {
|
|
var s = new Server(CONFIG);
|
|
|
|
expect(function () { s.start(); }).to.throwException();
|
|
expect(function () { s.start('foobar', function () {}); }).to.throwException();
|
|
expect(function () { s.start(1337, function () {}); }).to.throwException();
|
|
|
|
done();
|
|
});
|
|
|
|
it('succeeds', function (done) {
|
|
server = new Server(CONFIG);
|
|
|
|
server.start(function (error) {
|
|
expect(error).to.not.be.ok();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('is reachable', function (done) {
|
|
request.get(SERVER_URL + '/api/v1/version', function (err, res) {
|
|
expect(res.statusCode).to.equal(200);
|
|
done(err);
|
|
});
|
|
});
|
|
|
|
it('should fail because already running', function (done) {
|
|
server.start(function (error) {
|
|
expect(error).to.be.ok();
|
|
done();
|
|
});
|
|
});
|
|
|
|
after(function (done) {
|
|
server.stop(function () {
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('runtime', function () {
|
|
var server;
|
|
|
|
before(function (done) {
|
|
server = new Server(CONFIG);
|
|
server.start(function (err, app) {
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('random bad requests', function (done) {
|
|
request.get(SERVER_URL + '/random', function (err, res) {
|
|
expect(err).to.not.be.ok();
|
|
expect(res.statusCode).to.equal(401);
|
|
done(err);
|
|
});
|
|
});
|
|
|
|
it('version', function (done) {
|
|
request.get(SERVER_URL + '/api/v1/version', function (err, res) {
|
|
expect(err).to.not.be.ok();
|
|
expect(res.statusCode).to.equal(200);
|
|
expect(res.body.version).to.equal(require('../package.json').version);
|
|
done(err);
|
|
});
|
|
});
|
|
|
|
it('firsttime route is GET', function (done) {
|
|
request.post(SERVER_URL + '/api/v1/firsttime')
|
|
.end(function (err, res) {
|
|
expect(res.statusCode).to.equal(405);
|
|
|
|
request.get(SERVER_URL + '/api/v1/firsttime')
|
|
.end(function (err, res) {
|
|
expect(res.statusCode).to.equal(200);
|
|
done(err);
|
|
});
|
|
});
|
|
});
|
|
|
|
after(function (done) {
|
|
server.stop(function () {
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('shutdown', function () {
|
|
var server;
|
|
|
|
before(function (done) {
|
|
server = new Server(CONFIG);
|
|
server.start(function (err) {
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('fails due to wrong arguments', function (done) {
|
|
expect(function () { server.stop(); }).to.throwException();
|
|
expect(function () { server.stop('foobar'); }).to.throwException();
|
|
expect(function () { server.stop(1337); }).to.throwException();
|
|
expect(function () { server.stop({}); }).to.throwException();
|
|
expect(function () { server.stop({ httpServer: {} }); }).to.throwException();
|
|
|
|
done();
|
|
});
|
|
|
|
it('succeeds', function (done) {
|
|
server.stop(function () {
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('is not reachable anymore', function (done) {
|
|
request.get(SERVER_URL + '/api/v1/version', function (err, res) {
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('cors', function () {
|
|
var server;
|
|
|
|
before(function (done) {
|
|
server = new Server(CONFIG);
|
|
server.start(function (err) {
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('responds to OPTIONS', function (done) {
|
|
request('OPTIONS', SERVER_URL + '/api/v1/version')
|
|
.set('Access-Control-Request-Method', 'GET')
|
|
.set('Access-Control-Request-Headers', 'accept, origin, x-requested-with')
|
|
.set('Origin', 'http://localhost')
|
|
.end(function (res) {
|
|
expect(res.headers['access-control-allow-methods']).to.be('GET, PUT, DELETE, POST, OPTIONS');
|
|
expect(res.headers['access-control-allow-credentials']).to.be('true');
|
|
expect(res.headers['access-control-allow-headers']).to.be('accept, origin, x-requested-with'); // mirrored from request
|
|
expect(res.headers['access-control-allow-origin']).to.be('http://localhost'); // mirrors from request
|
|
done();
|
|
});
|
|
});
|
|
|
|
after(function (done) {
|
|
server.stop(function () {
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|