Initial Cookiecutter Commit.
Change-Id: Icc6bc9f3a991f100cc3a3e83ef673b52c16e0504
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..6a95b66
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,150 @@
+# Operator charm (with zaza): tox.ini
+
+[tox]
+envlist = pep8,py3
+skipsdist = True
+# NOTE: Avoid build/test env pollution by not enabling sitepackages.
+sitepackages = False
+# NOTE: Avoid false positives by not skipping missing interpreters.
+skip_missing_interpreters = False
+# NOTES:
+# * We avoid the new dependency resolver by pinning pip < 20.3, see
+# https://github.com/pypa/pip/issues/9187
+# * Pinning dependencies requires tox >= 3.2.0, see
+# https://tox.readthedocs.io/en/latest/config.html#conf-requires
+# * It is also necessary to pin virtualenv as a newer virtualenv would still
+# lead to fetching the latest pip in the func* tox targets, see
+# https://stackoverflow.com/a/38133283
+# * It is necessary to declare setuptools as a dependency otherwise tox will
+# fail very early at not being able to load it. The version pinning is in
+# line with `pip.sh`.
+requires = pip < 20.3
+ virtualenv < 20.0
+ setuptools < 50.0.0
+# NOTE: https://wiki.canonical.com/engineering/OpenStack/InstallLatestToxOnOsci
+minversion = 3.2.0
+
+[testenv]
+setenv = VIRTUAL_ENV={envdir}
+ PYTHONHASHSEED=0
+ CHARM_DIR={envdir}
+install_command =
+ pip install {opts} {packages}
+commands = stestr run --slowest {posargs}
+allowlist_externals =
+ git
+ bash
+ charmcraft
+ rename.sh
+passenv = HOME TERM CS_* OS_* TEST_*
+deps = -r{toxinidir}/test-requirements.txt
+
+[testenv:py35]
+basepython = python3.5
+# python3.5 is irrelevant on a focal+ charm.
+commands = /bin/true
+
+[testenv:py36]
+basepython = python3.6
+deps = -r{toxinidir}/requirements.txt
+ -r{toxinidir}/test-requirements.txt
+
+[testenv:py37]
+basepython = python3.7
+deps = -r{toxinidir}/requirements.txt
+ -r{toxinidir}/test-requirements.txt
+
+[testenv:py38]
+basepython = python3.8
+deps = -r{toxinidir}/requirements.txt
+ -r{toxinidir}/test-requirements.txt
+
+[testenv:py39]
+basepython = python3.9
+deps = -r{toxinidir}/requirements.txt
+ -r{toxinidir}/test-requirements.txt
+
+[testenv:py3]
+basepython = python3
+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} src unit_tests tests
+
+[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 --slowest {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:build]
+basepython = python3
+deps = -r{toxinidir}/build-requirements.txt
+# NOTE(lourot): charmcraft 1.0.0 used to generate
+# cinder-StorPool.charm, which is the behaviour expected
+# by OSCI. However charmcraft 1.2.1 now generates
+# cinder-StorPool_ubuntu-20.04-amd64.charm instead.
+# In order to keep the old behaviour we rename the file at the end.
+commands =
+ charmcraft clean
+ charmcraft -v build
+ {toxinidir}/rename.sh
+
+[testenv:func-noop]
+basepython = python3
+commands =
+ functest-run-suite --help
+
+[testenv:func]
+basepython = python3
+commands =
+ functest-run-suite --keep-model
+
+[testenv:func-smoke]
+basepython = python3
+commands =
+ functest-run-suite --keep-model --smoke
+
+[testenv:func-dev]
+basepython = python3
+commands =
+ functest-run-suite --keep-model --dev
+
+[testenv:func-target]
+basepython = python3
+commands =
+ functest-run-suite --keep-model --bundle {posargs}
+
+[flake8]
+# Ignore E902 because the unit_tests directory is missing in the built charm.
+ignore = E402,E226,W503,W504,E902