Add functional tests for devstack gate
This patch adds 'functional' tests that will be run by DSVM gate. A 'cloudsConfig.js' file reads 'clouds.yaml' and converts it to json. 'clouds.yaml' file is searched from the following locations: - current directory - ~/.config/openstack - /etc/openstack The first file found wins. For browser, webpack uses a 'yaml' loader and rewrites 'helper/cloudsConfig.js' requirement to 'json!yaml!clouds.yaml'. A dummy test has been added to demonstrate use of devstack config. Change-Id: I55909862c70a4cbe22b2820e51c2969d68d8154a
This commit is contained in:
parent
4e9cf48b43
commit
bf8deba64e
|
@ -9,7 +9,7 @@ reporting:
|
||||||
reports:
|
reports:
|
||||||
- lcov
|
- lcov
|
||||||
- html
|
- html
|
||||||
dir: ./cover/node
|
dir: ./cover/unit/node
|
||||||
watermarks:
|
watermarks:
|
||||||
statements: [50, 90]
|
statements: [50, 90]
|
||||||
lines: [50, 90]
|
lines: [50, 90]
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
import webpackConfig from './webpack.config.babel';
|
import webpackConfig from './webpack.config.babel';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
export default (config) => {
|
export default (config) => {
|
||||||
|
// test mode based on basePath parameter (eg. test/unit, test/functional)
|
||||||
|
const testDir = config.basePath ? path.basename(config.basePath) : 'unit';
|
||||||
|
|
||||||
config.set({
|
config.set({
|
||||||
|
|
||||||
// base path that will be used to resolve all patterns (eg. files, exclude)
|
// base path that will be used to resolve all patterns (eg. files, exclude)
|
||||||
basePath: '',
|
basePath: 'test/' + testDir,
|
||||||
|
|
||||||
// frameworks to use
|
// frameworks to use
|
||||||
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
||||||
|
@ -12,16 +16,18 @@ export default (config) => {
|
||||||
|
|
||||||
// list of files / patterns to load in the browser
|
// list of files / patterns to load in the browser
|
||||||
files: [
|
files: [
|
||||||
'test/unit/**/*.js'
|
'**/*.js'
|
||||||
],
|
],
|
||||||
|
|
||||||
// list of files to exclude
|
// list of files to exclude
|
||||||
exclude: [],
|
exclude: [
|
||||||
|
'helpers/**/*.js'
|
||||||
|
],
|
||||||
|
|
||||||
// preprocess matching files before serving them to the browser
|
// preprocess matching files before serving them to the browser
|
||||||
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
||||||
preprocessors: {
|
preprocessors: {
|
||||||
'test/unit/**/*.js': ['webpack']
|
'**/*.js': ['webpack']
|
||||||
},
|
},
|
||||||
|
|
||||||
// test results reporter to use
|
// test results reporter to use
|
||||||
|
@ -64,7 +70,7 @@ export default (config) => {
|
||||||
// Generate a coverage report in /cover/karma
|
// Generate a coverage report in /cover/karma
|
||||||
coverageReporter: {
|
coverageReporter: {
|
||||||
type: 'html', //produces a html document after code is run
|
type: 'html', //produces a html document after code is run
|
||||||
dir: 'cover/browser/' //path to created html doc
|
dir: '../../cover/' + testDir + '/browser/' //path to created html doc
|
||||||
},
|
},
|
||||||
|
|
||||||
// The current coverage threshold values. These should never drop.
|
// The current coverage threshold values. These should never drop.
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
"test:node": "istanbul cover jasmine JASMINE_CONFIG_PATH=test/unit/jasmine.json",
|
"test:node": "istanbul cover jasmine JASMINE_CONFIG_PATH=test/unit/jasmine.json",
|
||||||
"test:browser": "karma start",
|
"test:browser": "karma start",
|
||||||
"posttest:node": "istanbul check-coverage",
|
"posttest:node": "istanbul check-coverage",
|
||||||
|
"functional-test": "npm run functional-test:node ; npm run functional-test:browser",
|
||||||
|
"functional-test:node": "istanbul cover --dir cover/functional/node jasmine JASMINE_CONFIG_PATH=test/functional/jasmine.json",
|
||||||
|
"functional-test:browser": "karma start --basePath test/functional/",
|
||||||
"lint": "eslint ./",
|
"lint": "eslint ./",
|
||||||
"prepublish": "nsp check; npm run build",
|
"prepublish": "nsp check; npm run build",
|
||||||
"build": "babel src -d dist && webpack",
|
"build": "babel src -d dist && webpack",
|
||||||
|
@ -32,6 +35,7 @@
|
||||||
"babel-cli": "^6.10.1",
|
"babel-cli": "^6.10.1",
|
||||||
"babel-core": "^6.10.4",
|
"babel-core": "^6.10.4",
|
||||||
"babel-loader": "^6.2.4",
|
"babel-loader": "^6.2.4",
|
||||||
|
"babel-plugin-transform-inline-environment-variables": "^6.8.0",
|
||||||
"babel-preset-es2015": "^6.9.0",
|
"babel-preset-es2015": "^6.9.0",
|
||||||
"babel-register": "^6.9.0",
|
"babel-register": "^6.9.0",
|
||||||
"eslint": "^2.4.0",
|
"eslint": "^2.4.0",
|
||||||
|
@ -39,6 +43,8 @@
|
||||||
"fetch-mock": "^5.0.5",
|
"fetch-mock": "^5.0.5",
|
||||||
"istanbul": "^1.0.0-alpha.2",
|
"istanbul": "^1.0.0-alpha.2",
|
||||||
"jasmine": "^2.4.1",
|
"jasmine": "^2.4.1",
|
||||||
|
"js-yaml": "^3.6.1",
|
||||||
|
"json-loader": "^0.5.4",
|
||||||
"karma": "^1.1.1",
|
"karma": "^1.1.1",
|
||||||
"karma-chrome-launcher": "^1.0.1",
|
"karma-chrome-launcher": "^1.0.1",
|
||||||
"karma-coverage": "^1.1.0",
|
"karma-coverage": "^1.1.0",
|
||||||
|
@ -47,7 +53,8 @@
|
||||||
"karma-threshold-reporter": "^0.1.15",
|
"karma-threshold-reporter": "^0.1.15",
|
||||||
"karma-webpack": "^1.7.0",
|
"karma-webpack": "^1.7.0",
|
||||||
"nsp": "^2.4.0",
|
"nsp": "^2.4.0",
|
||||||
"webpack": "^1.13.1"
|
"webpack": "^1.13.1",
|
||||||
|
"yaml-loader": "^0.4.0"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
/*eslint no-sync: "off"*/
|
||||||
|
import yaml from 'js-yaml';
|
||||||
|
import fs from 'fs';
|
||||||
|
import cloudsYamlPath from './cloudsYamlPath';
|
||||||
|
|
||||||
|
const clouds = yaml.safeLoad(fs.readFileSync(cloudsYamlPath, 'utf8'));
|
||||||
|
|
||||||
|
export default clouds;
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*eslint no-process-env: "off", no-sync: "off"*/
|
||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
|
const resolvePaths = [
|
||||||
|
'./clouds.yaml',
|
||||||
|
process.env.HOME + '/.config/openstack/clouds.yaml',
|
||||||
|
'/etc/openstack/clouds.yaml'
|
||||||
|
];
|
||||||
|
|
||||||
|
function fileExists(path) {
|
||||||
|
try {
|
||||||
|
fs.statSync(path);
|
||||||
|
return true;
|
||||||
|
} catch(err) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const cloudFiles = resolvePaths.filter(fileExists);
|
||||||
|
|
||||||
|
export default cloudFiles.length > 0 ? path.resolve(cloudFiles[0]) : 'clouds.yaml';
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
import Test from "../../src/index";
|
||||||
|
import config from "./helpers/cloudsConfig";
|
||||||
|
|
||||||
|
describe("Simple functional test", () => {
|
||||||
|
|
||||||
|
it("should call keystone URL", (done) => {
|
||||||
|
const testKeystone = function(response) {
|
||||||
|
expect(response.status).toBe(200);
|
||||||
|
done();
|
||||||
|
};
|
||||||
|
|
||||||
|
const failTest = function(error) {
|
||||||
|
expect(error).toBeUndefined();
|
||||||
|
done();
|
||||||
|
};
|
||||||
|
|
||||||
|
const t = new Test();
|
||||||
|
t.getUrl(config.clouds.devstack.auth.auth_url + '/v2.0')
|
||||||
|
.then(testKeystone)
|
||||||
|
.catch(failTest);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"spec_dir": "test/functional",
|
||||||
|
"spec_files": [
|
||||||
|
"**/*[tT]est.js"
|
||||||
|
],
|
||||||
|
"helpers": [
|
||||||
|
"../../node_modules/babel-register/lib/node.js"
|
||||||
|
],
|
||||||
|
"stopSpecOnExpectationFailure": false,
|
||||||
|
"random": false
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import Test from "../../src/index.js";
|
import Test from "../../src/index";
|
||||||
|
|
||||||
const FetchMock = require('fetch-mock');
|
const FetchMock = require('fetch-mock');
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
import webpack from 'webpack';
|
||||||
|
import cloudsYamlPath from './test/functional/helpers/cloudsYamlPath';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
entry: ['./src/index.js'],
|
entry: ['./src/index.js'],
|
||||||
output: {
|
output: {
|
||||||
|
@ -11,8 +14,15 @@ export default {
|
||||||
{
|
{
|
||||||
test: /\.js$/,
|
test: /\.js$/,
|
||||||
loader: 'babel',
|
loader: 'babel',
|
||||||
exclude: /node_modules/
|
exclude: /node_modules/,
|
||||||
|
query: {
|
||||||
|
plugins: ['transform-inline-environment-variables']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
plugins: [
|
||||||
|
new webpack.NormalModuleReplacementPlugin(/helpers\/cloudsConfig/,
|
||||||
|
'json!yaml!' + cloudsYamlPath)
|
||||||
|
]
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue