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:
@@ -46,6 +46,12 @@ if the dependencies are not found:
|
||||
For some tests, python >= 3.5 is required; they will be skipped if it's not
|
||||
available.
|
||||
|
||||
Most tests depend on the
|
||||
[`$HOSTALIASES`](https://man7.org/linux/man-pages/man7/hostname.7.html)
|
||||
environment variable being functional, and will be skipped if it isn't. This
|
||||
works by default in most Linux systems, but note that the use of
|
||||
`systemd-resolved` can prevent it from working properly.
|
||||
|
||||
|
||||
## Stress tests
|
||||
|
||||
@@ -55,6 +61,7 @@ load against chasquid to measure performance and resource consumption.
|
||||
While they are not exhaustive, they are useful to catch regressions and track
|
||||
improvements on the main code paths.
|
||||
|
||||
|
||||
## Fuzz tests
|
||||
|
||||
Some Go packages also have instrumentation to run fuzz testing against them,
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
testserver localhost
|
||||
@@ -1 +0,0 @@
|
||||
testserver localhost
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
mkdir -p .logs
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
if ! .exim4/exim4 --version > /dev/null; then
|
||||
skip "exim4 binary at .exim4/exim4 is not functional"
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
testserver localhost
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
generate_certs_for testserver
|
||||
add_user user@testserver secretpassword
|
||||
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
generate_certs_for testserver
|
||||
add_user user@testserver secretpassword
|
||||
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
rm -rf .data-A .data-B .mail
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
ñoños localhost
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
rm -rf .data-A .data-B .mail
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
generate_certs_for testserver
|
||||
add_user user@testserver secretpassword
|
||||
|
||||
@@ -10,6 +10,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
if ! dovecot --version > /dev/null; then
|
||||
skip "dovecot not installed"
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
testserver localhost
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
generate_certs_for testserver
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
# Build with the DNS override, so we can fake DNS records.
|
||||
export GOTAGS="dnsoverride"
|
||||
|
||||
@@ -7,6 +7,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
for binary in dkimsign dkimverify dkimkeygen; do
|
||||
if ! which $binary > /dev/null; then
|
||||
|
||||
@@ -8,6 +8,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
# Build with the DNS override, so we can fake DNS records.
|
||||
export GOTAGS="dnsoverride"
|
||||
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
mkdir -p .logs
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
. $(dirname ${0})/../util/lib.sh
|
||||
|
||||
init
|
||||
check_hostaliases
|
||||
|
||||
mkdir -p .logs
|
||||
|
||||
|
||||
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