180 lines
5.5 KiB
JavaScript
180 lines
5.5 KiB
JavaScript
/* jslint node:true */
|
|
/* global it:false */
|
|
/* global describe:false */
|
|
/* global before:false */
|
|
/* global after:false */
|
|
|
|
'use strict';
|
|
|
|
var expect = require('expect.js'),
|
|
fs = require('fs'),
|
|
path = require('path'),
|
|
nock = require('nock'),
|
|
os = require('os'),
|
|
request = require('superagent'),
|
|
server = require('../server.js'),
|
|
installer = require('../installer.js'),
|
|
_ = require('lodash');
|
|
|
|
var EXTERNAL_SERVER_URL = 'https://localhost:4443';
|
|
var INTERNAL_SERVER_URL = 'http://localhost:2020';
|
|
var APPSERVER_ORIGIN = 'http://appserver';
|
|
var FQDN = os.hostname();
|
|
|
|
describe('Server', function () {
|
|
this.timeout(5000);
|
|
|
|
before(function (done) {
|
|
var user_data = JSON.stringify({ apiServerOrigin: APPSERVER_ORIGIN }); // user_data is a string
|
|
var scope = nock('http://169.254.169.254')
|
|
.persist()
|
|
.get('/metadata/v1.json')
|
|
.reply(200, JSON.stringify({ user_data: user_data }), { 'Content-Type': 'application/json' });
|
|
done();
|
|
});
|
|
|
|
after(function (done) {
|
|
nock.cleanAll();
|
|
done();
|
|
});
|
|
|
|
describe('starts and stop', function () {
|
|
it('starts', function (done) {
|
|
server.start(done);
|
|
});
|
|
|
|
it('stops', function (done) {
|
|
server.stop(done);
|
|
});
|
|
});
|
|
|
|
describe('update (internal server)', function () {
|
|
before(function (done) {
|
|
server.start(done);
|
|
});
|
|
after(function (done) {
|
|
server.stop(done);
|
|
});
|
|
|
|
it('does not respond to provision', function (done) {
|
|
request.post(INTERNAL_SERVER_URL + '/api/v1/installer/provision').send({ }).end(function (error, result) {
|
|
expect(error).to.not.be.ok();
|
|
expect(result.statusCode).to.equal(404);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('does not respond to restore', function (done) {
|
|
request.post(INTERNAL_SERVER_URL + '/api/v1/installer/restore').send({ }).end(function (error, result) {
|
|
expect(error).to.not.be.ok();
|
|
expect(result.statusCode).to.equal(404);
|
|
done();
|
|
});
|
|
});
|
|
|
|
var data = {
|
|
sourceTarballUrl: "https://foo.tar.gz",
|
|
|
|
data: {
|
|
token: 'sometoken',
|
|
apiServerOrigin: APPSERVER_ORIGIN,
|
|
webServerOrigin: 'https://somethingelse.com',
|
|
fqdn: 'www.something.com',
|
|
tlsKey: 'key',
|
|
tlsCert: 'cert',
|
|
boxVersionsUrl: 'https://versions.json',
|
|
version: '0.1'
|
|
}
|
|
};
|
|
|
|
Object.keys(data).forEach(function (key) {
|
|
it('fails due to missing ' + key, function (done) {
|
|
var dataCopy = _.merge({ }, data);
|
|
delete dataCopy[key];
|
|
|
|
request.post(INTERNAL_SERVER_URL + '/api/v1/installer/update').send(dataCopy).end(function (error, result) {
|
|
expect(error).to.not.be.ok();
|
|
expect(result.statusCode).to.equal(400);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
it('succeeds', function (done) {
|
|
request.post(INTERNAL_SERVER_URL + '/api/v1/installer/update').send(data).end(function (error, result) {
|
|
expect(error).to.not.be.ok();
|
|
expect(result.statusCode).to.equal(202);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('ensureVersion', function () {
|
|
before(function () {
|
|
process.env.NODE_ENV = undefined;
|
|
});
|
|
|
|
after(function () {
|
|
process.env.NODE_ENV = 'test';
|
|
});
|
|
|
|
it ('fails without data', function (done) {
|
|
installer._ensureVersion({}, function (error) {
|
|
expect(error).to.be.an(Error);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it ('fails without boxVersionsUrl', function (done) {
|
|
installer._ensureVersion({ data: {}}, function (error) {
|
|
expect(error).to.be.an(Error);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it ('succeeds with sourceTarballUrl', function (done) {
|
|
var data = {
|
|
sourceTarballUrl: 'sometarballurl',
|
|
data: {
|
|
boxVersionsUrl: 'http://foobar/versions.json'
|
|
}
|
|
};
|
|
|
|
installer._ensureVersion(data, function (error, result) {
|
|
expect(error).to.equal(null);
|
|
expect(result).to.eql(data);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it ('succeeds without sourceTarballUrl', function (done) {
|
|
var versions = {
|
|
'0.1.0': {
|
|
sourceTarballUrl: 'sometarballurl1'
|
|
},
|
|
'0.2.0': {
|
|
sourceTarballUrl: 'sometarballurl2'
|
|
}
|
|
};
|
|
|
|
var scope = nock('http://foobar')
|
|
.get('/versions.json')
|
|
.reply(200, JSON.stringify(versions), { 'Content-Type': 'application/json' });
|
|
|
|
var data = {
|
|
data: {
|
|
boxVersionsUrl: 'http://foobar/versions.json'
|
|
}
|
|
};
|
|
|
|
installer._ensureVersion(data, function (error, result) {
|
|
expect(error).to.equal(null);
|
|
expect(result.sourceTarballUrl).to.equal(versions['0.2.0'].sourceTarballUrl);
|
|
expect(result.data.boxVersionsUrl).to.equal(data.data.boxVersionsUrl);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|