mirror of
https://github.com/certbot/certbot.git
synced 2026-06-03 13:59:02 -04:00
`lock_test.py` is a weird, heavily customized, standalone testing relic that's giving me trouble because the name currently conflicts with `certbot/tests/lock_test.py`. Moving `certbot/tests` inside the Certbot package as discussed at https://github.com/certbot/certbot/issues/7909#issuecomment-1448675456 would avoid this, however, this is at least somewhat blocked on getting that test code passing lint and mypy checks again because we run those checks on the entirety of the Certbot package 🙃 Since `lock_test.py` could probably stand to be rewritten/refactored anyway, I took this approach. What I did is I rewrote something largely equivalent to `lock_test.py` inside Certbot's unit tests. I chose not to do this in `certbot-ci` because its not necessary to have an ACME server available. We're no longer explicitly testing things with the nginx plugin here like we were in `lock_test.py`, however, we are checking that `prepare` is called on the plugin at the right time and I added comments about the importance of checking that we lock the directory during the call to `prepare` in the Apache and nginx test code. As a bonus, this fixes https://github.com/certbot/certbot/issues/8121.
263 lines
9.7 KiB
INI
263 lines
9.7 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 = {cover,lint,mypy}-{win,posix}
|
|
|
|
[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
|
|
# Packages are listed on one line because tox seems to have inconsistent
|
|
# behavior with substitutions that contain line continuations, see
|
|
# https://github.com/tox-dev/tox/issues/2069 for more info.
|
|
dns_packages = certbot-dns-cloudflare 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
|
|
win_all_packages = acme[test] certbot[test] {[base]dns_packages} certbot-nginx
|
|
all_packages = {[base]win_all_packages} certbot-apache
|
|
source_paths = acme/acme certbot/certbot certbot-apache/certbot_apache certbot-ci/certbot_integration_tests certbot-ci/snap_integration_tests certbot-ci/windows_installer_integration_tests certbot-compatibility-test/certbot_compatibility_test certbot-dns-cloudflare/certbot_dns_cloudflare 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
|
|
|
|
[testenv]
|
|
passenv =
|
|
CERTBOT_NO_PIN
|
|
platform =
|
|
win: win32
|
|
posix: ^(?!.*win32).*$
|
|
commands_pre = python {toxinidir}/tools/pipstrap.py
|
|
commands =
|
|
win: {[base]install_and_test} {[base]win_all_packages}
|
|
!win: {[base]install_and_test} {[base]all_packages}
|
|
# 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.
|
|
#
|
|
# This version should be kept in sync with the one declared in
|
|
# tools/pinning/oldest/pyproject.toml.
|
|
basepython = python3.7
|
|
commands =
|
|
{[testenv]commands}
|
|
setenv =
|
|
{[testenv]setenv}
|
|
CERTBOT_OLDEST=1
|
|
|
|
[testenv:acme-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]install_and_test} acme[test]
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:apache-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]pip_install} acme[test] certbot[test] certbot-apache
|
|
pytest certbot-apache
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:apache-v2-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]pip_install} acme[test] certbot[test] certbot-apache[dev]
|
|
pytest certbot-apache
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:certbot-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]pip_install} acme[test] certbot[test]
|
|
pytest certbot
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:dns-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]pip_install} acme[test] certbot[test] {[base]dns_packages}
|
|
pytest {[base]dns_packages}
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:nginx-oldest]
|
|
basepython =
|
|
{[testenv:oldest]basepython}
|
|
commands =
|
|
{[base]pip_install} acme[test] certbot[test] certbot-nginx
|
|
pytest certbot-nginx
|
|
setenv =
|
|
{[testenv:oldest]setenv}
|
|
|
|
[testenv:cover{,-win,-posix}]
|
|
commands =
|
|
win: {[base]pip_install} {[base]win_all_packages}
|
|
!win: {[base]pip_install} {[base]all_packages} certbot-apache[dev]
|
|
python tox.cover.py
|
|
|
|
[testenv:lint{,-win,-posix}]
|
|
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 =
|
|
win: {[base]pip_install} {[base]win_all_packages}
|
|
!win: {[base]pip_install} {[base]all_packages}
|
|
python -m pylint --reports=n --rcfile=.pylintrc {[base]source_paths}
|
|
|
|
[testenv:mypy{,-win,-posix}]
|
|
basepython = python3
|
|
commands =
|
|
win: {[base]pip_install} {[base]win_all_packages}
|
|
!win: {[base]pip_install} {[base]all_packages} certbot-ci
|
|
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
|
|
|
|
[testenv:modification]
|
|
commands =
|
|
python {toxinidir}/tests/modification-check.py
|
|
|
|
[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=86
|
|
|
|
[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} acme certbot 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} acme certbot certbot-nginx 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 = letstest
|
|
# The package to install is in the current working directory because of the
|
|
# value of changedir.
|
|
commands = {[base]pip_install} .
|
|
passenv =
|
|
AWS_*
|
|
setenv = AWS_DEFAULT_REGION=us-east-1
|
|
|
|
[testenv:test-farm-apache2]
|
|
changedir = {[testenv:test-farm-tests-base]changedir}
|
|
commands =
|
|
{[testenv:test-farm-tests-base]commands}
|
|
{toxinidir}/tools/retry.sh letstest targets/targets.yaml {env:AWS_EC2_PEM_FILE} SET_BY_ENV scripts/test_apache2.sh --repo {toxinidir}
|
|
passenv = {[testenv:test-farm-tests-base]passenv}
|
|
setenv = {[testenv:test-farm-tests-base]setenv}
|