Run tests sequentially

Run tests sequentially, because in subsequent commits we will add
Qt tests that do not play nice when `pytest` creates new processes [1].

Also, remove the pytest wrapper, whose main task was to decide if tests
can run in parallel [2].

[1]: https://bugreports.qt.io/projects/PYSIDE/issues/PYSIDE-2393
[2]: https://github.com/freedomofpress/dangerzone/issues/217
This commit is contained in:
Alex Pyrgiotis 2023-07-24 13:48:56 +03:00
parent a1bbcdf2b6
commit f58e31efe6
No known key found for this signature in database
GPG key ID: B6C15EBA0357C9AA
2 changed files with 2 additions and 62 deletions

View file

@ -37,7 +37,8 @@ lint-apply: lint-black-apply lint-isort-apply ## apply all the linter's suggesti
.PHONY: test
test:
python ./dev_scripts/pytest-wrapper.py -v --cov --ignore dev_scripts
pytest -v --cov --ignore dev_scripts
# Makefile self-help borrowed from the securedrop-client project
# Explaination of the below shell command should it ever break.

View file

@ -1,61 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# PyTest Wrapper script - temporary solution to tests failing non-deterministically [1]
# This is only fixed in podman v4.3.0. The wrapper essentially runs the tests in sequence
# when the podman version is lower.
#
# [1]: https://github.com/freedomofpress/dangerzone/issues/217
# FIXME this whole script should be removed and the respective Makefile calling line
# replaced once all supported platforms have a podman version >= v4.3.0.
import re
import subprocess
import sys
from pkg_resources import parse_version
from dangerzone.isolation_provider.container import Container
PODMAN_MIN_VERSION = "4.3.0"
def get_podman_version():
result = subprocess.run(
["podman", "version", "--format", "'{{.Client.Version}}'"], capture_output=True
)
version = result.stdout.decode()[:-1] # trim trailing \n
return version.split("-dev")[0] # exclude "-dev" suffix from version
def run_tests(pytest_args):
cmd = ["pytest"] + pytest_args
try:
subprocess.run(cmd, check=True)
except subprocess.CalledProcessError:
sys.exit(1)
def run_tests_in_parallel(pytest_args):
print("running tests in parallel")
run_tests(pytest_args + ["-n", "4"])
def run_tests_in_sequence(pytest_args):
print("running tests sequentially")
run_tests(pytest_args)
if __name__ == "__main__":
pytest_args = sys.argv[1:] # exclude program names
if Container.get_runtime_name() == "docker":
run_tests_in_parallel(pytest_args)
else:
podman_ver_minimum_parallel = parse_version(PODMAN_MIN_VERSION)
podman_ver_current = parse_version(get_podman_version())
if podman_ver_current >= podman_ver_minimum_parallel:
run_tests_in_parallel(pytest_args)
else:
run_tests_in_sequence(pytest_args)