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!
63 lines
1.3 KiB
Python
Executable File
63 lines
1.3 KiB
Python
Executable File
#!/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)
|