From 35e35980b468d40b676a9abd239cde78313c98e2 Mon Sep 17 00:00:00 2001 From: yukkop Date: Fri, 1 May 2026 22:19:43 +0000 Subject: [PATCH] test: fix: . --- package/sentinèlla/watcher.sh | 6 ++- .../20250101000002-add-comments/up.sql | 2 +- .../up/entrypoint.sql | 2 +- .../sentinèlla/test/watcher-state-file.sh | 46 +++++++++---------- 4 files changed, 29 insertions(+), 27 deletions(-) diff --git a/package/sentinèlla/watcher.sh b/package/sentinèlla/watcher.sh index bc779ad..10ddc32 100644 --- a/package/sentinèlla/watcher.sh +++ b/package/sentinèlla/watcher.sh @@ -42,6 +42,8 @@ PEERS_TOKEN=${PEERS_TOKEN:-} TG_TOKEN=${TG_TOKEN:-} TG_CHAT_ID=${TG_CHAT_ID:-} SPAM=${SPAM:-0} +DIG=${DIG:-dig} +GETENT=${GETENT:-getent} STATE_DIR=${STATE_DIR:-/var/lib/sentinella} mkdir -p "$STATE_DIR" 2>/dev/null || { @@ -81,7 +83,7 @@ is_local_ip() { # Emits "host port ip" per non-local peer, one per line. resolve_peers() { # dig +short SRV output: " ." - _srv_out=$(dig +short +time=3 +tries=2 SRV "$PEERS_SRV" 2>&1) || { + _srv_out=$($DIG +short +time=3 +tries=2 SRV "$PEERS_SRV" 2>&1) || { log warn "dig SRV ${WHITE}${PEERS_SRV}${NC} failed: ${_srv_out}" return 0 } @@ -94,7 +96,7 @@ resolve_peers() { printf '%s\n' "$_parsed" \ | while IFS=' ' read -r port target; do [ -n "$target" ] || continue - ip=$(getent hosts "$target" | awk '{print $1; exit}') + ip=$($GETENT hosts "$target" | awk '{print $1; exit}') [ -n "$ip" ] || { log warn "could not resolve ${WHITE}${target}${NC}"; continue; } is_local_ip "$ip" && continue printf '%s %s %s\n' "$target" "$port" "$ip" diff --git a/test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000002-add-comments/up.sql b/test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000002-add-comments/up.sql index 5737192..32ef822 100644 --- a/test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000002-add-comments/up.sql +++ b/test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000002-add-comments/up.sql @@ -5,5 +5,5 @@ CREATE TABLE comments ( user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, content TEXT NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW() -); +) INHERITS ("hectic"."created_at"); diff --git a/test/package/migrator/test/postgresql/migrate-multi-file/migration/20250101000001-create-items/up/entrypoint.sql b/test/package/migrator/test/postgresql/migrate-multi-file/migration/20250101000001-create-items/up/entrypoint.sql index c6a6686..825458c 100644 --- a/test/package/migrator/test/postgresql/migrate-multi-file/migration/20250101000001-create-items/up/entrypoint.sql +++ b/test/package/migrator/test/postgresql/migrate-multi-file/migration/20250101000001-create-items/up/entrypoint.sql @@ -1,4 +1,4 @@ CREATE TABLE items ( id SERIAL PRIMARY KEY, name TEXT NOT NULL -); +) INHERITS ("hectic"."created_at"); diff --git a/test/package/sentinèlla/test/watcher-state-file.sh b/test/package/sentinèlla/test/watcher-state-file.sh index 4bdba5c..77217bb 100644 --- a/test/package/sentinèlla/test/watcher-state-file.sh +++ b/test/package/sentinèlla/test/watcher-state-file.sh @@ -3,9 +3,9 @@ # # Setup: # - Start a probe on 127.0.0.1:15990 -# - Stub getent to resolve peers.test -> 127.0.0.1 (the probe) and 10.0.0.1 (fake peer) -# - Stub hostname to return 10.0.0.1 as the local IP so 10.0.0.1 is excluded -# and 127.0.0.1 (the real probe) is kept as a peer +# - Stub dig to return SRV record for _sentinella._tcp.peers.test +# - Stub getent to resolve node-a.peers.test -> 127.0.0.1 (the probe) +# - Set SELF=10.0.0.1 so the local IP is excluded and 127.0.0.1 is kept as peer # - Assert a state file appears in STATE_DIR within 15s log notice "test case: ${WHITE}watcher writes state file after first successful poll" @@ -22,46 +22,46 @@ sleep 2 # Create stubs directory stub_dir=$(mktemp -d) -# Stub getent: returns two IPs for peers.test +# Stub dig: returns SRV record +# The watcher calls: $DIG +short +time=3 +tries=2 SRV "$PEERS_SRV" +# SRV format: "priority weight port target." +cat >"${stub_dir}/dig" <<'EOF' +#!/bin/sh +printf '0 10 15990 node-a.peers.test.\n' +EOF +chmod +x "${stub_dir}/dig" + +# Stub getent: resolves the SRV target to the probe IP +# The watcher calls: $GETENT hosts "$target" cat >"${stub_dir}/getent" <<'EOF' #!/bin/sh -if [ "$1" = "hosts" ] && [ "$2" = "peers.test" ]; then - printf '127.0.0.1 peers.test\n' - printf '10.0.0.1 peers.test\n' +if [ "$1" = "hosts" ] && [ "$2" = "node-a.peers.test" ]; then + printf '127.0.0.1 node-a.peers.test\n' else /usr/bin/getent "$@" fi EOF chmod +x "${stub_dir}/getent" -# Stub hostname: -I returns 10.0.0.1 so watcher excludes it and keeps 127.0.0.1 -cat >"${stub_dir}/hostname" <<'EOF' -#!/bin/sh -case "$1" in - -I) printf '10.0.0.1\n' ;; - *) /bin/hostname "$@" ;; -esac -EOF -chmod +x "${stub_dir}/hostname" - state_dir=$(mktemp -d) -export PEERS_DNS="peers.test" -export PEERS_PORT="$PORT" +export PEERS_SRV="_sentinella._tcp.peers.test" export PEERS_SCHEME="http" export TG_TOKEN="test-token" export TG_CHAT_ID="test-chat" export STATE_DIR="$state_dir" export POLLING_INTERVAL_SEC="1" export SPAM="0" -unset SELF # ensure auto-detection is used +export SELF="10.0.0.1" # exclude this IP, keep 127.0.0.1 as peer +export DIG="${stub_dir}/dig" +export GETENT="${stub_dir}/getent" -PATH="${stub_dir}:${PATH}" watcher & +watcher & watcher_pid=$! log info "waiting for state file in $state_dir ..." -peer_url="http://127.0.0.1:${PORT}" -state_file="${state_dir}/$(printf '%s' "$peer_url" | cksum | awk '{print $1}').state" +peer_host="node-a.peers.test" +state_file="${state_dir}/$(printf '%s' "$peer_host" | cksum | awk '{print $1}').state" wait_for_file "$state_file" 15 state=$(cat "$state_file")