mirror of
https://github.com/certbot/certbot.git
synced 2026-06-05 14:54:24 -04:00
Fixes https://github.com/certbot/certbot/issues/8580. With this PR, it should now be possible to run the oldest tests natively on Linux, at least when using an older version of Python 3, which hasn't been possible in a long time. Unfortunately, this isn't possible on macOS which I opened https://github.com/certbot/certbot/issues/8589 to track. You can see the full test suite running with these changes at https://dev.azure.com/certbot/certbot/_build/results?buildId=3283&view=results. I took the version numbers for the packages I updated by searching for the oldest version of the dependency I think we should try and support based on the updated comments at the top of `oldest_constraints.txt`. While kind of annoying, I think it'd be a good idea for the reviewer to double check that I didn't make a mistake with the versions I used here. To find these versions, I used https://packages.ubuntu.com, https://packages.debian.org, and a CentOS 7 Docker image with EPEL 7 installed. For the latter, not all packages are available in Python 3 yet (which is something Certbot's EPEL package maintainers are working on) and in that case I didn't worry about the system because I think they can/will package the newest version available. If they end up hitting any issues here when trying to package Certbot on Python 3, we can always work with them to fix it. * remove py27 from oldest name * update min cryptography version * remove run_oldest_tests.sh * upgrade setuptools and pyopenssl * update cffi, pyparsing, and idna * expand oldest_constraints comments * clarify oldest comment * update min configobj version * update min parsedatetime version * quote tox env name * use Python 3.6 in the oldest tests * use Python 3.6 for oldest integration tests * properly pin asn1crypto * update min six version * set basepython for a nicer error message * remove outdated python 2 oldest constraints
311 lines
10 KiB
INI
311 lines
10 KiB
INI
# Tox (https://tox.readthedocs.io/) 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,py3-cover,lint,mypy
|
|
|
|
[base]
|
|
# pip installs the requested packages in editable mode
|
|
pip_install = python {toxinidir}/tools/pip_install_editable.py
|
|
# pip installs the requested packages in editable mode and runs unit tests on
|
|
# them. Each package is installed and tested in the order they are provided
|
|
# before the script moves on to the next package. All dependencies are pinned
|
|
# to a specific version for increased stability for developers.
|
|
install_and_test = python {toxinidir}/tools/install_and_test.py
|
|
dns_packages =
|
|
certbot-dns-cloudflare \
|
|
certbot-dns-cloudxns \
|
|
certbot-dns-digitalocean \
|
|
certbot-dns-dnsimple \
|
|
certbot-dns-dnsmadeeasy \
|
|
certbot-dns-gehirn \
|
|
certbot-dns-google \
|
|
certbot-dns-linode \
|
|
certbot-dns-luadns \
|
|
certbot-dns-nsone \
|
|
certbot-dns-ovh \
|
|
certbot-dns-rfc2136 \
|
|
certbot-dns-route53 \
|
|
certbot-dns-sakuracloud
|
|
all_packages =
|
|
acme[dev] \
|
|
certbot[dev] \
|
|
certbot-apache \
|
|
{[base]dns_packages} \
|
|
certbot-nginx
|
|
install_packages =
|
|
python {toxinidir}/tools/pip_install_editable.py {[base]all_packages}
|
|
source_paths =
|
|
acme/acme
|
|
certbot/certbot
|
|
certbot-ci/certbot_integration_tests
|
|
certbot-apache/certbot_apache
|
|
certbot-compatibility-test/certbot_compatibility_test
|
|
certbot-dns-cloudflare/certbot_dns_cloudflare
|
|
certbot-dns-cloudxns/certbot_dns_cloudxns
|
|
certbot-dns-digitalocean/certbot_dns_digitalocean
|
|
certbot-dns-dnsimple/certbot_dns_dnsimple
|
|
certbot-dns-dnsmadeeasy/certbot_dns_dnsmadeeasy
|
|
certbot-dns-gehirn/certbot_dns_gehirn
|
|
certbot-dns-google/certbot_dns_google
|
|
certbot-dns-linode/certbot_dns_linode
|
|
certbot-dns-luadns/certbot_dns_luadns
|
|
certbot-dns-nsone/certbot_dns_nsone
|
|
certbot-dns-ovh/certbot_dns_ovh
|
|
certbot-dns-rfc2136/certbot_dns_rfc2136
|
|
certbot-dns-route53/certbot_dns_route53
|
|
certbot-dns-sakuracloud/certbot_dns_sakuracloud
|
|
certbot-nginx/certbot_nginx
|
|
tests/lock_test.py
|
|
|
|
[testenv]
|
|
passenv =
|
|
CERTBOT_NO_PIN
|
|
commands_pre = python {toxinidir}/tools/pipstrap.py
|
|
commands =
|
|
!cover: {[base]install_and_test} {[base]all_packages}
|
|
!cover: python tests/lock_test.py
|
|
cover: {[base]install_packages}
|
|
cover: {[base]pip_install} certbot-apache[dev]
|
|
cover: python tox.cover.py
|
|
# We always recreate the virtual environment to avoid problems like
|
|
# https://github.com/certbot/certbot/issues/7745.
|
|
recreate = true
|
|
setenv =
|
|
PYTEST_ADDOPTS = {env:PYTEST_ADDOPTS:--numprocesses auto}
|
|
PYTHONHASHSEED = 0
|
|
|
|
[testenv:oldest]
|
|
# Setting basepython allows the tests to fail fast if that version of Python
|
|
# isn't available instead of potentially trying to use a newer version of
|
|
# Python which is unlikely to work.
|
|
basepython = python3.6
|
|
commands =
|
|
{[testenv]commands}
|
|
setenv =
|
|
{[testenv]setenv}
|
|
CERTBOT_OLDEST=1
|
|
|
|
[testenv:acme-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]install_and_test} acme[dev]
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:apache-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]install_and_test} certbot-apache
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:apache-v2-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]install_and_test} certbot-apache[dev]
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:certbot-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]install_and_test} certbot[dev]
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:dns-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]install_and_test} {[base]dns_packages}
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:nginx-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]install_and_test} certbot-nginx
|
|
python tests/lock_test.py
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:lint]
|
|
basepython = python3
|
|
# 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]install_packages}
|
|
{[base]pip_install} certbot[dev3]
|
|
python -m pylint --reports=n --rcfile=.pylintrc {[base]source_paths}
|
|
|
|
[testenv:mypy]
|
|
basepython = python3
|
|
commands =
|
|
{[base]install_packages}
|
|
{[base]pip_install} certbot[dev3]
|
|
mypy {[base]source_paths}
|
|
|
|
[testenv:apacheconftest]
|
|
commands =
|
|
{[base]pip_install} acme certbot certbot-apache
|
|
{toxinidir}/certbot-apache/tests/apache-conf-files/apache-conf-test --debian-modules
|
|
passenv =
|
|
SERVER
|
|
|
|
[testenv:apacheconftest-external-with-pebble]
|
|
# Run apacheconftest with pebble and Certbot outside of tox's virtual
|
|
# environment.
|
|
commands =
|
|
{[base]pip_install} certbot-ci
|
|
{toxinidir}/certbot-apache/tests/apache-conf-files/apache-conf-test-pebble.py --debian-modules
|
|
|
|
[testenv:apacheconftest-with-pebble]
|
|
commands =
|
|
{[base]pip_install} acme certbot certbot-apache
|
|
{[testenv:apacheconftest-external-with-pebble]commands}
|
|
|
|
[testenv:nginxroundtrip]
|
|
commands =
|
|
{[base]pip_install} acme certbot certbot-apache 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 =
|
|
python {toxinidir}/tests/modification-check.py
|
|
passenv = TARGET_BRANCH
|
|
|
|
[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 -t 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 -t nginx-compat -c nginx.tar.gz -vv -aie
|
|
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-compose
|
|
passenv = DOCKER_*
|
|
|
|
[testenv:integration]
|
|
commands =
|
|
{[base]pip_install} acme certbot certbot-nginx certbot-ci
|
|
pytest certbot-ci/certbot_integration_tests \
|
|
--acme-server={env:ACME_SERVER:pebble} \
|
|
--cov=acme --cov=certbot --cov=certbot_nginx --cov-report= \
|
|
--cov-config=certbot-ci/certbot_integration_tests/.coveragerc
|
|
coverage report --include 'certbot/*' --show-missing --fail-under=65
|
|
coverage report --include 'certbot-nginx/*' --show-missing --fail-under=74
|
|
passenv = DOCKER_*
|
|
|
|
[testenv:integration-certbot]
|
|
commands =
|
|
{[base]pip_install} acme certbot certbot-ci
|
|
pytest certbot-ci/certbot_integration_tests/certbot_tests \
|
|
--acme-server={env:ACME_SERVER:pebble} \
|
|
--cov=acme --cov=certbot --cov-report= \
|
|
--cov-config=certbot-ci/certbot_integration_tests/.coveragerc
|
|
coverage report --include 'certbot/*' --show-missing --fail-under=62
|
|
|
|
[testenv:integration-dns-rfc2136]
|
|
commands =
|
|
{[base]pip_install} acme certbot certbot-dns-rfc2136 certbot-ci
|
|
pytest certbot-ci/certbot_integration_tests/rfc2136_tests \
|
|
--acme-server=pebble --dns-server=bind \
|
|
--numprocesses=1 \
|
|
--cov=acme --cov=certbot --cov=certbot_dns_rfc2136 --cov-report= \
|
|
--cov-config=certbot-ci/certbot_integration_tests/.coveragerc
|
|
coverage report --include 'certbot/*' --show-missing --fail-under=45
|
|
coverage report --include 'certbot-dns-rfc2136/*' --show-missing --fail-under=87
|
|
|
|
[testenv:integration-external]
|
|
# Run integration tests with Certbot outside of tox's virtual environment.
|
|
commands =
|
|
{[base]pip_install} certbot-ci
|
|
pytest certbot-ci/certbot_integration_tests \
|
|
--acme-server={env:ACME_SERVER:pebble}
|
|
passenv = DOCKER_*
|
|
|
|
[testenv:integration-certbot-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]pip_install} certbot
|
|
{[base]pip_install} certbot-ci
|
|
pytest certbot-ci/certbot_integration_tests/certbot_tests \
|
|
--acme-server={env:ACME_SERVER:pebble}
|
|
passenv = DOCKER_*
|
|
setenv = {[testenv:oldest]setenv}
|
|
|
|
[testenv:integration-nginx-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]pip_install} certbot-nginx
|
|
{[base]pip_install} certbot-ci
|
|
pytest certbot-ci/certbot_integration_tests/nginx_tests \
|
|
--acme-server={env:ACME_SERVER:pebble}
|
|
passenv = DOCKER_*
|
|
setenv = {[testenv:oldest]setenv}
|
|
|
|
[testenv:test-farm-tests-base]
|
|
changedir = tests/letstest
|
|
deps = -rtests/letstest/requirements.txt
|
|
passenv =
|
|
AWS_*
|
|
setenv = AWS_DEFAULT_REGION=us-east-1
|
|
|
|
[testenv:test-farm-apache2]
|
|
changedir = {[testenv:test-farm-tests-base]changedir}
|
|
commands = {toxinidir}/tools/retry.sh python multitester.py apache2_targets.yaml {env:AWS_EC2_PEM_FILE} SET_BY_ENV scripts/test_apache2.sh --repo {toxinidir}
|
|
deps = {[testenv:test-farm-tests-base]deps}
|
|
passenv = {[testenv:test-farm-tests-base]passenv}
|
|
setenv = {[testenv:test-farm-tests-base]setenv}
|
|
|
|
[testenv:test-farm-leauto-upgrades]
|
|
changedir = {[testenv:test-farm-tests-base]changedir}
|
|
commands = {toxinidir}/tools/retry.sh python multitester.py auto_targets.yaml {env:AWS_EC2_PEM_FILE} SET_BY_ENV scripts/test_leauto_upgrades.sh --repo {toxinidir}
|
|
deps = {[testenv:test-farm-tests-base]deps}
|
|
passenv = {[testenv:test-farm-tests-base]passenv}
|
|
setenv = {[testenv:test-farm-tests-base]setenv}
|
|
|
|
[testenv:test-farm-certonly-standalone]
|
|
changedir = {[testenv:test-farm-tests-base]changedir}
|
|
commands = {toxinidir}/tools/retry.sh python multitester.py auto_targets.yaml {env:AWS_EC2_PEM_FILE} SET_BY_ENV scripts/test_letsencrypt_auto_certonly_standalone.sh --repo {toxinidir}
|
|
deps = {[testenv:test-farm-tests-base]deps}
|
|
passenv = {[testenv:test-farm-tests-base]passenv}
|
|
setenv = {[testenv:test-farm-tests-base]setenv}
|
|
|
|
[testenv:test-farm-sdists]
|
|
changedir = {[testenv:test-farm-tests-base]changedir}
|
|
commands = {toxinidir}/tools/retry.sh python multitester.py targets.yaml {env:AWS_EC2_PEM_FILE} SET_BY_ENV scripts/test_sdists.sh --repo {toxinidir}
|
|
deps = {[testenv:test-farm-tests-base]deps}
|
|
passenv = {[testenv:test-farm-tests-base]passenv}
|
|
setenv = {[testenv:test-farm-tests-base]setenv}
|