# Classic charm: ./tox.ini
# This file is managed centrally by release-tools and should not be modified
# within individual charm repos.
[tox]
envlist = pep8,py3{5,6}
skipsdist = True

[testenv]
setenv = VIRTUAL_ENV={envdir}
         PYTHONHASHSEED=0
         CHARM_DIR={envdir}
         AMULET_SETUP_TIMEOUT=5400
install_command =
  pip install {opts} {packages}
commands = stestr run {posargs}
whitelist_externals = juju
passenv = HOME TERM AMULET_* CS_API_*

[testenv:py27]
basepython = python2.7
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
commands = /bin/true

[testenv:py35]
basepython = python3.5
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt

[testenv:py36]
basepython = python3.6
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt

[testenv:pep8]
basepython = python3
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
commands = flake8 {posargs} hooks unit_tests tests actions lib
           charm-proof

[testenv:cover]
# Technique based heavily upon
# https://github.com/openstack/nova/blob/master/tox.ini
basepython = python3
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
setenv =
    {[testenv]setenv}
    PYTHON=coverage run
commands =
    coverage erase
    stestr run {posargs}
    coverage combine
    coverage html -d cover
    coverage xml -o cover/coverage.xml
    coverage report

[coverage:run]
branch = True
concurrency = multiprocessing
parallel = True
source =
    .
omit =
    .tox/*
    */charmhelpers/*
    unit_tests/*

[testenv:venv]
basepython = python3
commands = {posargs}

[testenv:func27-noop]
# DRY RUN - For Debug
basepython = python2.7
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
commands =
    bundletester -vl DEBUG -r json -o func-results.json --test-pattern "gate-*" -n --no-destroy

[testenv:func27]
# Charm Functional Test
# Run all gate tests which are +x (expected to always pass)
basepython = python2.7
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
commands =
    bundletester -vl DEBUG -r json -o func-results.json --test-pattern "gate-*" --no-destroy

[testenv:func27-smoke]
# Charm Functional Test
# Run a specific test as an Amulet smoke test (expected to always pass)
basepython = python2.7
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
commands =
    bundletester -vl DEBUG -r json -o func-results.json gate-basic-bionic-rocky --no-destroy

[testenv:func27-dfs]
# Charm Functional Test
# Run all deploy-from-source tests which are +x (may not always pass!)
basepython = python2.7
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
commands =
    bundletester -vl DEBUG -r json -o func-results.json --test-pattern "dfs-*" --no-destroy

[testenv:func27-dev]
# Charm Functional Test
# Run all development test targets which are +x (may not always pass!)
basepython = python2.7
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
commands =
    bundletester -vl DEBUG -r json -o func-results.json --test-pattern "dev-*" --no-destroy

[flake8]
ignore = E402,E226
exclude = */charmhelpers