# Copyright 2020 Canonical Ltd.
#
# 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.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact: legal@canonical.com
#
# To get in touch with the maintainers, please contact:
# osm-charmers@lists.launchpad.net
##

[tox]
skipsdist = True
envlist = unit, lint
sitepackages = False
skip_missing_interpreters = False

[testenv]
basepython = python3.8
setenv =
  PYTHONHASHSEED=0
  PYTHONPATH = {toxinidir}/src
  CHARM_NAME = keystone

[testenv:build]
passenv=HTTP_PROXY HTTPS_PROXY NO_PROXY
whitelist_externals =
  charmcraft
  rm
  unzip
commands =
  rm -rf release keystone.charm
  charmcraft build
  unzip keystone.charm -d release

[testenv:unit]
commands =
  coverage erase
  stestr run --slowest --test-path=./tests --top-dir=./
  coverage combine
  coverage html -d cover
  coverage xml -o cover/coverage.xml
  coverage report
deps =
  coverage
  stestr
  mock
  ops
  -rrequirements.txt
setenv =
  {[testenv]setenv}
  PYTHON=coverage run

[testenv:lint]
deps =
  black
  yamllint
  flake8
commands =
  black --check --diff . --exclude "build/|.tox/|mod/|lib/|release/"
  yamllint .
  flake8 . --max-line-length=100 --ignore="E501,W503,W504,F722" --exclude "build/ .tox/ mod/ lib/ release/"

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