1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-17 14:37:02 +00:00

test: Skip integration tests if $HOSTALIASES is not functional

Most integration tests depend on the $HOSTALIASES environment variable
being functional. That variable works on most systems, but not all. In
particular, systems with `systemd-resolved` can cause the variable to be
ignored.

This was reported by Alex Ellwein in
https://github.com/albertito/chasquid/issues/20.

This patch makes the affected tests to be skipped if $HOSTALIASES is not
working properly. It also removes unnecessary hosts files from tests
which don't need it, and documents this behaviour.

Thanks to Alex Ellwein and foxcpp@ for reporting and helping investigate
this issue!
This commit is contained in:
Alberto Bertogli
2021-07-15 00:20:21 +01:00
parent 4eaf5b38c8
commit d78056aff5
22 changed files with 89 additions and 5 deletions

62
test/util/check-hostaliases Executable file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/env python3
import argparse
import tempfile
import os
import socket
import subprocess
import sys
parser = argparse.ArgumentParser(
description="Check that $HOSTALIASES is working"
)
parser.add_argument(
"--child",
action="store_true",
help="run in child mode, for internal use only",
)
parser.add_argument(
"-v",
action="store_true",
help="verbose mode",
)
args = parser.parse_args()
def dprint(*a):
if args.v:
print(*a)
if args.child:
dprint("child mode, getting hosts")
lo = socket.gethostbyname("localhost")
ts = socket.gethostbyname("testserver")
dprint(ts, lo, ts == lo)
if ts != lo:
sys.exit(1)
else:
dprint("## parent mode")
# Create the hostaliases file.
fd = tempfile.NamedTemporaryFile(mode="w+")
fd.write("testserver localhost\n")
fd.flush()
# Re-execute ourselves with --child, to do the check.
env = dict(os.environ)
env["HOSTALIASES"] = fd.name
cargs = [sys.argv[0], "--child"]
if args.v:
cargs.append("-v")
cmd = subprocess.run(
cargs,
env=env,
text=True,
encoding="ascii",
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
dprint("## child output:")
dprint(cmd.stdout)
dprint("## child returned", cmd.returncode)
sys.exit(cmd.returncode)

View File

@@ -146,6 +146,12 @@ function fail() {
exit 1
}
function check_hostaliases() {
if ! "${UTILDIR}/check-hostaliases"; then
skip '$HOSTALIASES not working (probably systemd-resolved)'
fi
}
# Wait until there's something listening on the given port.
function wait_until_ready() {
PORT=$1