Intern-based unit tests
This commit adds unit-tests runner for UI and 1 test suite for the expression parser. It also makes --webui flag for run_tests.sh run all the UI tests: lint checks, unit tests, functional tests. Change-Id: I6176dc01cdd6d2bcf7a99185e92cc498c7b2b899
This commit is contained in:
parent
0d9f7e395e
commit
54edb12673
|
@ -24,6 +24,7 @@ lock
|
||||||
node_modules
|
node_modules
|
||||||
bower_components
|
bower_components
|
||||||
nailgun/static/vendor/bower
|
nailgun/static/vendor/bower
|
||||||
|
nailgun/static/tests/bower
|
||||||
|
|
||||||
*.egg
|
*.egg
|
||||||
.testrepository
|
.testrepository
|
||||||
|
|
|
@ -95,7 +95,7 @@ Setup for Nailgun Unit Tests
|
||||||
#. Run the Nailgun backend unit tests::
|
#. Run the Nailgun backend unit tests::
|
||||||
|
|
||||||
sudo apt-get install puppet-common #install missing package required by tasklib tests
|
sudo apt-get install puppet-common #install missing package required by tasklib tests
|
||||||
./run_tests.sh --no-lint-ui --no-webui
|
./run_tests.sh --no-webui
|
||||||
|
|
||||||
#. Run the Nailgun flake8 test::
|
#. Run the Nailgun flake8 test::
|
||||||
|
|
||||||
|
@ -145,6 +145,9 @@ For example:
|
||||||
Setup for Web UI Tests
|
Setup for Web UI Tests
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
#. UI tests use Selenium server, so you need to install Java Runtime
|
||||||
|
Environment (JRE) 1.6 or newer version.
|
||||||
|
|
||||||
#. Install NodeJS and JS dependencies::
|
#. Install NodeJS and JS dependencies::
|
||||||
|
|
||||||
sudo apt-get remove nodejs nodejs-legacy
|
sudo apt-get remove nodejs nodejs-legacy
|
||||||
|
@ -161,7 +164,6 @@ Setup for Web UI Tests
|
||||||
PostgreSQL)::
|
PostgreSQL)::
|
||||||
|
|
||||||
cd fuel-web
|
cd fuel-web
|
||||||
./run_tests.sh --lint-ui
|
|
||||||
./run_tests.sh --webui
|
./run_tests.sh --webui
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -49,9 +49,8 @@ implement this feature, these steps were followed:
|
||||||
#. Test your Nailgun changes::
|
#. Test your Nailgun changes::
|
||||||
|
|
||||||
cd fuel-web
|
cd fuel-web
|
||||||
./run_tests.sh --no-lint-ui --no-webui
|
./run_tests.sh --no-webui
|
||||||
./run_tests.sh --flake8
|
./run_tests.sh --flake8
|
||||||
./run_tests.sh --lint-ui
|
|
||||||
./run_tests.sh --webui
|
./run_tests.sh --webui
|
||||||
|
|
||||||
#. You should also test Nailgun in fake UI mode by following
|
#. You should also test Nailgun in fake UI mode by following
|
||||||
|
|
|
@ -22,6 +22,9 @@
|
||||||
"bootstrap": "~3.3.4",
|
"bootstrap": "~3.3.4",
|
||||||
"open-sans-fontface": "~1.4.0"
|
"open-sans-fontface": "~1.4.0"
|
||||||
},
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"es5-shim": "4.1.0"
|
||||||
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"jquery": {
|
"jquery": {
|
||||||
"main": "jquery.js"
|
"main": "jquery.js"
|
||||||
|
|
|
@ -20,12 +20,15 @@ var argv = require('minimist')(process.argv.slice(2));
|
||||||
|
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
|
var glob = require('glob');
|
||||||
var spawn = require('child_process').spawn;
|
var spawn = require('child_process').spawn;
|
||||||
var rimraf = require('rimraf');
|
var rimraf = require('rimraf');
|
||||||
|
var es = require('event-stream');
|
||||||
var _ = require('lodash-node');
|
var _ = require('lodash-node');
|
||||||
|
|
||||||
var gulp = require('gulp');
|
var gulp = require('gulp');
|
||||||
var gutil = require('gulp-util');
|
var gutil = require('gulp-util');
|
||||||
|
var shell = require('gulp-shell');
|
||||||
var runSequence = require('run-sequence');
|
var runSequence = require('run-sequence');
|
||||||
|
|
||||||
var bower = require('gulp-bower');
|
var bower = require('gulp-bower');
|
||||||
|
@ -101,23 +104,106 @@ gulp.task('i18n:validate', function() {
|
||||||
gulp.task('bower:fetch', bower);
|
gulp.task('bower:fetch', bower);
|
||||||
|
|
||||||
gulp.task('bower:copy-main', function() {
|
gulp.task('bower:copy-main', function() {
|
||||||
var bowerDir = 'static/vendor/bower/';
|
var dirs = [
|
||||||
rimraf.sync(bowerDir);
|
{dirName: 'static/vendor/bower', includeDev: 'inclusive'},
|
||||||
return gulp.src(mainBowerFiles({checkExistence: true}), {base: 'bower_components'})
|
{dirName: 'static/tests/bower', includeDev: 'exclusive'}
|
||||||
.pipe(gulp.dest(bowerDir));
|
];
|
||||||
|
var streams = dirs.map(function(dir) {
|
||||||
|
rimraf.sync(dir.dirName);
|
||||||
|
return gulp.src(mainBowerFiles({checkExistence: true, includeDev: dir.includeDev}), {base: 'bower_components'})
|
||||||
|
.pipe(gulp.dest(dir.dirName));
|
||||||
|
});
|
||||||
|
return es.merge(streams);
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('bower', function(cb) {
|
gulp.task('bower', function(cb) {
|
||||||
runSequence('bower:fetch', 'bower:copy-main', cb);
|
runSequence('bower:fetch', 'bower:copy-main', cb);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var selenium = require('selenium-standalone');
|
||||||
|
var seleniumProcess = null;
|
||||||
|
function shutdownSelenium() {
|
||||||
|
if (seleniumProcess) {
|
||||||
|
seleniumProcess.kill();
|
||||||
|
seleniumProcess = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gulp.task('selenium:fetch', function(cb) {
|
||||||
|
var defaultVersion = '2.45.0';
|
||||||
|
selenium.install({version: argv.version || defaultVersion}, cb);
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task('selenium', ['selenium:fetch'], function(cb) {
|
||||||
|
var port = process.env.SELENIUM_SERVER_PORT || 4444;
|
||||||
|
selenium.start(
|
||||||
|
{seleniumArgs: ['--port', port], spawnOptions: {stdio: 'pipe'}},
|
||||||
|
function(err, child) {
|
||||||
|
if (err) throw err;
|
||||||
|
child.on('exit', function() {
|
||||||
|
if (seleniumProcess) {
|
||||||
|
gutil.log(gutil.colors.yellow('Selenium process died unexpectedly. Probably port', port, 'is already in use.'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
['exit', 'uncaughtException', 'SIGTERM', 'SIGINT'].forEach(function(event) {
|
||||||
|
process.on(event, shutdownSelenium);
|
||||||
|
});
|
||||||
|
seleniumProcess = child;
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
function runIntern(params) {
|
||||||
|
return function() {
|
||||||
|
var baseDir = 'static';
|
||||||
|
var runner = './node_modules/.bin/intern-runner';
|
||||||
|
var browser = params.browser || argv.browser || 'phantomjs';
|
||||||
|
var options = [['config', 'tests/intern-' + browser + '.js']];
|
||||||
|
var suiteOptions = [];
|
||||||
|
['suites', 'functionalSuites'].forEach(function(suiteType) {
|
||||||
|
if (params[suiteType]) {
|
||||||
|
var suiteFiles = glob.sync(path.relative(baseDir, params[suiteType]), {cwd: baseDir});
|
||||||
|
suiteOptions = suiteOptions.concat(suiteFiles.map(function(suiteFile) {
|
||||||
|
return [suiteType, suiteFile.replace(/\.js$/, '')];
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!suiteOptions.length) {
|
||||||
|
throw new Error('No matching suites');
|
||||||
|
}
|
||||||
|
options = options.concat(suiteOptions);
|
||||||
|
var command = [path.relative(baseDir, runner)].concat(options.map(function(o) {
|
||||||
|
return o.join('=');
|
||||||
|
})).join(' ');
|
||||||
|
gutil.log('Executing', command);
|
||||||
|
return shell.task(command, {cwd: baseDir})();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
gulp.task('intern:unit', runIntern({suites: argv.suites || 'static/tests/unit/**/*.js'}));
|
||||||
|
|
||||||
|
gulp.task('unit-tests', function(cb) {
|
||||||
|
runSequence('selenium', 'intern:unit', function(err) {
|
||||||
|
shutdownSelenium();
|
||||||
|
cb(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
gulp.task('jison', function() {
|
gulp.task('jison', function() {
|
||||||
return gulp.src('static/expression/parser.jison')
|
return gulp.src('static/expression/parser.jison')
|
||||||
.pipe(jison({moduleType: 'js'}))
|
.pipe(jison({moduleType: 'js'}))
|
||||||
.pipe(gulp.dest('static/expression/'));
|
.pipe(gulp.dest('static/expression/'));
|
||||||
});
|
});
|
||||||
|
|
||||||
var jsFiles = ['static/**/*.js', 'static/**/*.jsx', '!static/vendor/**', '!static/expression/parser.js'];
|
var jsFiles = [
|
||||||
|
'static/**/*.js',
|
||||||
|
'static/**/*.jsx',
|
||||||
|
'!static/vendor/**',
|
||||||
|
'!static/expression/parser.js',
|
||||||
|
'static/tests/**/*.js',
|
||||||
|
'!static/tests/bower/**/*.js'
|
||||||
|
];
|
||||||
var styleFiles = 'static/**/*.less';
|
var styleFiles = 'static/**/*.less';
|
||||||
|
|
||||||
gulp.task('jscs', function() {
|
gulp.task('jscs', function() {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -9,6 +9,8 @@
|
||||||
"bower": "~1.3.12",
|
"bower": "~1.3.12",
|
||||||
"casperjs": "~1.1.0-beta3",
|
"casperjs": "~1.1.0-beta3",
|
||||||
"esprima-fb": "13001.1001.0-dev-harmony-fb",
|
"esprima-fb": "13001.1001.0-dev-harmony-fb",
|
||||||
|
"event-stream": "~3.3.1",
|
||||||
|
"glob": "~5.0.5",
|
||||||
"gulp": "~3.8.11",
|
"gulp": "~3.8.11",
|
||||||
"gulp-autoprefixer": "~2.1.0",
|
"gulp-autoprefixer": "~2.1.0",
|
||||||
"gulp-bower": "~0.0.10",
|
"gulp-bower": "~0.0.10",
|
||||||
|
@ -21,14 +23,18 @@
|
||||||
"gulp-lintspaces": "~0.2.3",
|
"gulp-lintspaces": "~0.2.3",
|
||||||
"gulp-react": "~3.0.1",
|
"gulp-react": "~3.0.1",
|
||||||
"gulp-replace": "~0.5.3",
|
"gulp-replace": "~0.5.3",
|
||||||
|
"gulp-shell": "~0.4.1",
|
||||||
"gulp-util": "~3.0.4",
|
"gulp-util": "~3.0.4",
|
||||||
|
"intern": "~2.2.2",
|
||||||
"jshint-stylish": "~1.0.1",
|
"jshint-stylish": "~1.0.1",
|
||||||
"lodash-node": "~2.4.1",
|
"lodash-node": "~2.4.1",
|
||||||
"main-bower-files": "~2.6.2",
|
"main-bower-files": "~2.6.2",
|
||||||
"minimist": "~1.1.1",
|
"minimist": "~1.1.1",
|
||||||
|
"phantomjs": "~1.9.16",
|
||||||
"requirejs": "~2.1.16",
|
"requirejs": "~2.1.16",
|
||||||
"rimraf": "~2.2.8",
|
"rimraf": "~2.2.8",
|
||||||
"run-sequence": "~1.0.2",
|
"run-sequence": "~1.0.2",
|
||||||
|
"selenium-standalone": "~4.4.0",
|
||||||
"uglify-js": "~2.4.16"
|
"uglify-js": "~2.4.16"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2015 Mirantis, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License. You may obtain
|
||||||
|
* a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
**/
|
||||||
|
|
||||||
|
define(['./intern'], function(config) {
|
||||||
|
'use strict';
|
||||||
|
config.environments = [{browserName: 'chrome'}];
|
||||||
|
return config;
|
||||||
|
});
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2015 Mirantis, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License. You may obtain
|
||||||
|
* a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
**/
|
||||||
|
|
||||||
|
define(['./intern'], function(config) {
|
||||||
|
'use strict';
|
||||||
|
config.environments = [{browserName: 'firefox'}];
|
||||||
|
return config;
|
||||||
|
});
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2015 Mirantis, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License. You may obtain
|
||||||
|
* a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
**/
|
||||||
|
|
||||||
|
define(['./intern'], function(config) {
|
||||||
|
'use strict';
|
||||||
|
config.environments = [{
|
||||||
|
browserName: 'phantomjs',
|
||||||
|
'phantomjs.binary.path': 'node_modules/phantomjs/lib/phantom/bin/phantomjs'
|
||||||
|
}];
|
||||||
|
config.loader.shim.react = {
|
||||||
|
deps: ['tests/bower/es5-shim/es5-shim']
|
||||||
|
};
|
||||||
|
return config;
|
||||||
|
});
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2015 Mirantis, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License. You may obtain
|
||||||
|
* a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
**/
|
||||||
|
|
||||||
|
define(['config'], function(config) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
config.baseUrl = '';
|
||||||
|
config.waitSeconds = 7;
|
||||||
|
|
||||||
|
return {
|
||||||
|
proxyPort: 9057,
|
||||||
|
proxyUrl: 'http://localhost:9057/',
|
||||||
|
capabilities: {
|
||||||
|
'selenium-version': '2.45.0'
|
||||||
|
},
|
||||||
|
maxConcurrency: 1,
|
||||||
|
useLoader: {
|
||||||
|
'host-node': 'requirejs',
|
||||||
|
'host-browser': '/vendor/bower/requirejs/require.js'
|
||||||
|
},
|
||||||
|
// A regular expression matching URLs to files that should not be included in code coverage analysis
|
||||||
|
excludeInstrumentation: /^/,
|
||||||
|
loader: config
|
||||||
|
};
|
||||||
|
});
|
|
@ -0,0 +1,82 @@
|
||||||
|
define([
|
||||||
|
'intern!object',
|
||||||
|
'intern/chai!assert',
|
||||||
|
'underscore',
|
||||||
|
'models',
|
||||||
|
'expression',
|
||||||
|
'expression/objects'
|
||||||
|
], function(registerSuite, assert, _, models, Expression, expressionObjects) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
registerSuite({
|
||||||
|
'Expression parser test': function() {
|
||||||
|
var hypervisor = 'kvm';
|
||||||
|
var testModels = {
|
||||||
|
cluster: new models.Cluster({mode: 'ha_compact'}),
|
||||||
|
settings: new models.Settings({common: {libvirt_type: {value: hypervisor}}}),
|
||||||
|
release: new models.Release({roles: ['controller', 'compute']})
|
||||||
|
};
|
||||||
|
var testCases = [
|
||||||
|
// test scalars
|
||||||
|
['true', true],
|
||||||
|
['false', false],
|
||||||
|
['123', 123],
|
||||||
|
['"123"', '123'],
|
||||||
|
["'123'", '123'],
|
||||||
|
// test null
|
||||||
|
['null', null],
|
||||||
|
['null == false', false],
|
||||||
|
['null == true', false],
|
||||||
|
['null == null', true],
|
||||||
|
// test boolean operators
|
||||||
|
['true or false', true],
|
||||||
|
['true and false', false],
|
||||||
|
['not true', false],
|
||||||
|
// test precedence
|
||||||
|
['true or true and false or false', true],
|
||||||
|
['true == true and false == false', true],
|
||||||
|
// test comparison
|
||||||
|
['123 == 123', true],
|
||||||
|
['123 == 321', false],
|
||||||
|
['123 != 321', true],
|
||||||
|
['123 != "123"', true],
|
||||||
|
// test grouping
|
||||||
|
['(true or true) and not (false or false)', true],
|
||||||
|
// test errors
|
||||||
|
['(true', Error],
|
||||||
|
['false and', Error],
|
||||||
|
['== 123', Error],
|
||||||
|
['#^@$*()#@!', Error],
|
||||||
|
// test modelpaths
|
||||||
|
['cluster:mode', 'ha_compact'],
|
||||||
|
['cluster:mode == "ha_compact"', true],
|
||||||
|
['cluster:mode != "multinode"', true],
|
||||||
|
['"controller" in release:roles', true],
|
||||||
|
['"unknown-role" in release:roles', false],
|
||||||
|
['settings:common.libvirt_type.value', hypervisor],
|
||||||
|
['settings:common.libvirt_type.value == "' + hypervisor + '"', true],
|
||||||
|
['cluster:mode == "ha_compact" and not (settings:common.libvirt_type.value != "' + hypervisor + '")', true],
|
||||||
|
// test nonexistent keys
|
||||||
|
['cluster:nonexistentkey', Error],
|
||||||
|
// test evaluation flow
|
||||||
|
['cluster:mode != "ha_compact" and cluster:nonexistentkey == 1', false],
|
||||||
|
['cluster:mode == "ha_compact" and cluster:nonexistentkey == 1', Error]
|
||||||
|
];
|
||||||
|
|
||||||
|
function evaluate(expression) {
|
||||||
|
var result = Expression(expression, testModels).evaluate();
|
||||||
|
return result instanceof expressionObjects.ModelPath ? result.get() : result;
|
||||||
|
}
|
||||||
|
|
||||||
|
_.each(testCases, function(testCase) {
|
||||||
|
var expression = testCase[0];
|
||||||
|
var result = testCase[1];
|
||||||
|
if (result === Error) {
|
||||||
|
assert.throws(evaluate.bind(null, expression), Error, '', expression + ' throws an error');
|
||||||
|
} else {
|
||||||
|
assert.strictEqual(evaluate(expression), result, expression + ' evaluates correctly');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
89
run_tests.sh
89
run_tests.sh
|
@ -25,8 +25,6 @@ function usage {
|
||||||
echo " -h, --help Print this usage message"
|
echo " -h, --help Print this usage message"
|
||||||
echo " -k, --tasklib Run tasklib unit and functional tests"
|
echo " -k, --tasklib Run tasklib unit and functional tests"
|
||||||
echo " -K, --no-tasklib Don't run tasklib unit and functional tests"
|
echo " -K, --no-tasklib Don't run tasklib unit and functional tests"
|
||||||
echo " -l, --lint-ui Run UI linting tasks"
|
|
||||||
echo " -L, --no-lint-ui Don't run UI linting tasks"
|
|
||||||
echo " -n, --nailgun Run NAILGUN unit/integration tests"
|
echo " -n, --nailgun Run NAILGUN unit/integration tests"
|
||||||
echo " -N, --no-nailgun Don't run NAILGUN unit/integration tests"
|
echo " -N, --no-nailgun Don't run NAILGUN unit/integration tests"
|
||||||
echo " -x, --performance Run NAILGUN performance tests"
|
echo " -x, --performance Run NAILGUN performance tests"
|
||||||
|
@ -37,8 +35,14 @@ function usage {
|
||||||
echo " -t, --tests Run a given test files"
|
echo " -t, --tests Run a given test files"
|
||||||
echo " -u, --upgrade Run tests for UPGRADE system"
|
echo " -u, --upgrade Run tests for UPGRADE system"
|
||||||
echo " -U, --no-upgrade Don't run tests for UPGRADE system"
|
echo " -U, --no-upgrade Don't run tests for UPGRADE system"
|
||||||
echo " -w, --webui Run WEB-UI tests"
|
echo " -w, --webui Run all UI tests"
|
||||||
echo " -W, --no-webui Don't run WEB-UI tests"
|
echo " -W, --no-webui Don't run all UI tests"
|
||||||
|
echo " --ui-lint Run UI linting tasks"
|
||||||
|
echo " --no-ui-lint Don't run UI linting tasks"
|
||||||
|
echo " --ui-unit Run UI unit tests"
|
||||||
|
echo " --no-ui-unit Don't run UI unit tests"
|
||||||
|
echo " --ui-func Run UI functional tests"
|
||||||
|
echo " --no-ui-func Don't run UI functional tests"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Note: with no options specified, the script will try to run all available"
|
echo "Note: with no options specified, the script will try to run all available"
|
||||||
echo " tests with all available checks."
|
echo " tests with all available checks."
|
||||||
|
@ -57,16 +61,20 @@ function process_options {
|
||||||
-x|--performance) performance_tests=1;;
|
-x|--performance) performance_tests=1;;
|
||||||
-k|--tasklib) tasklib_tests=1;;
|
-k|--tasklib) tasklib_tests=1;;
|
||||||
-K|--no-tasklib) no_tasklib_tests=1;;
|
-K|--no-tasklib) no_tasklib_tests=1;;
|
||||||
-w|--webui) webui_tests=1;;
|
|
||||||
-W|--no-webui) no_webui_tests=1;;
|
|
||||||
-u|--upgrade) upgrade_system=1;;
|
-u|--upgrade) upgrade_system=1;;
|
||||||
-U|--no-upgrade) no_upgrade_system=1;;
|
-U|--no-upgrade) no_upgrade_system=1;;
|
||||||
-s|--shotgun) shotgun_tests=1;;
|
-s|--shotgun) shotgun_tests=1;;
|
||||||
-S|--no-shotgun) no_shotgun_tests=1;;
|
-S|--no-shotgun) no_shotgun_tests=1;;
|
||||||
-p|--flake8) flake8_checks=1;;
|
-p|--flake8) flake8_checks=1;;
|
||||||
-P|--no-flake8) no_flake8_checks=1;;
|
-P|--no-flake8) no_flake8_checks=1;;
|
||||||
-l|--lint-ui) lint_ui_checks=1;;
|
-w|--webui) ui_lint_checks=1; ui_unit_tests=1; ui_func_tests=1;;
|
||||||
-L|--no-lint-ui) no_lint_ui_checks=1;;
|
-W|--no-webui) no_ui_lint_checks=1; no_ui_unit_tests=1; no_ui_func_tests=1;;
|
||||||
|
--ui-lint) ui_lint_checks=1;;
|
||||||
|
--no-ui-lint) no_ui_lint_checks=1;;
|
||||||
|
--ui-unit) ui_unit_tests=1;;
|
||||||
|
--no-ui-unit) no_ui_unit_tests=1;;
|
||||||
|
--ui-func) ui_func_tests=1;;
|
||||||
|
--no-ui-func) no_ui_func_tests=1;;
|
||||||
-t|--tests) certain_tests=1;;
|
-t|--tests) certain_tests=1;;
|
||||||
-*) testropts="$testropts $arg";;
|
-*) testropts="$testropts $arg";;
|
||||||
*) testrargs="$testrargs $arg"
|
*) testrargs="$testrargs $arg"
|
||||||
|
@ -109,16 +117,18 @@ no_agent_tests=0
|
||||||
nailgun_tests=0
|
nailgun_tests=0
|
||||||
no_nailgun_tests=0
|
no_nailgun_tests=0
|
||||||
performance_tests=0
|
performance_tests=0
|
||||||
webui_tests=0
|
|
||||||
no_webui_tests=0
|
|
||||||
upgrade_system=0
|
upgrade_system=0
|
||||||
no_upgrade_system=0
|
no_upgrade_system=0
|
||||||
shotgun_tests=0
|
shotgun_tests=0
|
||||||
no_shotgun_tests=0
|
no_shotgun_tests=0
|
||||||
flake8_checks=0
|
flake8_checks=0
|
||||||
no_flake8_checks=0
|
no_flake8_checks=0
|
||||||
lint_ui_checks=0
|
ui_lint_checks=0
|
||||||
no_lint_ui_checks=0
|
no_ui_lint_checks=0
|
||||||
|
ui_unit_tests=0
|
||||||
|
no_ui_unit_tests=0
|
||||||
|
ui_func_tests=0
|
||||||
|
no_ui_func_tests=0
|
||||||
certain_tests=0
|
certain_tests=0
|
||||||
tasklib_tests=0
|
tasklib_tests=0
|
||||||
no_tasklib_tests=0
|
no_tasklib_tests=0
|
||||||
|
@ -150,20 +160,22 @@ function run_tests {
|
||||||
$nailgun_tests -eq 0 && \
|
$nailgun_tests -eq 0 && \
|
||||||
$performance_tests -eq 0 && \
|
$performance_tests -eq 0 && \
|
||||||
$tasklib_tests -eq 0 && \
|
$tasklib_tests -eq 0 && \
|
||||||
$webui_tests -eq 0 && \
|
$ui_lint_checks -eq 0 && \
|
||||||
|
$ui_unit_tests -eq 0 && \
|
||||||
|
$ui_func_tests -eq 0 && \
|
||||||
$upgrade_system -eq 0 && \
|
$upgrade_system -eq 0 && \
|
||||||
$shotgun_tests -eq 0 && \
|
$shotgun_tests -eq 0 && \
|
||||||
$flake8_checks -eq 0 && \
|
$flake8_checks -eq 0 ]]; then
|
||||||
$lint_ui_checks -eq 0 ]]; then
|
|
||||||
|
|
||||||
if [ $no_agent_tests -ne 1 ]; then agent_tests=1; fi
|
if [ $no_agent_tests -ne 1 ]; then agent_tests=1; fi
|
||||||
if [ $no_nailgun_tests -ne 1 ]; then nailgun_tests=1; fi
|
if [ $no_nailgun_tests -ne 1 ]; then nailgun_tests=1; fi
|
||||||
if [ $no_tasklib_tests -ne 1 ]; then tasklib_tests=1; fi
|
if [ $no_tasklib_tests -ne 1 ]; then tasklib_tests=1; fi
|
||||||
if [ $no_webui_tests -ne 1 ]; then webui_tests=1; fi
|
if [ $no_ui_lint_checks -ne 1 ]; then ui_lint_checks=1; fi
|
||||||
|
if [ $no_ui_unit_tests -ne 1 ]; then ui_unit_tests=1; fi
|
||||||
|
if [ $no_ui_func_tests -ne 1 ]; then ui_func_tests=1; fi
|
||||||
if [ $no_upgrade_system -ne 1 ]; then upgrade_system=1; fi
|
if [ $no_upgrade_system -ne 1 ]; then upgrade_system=1; fi
|
||||||
if [ $no_shotgun_tests -ne 1 ]; then shotgun_tests=1; fi
|
if [ $no_shotgun_tests -ne 1 ]; then shotgun_tests=1; fi
|
||||||
if [ $no_flake8_checks -ne 1 ]; then flake8_checks=1; fi
|
if [ $no_flake8_checks -ne 1 ]; then flake8_checks=1; fi
|
||||||
if [ $no_lint_ui_checks -ne 1 ]; then lint_ui_checks=1; fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Run all enabled tests
|
# Run all enabled tests
|
||||||
|
@ -187,9 +199,19 @@ function run_tests {
|
||||||
run_tasklib_tests || errors+=" tasklib tests"
|
run_tasklib_tests || errors+=" tasklib tests"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $webui_tests -eq 1 ]; then
|
if [ $ui_lint_checks -eq 1 ]; then
|
||||||
echo "Starting WebUI tests..."
|
echo "Starting UI lint checks..."
|
||||||
run_webui_tests || errors+=" webui_tests"
|
run_lint_ui || errors+=" ui_lint_checks"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $ui_unit_tests -eq 1 ]; then
|
||||||
|
echo "Starting UI unit tests..."
|
||||||
|
run_ui_unit_tests || errors+=" ui_unit_tests"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $ui_func_tests -eq 1 ]; then
|
||||||
|
echo "Starting UI functional tests..."
|
||||||
|
run_ui_func_tests || errors+=" ui_func_tests"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $upgrade_system -eq 1 ]; then
|
if [ $upgrade_system -eq 1 ]; then
|
||||||
|
@ -202,11 +224,6 @@ function run_tests {
|
||||||
run_shotgun_tests || errors+=" shotgun_tests"
|
run_shotgun_tests || errors+=" shotgun_tests"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $lint_ui_checks -eq 1 ]; then
|
|
||||||
echo "Starting lint checks..."
|
|
||||||
run_lint_ui || errors+=" lint_ui_checks"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# print failed tests
|
# print failed tests
|
||||||
if [ -n "$errors" ]; then
|
if [ -n "$errors" ]; then
|
||||||
echo Failed tests: $errors
|
echo Failed tests: $errors
|
||||||
|
@ -272,16 +289,30 @@ function run_nailgun_tests {
|
||||||
return $result
|
return $result
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run webui tests.
|
# Run UI unit tests.
|
||||||
|
#
|
||||||
|
function run_ui_unit_tests {
|
||||||
|
local result=0
|
||||||
|
|
||||||
|
pushd $ROOT/nailgun >> /dev/null
|
||||||
|
|
||||||
|
${GULP} bower && ${GULP} unit-tests || result=1
|
||||||
|
|
||||||
|
popd >> /dev/null
|
||||||
|
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run UI functional tests.
|
||||||
#
|
#
|
||||||
# Arguments:
|
# Arguments:
|
||||||
#
|
#
|
||||||
# $@ -- tests to be run; with no arguments all tests will be run
|
# $@ -- tests to be run; with no arguments all tests will be run
|
||||||
function run_webui_tests {
|
function run_ui_func_tests {
|
||||||
local SERVER_PORT=$UI_SERVER_PORT
|
local SERVER_PORT=$UI_SERVER_PORT
|
||||||
local TESTS_DIR=$ROOT/nailgun/ui_tests
|
local TESTS_DIR=$ROOT/nailgun/ui_tests
|
||||||
local TESTS=$TESTS_DIR/test_*.js
|
local TESTS=$TESTS_DIR/test_*.js
|
||||||
local artifacts=$ARTIFACTS/webui
|
local artifacts=$ARTIFACTS/ui_func
|
||||||
local config=$artifacts/test.yaml
|
local config=$artifacts/test.yaml
|
||||||
prepare_artifacts $artifacts $config
|
prepare_artifacts $artifacts $config
|
||||||
local COMPRESSED_STATIC_DIR=$artifacts/static_compressed
|
local COMPRESSED_STATIC_DIR=$artifacts/static_compressed
|
||||||
|
@ -594,7 +625,7 @@ EOL
|
||||||
# $1 -- path to the test file
|
# $1 -- path to the test file
|
||||||
function guess_test_run {
|
function guess_test_run {
|
||||||
if [[ $1 == *ui_tests* && $1 == *.js ]]; then
|
if [[ $1 == *ui_tests* && $1 == *.js ]]; then
|
||||||
run_webui_tests $1 || echo "ERROR: $1"
|
run_ui_func_tests $1 || echo "ERROR: $1"
|
||||||
elif [[ $1 == *fuel_upgrade_system* ]]; then
|
elif [[ $1 == *fuel_upgrade_system* ]]; then
|
||||||
run_upgrade_system_tests $1 || echo "ERROR: $1"
|
run_upgrade_system_tests $1 || echo "ERROR: $1"
|
||||||
elif [[ $1 == *shotgun* ]]; then
|
elif [[ $1 == *shotgun* ]]; then
|
||||||
|
|
Loading…
Reference in New Issue