From d631ecdde7ca2bc371d26b98910f12ae3d191ce0 Mon Sep 17 00:00:00 2001 From: Tom Krizek Date: Mon, 19 Dec 2022 17:44:35 +0100 Subject: [PATCH] testcrypto.sh: run in TMPDIR if possible Avoid creating any temporary files in the current workdir. Additional/changing files in the bin/tests/system directory are problematic for pytest/xdist collection phase, which assumes the list of files doesn't change between the collection phase of the main pytest thread and the subsequent collection phase of the xdist worker threads. Since the testcrypto.sh is also called during pytest initialization through conf.sh.common (to detect feature support), this could occasionally cause a race condition when the list of files would be different for the main pytest thread and the xdist worker. (cherry picked from commit 61330a7863c0dfe65f3add97bd363ec4998066aa) --- bin/tests/system/get_algorithms.py | 5 ++++- bin/tests/system/testcrypto.sh | 12 +++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/bin/tests/system/get_algorithms.py b/bin/tests/system/get_algorithms.py index 3bef92d5d5..529487a8ac 100755 --- a/bin/tests/system/get_algorithms.py +++ b/bin/tests/system/get_algorithms.py @@ -111,7 +111,10 @@ def is_supported(alg: Algorithm) -> bool: f"{TESTCRYPTO} -q {alg.name}", shell=True, check=True, - env={"KEYGEN": KEYGEN}, + env={ + "KEYGEN": KEYGEN, + "TMPDIR": os.getenv("TMPDIR", "/tmp"), + }, stdout=subprocess.DEVNULL, ) except subprocess.CalledProcessError as exc: diff --git a/bin/tests/system/testcrypto.sh b/bin/tests/system/testcrypto.sh index dd1d583527..020aa9ab72 100755 --- a/bin/tests/system/testcrypto.sh +++ b/bin/tests/system/testcrypto.sh @@ -15,6 +15,7 @@ SYSTEMTESTTOP=${SYSTEMTESTTOP:=..} prog=$0 args="" quiet=0 +dir="" msg="cryptography" if test -z "$KEYGEN"; then @@ -75,9 +76,18 @@ if test -z "$alg"; then exit 1 fi +if test -n "$TMPDIR"; then + dir=$(mktemp -d "$TMPDIR/XXXXXX") + args="$args -K $dir" +fi + if $KEYGEN $args $alg foo > /dev/null 2>&1 then - rm -f Kfoo* + if test -z "$dir"; then + rm -f Kfoo* + else + rm -rf "$dir" + fi else if test $quiet -eq 0; then echo_i "This test requires support for $msg" >&2