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
|
For some tests, python >= 3.5 is required; they will be skipped if it's not
|
||||||
available.
|
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
|
## 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
|
While they are not exhaustive, they are useful to catch regressions and track
|
||||||
improvements on the main code paths.
|
improvements on the main code paths.
|
||||||
|
|
||||||
|
|
||||||
## Fuzz tests
|
## Fuzz tests
|
||||||
|
|
||||||
Some Go packages also have instrumentation to run fuzz testing against them,
|
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
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
mkdir -p .logs
|
mkdir -p .logs
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
if ! .exim4/exim4 --version > /dev/null; then
|
if ! .exim4/exim4 --version > /dev/null; then
|
||||||
skip "exim4 binary at .exim4/exim4 is not functional"
|
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
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
generate_certs_for testserver
|
generate_certs_for testserver
|
||||||
add_user user@testserver secretpassword
|
add_user user@testserver secretpassword
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
generate_certs_for testserver
|
generate_certs_for testserver
|
||||||
add_user user@testserver secretpassword
|
add_user user@testserver secretpassword
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
rm -rf .data-A .data-B .mail
|
rm -rf .data-A .data-B .mail
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
ñoños localhost
|
|
||||||
@@ -4,6 +4,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
rm -rf .data-A .data-B .mail
|
rm -rf .data-A .data-B .mail
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
generate_certs_for testserver
|
generate_certs_for testserver
|
||||||
add_user user@testserver secretpassword
|
add_user user@testserver secretpassword
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
if ! dovecot --version > /dev/null; then
|
if ! dovecot --version > /dev/null; then
|
||||||
skip "dovecot not installed"
|
skip "dovecot not installed"
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
testserver localhost
|
|
||||||
@@ -4,6 +4,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
generate_certs_for testserver
|
generate_certs_for testserver
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
# Build with the DNS override, so we can fake DNS records.
|
# Build with the DNS override, so we can fake DNS records.
|
||||||
export GOTAGS="dnsoverride"
|
export GOTAGS="dnsoverride"
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
for binary in dkimsign dkimverify dkimkeygen; do
|
for binary in dkimsign dkimverify dkimkeygen; do
|
||||||
if ! which $binary > /dev/null; then
|
if ! which $binary > /dev/null; then
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
# Build with the DNS override, so we can fake DNS records.
|
# Build with the DNS override, so we can fake DNS records.
|
||||||
export GOTAGS="dnsoverride"
|
export GOTAGS="dnsoverride"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
mkdir -p .logs
|
mkdir -p .logs
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ set -e
|
|||||||
. $(dirname ${0})/../util/lib.sh
|
. $(dirname ${0})/../util/lib.sh
|
||||||
|
|
||||||
init
|
init
|
||||||
|
check_hostaliases
|
||||||
|
|
||||||
mkdir -p .logs
|
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
|
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.
|
# Wait until there's something listening on the given port.
|
||||||
function wait_until_ready() {
|
function wait_until_ready() {
|
||||||
PORT=$1
|
PORT=$1
|
||||||
|
|||||||
Reference in New Issue
Block a user