[tox]
minversion = 1.8
skipsdist = True
envlist = py27,pep8

[testenv]
# Note the hash seed is set to 0 until cinder can be tested with a
# random hash seed successfully.
setenv = VIRTUAL_ENV={envdir}
         PYTHONHASHSEED=0
usedevelop = True
install_command =
                  constraints: {[testenv:common-constraints]install_command}
                  pip install {opts} {packages}

# TODO(mriedem): Move oslo.versionedobjects[fixtures] to test-requirements.txt
#                after I937823ffeb95725f0b55e298ebee1857d6482883 lands.
deps = -r{toxinidir}/test-requirements.txt
       oslo.versionedobjects[fixtures]

# By default ostestr will set concurrency
# to ncpu, to specify something else use
# the concurrency=<n> option.
# call ie: 'tox -epy27 -- --concurrency=4'
commands = ostestr {posargs}

whitelist_externals = bash
passenv = *_proxy *_PROXY

[testenv:releasenotes]
commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html

[testenv:common-constraints]
install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages}

[testenv:py34]
commands =
  ostestr --whitelist_file=tests-py3.txt

[testenv:py34-constraints]
install_command = {[testenv:common-constraints]install_command}
commands = {[testenv:py34]commands}

[testenv:pep8]
commands =
  flake8 {posargs} . cinder/common
  # Check that .po and .pot files are valid:
  bash -c "find cinder -type f -regex '.*\.pot?' -print0|xargs -0 -n 1 msgfmt --check-format -o /dev/null"
  {toxinidir}/tools/config/check_uptodate.sh --checkopts
  {toxinidir}/tools/config/check_uptodate.sh
  {toxinidir}/tools/check_exec.py {toxinidir}/cinder

[testenv:pep8-constraints]
install_command = {[testenv:common-constraints]install_command}
commands =
  flake8 {posargs} . cinder/common
  # Check that .po and .pot files are valid:
  bash -c "find cinder -type f -regex '.*\.pot?' -print0|xargs -0 -n 1 msgfmt --check-format -o /dev/null"
  {toxinidir}/tools/config/check_uptodate.sh --checkopts
  {toxinidir}/tools/config/check_uptodate.sh
  {toxinidir}/tools/check_exec.py {toxinidir}/cinder

[testenv:fast8]
# Use same environment directory as pep8 env to save space and install time
envdir = {toxworkdir}/pep8
commands =
  {toxinidir}/tools/fast8.sh

[testenv:pylint]
deps = -r{toxinidir}/requirements.txt
       pylint==0.26.0
commands = bash tools/lintstack.sh

[testenv:pylint-constraints]
install_command = {[testenv:common-constraints]install_command}
deps = {[testenv:pylint]deps}
commands = {[testenv:pylint]commands}

[testenv:cover]
# Also do not run test_coverage_ext tests while gathering coverage as those
# tests conflict with coverage.
commands =
  python setup.py testr --coverage \
    --testr-args='^(?!.*test.*coverage).*$'

[testenv:cover-constraints]
install_command = {[testenv:common-constraints]install_command}
commands = {[testenv:cover]commands}

[testenv:genconfig]
sitepackages = False
envdir = {toxworkdir}/pep8
commands = {toxinidir}/tools/config/generate_sample.sh from_tox

[testenv:genopts]
sitepackages = False
envdir = {toxworkdir}/pep8
commands = {toxinidir}/tools/config/generate_sample.sh from_tox --nosamplefile

[testenv:venv]
commands = {posargs}

[testenv:venv-constraints]
install_command = {[testenv:common-constraints]install_command}
commands = {posargs}

[testenv:docs]
commands = python setup.py build_sphinx

[testenv:gendriverlist]
sitepackages = False
envdir = {toxworkdir}/venv
commands = python {toxinidir}/tools/generate_driver_list.py

[testenv:bandit]
deps = -r{toxinidir}/test-requirements.txt
commands = bandit -c tools/bandit.yaml -r cinder -n 5 -ll

[flake8]
# Following checks are ignored on purpose.
#
# E251 unexpected spaces around keyword / parameter equals
# reason: no improvement in readability
ignore = E251
exclude = .git,.venv,.tox,dist,tools,doc,common,*egg,build
max-complexity=30

[hacking]
local-check-factory = cinder.hacking.checks.factory
import_exceptions = cinder.i18n