# Tox (http://tox.testrun.org/) is a tool for running tests in # multiple virtualenvs. To use it, "pip install tox" and then run # "tox" from this directory. [tox] skipsdist = true envlist = modification,py{26,33,34,35,36},cover,lint # nosetest -v => more verbose output, allows to detect busy waiting # loops, especially on Travis [base] # wraps pip install to use pinned versions of dependencies pip_install = {toxinidir}/tools/pip_install.sh # packages installed separately to ensure that downstream deps problems # are detected, c.f. #1002 core_commands = {[base]pip_install} -e acme[dev] nosetests -v acme --processes=-1 {[base]pip_install} -e .[dev] nosetests -v certbot --processes=-1 --process-timeout=100 core_install_args = -e acme[dev] -e .[dev] core_paths = acme/acme certbot plugin_commands = {[base]pip_install} -e certbot-apache nosetests -v certbot_apache --processes=-1 --process-timeout=80 {[base]pip_install} -e certbot-nginx nosetests -v certbot_nginx --processes=-1 plugin_install_args = -e certbot-apache -e certbot-nginx plugin_paths = certbot-apache/certbot_apache certbot-nginx/certbot_nginx dns_plugin_commands = pip install -e certbot-dns-cloudflare nosetests -v certbot_dns_cloudflare --processes=-1 pip install -e certbot-dns-digitalocean nosetests -v certbot_dns_digitalocean --processes=-1 pip install -e certbot-dns-google nosetests -v certbot_dns_google --processes=-1 pip install -e certbot-dns-route53 nosetests -v certbot_dns_route53 --processes=-1 --process-timeout=25 dns_plugin_install_args = -e certbot-dns-cloudflare -e certbot-dns-digitalocean -e certbot-dns-google -e certbot-dns-route53 dns_plugin_paths = certbot-dns-cloudflare/certbot_dns_cloudflare certbot-dns-digitalocean/certbot_dns_digitalocean certbot-dns-google/certbot_dns_google certbot-dns-route53/certbot_dns_route53 lexicon_dns_plugin_commands = pip install -e certbot-dns-cloudxns nosetests -v certbot_dns_cloudxns --processes=-1 pip install -e certbot-dns-dnsimple nosetests -v certbot_dns_dnsimple --processes=-1 pip install -e certbot-dns-nsone nosetests -v certbot_dns_nsone --processes=-1 lexicon_dns_plugin_install_args = -e certbot-dns-cloudxns -e certbot-dns-dnsimple -e certbot-dns-nsone lexicon_dns_plugin_paths = certbot-dns-cloudxns/certbot_dns_cloudxns certbot-dns-dnsimple/certbot_dns_dnsimple certbot-dns-nsone/certbot_dns_nsone compatibility_install_args = -e certbot-compatibility-test compatibility_paths = certbot-compatibility-test/certbot_compatibility_test other_commands = {[base]pip_install} -e letshelp-certbot nosetests -v letshelp_certbot --processes=-1 python tests/lock_test.py other_install_args = -e letshelp-certbot other_paths = letshelp-certbot/letshelp_certbot tests/lock_test.py [testenv] commands = {[base]core_commands} {[base]plugin_commands} {[base]dns_plugin_commands} {[base]lexicon_dns_plugin_commands} {[base]other_commands} setenv = PYTHONPATH = {toxinidir} PYTHONHASHSEED = 0 # https://testrun.org/tox/latest/example/basic.html#special-handling-of-pythonhas # cffi<=1.7 is required for oldest tests due to # https://bitbucket.org/cffi/cffi/commits/18cdf37d6b2691301a15b0e54f49757ebd4ed0f2?at=default # requests<=2.11.1 required for oldest tests due to # https://github.com/shazow/urllib3/pull/930 deps = py{26,27}-oldest: cffi<=1.7 py{26,27}-oldest: cryptography==1.2 py{26,27}-oldest: configargparse==0.10.0 py{26,27}-oldest: PyOpenSSL==0.13 py{26,27}-oldest: requests<=2.11.1 [testenv:py26] commands = {[base]core_commands} {[base]plugin_commands} {[base]dns_plugin_commands} {[base]other_commands} [testenv:py26-oldest] commands = {[testenv:py26]commands} [testenv:py27_install] basepython = python2.7 commands = {[base]pip_install} {[base]core_install_args} {[base]plugin_install_args} {[base]dns_plugin_install_args} {[base]lexicon_dns_plugin_install_args} {[base]other_install_args} [testenv:cover] basepython = python2.7 commands = {[base]pip_install} {[base]core_install_args} {[base]plugin_install_args} {[base]dns_plugin_install_args} {[base]lexicon_dns_plugin_install_args} {[base]other_install_args} ./tox.cover.sh [testenv:lint] # recent versions of pylint do not support Python 2.6 (#97, #187) basepython = python2.7 # separating into multiple invocations disables cross package # duplicate code checking; if one of the commands fails, others will # continue, but tox return code will reflect previous error commands = {[base]pip_install} -q {[base]core_install_args} {[base]plugin_install_args} {[base]dns_plugin_install_args} {[base]lexicon_dns_plugin_install_args} {[base]compatibility_install_args} {[base]other_install_args} pylint --reports=n --rcfile=.pylintrc {[base]core_paths} {[base]plugin_paths} {[base]dns_plugin_paths} {[base]lexicon_dns_plugin_paths} {[base]compatibility_paths} {[base]other_paths} [testenv:mypy] basepython = python3.4 commands = {[base]pip_install} mypy {[base]pip_install} -q {[base]core_install_args} {[base]plugin_install_args} {[base]dns_plugin_install_args} {[base]lexicon_dns_plugin_install_args} {[base]compatibility_install_args} {[base]other_install_args} mypy --py2 --ignore-missing-imports {[base]core_paths} {[base]plugin_paths} {[base]dns_plugin_paths} {[base]lexicon_dns_plugin_paths} {[base]compatibility_paths} {[base]other_paths} [testenv:apacheconftest] #basepython = python2.7 commands = {[base]pip_install} {[base]core_install_args} {[base]plugin_install_args} {[base]compatibility_install_args} {[base]other_install_args} {toxinidir}/certbot-apache/certbot_apache/tests/apache-conf-files/apache-conf-test --debian-modules [testenv:nginxroundtrip] commands = {[base]pip_install} {[base]core_install_args} -e certbot-nginx python certbot-compatibility-test/nginx/roundtrip.py certbot-compatibility-test/nginx/nginx-roundtrip-testdata # This is a duplication of the command line in testenv:le_auto to # allow users to run the modification check by running `tox` [testenv:modification] commands = {toxinidir}/tests/modification-check.sh [testenv:apache_compat] commands = docker build -t certbot-compatibility-test -f certbot-compatibility-test/Dockerfile . docker build -t apache-compat -f certbot-compatibility-test/Dockerfile-apache . docker run --rm -it apache-compat -c apache.tar.gz -vvvv whitelist_externals = docker passenv = DOCKER_* [testenv:nginx_compat] commands = docker build -t certbot-compatibility-test -f certbot-compatibility-test/Dockerfile . docker build -t nginx-compat -f certbot-compatibility-test/Dockerfile-nginx . docker run --rm -it nginx-compat -c nginx.tar.gz -vvvv whitelist_externals = docker passenv = DOCKER_* [testenv:le_auto_precise] # At the moment, this tests under Python 2.7 only, as only that version is # readily available on the Precise Docker image. commands = docker build -f letsencrypt-auto-source/Dockerfile.precise -t lea letsencrypt-auto-source docker run --rm -t -i lea whitelist_externals = docker passenv = DOCKER_* [testenv:le_auto_trusty] # At the moment, this tests under Python 2.7 only, as only that version is # readily available on the Trusty Docker image. commands = {toxinidir}/tests/modification-check.sh docker build -f letsencrypt-auto-source/Dockerfile.trusty -t lea letsencrypt-auto-source docker run --rm -t -i lea whitelist_externals = docker passenv = DOCKER_* TRAVIS_BRANCH [testenv:le_auto_wheezy] # At the moment, this tests under Python 2.7 only, as only that version is # readily available on the Wheezy Docker image. commands = docker build -f letsencrypt-auto-source/Dockerfile.wheezy -t lea letsencrypt-auto-source docker run --rm -t -i lea whitelist_externals = docker passenv = DOCKER_* [testenv:le_auto_centos6] # At the moment, this tests under Python 2.6 only, as only that version is # readily available on the CentOS 6 Docker image. commands = docker build -f letsencrypt-auto-source/Dockerfile.centos6 -t lea letsencrypt-auto-source docker run --rm -t -i lea whitelist_externals = docker passenv = DOCKER_* [testenv:docker_dev] # tests the Dockerfile-dev file to ensure development with it works # as expected commands = docker-compose run --rm --service-ports development bash -c 'tox -e lint' whitelist_externals = docker passenv = DOCKER_*