# 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
setenv =
  PYTHONHASHSEED=0
  PYTHONPATH = {toxinidir}/src
  CHARM_NAME = mon

[testenv:build]
passenv=HTTP_PROXY HTTPS_PROXY NO_PROXY
whitelist_externals =
  charmcraft
  rm
  unzip
commands =
  rm -rf release mon.charm
  charmcraft build
  unzip mon.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
setenv =
  {[testenv]setenv}
  PYTHON=coverage run

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

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