From 7887b3f41adab0644dc9a32ac91196179208c78f Mon Sep 17 00:00:00 2001 From: Shu Muto Date: Fri, 13 Apr 2018 10:17:07 +0900 Subject: [PATCH] Install Horizon from git repository in tox test To test UI plugins, we should install recent Horizon from master branch. Also, fixed eslint and karma. To run tox test easily before upload patchset, adds eslint, karma, docs and releasenotes to envlist. Change-Id: I82806631e7219eaa2372c2cd62b264056fbea64d --- magnum_ui/karma.conf.js | 10 +++-- package.json | 26 ++++++----- tools/tox_helper.sh | 20 +++++++++ tox.ini | 97 ++++++++++++++++++++++++++++------------- 4 files changed, 107 insertions(+), 46 deletions(-) create mode 100755 tools/tox_helper.sh diff --git a/magnum_ui/karma.conf.js b/magnum_ui/karma.conf.js index d96da20e..80b88065 100644 --- a/magnum_ui/karma.conf.js +++ b/magnum_ui/karma.conf.js @@ -19,7 +19,9 @@ var path = require('path'); module.exports = function (config) { // This tox venv is setup in the post-install npm step - var toxPath = '../.tox/py27/lib/python2.7/site-packages/'; + var toxPath = '../.tox/karma/lib/python2.7/site-packages/'; + + process.env.PHANTOMJS_BIN = 'node_modules/phantomjs-prebuilt/bin/phantomjs'; config.set({ preprocessors: { @@ -69,7 +71,7 @@ module.exports = function (config) { // TODO: These should be mocked. - toxPath + '/horizon/static/horizon/js/horizon.js', + toxPath + 'horizon/static/horizon/js/horizon.js', /** * Include framework source code from horizon that we need. @@ -120,7 +122,8 @@ module.exports = function (config) { frameworks: ['jasmine'], - browsers: ['Chrome'], + // browsers: ['Chrome'], + browsers: ['PhantomJS'], browserNoActivityTimeout: 60000, @@ -128,6 +131,7 @@ module.exports = function (config) { plugins: [ 'karma-chrome-launcher', + 'karma-phantomjs-launcher', 'karma-jasmine', 'karma-ng-html2js-preprocessor', 'karma-coverage', diff --git a/package.json b/package.json index 0c990c17..c67d54ac 100644 --- a/package.json +++ b/package.json @@ -10,21 +10,23 @@ "license": "Apache 2.0", "author": "Openstack ", "devDependencies": { - "eslint": "^1.10.3", - "eslint-config-openstack": "^1.2.4", - "eslint-plugin-angular": "1.0.1", - "jasmine-core": "2.4.1", - "karma": "1.1.2", - "karma-chrome-launcher": "1.0.1", - "karma-cli": "1.0.1", - "karma-coverage": "1.1.1", - "karma-jasmine": "1.0.2", - "karma-ng-html2js-preprocessor": "1.0.0", - "karma-threshold-reporter": "0.1.15" + "eslint": "3.19.x", + "eslint-config-openstack": "^4.0.1", + "eslint-plugin-angular": "3.1.x", + "jasmine-core": "2.8.x", + "karma": "1.7.x", + "karma-chrome-launcher": "^2.2.0", + "karma-cli": "1.0.x", + "karma-coverage": "1.1.x", + "karma-jasmine": "1.1.x", + "karma-ng-html2js-preprocessor": "1.0.x", + "karma-phantomjs-launcher": "1.0.x", + "karma-threshold-reporter": "0.1.x", + "phantomjs-prebuilt": "2.1.x" }, "dependencies": {}, "scripts": { - "postinstall": "if [ ! -d .tox ] || [ ! -d .tox/py27 ]; then tox -epy27 --notest; fi", + "postinstall": "if [ ! -d .tox ] || [ ! -d .tox/karma ]; then tox -ekarma --notest; git clone https://git.openstack.org/openstack/horizon.git .tox/karma/src/horizon; pip install -U -t .tox/karma/lib/python2.7/site-packages/ .tox/karma/src/horizon; fi", "lint": "eslint --no-color magnum_ui/static", "lintq": "eslint --quiet magnum_ui/static", "test": "karma start magnum_ui/karma.conf.js --single-run" diff --git a/tools/tox_helper.sh b/tools/tox_helper.sh new file mode 100755 index 00000000..8549089e --- /dev/null +++ b/tools/tox_helper.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +ENVNAME=$1 +BASEPYTHON=$2 +COMMAND=$3 + +if [ ${COMMAND} = "pre" ]; then + # crean-up + rm -fr .tox/${ENVNAME}-log/ + # install horizon from git + rm -fr .tox/${ENVNAME}/src/ + git clone https://git.openstack.org/openstack/horizon.git .tox/${ENVNAME}/src/horizon + pip install -U -t .tox/${ENVNAME}/lib/${BASEPYTHON}/site-packages/ .tox/${ENVNAME}/src/horizon +elif [ ${COMMAND} = "post" ]; then + # crean-up + rm -fr .tox/${ENVNAME}/src/ + mv .tox/${ENVNAME}/log/ .tox/${ENVNAME}-log/ + rm -fr .tox/${ENVNAME}/ +fi + diff --git a/tox.ini b/tox.ini index 0c476640..e34fe36d 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = pep8,py35,py27,py35dj20 +envlist = pep8,py35,py35dj20,py27,eslint,karma,docs,releasenotes minversion = 2.3.2 skipsdist = True @@ -11,16 +11,21 @@ setenv = VIRTUAL_ENV={envdir} NOSE_OPENSTACK_RED=0.05 NOSE_OPENSTACK_YELLOW=0.025 NOSE_OPENSTACK_SHOW_ELAPSED=1 -install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} -U {opts} {packages} -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt +deps = + -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} + -r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt commands = python manage.py test {posargs} --settings=magnum_ui.test.settings +[testenv:venv] +commands = {posargs} + [testenv:pep8] commands = flake8 {posargs} -[testenv:venv] -commands = {posargs} +[flake8] +exclude = .venv,.git,.tox,dist,*lib/python*,*egg,build,panel_template,dash_template,local_settings.py,*/local/*,*/test/test_plugins/*,.ropeproject,node_modules +max-complexity = 20 [testenv:cover] commands = @@ -29,47 +34,77 @@ commands = coverage xml --omit '.tox/cover/*' -o 'cover/coverage.xml' coverage html --omit '.tox/cover/*' -d 'cover/htmlcov' +[testenv:py27] +commands = + # Clean-up env and install horizon from git + {toxinidir}/tools/tox_helper.sh {envname} {basepython} pre + # Run test + python manage.py test {posargs} + # Clean-up env except log + {toxinidir}/tools/tox_helper.sh {envname} {basepython} post + +[testenv:py35] +basepython = python3.5 +commands = + # Clean-up env and install horizon from git + {toxinidir}/tools/tox_helper.sh {envname} {basepython} pre + # Run test + python manage.py test {posargs} + # Clean-up env except log + {toxinidir}/tools/tox_helper.sh {envname} {basepython} post + [testenv:py35dj20] basepython = python3.5 -whitelist_externals = git commands = - # NOTE(shu-mutow): To test this new env, need to re-install recent horizon - # from git master branch like CI infra does. - git clone https://git.openstack.org/openstack/horizon.git .tox/py35dj20/src/horizon - pip install -U -t .tox/py35dj20/lib/python3.5/site-packages/ .tox/py35dj20/src/horizon + # Clean-up env and install horizon from git + {toxinidir}/tools/tox_helper.sh {envname} {basepython} pre + # Run test pip install django>=2.0,<2.1 - python manage.py test {posargs} --settings=magnum_ui.test.settings + python manage.py test {posargs} + # Clean-up env except log + {toxinidir}/tools/tox_helper.sh {envname} {basepython} post [testenv:eslint] -whitelist_externals = npm +whitelist_externals = + npm commands = + # Clean-up env and install horizon from git + {toxinidir}/tools/tox_helper.sh {envname} {basepython} pre + # Run test npm install - npm run postinstall npm run lint + # Clean-up env except log + {toxinidir}/tools/tox_helper.sh {envname} {basepython} post [testenv:karma] -# NOTE(shu-mutou): Until PhantomJS setup get reliable, we use -# Chromium for JS test. And npm can't launch Chromium via tox. -#whitelist_externals = npm -#commands = -# npm install -# npm run postinstall -# npm run test -whitelist_externals = echo +whitelist_externals = + npm commands = - echo "npm can't launch Chromium via tox." - echo "execute `npm run test`" + # Clean-up env and install horizon from git + {toxinidir}/tools/tox_helper.sh {envname} {basepython} pre + # Run test + npm install + npm run test + # Clean-up env except log + {toxinidir}/tools/tox_helper.sh {envname} {basepython} post [testenv:docs] -commands = python setup.py build_sphinx +commands = + # Clean-up env and install horizon from git + {toxinidir}/tools/tox_helper.sh {envname} {basepython} pre + # Run test + python setup.py build_sphinx + # Clean-up env except log + {toxinidir}/tools/tox_helper.sh {envname} {basepython} post [testenv:releasenotes] -commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html - -[flake8] -exclude = .venv,.git,.tox,dist,*lib/python*,*egg,build,panel_template,dash_template,local_settings.py,*/local/*,*/test/test_plugins/*,.ropeproject,node_modules -max-complexity = 20 - +commands = + # Clean-up env and install horizon from git + {toxinidir}/tools/tox_helper.sh {envname} {basepython} pre + # Run test + sphinx-build -a -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html + # Clean-up env except log + {toxinidir}/tools/tox_helper.sh {envname} {basepython} post [testenv:lower-constraints] basepython = python3