You must login to view /lordwelch/chasquid/commit/216cf47ffa1d6b6d6b7e763275a41e1ec4f42273?files=chasquid.go.
The GitHub option should be usable for most people, it only links via username.

Files
chasquid/test/util/check-hostaliases
Alberto Bertogli d78056aff5 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!
2021-07-15 00:20:21 +01:00

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)