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:
62
test/util/check-hostaliases
Executable file
62
test/util/check-hostaliases
Executable 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)
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user