mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
get the server tests passing again
This commit is contained in:
parent
2dff117151
commit
2bcf846993
62 changed files with 543 additions and 669 deletions
|
@ -1,7 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
let _ = require('lodash');
|
||||
let pkg = require('../utils/closestPackageJson').getSync();
|
||||
|
||||
let utils = require('requirefrom')('src/utils');
|
||||
let pkg = utils('packageJson');
|
||||
let Command = require('./Command');
|
||||
|
||||
let argv = process.env.kbnWorkerArgv ? JSON.parse(process.env.kbnWorkerArgv) : process.argv.slice();
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
var root = require('requirefrom')('');
|
||||
var expect = require('expect.js');
|
||||
var nock = require('nock');
|
||||
var glob = require('glob');
|
||||
|
@ -6,8 +5,9 @@ var rimraf = require('rimraf');
|
|||
var fs = require('fs');
|
||||
var join = require('path').join;
|
||||
var sinon = require('sinon');
|
||||
var pluginLogger = root('src/server/bin/plugin/pluginLogger');
|
||||
var npmInstall = root('src/server/bin/plugin/npmInstall');
|
||||
|
||||
var pluginLogger = require('../pluginLogger');
|
||||
var npmInstall = require('../npmInstall');
|
||||
|
||||
describe('kibana cli', function () {
|
||||
|
||||
|
@ -66,4 +66,4 @@ describe('kibana cli', function () {
|
|||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
var root = require('requirefrom')('');
|
||||
var plugin = root('src/server/bin/plugin/plugin');
|
||||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
var installer = root('src/server/bin/plugin/pluginInstaller');
|
||||
var remover = root('src/server/bin/plugin/pluginRemover');
|
||||
var settingParser = root('src/server/bin/plugin/settingParser');
|
||||
|
||||
var plugin = require('../plugin');
|
||||
var installer = require('../pluginInstaller');
|
||||
var remover = require('../pluginRemover');
|
||||
var settingParser = require('../settingParser');
|
||||
|
||||
describe('kibana cli', function () {
|
||||
|
||||
|
@ -77,4 +77,4 @@ describe('kibana cli', function () {
|
|||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
var root = require('requirefrom')('');
|
||||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
var fs = require('fs');
|
||||
var rimraf = require('rimraf');
|
||||
var pluginCleaner = root('src/server/bin/plugin/pluginCleaner');
|
||||
var pluginLogger = root('src/server/bin/plugin/pluginLogger');
|
||||
|
||||
var pluginCleaner = require('../pluginCleaner');
|
||||
var pluginLogger = require('../pluginLogger');
|
||||
|
||||
describe('kibana cli', function () {
|
||||
|
||||
|
@ -144,4 +144,4 @@ describe('kibana cli', function () {
|
|||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
var root = require('requirefrom')('');
|
||||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
var nock = require('nock');
|
||||
var glob = require('glob');
|
||||
var rimraf = require('rimraf');
|
||||
var join = require('path').join;
|
||||
var pluginLogger = root('src/server/bin/plugin/pluginLogger');
|
||||
var pluginDownloader = root('src/server/bin/plugin/pluginDownloader');
|
||||
|
||||
var pluginLogger = require('../pluginLogger');
|
||||
var pluginDownloader = require('../pluginDownloader');
|
||||
|
||||
describe('kibana cli', function () {
|
||||
|
||||
|
@ -246,4 +246,4 @@ describe('kibana cli', function () {
|
|||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
var root = require('requirefrom')('');
|
||||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
var nock = require('nock');
|
||||
|
@ -6,10 +5,11 @@ var glob = require('glob');
|
|||
var rimraf = require('rimraf');
|
||||
var fs = require('fs');
|
||||
var join = require('path').join;
|
||||
var pluginLogger = root('src/server/bin/plugin/pluginLogger');
|
||||
var pluginInstaller = root('src/server/bin/plugin/pluginInstaller');
|
||||
var Promise = require('bluebird');
|
||||
|
||||
var pluginLogger = require('../pluginLogger');
|
||||
var pluginInstaller = require('../pluginInstaller');
|
||||
|
||||
describe('kibana cli', function () {
|
||||
|
||||
describe('plugin installer', function () {
|
||||
|
@ -71,4 +71,4 @@ describe('kibana cli', function () {
|
|||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
var root = require('requirefrom')('');
|
||||
var pluginLogger = root('src/server/bin/plugin/pluginLogger');
|
||||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
|
||||
var pluginLogger = require('../pluginLogger');
|
||||
|
||||
describe('kibana cli', function () {
|
||||
|
||||
describe('plugin installer', function () {
|
||||
|
@ -125,4 +125,4 @@ describe('kibana cli', function () {
|
|||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
var root = require('requirefrom')('');
|
||||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
var progressReporter = root('src/server/bin/plugin/progressReporter');
|
||||
var pluginLogger = root('src/server/bin/plugin/pluginLogger');
|
||||
var progressReporter = require('../progressReporter');
|
||||
var pluginLogger = require('../pluginLogger');
|
||||
|
||||
describe('kibana cli', function () {
|
||||
|
||||
|
@ -299,4 +298,4 @@ describe('kibana cli', function () {
|
|||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
var root = require('requirefrom')('');
|
||||
var settingParser = root('src/server/bin/plugin/settingParser');
|
||||
var path = require('path');
|
||||
var expect = require('expect.js');
|
||||
|
||||
var utils = require('requirefrom')('src/utils');
|
||||
var fromRoot = utils('fromRoot');
|
||||
var settingParser = require('../settingParser');
|
||||
|
||||
describe('kibana cli', function () {
|
||||
|
||||
describe('plugin installer', function () {
|
||||
|
@ -71,7 +73,7 @@ describe('kibana cli', function () {
|
|||
var options;
|
||||
var parser;
|
||||
beforeEach(function () {
|
||||
options = { install: 'dummy/dummy' };
|
||||
options = { install: 'dummy/dummy', pluginDir: fromRoot('installedPlugins') };
|
||||
});
|
||||
|
||||
it('should require the user to specify either install and remove', function () {
|
||||
|
@ -224,7 +226,7 @@ describe('kibana cli', function () {
|
|||
parser = settingParser(options);
|
||||
|
||||
var settings = parser.parse();
|
||||
var expected = path.resolve(__dirname, '..', '..', '..', '..', '..', 'src', 'server', 'bin', 'plugins', 'test-plugin');
|
||||
var expected = fromRoot('installedPlugins/test-plugin');
|
||||
|
||||
expect(settings).to.have.property('pluginPath', expected);
|
||||
});
|
||||
|
@ -307,7 +309,7 @@ describe('kibana cli', function () {
|
|||
parser = settingParser(options);
|
||||
|
||||
var settings = parser.parse();
|
||||
var expected = path.resolve(__dirname, '..', '..', '..', '..', '..', 'src', 'server', 'bin', 'plugins', 'test-plugin');
|
||||
var expected = fromRoot('installedPlugins/test-plugin');
|
||||
|
||||
expect(settings).to.have.property('pluginPath', expected);
|
||||
});
|
||||
|
@ -320,4 +322,4 @@ describe('kibana cli', function () {
|
|||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
var utils = require('requirefrom')('src/utils');
|
||||
var fromRoot = utils('fromRoot');
|
||||
|
||||
var settingParser = require('./settingParser');
|
||||
var installer = require('./pluginInstaller');
|
||||
var remover = require('./pluginRemover');
|
||||
var pluginLogger = require('./pluginLogger');
|
||||
var fromRoot = require('../../utils/fromRoot');
|
||||
|
||||
module.exports = function (program) {
|
||||
function processCommand(command, options) {
|
||||
|
@ -40,7 +42,7 @@ module.exports = function (program) {
|
|||
.option(
|
||||
'-d, --plugin-dir <path>',
|
||||
'The path to the directory where plugins are stored',
|
||||
fromRoot('installed_plugins')
|
||||
fromRoot('installedPlugins')
|
||||
)
|
||||
.description(
|
||||
'Maintain Plugins',
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
let _ = require('lodash');
|
||||
let fs = require('fs');
|
||||
let yaml = require('js-yaml');
|
||||
let fromRoot = require('../../utils/fromRoot');
|
||||
|
||||
let utils = require('requirefrom')('src/utils');
|
||||
let fromRoot = utils('fromRoot');
|
||||
|
||||
let legacySettingMap = {
|
||||
// server
|
||||
|
|
|
@ -6,8 +6,9 @@ let resolve = require('path').resolve;
|
|||
|
||||
let cwd = process.cwd();
|
||||
let readYamlConfig = require('./readYamlConfig');
|
||||
let fromRoot = require('../../utils/fromRoot');
|
||||
let KbnServer = require('../../server/KbnServer');
|
||||
let src = require('requirefrom')('src');
|
||||
let fromRoot = src('utils/fromRoot');
|
||||
let KbnServer = src('server/KbnServer');
|
||||
|
||||
let pathCollector = function () {
|
||||
let paths = [];
|
||||
|
@ -39,7 +40,7 @@ module.exports = function (program) {
|
|||
'times to specify multiple directories',
|
||||
pluginDirCollector,
|
||||
[
|
||||
fromRoot('installed_plugins'),
|
||||
fromRoot('installedPlugins'),
|
||||
fromRoot('src/plugins')
|
||||
]
|
||||
)
|
||||
|
|
|
@ -5,8 +5,9 @@ let join = require('path').join;
|
|||
let _ = require('lodash');
|
||||
var chokidar = require('chokidar');
|
||||
|
||||
let utils = require('requirefrom')('src/utils');
|
||||
let fromRoot = utils('fromRoot');
|
||||
let Log = require('../Log');
|
||||
let fromRoot = require('../../utils/fromRoot');
|
||||
let Worker = require('./Worker');
|
||||
|
||||
module.exports = function (opts) {
|
||||
|
|
|
@ -2,7 +2,7 @@ extends ../../../server/ui/views/chrome.jade
|
|||
|
||||
block head
|
||||
link(rel='stylesheet', href='/tests/style.css')
|
||||
script(src='/tests/bundle.js')
|
||||
|
||||
block content
|
||||
#mocha Bundling tests, brb!
|
||||
script(defer src='/tests/bundle.js')
|
||||
#mocha
|
||||
|
|
|
@ -15,8 +15,10 @@ module.exports = function (server, kbnServer) {
|
|||
method: 'GET',
|
||||
handler: function (req, reply) {
|
||||
return reply.renderApp(new UiApp(kbnServer.uiExports, {
|
||||
id: 'tests'
|
||||
}), 'testHarness');
|
||||
id: 'tests',
|
||||
templateName: 'testHarness',
|
||||
requireOptimizeGreen: false
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -34,8 +34,7 @@ function maybeStartES() {
|
|||
});
|
||||
}
|
||||
|
||||
before(function () {
|
||||
module.exports = function () {
|
||||
this.timeout(120000);
|
||||
return maybeStartES();
|
||||
});
|
||||
|
||||
};
|
|
@ -1,17 +1,30 @@
|
|||
var root = require('requirefrom')('');
|
||||
var _ = require('lodash');
|
||||
var checkEsVersion = root('src/server/plugins/elasticsearch/lib/check_es_version');
|
||||
var Promise = require('bluebird');
|
||||
var sinon = require('sinon');
|
||||
|
||||
var checkEsVersion = require('../check_es_version');
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
describe('lib/check_es_version', function () {
|
||||
var server;
|
||||
var plugin;
|
||||
|
||||
beforeEach(function () {
|
||||
var get = sinon.stub().withArgs('elasticserach.minimumVerison').returns('1.4.3');
|
||||
var config = function () { return { get: get }; };
|
||||
server = { config: config, plugins: { elasticsearch: { client: { nodes: {} } } } };
|
||||
server = {
|
||||
config: config,
|
||||
plugins: {
|
||||
elasticsearch: {
|
||||
client: {
|
||||
nodes: {}
|
||||
},
|
||||
status: {
|
||||
red: sinon.stub()
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
function setNodes(/* ...versions */) {
|
||||
|
@ -40,17 +53,17 @@ describe('plugins/elasticsearch', function () {
|
|||
|
||||
it('passes with single a node that matches', function () {
|
||||
setNodes('1.4.3');
|
||||
return checkEsVersion(server)();
|
||||
return checkEsVersion(server);
|
||||
});
|
||||
|
||||
it('passes with multiple nodes that satisfy', function () {
|
||||
setNodes('1.4.3', '1.4.4', '1.4.3-Beta1');
|
||||
return checkEsVersion(server)();
|
||||
return checkEsVersion(server);
|
||||
});
|
||||
|
||||
it('fails with a single node that is out of date', function () {
|
||||
setNodes('1.4.4', '1.4.2', '1.4.5');
|
||||
return checkEsVersion(server)()
|
||||
return checkEsVersion(server)
|
||||
.then(function () {
|
||||
throw new Error('expected validation to fail');
|
||||
}, _.noop);
|
||||
|
@ -63,7 +76,7 @@ describe('plugins/elasticsearch', function () {
|
|||
'1.4.5'
|
||||
);
|
||||
|
||||
return checkEsVersion(server)();
|
||||
return checkEsVersion(server);
|
||||
});
|
||||
|
||||
});
|
|
@ -1,11 +1,11 @@
|
|||
var root = require('requirefrom')('');
|
||||
var _ = require('lodash');
|
||||
var sinon = require('sinon');
|
||||
var expect = require('expect.js');
|
||||
var createKibanaIndex = root('src/server/plugins/elasticsearch/lib/create_kibana_index');
|
||||
var SetupError = root('src/server/plugins/elasticsearch/lib/setup_error');
|
||||
var Promise = require('bluebird');
|
||||
|
||||
var createKibanaIndex = require('../create_kibana_index');
|
||||
var SetupError = require('../setup_error');
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
describe('lib/create_kibana_index', function () {
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
var Promise = require('bluebird');
|
||||
var portscanner = require('portscanner');
|
||||
|
||||
module.exports = function findPort(start, end, host) {
|
||||
host = host || 'localhost';
|
||||
return new Promise(function (resolve, reject) {
|
|
@ -1,10 +1,9 @@
|
|||
var root = require('requirefrom')('');
|
||||
var healthCheck = root('src/server/plugins/elasticsearch/lib/health_check');
|
||||
var Promise = require('bluebird');
|
||||
var sinon = require('sinon');
|
||||
var expect = require('expect.js');
|
||||
var NoConnections = require('elasticsearch').errors.NoConnections;
|
||||
|
||||
var healthCheck = require('../health_check');
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
describe('lib/health_check', function () {
|
|
@ -1,30 +1,41 @@
|
|||
var root = require('requirefrom')('');
|
||||
var isUpgradeable = root('src/server/plugins/elasticsearch/lib/is_upgradeable');
|
||||
var expect = require('expect.js');
|
||||
var util = require('util');
|
||||
var package = root('package.json');
|
||||
var sinon = require('sinon');
|
||||
'use strict';
|
||||
|
||||
let _ = require('lodash');
|
||||
let expect = require('expect.js');
|
||||
let sinon = require('sinon');
|
||||
|
||||
let isUpgradeable = require('../is_upgradeable');
|
||||
let utils = require('requirefrom')('src/utils');
|
||||
let pkg = utils('packageJson');
|
||||
let version = pkg.version;
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
describe('lib/isUpgradeable', function () {
|
||||
|
||||
var config = {};
|
||||
var server = {
|
||||
config: function () {
|
||||
return config;
|
||||
}
|
||||
let server = {
|
||||
config: _.constant({
|
||||
get: function (key) {
|
||||
switch (key) {
|
||||
case 'pkg.version': return version;
|
||||
default: throw new Error(`no stub for config key ${key}`);
|
||||
}
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
function upgradeDoc(_id, version, bool) {
|
||||
it(util.format('should return %s for %s <= %s', bool, _id, version), function () {
|
||||
var doc = { _id: _id };
|
||||
config.get = sinon.stub().withArgs('kibana.package.version').returns(version);
|
||||
expect(isUpgradeable(server, doc)).to.be(bool);
|
||||
function upgradeDoc(_id, _version, bool) {
|
||||
describe('', function () {
|
||||
before(function () { version = _version; });
|
||||
|
||||
it(`should return ${bool} for ${_id} <= ${version}`, function () {
|
||||
expect(isUpgradeable(server, { _id: _id })).to.be(bool);
|
||||
});
|
||||
|
||||
after(function () { version = pkg.version; });
|
||||
});
|
||||
}
|
||||
|
||||
upgradeDoc('1.0.0-beta1', package.version, false);
|
||||
upgradeDoc(package.version, package.version, false);
|
||||
upgradeDoc('1.0.0-beta1', pkg.version, false);
|
||||
upgradeDoc(pkg.version, pkg.version, false);
|
||||
upgradeDoc('4.0.0-RC1', '4.0.0-RC2', true);
|
||||
upgradeDoc('4.0.0-rc2', '4.0.0-rc1', false);
|
||||
upgradeDoc('4.0.0-rc2', '4.0.0', true);
|
||||
|
@ -35,8 +46,7 @@ describe('plugins/elasticsearch', function () {
|
|||
upgradeDoc('4.1.0-rc1-snapshot', '4.1.0-rc1', false);
|
||||
|
||||
it('should handle missing _id field', function () {
|
||||
config.get = sinon.stub().withArgs('kibana.package.version').returns(package.version);
|
||||
var doc = {
|
||||
let doc = {
|
||||
'_index': '.kibana',
|
||||
'_type': 'config',
|
||||
'_score': 1,
|
||||
|
@ -45,12 +55,12 @@ describe('plugins/elasticsearch', function () {
|
|||
'defaultIndex': '[logstash-]YYYY.MM.DD'
|
||||
}
|
||||
};
|
||||
|
||||
expect(isUpgradeable(server, doc)).to.be(false);
|
||||
});
|
||||
|
||||
it('should handle _id of @@version', function () {
|
||||
config.get = sinon.stub().withArgs('kibana.package.version').returns(package.version);
|
||||
var doc = {
|
||||
let doc = {
|
||||
'_index': '.kibana',
|
||||
'_type': 'config',
|
||||
'_id': '@@version',
|
|
@ -1,37 +1,53 @@
|
|||
var root = require('requirefrom')('');
|
||||
var src = require('requirefrom')('src');
|
||||
var expect = require('expect.js');
|
||||
var Kibana = root('src/server');
|
||||
var findPort = require('./findPort');
|
||||
require('./_ensure_elasticsearch');
|
||||
var util = require('util');
|
||||
var format = util.format;
|
||||
|
||||
var KbnServer = src('server/KbnServer');
|
||||
var fromRoot = src('utils/fromRoot');
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
describe('routes', function () {
|
||||
var server, config;
|
||||
before(require('./_ensure_elasticsearch'));
|
||||
|
||||
beforeEach(function () {
|
||||
return findPort(7000, 8000).then(function (port) {
|
||||
config = { 'kibana.server.port': port, 'logging.quiet': true};
|
||||
var kibana = new Kibana(config);
|
||||
return kibana.listen().then(function (_server) {
|
||||
server = _server;
|
||||
});
|
||||
var kbnServer;
|
||||
|
||||
before(function () {
|
||||
kbnServer = new KbnServer({
|
||||
server: { autoListen: false },
|
||||
logging: { quiet: true },
|
||||
plugins: {
|
||||
scanDirs: [
|
||||
fromRoot('src/plugins')
|
||||
]
|
||||
},
|
||||
optimize: {
|
||||
enabled: false
|
||||
}
|
||||
});
|
||||
|
||||
return kbnServer.ready();
|
||||
});
|
||||
|
||||
afterEach(function (done) {
|
||||
server.stop(done);
|
||||
|
||||
after(function () {
|
||||
return kbnServer.close();
|
||||
});
|
||||
|
||||
|
||||
function testRoute(options) {
|
||||
var statusCode = options.statusCode || 200;
|
||||
describe(format('%s %s', options.method, options.url), function () {
|
||||
it('should should return ' + statusCode, function (done) {
|
||||
server.inject(options, function (res) {
|
||||
expect(res.statusCode).to.be(statusCode);
|
||||
done();
|
||||
kbnServer.server.inject(options, function (res) {
|
||||
try {
|
||||
expect(res.statusCode).to.be(statusCode);
|
||||
} catch (e) {
|
||||
done(e);
|
||||
done = null;
|
||||
} finally {
|
||||
done && done();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,5 +1,4 @@
|
|||
var root = require('requirefrom')('');
|
||||
var SetupError = root('src/server/plugins/elasticsearch/lib/setup_error');
|
||||
var SetupError = require('../setup_error');
|
||||
var expect = require('expect.js');
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
|
@ -1,28 +1,36 @@
|
|||
var root = require('requirefrom')('');
|
||||
var upgradeConfig = root('src/server/plugins/elasticsearch/lib/upgrade_config');
|
||||
var _ = require('lodash');
|
||||
var Promise = require('bluebird');
|
||||
var sinon = require('sinon');
|
||||
var expect = require('expect.js');
|
||||
|
||||
var upgradeConfig = require('../upgrade_config');
|
||||
|
||||
describe('pluigns/elasticsearch', function () {
|
||||
describe('lib/upgrade_config', function () {
|
||||
var get;
|
||||
var server;
|
||||
var client;
|
||||
var config;
|
||||
var upgrade;
|
||||
|
||||
var get, server, client, config, upgrade;
|
||||
beforeEach(function () {
|
||||
get = sinon.stub();
|
||||
get.withArgs('kibana.package.version').returns('4.0.1');
|
||||
get.withArgs('kibana.index').returns('.my-kibana');
|
||||
get.withArgs('pkg.version').returns('4.0.1');
|
||||
client = { create: sinon.stub() };
|
||||
server = {
|
||||
log: sinon.stub(),
|
||||
config: function () { return { get: get }; },
|
||||
config: function () {
|
||||
return {
|
||||
get: get
|
||||
};
|
||||
},
|
||||
plugins: { elasticsearch: { client: client } }
|
||||
};
|
||||
upgrade = upgradeConfig(server);
|
||||
});
|
||||
|
||||
describe('nothing is found', function () {
|
||||
var env = process.env.NODE_ENV;
|
||||
var response = { hits: { hits:[] } };
|
||||
|
||||
beforeEach(function () {
|
||||
|
@ -31,11 +39,14 @@ describe('pluigns/elasticsearch', function () {
|
|||
|
||||
describe('production', function () {
|
||||
beforeEach(function () {
|
||||
process.env.NODE_ENV = 'production';
|
||||
get.withArgs('env.name').returns('production');
|
||||
get.withArgs('env.prod').returns(true);
|
||||
get.withArgs('env.dev').returns(false);
|
||||
});
|
||||
|
||||
it('should resolve buildNum to kibana.buildNum', function () {
|
||||
get.withArgs('kibana.buildNum').returns(5801);
|
||||
it('should resolve buildNum to pkg.buildNum', function () {
|
||||
get.withArgs('pkg.buildNum').returns(5801);
|
||||
|
||||
return upgrade(response).then(function (resp) {
|
||||
sinon.assert.calledOnce(client.create);
|
||||
var params = client.create.args[0][0];
|
||||
|
@ -53,7 +64,9 @@ describe('pluigns/elasticsearch', function () {
|
|||
|
||||
describe('development', function () {
|
||||
beforeEach(function () {
|
||||
process.env.NODE_ENV = 'development';
|
||||
get.withArgs('env.name').returns('development');
|
||||
get.withArgs('env.prod').returns(false);
|
||||
get.withArgs('env.dev').returns(true);
|
||||
});
|
||||
|
||||
it('should resolve buildNum to the max integer', function () {
|
||||
|
@ -69,12 +82,6 @@ describe('pluigns/elasticsearch', function () {
|
|||
expect(params).to.have.property('id', '@@version');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
process.env.NODE_ENV = env;
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -93,7 +100,7 @@ describe('pluigns/elasticsearch', function () {
|
|||
});
|
||||
|
||||
it('should update the build number on the new config', function () {
|
||||
get.withArgs('kibana.buildNum').returns(5801);
|
||||
get.withArgs('pkg.buildNum').returns(5801);
|
||||
client.create.returns(Promise.resolve());
|
||||
var response = { hits: { hits: [ { _id: '4.0.0', _source: { buildNum: 1 } } ] } };
|
||||
return upgrade(response).then(function (resp) {
|
||||
|
@ -108,7 +115,7 @@ describe('pluigns/elasticsearch', function () {
|
|||
});
|
||||
|
||||
it('should update the build number to max integer if buildNum is template string', function () {
|
||||
get.withArgs('kibana.buildNum').returns('@@buildNum');
|
||||
get.withArgs('pkg.buildNum').returns('@@buildNum');
|
||||
client.create.returns(Promise.resolve());
|
||||
var response = { hits: { hits: [ { _id: '4.0.0', _source: { buildNum: 1 } } ] } };
|
||||
return upgrade(response).then(function (resp) {
|
||||
|
@ -120,18 +127,21 @@ describe('pluigns/elasticsearch', function () {
|
|||
});
|
||||
|
||||
it('should log a message for upgrades', function () {
|
||||
get.withArgs('kibana.buildNum').returns(5801);
|
||||
get.withArgs('pkg.buildNum').returns(5801);
|
||||
client.create.returns(Promise.resolve());
|
||||
var response = { hits: { hits: [ { _id: '4.0.0', _source: { buildNum: 1 } } ] } };
|
||||
return upgrade(response).then(function (resp) {
|
||||
sinon.assert.calledOnce(server.log);
|
||||
expect(server.log.args[0][0]).to.be('plugin');
|
||||
expect(server.log.args[0][1]).to.be('[ elasticsearch ] Upgrade config from 4.0.0 to 4.0.1');
|
||||
expect(server.log.args[0][0]).to.eql(['plugin', 'elasticsearch']);
|
||||
var msg = server.log.args[0][1];
|
||||
expect(msg).to.have.property('prevVersion', '4.0.0');
|
||||
expect(msg).to.have.property('newVersion', '4.0.1');
|
||||
expect(msg.tmpl).to.contain('Upgrade');
|
||||
});
|
||||
});
|
||||
|
||||
it('should copy attributes from old config', function () {
|
||||
get.withArgs('kibana.buildNum').returns(5801);
|
||||
get.withArgs('pkg.buildNum').returns(5801);
|
||||
client.create.returns(Promise.resolve());
|
||||
var response = { hits: { hits: [ { _id: '4.0.0', _source: { buildNum: 1, defaultIndex: 'logstash-*' } } ] } };
|
||||
return upgrade(response).then(function (resp) {
|
|
@ -1,11 +1,36 @@
|
|||
var _ = require('lodash');
|
||||
var root = require('requirefrom')('');
|
||||
var validateRequest = root('src/server/plugins/elasticsearch/lib/validate');
|
||||
var expect = require('expect.js');
|
||||
var server = { config: root('src/server/lib/config') };
|
||||
var config = server.config();
|
||||
var src = require('requirefrom')('src');
|
||||
|
||||
var fromRoot = src('utils/fromRoot');
|
||||
var KbnServer = src('server/KbnServer');
|
||||
var validateRequest = require('../validate');
|
||||
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
var kbnServer;
|
||||
var server;
|
||||
var config;
|
||||
|
||||
before(function () {
|
||||
kbnServer = new KbnServer({
|
||||
server: { autoListen: false },
|
||||
plugins: { scanDirs: [ fromRoot('src/plugins') ] },
|
||||
logging: { quiet: true },
|
||||
optimize: { enabled: false }
|
||||
});
|
||||
|
||||
return kbnServer.ready()
|
||||
.then(function () {
|
||||
server = kbnServer.server;
|
||||
config = kbnServer.config;
|
||||
});
|
||||
});
|
||||
|
||||
after(function () {
|
||||
kbnServer.close();
|
||||
});
|
||||
|
||||
describe('lib/validate', function () {
|
||||
|
||||
function del(path, body, valid) {
|
|
@ -1,6 +1,5 @@
|
|||
var root = require('requirefrom')('');
|
||||
var _ = require('lodash');
|
||||
var versionMath = root('src/server/plugins/elasticsearch/lib/version_math');
|
||||
var versionMath = require('../version_math');
|
||||
var expect = require('expect.js');
|
||||
var versions = [
|
||||
'1.1.12',
|
|
@ -6,31 +6,32 @@ var SetupError = require('./setup_error');
|
|||
module.exports = function (server) {
|
||||
var client = server.plugins.elasticsearch.client;
|
||||
var minimumElasticsearchVersion = server.config().get('elasticsearch.minimumVerison');
|
||||
|
||||
return client.nodes.info()
|
||||
.then(function (info) {
|
||||
var badNodes = _.filter(info.nodes, function (node) {
|
||||
// remove client nodes (Logstash)
|
||||
var isClient = _.get(node, 'attributes.client');
|
||||
if (isClient != null && esBool(isClient) === true) {
|
||||
return false;
|
||||
}
|
||||
.then(function (info) {
|
||||
var badNodes = _.filter(info.nodes, function (node) {
|
||||
// remove client nodes (Logstash)
|
||||
var isClient = _.get(node, 'attributes.client');
|
||||
if (isClient != null && esBool(isClient) === true) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// remove nodes that are gte the min version
|
||||
var v = node.version.split('-')[0];
|
||||
return !versionMath.gte(minimumElasticsearchVersion, v);
|
||||
});
|
||||
|
||||
if (!badNodes.length) return true;
|
||||
|
||||
var badNodeNames = badNodes.map(function (node) {
|
||||
return 'Elasticsearch v' + node.version + ' @ ' + node.http_address + ' (' + node.ip + ')';
|
||||
});
|
||||
|
||||
var message = 'This version of Kibana requires Elasticsearch ' +
|
||||
minimumElasticsearchVersion + ' or higher on all nodes. ' +
|
||||
'I found the following incompatible nodes in your cluster: ' +
|
||||
badNodeNames.join(',');
|
||||
server.plugins.elasticsearch.status.red(message);
|
||||
throw new SetupError(server, message);
|
||||
// remove nodes that are gte the min version
|
||||
var v = node.version.split('-')[0];
|
||||
return !versionMath.gte(minimumElasticsearchVersion, v);
|
||||
});
|
||||
|
||||
if (!badNodes.length) return true;
|
||||
|
||||
var badNodeNames = badNodes.map(function (node) {
|
||||
return 'Elasticsearch v' + node.version + ' @ ' + node.http_address + ' (' + node.ip + ')';
|
||||
});
|
||||
|
||||
var message = `This version of Kibana requires Elasticsearch ` +
|
||||
`${minimumElasticsearchVersion} or higher on all nodes. I found ` +
|
||||
`the following incompatible nodes in your cluster: ${badNodeNames.join(',')}`;
|
||||
|
||||
server.plugins.elasticsearch.status.red(message);
|
||||
throw new SetupError(server, message);
|
||||
});
|
||||
};
|
||||
|
|
|
@ -36,7 +36,7 @@ module.exports = function (server) {
|
|||
server.log(['error', 'elasticsearch'], err);
|
||||
};
|
||||
this.warning = function (message) {
|
||||
server.log(['warning', 'elasticsearch'], '[ elasticsearch ] ' + message);
|
||||
server.log(['warning', 'elasticsearch'], message);
|
||||
};
|
||||
this.info = _.noop;
|
||||
this.debug = _.noop;
|
||||
|
|
|
@ -53,7 +53,7 @@ module.exports = function (plugin, server) {
|
|||
|
||||
function check() {
|
||||
return waitForPong()
|
||||
.then(_.partial(checkEsVersion, server))
|
||||
.then(_.partial(checkEsVersion, server, plugin))
|
||||
.then(waitForShards)
|
||||
.then(_.partial(migrateConfig, server))
|
||||
.catch(_.bindKey(server, 'log', 'error'));
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
var semver = require('semver');
|
||||
var pkg = require('../../../utils/closestPackageJson').getSync();
|
||||
var utils = require('requirefrom')('src/utils');
|
||||
var rcVersionRegex = /(\d+\.\d+\.\d+)\-rc(\d+)/i;
|
||||
|
||||
module.exports = function (server, doc) {
|
||||
var config = server.config();
|
||||
if (/beta|snapshot/i.test(doc._id)) return false;
|
||||
if (!doc._id) return false;
|
||||
if (doc._id === pkg.version) return false;
|
||||
if (doc._id === config.get('pkg.version')) return false;
|
||||
|
||||
var packageRcRelease = Infinity;
|
||||
var rcRelease = Infinity;
|
||||
var packageVersion = pkg.version;
|
||||
var packageVersion = config.get('pkg.version');
|
||||
var version = doc._id;
|
||||
var matches = doc._id.match(rcVersionRegex);
|
||||
var packageMatches = pkg.version.match(rcVersionRegex);
|
||||
var packageMatches = config.get('pkg.version').match(rcVersionRegex);
|
||||
|
||||
if (matches) {
|
||||
version = matches[1];
|
||||
|
|
|
@ -1,34 +1,35 @@
|
|||
var Promise = require('bluebird');
|
||||
var isUpgradeable = require('./is_upgradeable');
|
||||
var pkg = require('../../../utils/closestPackageJson').getSync();
|
||||
var _ = require('lodash');
|
||||
var format = require('util').format;
|
||||
module.exports = function (server) {
|
||||
|
||||
var utils = require('requirefrom')('src/utils');
|
||||
|
||||
module.exports = function (server) {
|
||||
var MAX_INTEGER = Math.pow(2, 53) - 1;
|
||||
|
||||
var client = server.plugins.elasticsearch.client;
|
||||
var config = server.config();
|
||||
|
||||
return function (response) {
|
||||
var newConfig = {};
|
||||
|
||||
// Check to see if there are any doc. If not then we set the build number and id
|
||||
if (response.hits.hits.length === 0) {
|
||||
var isProduction = process.env.NODE_ENV === 'production';
|
||||
return client.create({
|
||||
index: config.get('kibana.index'),
|
||||
type: 'config',
|
||||
body: {
|
||||
buildNum: isProduction ? config.get('kibana.buildNum') : MAX_INTEGER
|
||||
},
|
||||
id: isProduction ? config.get('kibana.package.version') : '@@version'
|
||||
});
|
||||
index: config.get('kibana.index'),
|
||||
type: 'config',
|
||||
body: {
|
||||
buildNum: config.get('env.prod') ? config.get('pkg.buildNum') : MAX_INTEGER
|
||||
},
|
||||
id: config.get('env.prod') ? config.get('pkg.version') : '@@version'
|
||||
});
|
||||
}
|
||||
|
||||
// if we already have a the current version in the index then we need to stop
|
||||
if (_.find(response.hits.hits, function currentVersion(hit) {
|
||||
return hit._id !== '@@version' &&
|
||||
hit._id === pkg.version;
|
||||
hit._id === config.get('pkg.version');
|
||||
})) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
@ -41,21 +42,21 @@ module.exports = function (server) {
|
|||
// if the build number is still the template string (which it wil be in development)
|
||||
// then we need to set it to the max interger. Otherwise we will set it to the build num
|
||||
body._source.buildNum = MAX_INTEGER;
|
||||
if (!/^@@/.test(config.get('kibana.buildNum'))) {
|
||||
body._source.buildNum = parseInt(config.get('kibana.buildNum'), 10);
|
||||
if (!/^@@/.test(config.get('pkg.buildNum'))) {
|
||||
body._source.buildNum = parseInt(config.get('pkg.buildNum'), 10);
|
||||
}
|
||||
|
||||
server.log('plugin', {
|
||||
tmpl: '[ elasticsearch ] Upgrade config from <%= prevVersion %> to <%= newVersion %>',
|
||||
server.log(['plugin', 'elasticsearch'], {
|
||||
tmpl: 'Upgrade config from <%= prevVersion %> to <%= newVersion %>',
|
||||
prevVersion: body._id,
|
||||
newVersion: pkg.version
|
||||
newVersion: config.get('pkg.version')
|
||||
});
|
||||
|
||||
return client.create({
|
||||
index: config.get('kibana.index'),
|
||||
type: 'config',
|
||||
body: body._source,
|
||||
id: pkg.version
|
||||
id: config.get('pkg.version')
|
||||
});
|
||||
};
|
||||
};
|
||||
|
|
|
@ -5,8 +5,7 @@ module.exports = function (kibana) {
|
|||
return Joi.object({
|
||||
enabled: Joi.boolean().default(true),
|
||||
defaultAppId: Joi.string().default('discover'),
|
||||
index: Joi.string().default('.kibana'),
|
||||
buildNum: Joi.string().default('@@buildNum')
|
||||
index: Joi.string().default('.kibana')
|
||||
}).default();
|
||||
},
|
||||
|
||||
|
|
|
@ -4,10 +4,12 @@ let _ = require('lodash');
|
|||
let EventEmitter = require('events').EventEmitter;
|
||||
let promify = require('bluebird').promisify;
|
||||
let resolve = require('bluebird').resolve;
|
||||
let fromNode = require('bluebird').fromNode;
|
||||
let Hapi = require('hapi');
|
||||
|
||||
let rootDir = require('../utils/fromRoot')('.');
|
||||
let pkg = require('../utils/closestPackageJson').getSync();
|
||||
let utils = require('requirefrom')('src/utils');
|
||||
let rootDir = utils('fromRoot')('.');
|
||||
let pkg = utils('packageJson');
|
||||
|
||||
module.exports = class KbnServer extends EventEmitter {
|
||||
constructor(settings) {
|
||||
|
@ -18,7 +20,7 @@ module.exports = class KbnServer extends EventEmitter {
|
|||
this.build = pkg.build || false;
|
||||
this.rootDir = rootDir;
|
||||
this.server = new Hapi.Server();
|
||||
this.settings = settings;
|
||||
this.settings = settings || {};
|
||||
|
||||
this.ready = _.constant(this.mixin(
|
||||
require('./config/setup'),
|
||||
|
@ -73,12 +75,13 @@ module.exports = class KbnServer extends EventEmitter {
|
|||
let server = self.server;
|
||||
let start = _.ary(promify(server.start, server), 0);
|
||||
|
||||
self.ready().then(function () {
|
||||
return self.ready()
|
||||
.then(function () {
|
||||
return self.mixin(start, require('./pid'));
|
||||
})
|
||||
.then(
|
||||
function () {
|
||||
server.log('info', 'Server running at ' + server.info.uri);
|
||||
server.log(['listening', 'info'], 'Server running at ' + server.info.uri);
|
||||
self.emit('listening');
|
||||
return server;
|
||||
},
|
||||
|
@ -87,7 +90,18 @@ module.exports = class KbnServer extends EventEmitter {
|
|||
self.emit('error', err);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return this;
|
||||
close() {
|
||||
let self = this;
|
||||
|
||||
return fromNode(function (cb) {
|
||||
self.server.stop(cb);
|
||||
})
|
||||
.then(function () {
|
||||
if (self.optimizer && self.optimizer.disable) {
|
||||
return self.optimizer.disable();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
var root = require('requirefrom')('');
|
||||
var Config = root('src/server/lib/config/config');
|
||||
var Config = require('../Config');
|
||||
var expect = require('expect.js');
|
||||
var _ = require('lodash');
|
||||
var Joi = require('joi');
|
||||
|
@ -201,9 +200,8 @@ describe('lib/config/config', function () {
|
|||
|
||||
it('should NOT allow you to extend the schema if somethign else is there', function () {
|
||||
var newSchema = Joi.object({ test: Joi.boolean().default(true) }).default();
|
||||
config.extendSchema('test', newSchema);
|
||||
var run = function () {
|
||||
config.get('test.test');
|
||||
config.extendSchema('test', newSchema);
|
||||
};
|
||||
expect(run).to.throwException();
|
||||
});
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
var root = require('requirefrom')('');
|
||||
var explodeBy = root('src/server/lib/config/explode_by');
|
||||
var explodeBy = require('../explodeBy');
|
||||
var expect = require('expect.js');
|
||||
|
||||
describe('explode_by(dot, flatObject)', function () {
|
|
@ -1,5 +1,4 @@
|
|||
var root = require('requirefrom')('');
|
||||
var flattenWith = root('src/server/lib/config/flatten_with');
|
||||
var flattenWith = require('../flattenWith');
|
||||
var expect = require('expect.js');
|
||||
|
||||
describe('flatten_with(dot, nestedObj)', function () {
|
|
@ -1,14 +0,0 @@
|
|||
var root = require('requirefrom')('');
|
||||
var config = root('src/server/lib/config');
|
||||
var Config = root('src/server/lib/config/config');
|
||||
var expect = require('expect.js');
|
||||
|
||||
describe('server.config()', function (arg) {
|
||||
|
||||
it('should return a Config object', function () {
|
||||
var conf = config();
|
||||
expect(conf).to.be.an(Config);
|
||||
});
|
||||
|
||||
});
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
var root = require('requirefrom')('');
|
||||
var override = root('src/server/lib/config/override');
|
||||
var override = require('../override');
|
||||
var expect = require('expect.js');
|
||||
|
||||
describe('override(target, source)', function () {
|
||||
|
|
|
@ -64,10 +64,14 @@ module.exports = class Config {
|
|||
env: env,
|
||||
prod: env === 'production',
|
||||
dev: env === 'development',
|
||||
notProd: env !== 'production',
|
||||
notDev: env !== 'development'
|
||||
};
|
||||
|
||||
if (!context.dev && !context.prod) {
|
||||
throw new TypeError(`Unexpected environment "${env}", expected one of "development" or "production"`);
|
||||
if (!context.dev && !context.prod && !context.test) {
|
||||
throw new TypeError(
|
||||
`Unexpected environment "${env}", expected one of "development" or "production"`
|
||||
);
|
||||
}
|
||||
|
||||
let results = Joi.validate(newConfig, this.schema, {
|
||||
|
|
|
@ -1,15 +1,27 @@
|
|||
var Joi = require('joi');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var package = require('../../utils/closestPackageJson').getSync();
|
||||
var fromRoot = require('../../utils/fromRoot');
|
||||
'use strict';
|
||||
|
||||
let get = require('lodash').get;
|
||||
let Joi = require('joi');
|
||||
let fs = require('fs');
|
||||
let path = require('path');
|
||||
|
||||
let utils = require('requirefrom')('src/utils');
|
||||
let fromRoot = utils('fromRoot');
|
||||
let pkg = utils('packageJson');
|
||||
let buildNum = get(pkg, 'build.num', '@@buildNum');
|
||||
|
||||
module.exports = Joi.object({
|
||||
|
||||
pkg: Joi.object({
|
||||
version: Joi.string().valid(pkg.version).default(pkg.version),
|
||||
buildNum: Joi.string().valid(buildNum).default(buildNum)
|
||||
}).default(),
|
||||
|
||||
env: Joi.object({
|
||||
name: Joi.string().default(Joi.ref('$env')),
|
||||
dev: Joi.boolean().default(Joi.ref('$dev')),
|
||||
prod: Joi.boolean().default(Joi.ref('$prod'))
|
||||
prod: Joi.boolean().default(Joi.ref('$prod')),
|
||||
test: Joi.boolean().default(Joi.ref('$test')),
|
||||
}).default(),
|
||||
|
||||
pid: Joi.object({
|
||||
|
@ -64,6 +76,7 @@ module.exports = Joi.object({
|
|||
}).default(),
|
||||
|
||||
optimize: Joi.object({
|
||||
enabled: Joi.boolean().default(true),
|
||||
bundleDir: Joi.string().default(fromRoot('optimize/bundles')),
|
||||
viewCaching: Joi.boolean().default(Joi.ref('$prod')),
|
||||
watch: Joi.boolean().default(Joi.ref('$dev')),
|
||||
|
|
|
@ -21,6 +21,7 @@ let typeColors = {
|
|||
server: 'brightBlack',
|
||||
optmzr: 'white',
|
||||
optimize: 'magenta',
|
||||
listening: 'magenta'
|
||||
};
|
||||
|
||||
let color = _.memoize(function (name) {
|
||||
|
|
|
@ -12,7 +12,7 @@ module.exports = function (kbnServer, server, config) {
|
|||
}
|
||||
else if (config.get('logging.quiet')) {
|
||||
_.defaults(events, {
|
||||
log: ['error', 'fatal'],
|
||||
log: ['listening', 'error', 'fatal'],
|
||||
error: '*'
|
||||
});
|
||||
}
|
||||
|
|
|
@ -9,11 +9,12 @@ let webpack = require('webpack');
|
|||
let DirectoryNameAsMain = require('webpack-directory-name-as-main');
|
||||
let ExtractTextPlugin = require('extract-text-webpack-plugin');
|
||||
|
||||
let fromRoot = require('../../utils/fromRoot');
|
||||
let utils = require('requirefrom')('src/utils');
|
||||
let fromRoot = utils('fromRoot');
|
||||
let OptmzBundles = require('./OptmzBundles');
|
||||
let OptmzUiModules = require('./OptmzUiModules');
|
||||
|
||||
let kbnTag = `Kibana ${ require('../../utils/closestPackageJson').getSync().version }`;
|
||||
let kbnTag = `Kibana ${ utils('packageJson').version }`;
|
||||
|
||||
class BaseOptimizer extends EventEmitter {
|
||||
constructor(opts) {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
'use strict';
|
||||
|
||||
module.exports = function (kbnServer, server, config) {
|
||||
if (!config.get('optimize.enabled')) return;
|
||||
|
||||
var _ = require('lodash');
|
||||
var resolve = require('path').resolve;
|
||||
var fromRoot = require('../../utils/fromRoot');
|
||||
|
|
|
@ -72,6 +72,7 @@ module.exports = class Plugin {
|
|||
}
|
||||
|
||||
let register = function (server, options, next) {
|
||||
server.expose('status', self.status);
|
||||
Promise.try(self.externalInit, [server, options], self).nodeify(next);
|
||||
};
|
||||
|
||||
|
|
|
@ -1,76 +0,0 @@
|
|||
var checkDependencies = require('../../../../../src/server/lib/plugins/check_dependencies');
|
||||
var expect = require('expect.js');
|
||||
|
||||
describe('src/server/lib/check_dependencies', function () {
|
||||
|
||||
it('should return true for first -> second -> third', function () {
|
||||
var deps = {
|
||||
first: [],
|
||||
second: ['first'],
|
||||
third: ['second']
|
||||
};
|
||||
|
||||
var results = checkDependencies('first', deps);
|
||||
expect(results).to.be(true);
|
||||
});
|
||||
|
||||
it('should throw an error for first -> third -> second -> first', function () {
|
||||
var deps = {
|
||||
first: ['third'],
|
||||
second: ['first'],
|
||||
third: ['second']
|
||||
};
|
||||
|
||||
var run = function () {
|
||||
checkDependencies('first', deps);
|
||||
};
|
||||
expect(run).to.throwException(function (e) {
|
||||
expect(e.message).to.be('Circular dependency: first -> third -> second -> first');
|
||||
});
|
||||
});
|
||||
|
||||
it('should throw an error for first -> missing', function () {
|
||||
var deps = {
|
||||
first: ['missing']
|
||||
};
|
||||
|
||||
var run = function () {
|
||||
checkDependencies('first', deps);
|
||||
};
|
||||
expect(run).to.throwException(function (e) {
|
||||
expect(e.message).to.be('Missing dependency: missing');
|
||||
});
|
||||
});
|
||||
|
||||
it('should throw an error for missing dependency', function () {
|
||||
var deps = {
|
||||
first: ['missing']
|
||||
};
|
||||
|
||||
var run = function () {
|
||||
checkDependencies('missing', deps);
|
||||
};
|
||||
expect(run).to.throwException(function (e) {
|
||||
expect(e.message).to.be('Missing dependency: missing');
|
||||
});
|
||||
});
|
||||
|
||||
it('should throw an error on complex circulars', function () {
|
||||
var deps = {
|
||||
first: ['second', 'fifth'],
|
||||
second: ['fourth'],
|
||||
third: [],
|
||||
fourth: ['third'],
|
||||
fifth: ['sixth'],
|
||||
sixth: ['first']
|
||||
};
|
||||
|
||||
var run = function () {
|
||||
checkDependencies('first', deps);
|
||||
};
|
||||
expect(run).to.throwException(function (e) {
|
||||
expect(e.message).to.be('Circular dependency: first -> fifth -> sixth -> first');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
|
@ -1,28 +0,0 @@
|
|||
var expect = require('expect.js');
|
||||
var Plugin = require('../../../../../src/server/lib/plugins/plugin');
|
||||
|
||||
describe('lib/plugins/plugin', function () {
|
||||
|
||||
it('should assign attributes passed into the created to the object', function () {
|
||||
var plugin = new Plugin({ name: 'test', require: ['config'] });
|
||||
expect(plugin).to.have.property('name', 'test');
|
||||
expect(plugin).to.have.property('require');
|
||||
expect(plugin.require).to.eql(['config']);
|
||||
});
|
||||
|
||||
it('should by default assign an empty array to the require attribute', function () {
|
||||
var plugin = new Plugin();
|
||||
expect(plugin).to.have.property('require');
|
||||
expect(plugin.require).to.eql([]);
|
||||
});
|
||||
|
||||
it('should by default assign a function to init attribute that rejects a promise', function (done) {
|
||||
var plugin = new Plugin();
|
||||
expect(plugin).to.have.property('init');
|
||||
plugin.init().catch(function (err) {
|
||||
expect(err.message).to.be('You must override the init function for plugins');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
|
@ -1,174 +0,0 @@
|
|||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
var registerPlugins = require('../../../../../src/server/lib/plugins/register_plugins');
|
||||
var Status = require('../../../../../src/server/lib/status/status');
|
||||
var systemStatus = require('../../../../../src/server/lib/status');
|
||||
var Promise = require('bluebird');
|
||||
|
||||
function createInit() {
|
||||
return sinon.stub().returns(Promise.resolve());
|
||||
}
|
||||
|
||||
describe('server/lib/register_plugins', function () {
|
||||
var server, get;
|
||||
|
||||
beforeEach(function () {
|
||||
get = sinon.stub();
|
||||
server = {
|
||||
register: sinon.stub(),
|
||||
config: sinon.stub().returns({ get: get }),
|
||||
expose: sinon.stub(),
|
||||
log: sinon.stub()
|
||||
};
|
||||
});
|
||||
|
||||
describe('registerPlugins() wrapper', function () {
|
||||
|
||||
var options = { foo: 'bar' };
|
||||
|
||||
it('should pass server, options and next to the init function', function () {
|
||||
var next = function (err) {
|
||||
server.register.args[0][1](err);
|
||||
};
|
||||
server.register.yieldsTo('register', server, options, next);
|
||||
var plugin = { name: 'first', init: createInit() };
|
||||
var plugins = [plugin];
|
||||
return registerPlugins(server, plugins).then(function () {
|
||||
expect(plugin.init.args[0][0]).to.equal(server);
|
||||
expect(plugin.init.args[0][1]).to.equal(options);
|
||||
});
|
||||
});
|
||||
|
||||
it('should call next() when plugin.init completes', function () {
|
||||
var called = false;
|
||||
var next = function (err) {
|
||||
called = true;
|
||||
server.register.args[0][1](err);
|
||||
};
|
||||
server.register.yieldsTo('register', server, options, next);
|
||||
var plugin = { name: 'first', init: createInit() };
|
||||
var plugins = [plugin];
|
||||
return registerPlugins(server, plugins).then(function () {
|
||||
expect(called).to.be(true);
|
||||
});
|
||||
});
|
||||
|
||||
it('should attach the server to the plugin', function () {
|
||||
var next = function (err) {
|
||||
server.register.args[0][1](err);
|
||||
};
|
||||
server.register.yieldsTo('register', server, options, next);
|
||||
var plugin = { name: 'first', init: createInit() };
|
||||
var plugins = [plugin];
|
||||
return registerPlugins(server, plugins).then(function () {
|
||||
expect(plugin).to.have.property('server');
|
||||
expect(plugin.server).to.eql(server);
|
||||
});
|
||||
});
|
||||
|
||||
var greenSpy, yellowSpy, createStatus;
|
||||
beforeEach(function () {
|
||||
greenSpy = sinon.spy(Status.prototype, 'green');
|
||||
yellowSpy = sinon.spy(Status.prototype, 'yellow');
|
||||
createStatus = sinon.spy(systemStatus, 'createStatus');
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
Status.prototype.green.restore();
|
||||
Status.prototype.yellow.restore();
|
||||
systemStatus.createStatus.restore();
|
||||
});
|
||||
|
||||
it('should call status.createStatus() with plugin', function () {
|
||||
var next = function (err) {
|
||||
server.register.args[0][1](err);
|
||||
};
|
||||
server.register.yieldsTo('register', server, options, next);
|
||||
var plugin = { name: 'first', init: createInit() };
|
||||
var plugins = [plugin];
|
||||
return registerPlugins(server, plugins).then(function () {
|
||||
sinon.assert.calledOnce(createStatus);
|
||||
expect(plugin).to.have.property('status');
|
||||
expect(createStatus.args[0][0]).to.eql(plugin);
|
||||
});
|
||||
});
|
||||
it('should not set the status before init is called', function () {
|
||||
var next = function (err) {
|
||||
server.register.args[0][1](err);
|
||||
};
|
||||
server.register.yieldsTo('register', server, options, next);
|
||||
var plugin = { name: 'first', init: createInit() };
|
||||
var plugins = [plugin];
|
||||
return registerPlugins(server, plugins).then(function () {
|
||||
expect(yellowSpy).to.have.property('callCount', 0);
|
||||
});
|
||||
});
|
||||
|
||||
it('should set the status to green and "Ready" after init', function () {
|
||||
var next = function (err) {
|
||||
server.register.args[0][1](err);
|
||||
};
|
||||
server.register.yieldsTo('register', server, options, next);
|
||||
var plugin = { name: 'first', init: createInit() };
|
||||
var plugins = [plugin];
|
||||
return registerPlugins(server, plugins).then(function () {
|
||||
sinon.assert.calledOnce(greenSpy);
|
||||
expect(greenSpy.calledAfter(plugin.init)).to.be(true);
|
||||
expect(greenSpy.args[0][0]).to.be('Ready');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('dependencies', function () {
|
||||
var nextStub;
|
||||
|
||||
beforeEach(function () {
|
||||
var count = 0;
|
||||
var next = function (err) {
|
||||
server.register.args[count++][1](err);
|
||||
};
|
||||
server.register.yieldsTo('register', server, {}, next);
|
||||
});
|
||||
|
||||
it('should run second after first and third and third after first', function () {
|
||||
var first = { name: 'first', init: createInit() };
|
||||
var second = { name: 'second', require: ['first', 'third'], init: createInit() };
|
||||
var third = { name: 'third', require: ['first'], init: createInit() };
|
||||
var plugins = [second, first, third];
|
||||
return registerPlugins(server, plugins).then(function () {
|
||||
expect(second.init.calledAfter(first.init)).to.be(true);
|
||||
expect(second.init.calledAfter(third.init)).to.be(true);
|
||||
expect(third.init.calledAfter(first.init)).to.be(true);
|
||||
sinon.assert.calledThrice(server.register);
|
||||
});
|
||||
});
|
||||
|
||||
it('should run first, second, third', function () {
|
||||
var first = { name: 'first', init: createInit() };
|
||||
var second = { name: 'second', require: ['first'], init: createInit() };
|
||||
var third = { name: 'third', require: ['second'], init: createInit() };
|
||||
var plugins = [second, first, third];
|
||||
return registerPlugins(server, plugins).then(function () {
|
||||
sinon.assert.calledOnce(first.init);
|
||||
expect(second.init.calledAfter(first.init)).to.be(true);
|
||||
expect(third.init.calledAfter(second.init)).to.be(true);
|
||||
sinon.assert.calledThrice(server.register);
|
||||
});
|
||||
});
|
||||
|
||||
it('should detect circular dependencies', function (done) {
|
||||
var first = { name: 'first', require: ['third'], init: sinon.stub() };
|
||||
var second = { name: 'second', require: ['first'], init: sinon.stub() };
|
||||
var third = { name: 'third', require: ['second'], init: sinon.stub() };
|
||||
var plugins = [second, first, third];
|
||||
registerPlugins(server, plugins).catch(function (err) {
|
||||
expect(err).to.be.a(Error);
|
||||
expect(err.message).to.be('Circular dependency: second -> first -> third -> second');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
}); // end dependencies tests
|
||||
|
||||
});
|
88
src/server/status/__tests__/ServerStatus.js
Normal file
88
src/server/status/__tests__/ServerStatus.js
Normal file
|
@ -0,0 +1,88 @@
|
|||
var _ = require('lodash');
|
||||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
|
||||
var states = require('../states');
|
||||
var Status = require('../Status');
|
||||
var ServerStatus = require('../ServerStatus');
|
||||
|
||||
describe('ServerStatus class', function () {
|
||||
var server;
|
||||
var serverStatus;
|
||||
|
||||
beforeEach(function () {
|
||||
server = { expose: sinon.stub(), log: sinon.stub() };
|
||||
serverStatus = new ServerStatus(server);
|
||||
});
|
||||
|
||||
describe('#create(name)', function () {
|
||||
it('should create a new status by name', function () {
|
||||
var status = serverStatus.create('name');
|
||||
expect(status).to.be.a(Status);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#get(name)', function () {
|
||||
it('exposes plugins by name', function () {
|
||||
var status = serverStatus.create('name');
|
||||
expect(serverStatus.get('name')).to.be(status);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#getState(name)', function () {
|
||||
it('should expose the state of the plugin by name', function () {
|
||||
var status = serverStatus.create('name');
|
||||
status.green();
|
||||
expect(serverStatus.getState('name')).to.be('green');
|
||||
});
|
||||
});
|
||||
|
||||
describe('#overall()', function () {
|
||||
it('considers each status to produce a summary', function () {
|
||||
var status = serverStatus.create('name');
|
||||
|
||||
expect(serverStatus.overall().state).to.be('uninitialized');
|
||||
|
||||
var match = function (overall, state) {
|
||||
expect(overall).to.have.property('state', state.id);
|
||||
expect(overall).to.have.property('title', state.title);
|
||||
expect(overall).to.have.property('icon', state.icon);
|
||||
expect(overall).to.have.property('icon', state.icon);
|
||||
expect(state.nicknames).contain(overall.nickname);
|
||||
};
|
||||
|
||||
status.green();
|
||||
match(serverStatus.overall(), states.get('green'));
|
||||
|
||||
status.yellow();
|
||||
match(serverStatus.overall(), states.get('yellow'));
|
||||
|
||||
status.red();
|
||||
match(serverStatus.overall(), states.get('red'));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
describe('#toJSON()', function () {
|
||||
it('serializes to overall status and individuals', function () {
|
||||
var one = serverStatus.create('one');
|
||||
var two = serverStatus.create('two');
|
||||
var three = serverStatus.create('three');
|
||||
|
||||
one.green();
|
||||
two.yellow();
|
||||
three.red();
|
||||
|
||||
var obj = JSON.parse(JSON.stringify(serverStatus));
|
||||
expect(obj).to.have.property('overall');
|
||||
expect(obj.overall.state).to.eql(serverStatus.overall().state);
|
||||
expect(obj.statuses).to.have.length(3);
|
||||
|
||||
var outs = _.indexBy(obj.statuses, 'name');
|
||||
expect(outs.one).to.have.property('state', 'green');
|
||||
expect(outs.two).to.have.property('state', 'yellow');
|
||||
expect(outs.three).to.have.property('state', 'red');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
|
@ -1,38 +0,0 @@
|
|||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
var status = require('../../../../../src/server/lib/status');
|
||||
var Status = require('../../../../../src/server/lib/status/status');
|
||||
|
||||
describe('lib/status/index.js', function () {
|
||||
|
||||
var plugin, yellowSpy;
|
||||
beforeEach(function () {
|
||||
plugin = {
|
||||
name: 'test',
|
||||
server: { expose: sinon.stub(), log: sinon.stub() }
|
||||
};
|
||||
yellowSpy = sinon.spy(Status.prototype, 'yellow');
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
Status.prototype.yellow.restore();
|
||||
});
|
||||
|
||||
it('should create a new status for a plugin', function () {
|
||||
status.createStatus(plugin);
|
||||
expect(status.data).to.have.property('test');
|
||||
expect(status.data.test).to.eql(plugin.status);
|
||||
});
|
||||
|
||||
it('should attach a logger to the change status', function () {
|
||||
status.createStatus(plugin);
|
||||
plugin.status.green('Ready!');
|
||||
sinon.assert.calledOnce(plugin.server.log);
|
||||
});
|
||||
|
||||
it('should serialize the statuses when toJSON is called', function () {
|
||||
status.createStatus(plugin);
|
||||
expect(JSON.stringify(status)).to.eql(JSON.stringify(status.data));
|
||||
});
|
||||
|
||||
});
|
|
@ -1,29 +0,0 @@
|
|||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
var logStatusChange = require('../../../../../src/server/lib/status/log_status_change');
|
||||
|
||||
describe('lib/status/log_status_change', function () {
|
||||
|
||||
var plugin;
|
||||
var current = { state: 'yellow', message: 'Initialize' };
|
||||
var previous = { state: 'red', message: '' };
|
||||
|
||||
beforeEach(function () {
|
||||
plugin = { name: 'test', server: { log: sinon.stub() } };
|
||||
});
|
||||
|
||||
it('should call plugin.server.log', function () {
|
||||
var fn = logStatusChange(plugin);
|
||||
fn(current, previous);
|
||||
sinon.assert.calledOnce(plugin.server.log);
|
||||
});
|
||||
|
||||
it('should call plugin.server.log with plugin and error message', function () {
|
||||
var fn = logStatusChange(plugin);
|
||||
fn(current, previous);
|
||||
sinon.assert.calledOnce(plugin.server.log);
|
||||
expect(plugin.server.log.args[0][0]).to.be('plugin');
|
||||
expect(plugin.server.log.args[0][1]).to.be('[ test ] Change status from red to yellow - Initialize');
|
||||
});
|
||||
|
||||
});
|
|
@ -1,60 +1,96 @@
|
|||
var expect = require('expect.js');
|
||||
var sinon = require('sinon');
|
||||
var Status = require('../../../../../src/server/lib/status/status');
|
||||
var Status = require('../Status');
|
||||
var ServerStatus = require('../ServerStatus');
|
||||
|
||||
describe('lib/status/status.js', function () {
|
||||
describe('Status class', function () {
|
||||
|
||||
it('should have a undefined state when initialized', function () {
|
||||
var obj = new Status('test');
|
||||
expect(obj).to.have.property('state');
|
||||
expect(obj.statue).to.be(undefined);
|
||||
var server;
|
||||
var serverStatus;
|
||||
|
||||
beforeEach(function () {
|
||||
server = { expose: sinon.stub(), log: sinon.stub() };
|
||||
serverStatus = new ServerStatus(server);
|
||||
});
|
||||
|
||||
it('should only trigger the change listner when something changes', function () {
|
||||
var obj = new Status('test');
|
||||
it('should have an "uninitialized" state initially', function () {
|
||||
expect(serverStatus.create('test')).to.have.property('state', 'uninitialized');
|
||||
});
|
||||
|
||||
it('emits change when the status is set', function (done) {
|
||||
var status = serverStatus.create('test');
|
||||
|
||||
status.once('change', function (prev, prevMsg) {
|
||||
expect(status.state).to.be('green');
|
||||
expect(status.message).to.be('GREEN');
|
||||
expect(prev).to.be('uninitialized');
|
||||
|
||||
status.once('change', function (prev, prevMsg) {
|
||||
expect(status.state).to.be('red');
|
||||
expect(status.message).to.be('RED');
|
||||
expect(prev).to.be('green');
|
||||
expect(prevMsg).to.be('GREEN');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
status.red('RED');
|
||||
});
|
||||
|
||||
status.green('GREEN');
|
||||
});
|
||||
|
||||
it('should only trigger the change listener when something changes', function () {
|
||||
var status = serverStatus.create('test');
|
||||
var stub = sinon.stub();
|
||||
obj.on('change', stub);
|
||||
obj.green('Ready');
|
||||
obj.green('Ready');
|
||||
obj.red('Not Ready');
|
||||
status.on('change', stub);
|
||||
status.green('Ready');
|
||||
status.green('Ready');
|
||||
status.red('Not Ready');
|
||||
sinon.assert.calledTwice(stub);
|
||||
});
|
||||
|
||||
it('should create a JSON representation of the status', function () {
|
||||
var obj = new Status('test');
|
||||
obj.green('Ready');
|
||||
expect(obj.toJSON()).to.eql({ state: 'green', message: 'Ready' });
|
||||
var status = serverStatus.create('test');
|
||||
status.green('Ready');
|
||||
|
||||
var json = status.toJSON();
|
||||
expect(json.state).to.eql('green');
|
||||
expect(json.message).to.eql('Ready');
|
||||
});
|
||||
|
||||
function testState(color) {
|
||||
it('should change the state to ' + color + ' when #' + color + '() is called', function () {
|
||||
var obj = new Status('test');
|
||||
it(`should change the state to ${color} when #${color}() is called`, function () {
|
||||
var status = serverStatus.create('test');
|
||||
var message = 'testing ' + color;
|
||||
obj[color](message);
|
||||
expect(obj).to.have.property('state', color);
|
||||
expect(obj).to.have.property('message', message);
|
||||
status[color](message);
|
||||
expect(status).to.have.property('state', color);
|
||||
expect(status).to.have.property('message', message);
|
||||
});
|
||||
|
||||
it('should trigger the "change" listner when #' + color + '() is called', function (done) {
|
||||
var obj = new Status('test');
|
||||
it(`should trigger the "change" listner when #${color}() is called`, function (done) {
|
||||
var status = serverStatus.create('test');
|
||||
var message = 'testing ' + color;
|
||||
obj.on('change', function (current, previous) {
|
||||
expect(current).to.eql({ state: color, message: message });
|
||||
expect(previous).to.eql({ state: undefined, message: 'uninitialized' });
|
||||
status.on('change', function (prev, prevMsg) {
|
||||
expect(status.state).to.be(color);
|
||||
expect(status.message).to.be(message);
|
||||
|
||||
expect(prev).to.be('uninitialized');
|
||||
expect(prevMsg).to.be('uninitialized');
|
||||
done();
|
||||
});
|
||||
obj[color](message);
|
||||
status[color](message);
|
||||
});
|
||||
|
||||
it('should trigger the "' + color + '" listner when #' + color + '() is called', function (done) {
|
||||
var obj = new Status('test');
|
||||
it(`should trigger the "${color}" listner when #${color}() is called`, function (done) {
|
||||
var status = serverStatus.create('test');
|
||||
var message = 'testing ' + color;
|
||||
obj.on(color, function (msg, prev) {
|
||||
expect(msg).to.be(message);
|
||||
expect(prev).to.eql({ state: undefined, message: 'uninitialized' });
|
||||
status.on(color, function (prev, prevMsg) {
|
||||
expect(status.state).to.be(color);
|
||||
expect(status.message).to.be(message);
|
||||
done();
|
||||
});
|
||||
obj[color](message);
|
||||
status[color](message);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,8 @@ class UiApp {
|
|||
this.icon = this.spec.icon;
|
||||
this.hidden = this.spec.hidden;
|
||||
this.autoloadOverrides = this.spec.autoload;
|
||||
this.templateName = this.spec.templateName || 'uiApp';
|
||||
this.requireOptimizeGreen = this.spec.requireOptimizeGreen !== false;
|
||||
this.getModules = _.once(this.getModules);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,23 +1,24 @@
|
|||
module.exports = function (kbnServer, server, config) {
|
||||
var _ = require('lodash');
|
||||
|
||||
server.decorate('reply', 'renderApp', function (app, view) {
|
||||
server.decorate('reply', 'renderApp', function (app) {
|
||||
|
||||
var optimizeStatus = kbnServer.status.get('optimize');
|
||||
switch (optimizeStatus && optimizeStatus.state) {
|
||||
case 'yellow':
|
||||
return this(`
|
||||
<html>
|
||||
<head><meta http-equiv="refresh" content="1"></head>
|
||||
<body>${optimizeStatus.message}</body>
|
||||
</html>
|
||||
`).code(503);
|
||||
|
||||
case 'red':
|
||||
return this(`
|
||||
<html><body>${optimizeStatus.message}</body></html>
|
||||
`).code(500);
|
||||
if (app.requireOptimizeGreen) {
|
||||
var optimizeStatus = kbnServer.status.get('optimize');
|
||||
switch (optimizeStatus && optimizeStatus.state) {
|
||||
case 'yellow':
|
||||
return this(`
|
||||
<html>
|
||||
<head><meta http-equiv="refresh" content="1"></head>
|
||||
<body>${optimizeStatus.message}</body>
|
||||
</html>
|
||||
`).code(503);
|
||||
|
||||
case 'red':
|
||||
return this(`
|
||||
<html><body>${optimizeStatus.message}</body></html>
|
||||
`).code(500);
|
||||
}
|
||||
}
|
||||
|
||||
var payload = {
|
||||
|
@ -31,7 +32,7 @@ module.exports = function (kbnServer, server, config) {
|
|||
esShardTimeout: config.get('elasticsearch.shardTimeout')
|
||||
};
|
||||
|
||||
return this.view(view || 'uiApp', {
|
||||
return this.view(app.templateName, {
|
||||
app: app,
|
||||
cacheBust: payload.cacheBust,
|
||||
kibanaPayload: payload
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
var join = require('path').join;
|
||||
var existsSync = require('fs').existsSync;
|
||||
|
||||
var packageDir;
|
||||
|
||||
function packagePath() {
|
||||
return join(packageDir, 'package.json');
|
||||
}
|
||||
|
||||
function findSync() {
|
||||
if (packageDir) return packagePath();
|
||||
|
||||
packageDir = __dirname;
|
||||
while (!existsSync(packagePath())) {
|
||||
var prev = packageDir;
|
||||
packageDir = join(packageDir, '..');
|
||||
|
||||
if (prev === packageDir) {
|
||||
// if going up a directory doesn't work, we
|
||||
// are already at the root of the filesystem
|
||||
|
||||
packageDir = null;
|
||||
throw new Error('unable to find package.json');
|
||||
}
|
||||
}
|
||||
|
||||
return packagePath();
|
||||
}
|
||||
|
||||
function getSync() {
|
||||
return require(findSync());
|
||||
}
|
||||
|
||||
exports.getSync = getSync;
|
||||
exports.findSync = findSync;
|
|
@ -2,6 +2,6 @@ var _ = require('lodash');
|
|||
var dirname = require('path').dirname;
|
||||
var join = require('path').join;
|
||||
var normalize = require('path').normalize;
|
||||
var root = dirname(require('./closestPackageJson').findSync());
|
||||
var root = require('./packageJson').__dirname;
|
||||
|
||||
module.exports = _.flow(_.partial(join, root), normalize);
|
||||
|
|
22
src/utils/packageJson.js
Normal file
22
src/utils/packageJson.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
var join = require('path').join;
|
||||
var existsSync = require('fs').existsSync;
|
||||
|
||||
var packageDir;
|
||||
var packagePath;
|
||||
|
||||
while (!packagePath || !existsSync(packagePath)) {
|
||||
var prev = packageDir;
|
||||
packageDir = prev ? join(prev, '..') : __dirname;
|
||||
packagePath = join(packageDir, 'package.json');
|
||||
|
||||
if (prev === packageDir) {
|
||||
// if going up a directory doesn't work, we
|
||||
// are already at the root of the filesystem
|
||||
throw new Error('unable to find package.json');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module.exports = require(packagePath);
|
||||
module.exports.__filename = packagePath;
|
||||
module.exports.__dirname = packageDir;
|
|
@ -1,22 +1,21 @@
|
|||
module.exports = function (grunt) {
|
||||
return {
|
||||
options: {
|
||||
log: true,
|
||||
logErrors: true,
|
||||
run: false,
|
||||
page: {
|
||||
settings: {
|
||||
viewportSize: {
|
||||
width: 2400,
|
||||
height: 1250
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
unit: {
|
||||
options: {
|
||||
log: true,
|
||||
logErrors: true,
|
||||
run: false,
|
||||
timeout: 120000,
|
||||
page: {
|
||||
settings: {
|
||||
viewportSize: {
|
||||
width: 2400,
|
||||
height: 1250
|
||||
}
|
||||
}
|
||||
},
|
||||
urls: [
|
||||
'http://localhost:' + (grunt.option('port') || '5601') + '/test/unit/'
|
||||
'http://localhost:' + (grunt.option('port') || '5601') + '/tests'
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ module.exports = function (grunt) {
|
|||
failOnError: false
|
||||
},
|
||||
cmd: './bin/kibana',
|
||||
args: ['--logging.json=false']
|
||||
args: ['--dev', '--quiet', '--logging.json=false']
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -4,5 +4,11 @@ module.exports = {
|
|||
ignoreLeaks: false,
|
||||
reporter: 'dot'
|
||||
},
|
||||
all: { src: ['<%= root %>/test/unit/{server,tasks}/**/*.js'] }
|
||||
all: {
|
||||
src: [
|
||||
'src/**/__tests__/**/*.js',
|
||||
'!src/**/public/**',
|
||||
'!src/ui/**'
|
||||
]
|
||||
}
|
||||
};
|
||||
|
|
|
@ -11,8 +11,6 @@ module.exports = function (grunt) {
|
|||
'jshint:source',
|
||||
'jscs:source',
|
||||
'maybeStartKibana',
|
||||
'jade',
|
||||
'less:build',
|
||||
'simplemocha:all',
|
||||
'mocha:unit'
|
||||
];
|
||||
|
|
2
test.sh
Executable file
2
test.sh
Executable file
|
@ -0,0 +1,2 @@
|
|||
FILES=$(glob-cli src/**/__tests__/**/*.js '!src/**/public/**' '!src/ui/**')
|
||||
mocha --bail --reporter spec --timeout 10000 $FILES
|
Loading…
Add table
Add a link
Reference in a new issue