pivilion/tests/test-hostname.sh

56 lines
2 KiB
Bash
Raw Permalink Normal View History

2026-07-01 14:24:12 +02:00
#!/bin/bash
set -euo pipefail
ROOT=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT
export PIVILION_HOSTNAME_FILE="$TMP/hostname"
export PIVILION_HOSTS_FILE="$TMP/hosts"
export PIVILION_HOSTNAME_COMMAND="$TMP/hostname-command"
export MOCK_HOSTNAME_STATE="$TMP/kernel-hostname"
export MOCK_HOSTNAME_CALLS="$TMP/hostname-calls"
cat > "$PIVILION_HOSTS_FILE" <<'EOF'
127.0.0.1 localhost
127.0.1.1 old-name old-alias
192.0.2.1 example.test
127.0.1.1 stale-duplicate
EOF
printf 'old-name\n' > "$PIVILION_HOSTNAME_FILE"
printf 'old-name\n' > "$MOCK_HOSTNAME_STATE"
cat > "$PIVILION_HOSTNAME_COMMAND" <<'EOF'
#!/bin/sh
if [ "${1:-}" = -s ]; then cat "$MOCK_HOSTNAME_STATE"; exit 0; fi
printf '%s\n' "$1" > "$MOCK_HOSTNAME_STATE"
printf '%s\n' "$1" >> "$MOCK_HOSTNAME_CALLS"
EOF
chmod +x "$PIVILION_HOSTNAME_COMMAND"
source "$ROOT/usr/local/lib/pivilion/hostname.sh"
for mode in hotspot onion; do
name="pivilion-$mode"
pivilion_apply_hostname "$name"
[ "$(cat "$PIVILION_HOSTNAME_FILE")" = "$name" ]
[ "$(awk '$1 == "127.0.1.1" { print $2 }' "$PIVILION_HOSTS_FILE")" = "$name" ]
[ "$(awk '$1 == "127.0.1.1" { count++ } END { print count+0 }' "$PIVILION_HOSTS_FILE")" -eq 1 ]
[ "$("$PIVILION_HOSTNAME_COMMAND" -s)" = "$name" ]
before=$(sha256sum "$PIVILION_HOSTNAME_FILE" "$PIVILION_HOSTS_FILE")
inodes=$(stat -c '%i' "$PIVILION_HOSTNAME_FILE" "$PIVILION_HOSTS_FILE")
calls=$(wc -l < "$MOCK_HOSTNAME_CALLS")
pivilion_apply_hostname "$name"
[ "$before" = "$(sha256sum "$PIVILION_HOSTNAME_FILE" "$PIVILION_HOSTS_FILE")" ]
[ "$inodes" = "$(stat -c '%i' "$PIVILION_HOSTNAME_FILE" "$PIVILION_HOSTS_FILE")" ]
[ "$calls" -eq "$(wc -l < "$MOCK_HOSTNAME_CALLS")" ]
done
grep -Fqx '192.0.2.1 example.test' "$PIVILION_HOSTS_FILE"
PIVILION_HOSTNAME_FILE="$TMP/missing/hostname"
export PIVILION_HOSTNAME_FILE
if pivilion_apply_hostname broken >"$TMP/failure.out" 2>&1; then exit 1; fi
grep -q 'Could not create a temporary file' "$TMP/failure.out"