post-check and docs for NetworkManager WANs

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KqhjP7nud5gdBg25zCiRk9
This commit is contained in:
2026-09-23 19:06:43 -04:00
co-authored by Claude Sonnet 5
parent 50ac006894
commit 2601472576
3 changed files with 105 additions and 0 deletions
+33
View File
@@ -433,5 +433,38 @@ done
sed 's/^STARLINK_IFACE=.*/STARLINK_IFACE="a'"'"'b"/' hosts/van.conf > "$gs/bad.conf"
if ./deploy.sh --check "$gs/bad.conf" >/dev/null 2>&1; then bad "STARLINK_IFACE with a quote must be rejected"; else ok "STARLINK_IFACE with a quote is rejected"; fi
rm -rf "$gs"
# 19. post_check NetworkManager additions
tc=$(mktemp -d)
sed 's/^ENABLE_NM_WAN=.*/ENABLE_NM_WAN=0/' hosts/van.conf > "$tc/off.conf"
pc=$(POSTCHECK_WAIT=0 ./deploy.sh --post-check "$tc/off.conf" 2>&1) || true
if ! echo "$pc" | grep -q '^== post-deploy check ==$'; then bad "19: --post-check (ENABLE_NM_WAN=0) did not run"
elif echo "$pc" | grep -q 'NetworkManager'; then bad "19: --post-check mentions NetworkManager with ENABLE_NM_WAN=0"
else ok "19: --post-check omits NetworkManager when ENABLE_NM_WAN=0"; fi
pc=$(POSTCHECK_WAIT=0 ./deploy.sh --post-check hosts/van.conf 2>&1) || true
echo "$pc" | grep -q 'NetworkManager' && ok "19: --post-check mentions NetworkManager when ENABLE_NM_WAN=1" || bad "19: --post-check lacks NetworkManager with ENABLE_NM_WAN=1"
# 19b. apply status file (VANLINK_APPLY_STATUS)
pcs() { POSTCHECK_WAIT=0 VANLINK_APPLY_STATUS="$1" ./deploy.sh --post-check hosts/van.conf 2>&1 || true; }
echo "ok 2026-01-01T00:00:00+00:00" > "$tc/st"
pcs "$tc/st" | grep -qF ' ok last --apply-network: ok 2026-01-01T00:00:00+00:00' && ok "19b: status ok -> ok line" || bad "19b: status ok line missing"
for w in "running 2026-01-01T00:00:00+00:00 /bak" "rolled-back 2026-01-01T00:00:00+00:00 no-uplink" "rollback-failed 2026-01-01T00:00:00+00:00 boom"; do
echo "$w" > "$tc/st"
pcs "$tc/st" | grep -qF -- "-> post-deploy: last --apply-network status: $w — see /var/log/vanlink-apply-network.log" && ok "19b: status ${w%% *} -> warn" || bad "19b: status ${w%% *} warn missing"
done
pcs "$tc/none" | grep -q 'last --apply-network' && bad "19b: absent status file must print nothing" || ok "19b: absent status file prints nothing"
# 19c. van-failover state.json (VANLINK_FAILOVER_STATE, VANLINK_SYSNET)
mkdir -p "$tc/sys/dev1" "$tc/sys/dev2"
fo() { POSTCHECK_WAIT=0 VANLINK_SYSNET="$tc/sys" VANLINK_FAILOVER_STATE="$1" VANLINK_APPLY_STATUS="$tc/none" ./deploy.sh --post-check hosts/van.conf 2>&1 || true; }
cat > "$tc/f.json" <<'J'
{"wans":[{"name":"starlink","device":"dev1","present":false},{"name":"cell","device":"dev2","present":true},
{"name":"wifi","device":"","present":false},{"name":"gone","device":"nodev","present":false}]}
J
o=$(fo "$tc/f.json")
echo "$o" | grep -q -- '-> post-deploy: .*WAN starlink' && ok "19c: existing device present:false -> warn" || bad "19c: starlink warn missing"
echo "$o" | grep -q ' ok .*WAN cell' && ok "19c: present:true -> ok" || bad "19c: cell ok missing"
echo "$o" | grep -qE 'WAN (wifi|gone)' && bad "19c: empty/nonexistent device must be ignored" || ok "19c: empty/nonexistent device ignored"
echo '{ not json' > "$tc/bad.json"
o=$(fo "$tc/bad.json"); [ "$(echo "$o" | grep -- '-> post-deploy: .*failover state' | sort -u | wc -l)" = 1 ] && ok "19c: invalid JSON -> one warn" || bad "19c: invalid JSON warn count"
o=$(fo "$tc/nofile"); [ "$(echo "$o" | grep -- '-> post-deploy: .*failover state' | sort -u | wc -l)" = 1 ] && ok "19c: missing file -> one warn" || bad "19c: missing file warn count"
rm -rf "$tc"
exit "$fail"