# 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.

[tox]
envlist=core,extensions,e2e,windows,ssh,pylint_core,pylint_tests,docs
pytest_processes={env:CONCURRENCY:auto}
pylint_jobs={env:CONCURRENCY:0}

[testenv]
whitelist_externals=
  rm
passenv=
  TRAVIS
  PYTHON
  PYTHON_VERSION
  PYTHON_ARCH
deps=
  --requirement
    requirements.txt
  --requirement
    tests/requirements.txt
basepython=
  core: python2.7
  extensions: python2.7
  e2e: python2.7
  ssh: python2.7
  windows: {env:PYTHON:}\python.exe
  pylint_core: python2.7
  pylint_tests: python2.7
  docs: python2.7

[testenv:core]
commands=
  pytest tests \
    --numprocesses={[tox]pytest_processes} \
    --ignore=tests/end2end \
    --ignore=tests/extensions \
    --ignore=tests/orchestrator/execution_plugin/test_ssh.py \
    --cov-report term-missing \
    --cov aria

[testenv:extensions]
commands=
  pytest tests/extensions \
    --numprocesses={[tox]pytest_processes} \
    --cov-report term-missing \
    --cov extensions

[testenv:e2e]
commands=
  pytest tests/end2end \
    --numprocesses={[tox]pytest_processes} \
    --cov-report term-missing \
    --cov aria

[testenv:ssh]
install_command=
  pip install {opts} {packages} .[ssh]
commands=
  pytest tests/orchestrator/execution_plugin/test_ssh.py \
    --numprocesses={[tox]pytest_processes}

[testenv:windows]
commands=
  pytest tests \
    --numprocesses={[tox]pytest_processes} \
    --ignore=tests/end2end \
    --ignore=tests/extensions \
    --ignore=tests/orchestrator/execution_plugin/test_ssh.py \
    --cov-report term-missing \
    --cov aria

[testenv:pylint_core]
commands=
  pylint aria extensions/aria_extension_tosca \
    --rcfile=aria/.pylintrc \
    --disable=fixme,missing-docstring
# Disabling due to bugs: https://github.com/PyCQA/pylint/issues/374
#    --jobs={[tox]pylint_jobs}

[testenv:pylint_tests]
commands=
  pylint tests \
    --rcfile=tests/.pylintrc \
    --disable=fixme,missing-docstring
# Disabling due to bugs: https://github.com/PyCQA/pylint/issues/374
#    --jobs={[tox]pylint_jobs}

[testenv:docs]
install_command=
  pip install {opts} {packages} \
    --requirement docs/requirements.txt
commands=
  rm --recursive --force docs/html
  sphinx-build -W -T -b html docs docs/html
