90 lines
3.5 KiB
Bash
90 lines
3.5 KiB
Bash
#!/bin/sh
|
|||
|
|
# Zusicherungen fuer scan-loop.sh (#0106), ohne Trivy und ohne Netz:
|
||
|
|
# sh cve/test_scan_loop.sh
|
||
|
|
#
|
||
|
|
# Gate 3 hatte diese Faelle bei test_targets.py vorgesehen. Sie stehen hier,
|
||
|
|
# weil die Logik in POSIX-Shell lebt - ein Python-Test haette sie nachgebaut
|
||
|
|
# statt geprueft, und ein nachgebauter Test prueft den Nachbau.
|
||
|
|
#
|
||
|
|
# ⚠️ Der gefaehrliche Fall ist nicht "loescht zu wenig", sondern "loescht zu
|
||
|
|
# viel": Ohne Zielliste darf NICHTS entfernt werden, sonst raeumt ein Neustart
|
||
|
|
# waehrend eines Prometheus-Ausfalls den gesamten Bestand ab. Deshalb steht zu
|
||
|
|
# jeder Zusicherung ihre Gegenprobe.
|
||
|
|
set -u
|
||
|
|
FEHLER=0
|
||
|
|
ARBEIT=$(mktemp -d)
|
||
|
|
trap 'rm -rf "$ARBEIT"' EXIT
|
||
|
|
|
||
|
|
pruefe() { # name erwartet ist
|
||
|
|
if [ "$2" = "$3" ]; then
|
||
|
|
echo " ok $1"
|
||
|
|
else
|
||
|
|
echo " FEHL $1 — erwartet '$2', bekommen '$3'"
|
||
|
|
FEHLER=$((FEHLER + 1))
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# ⚠️ Die ECHTE runde() wird geladen, nicht nachgebaut. Ein nachgebauter Test
|
||
|
|
# prueft den Nachbau: er kann gruen bleiben, waehrend die ausgelieferte Datei
|
||
|
|
# kaputt ist. Die Ladewache in scan-loop.sh verhindert, dass dabei die
|
||
|
|
# Endlosschleife anlaeuft.
|
||
|
|
ARBEIT_RESULTS="$ARBEIT/results"
|
||
|
|
ARBEIT_TARGETS="$ARBEIT/targets.txt"
|
||
|
|
RESULTS_DIR="$ARBEIT_RESULTS"
|
||
|
|
TARGETS_FILE="$ARBEIT_TARGETS"
|
||
|
|
SCAN_LOOP_NUR_LADEN=1
|
||
|
|
export RESULTS_DIR TARGETS_FILE
|
||
|
|
. "$(dirname "$0")/scan-loop.sh"
|
||
|
|
# Trivy durch eine Attrappe ersetzen - die einzige Stelle, die Netz braeuchte.
|
||
|
|
scanne() { : > "$2"; }
|
||
|
|
|
||
|
|
# Aus der ECHTEN Ausgabe lesen, statt eine eigene Form zu erwarten.
|
||
|
|
entfernt_aus() { echo "$1" | sed -n "s/.*, \([0-9]*\) verwaiste.*/\1/p" | tail -1; }
|
||
|
|
ausgesetzt_aus() { echo "$1" | grep -q "^warte:" && echo AUSGESETZT || echo GELAUFEN; }
|
||
|
|
|
||
|
|
mkdir -p "$ARBEIT_RESULTS"
|
||
|
|
|
||
|
|
echo "1) Ohne Zielliste wird NICHTS geloescht (der gefaehrliche Fall)"
|
||
|
|
: > "$ARBEIT/results/altbestand.json"
|
||
|
|
: > "$ARBEIT/results/zweiter.json"
|
||
|
|
rm -f "$ARBEIT_TARGETS"
|
||
|
|
ergebnis=$(runde)
|
||
|
|
pruefe "Runde ausgesetzt" "AUSGESETZT" "$(ausgesetzt_aus "$ergebnis")"
|
||
|
|
pruefe "Berichte unberuehrt" "2" "$(ls -1 "$ARBEIT_RESULTS" | wc -l | tr -d ' ')"
|
||
|
|
|
||
|
|
echo "2) Leere Zielliste ebenso"
|
||
|
|
: > "$ARBEIT_TARGETS"
|
||
|
|
ergebnis=$(runde)
|
||
|
|
pruefe "Runde ausgesetzt" "AUSGESETZT" "$(ausgesetzt_aus "$ergebnis")"
|
||
|
|
pruefe "Berichte unberuehrt" "2" "$(ls -1 "$ARBEIT_RESULTS" | wc -l | tr -d ' ')"
|
||
|
|
|
||
|
|
echo "3) Mit Zielliste: verwaiste Berichte verschwinden, neue entstehen"
|
||
|
|
printf '# Kopfzeile\npostgres:17-alpine\nrohana.axion1337.de/sorb/threadnet-web:v0.6.0\n' > "$ARBEIT_TARGETS"
|
||
|
|
ergebnis=$(runde)
|
||
|
|
pruefe "zwei verwaiste entfernt" "2" "$(entfernt_aus "$ergebnis")"
|
||
|
|
pruefe "genau die zwei Ziele bleiben" "2" "$(ls -1 "$ARBEIT_RESULTS" | wc -l | tr -d ' ')"
|
||
|
|
pruefe "altbestand ist fort" "" "$(ls "$ARBEIT_RESULTS" | grep altbestand || true)"
|
||
|
|
pruefe "v0.6.0 ist da" "rohana.axion1337.de_sorb_threadnet-web_v0.6.0.json" \
|
||
|
|
"$(ls "$ARBEIT_RESULTS" | grep v0.6.0)"
|
||
|
|
|
||
|
|
echo "4) Der Fall vom 2026-08-20: v0.3.0 faellt aus der Menge und verstummt"
|
||
|
|
: > "$ARBEIT/results/rohana.axion1337.de_sorb_threadnet-web_v0.3.0.json"
|
||
|
|
ergebnis=$(runde)
|
||
|
|
pruefe "v0.3.0 entfernt" "1" "$(entfernt_aus "$ergebnis")"
|
||
|
|
pruefe "v0.3.0 ist fort" "" "$(ls "$ARBEIT_RESULTS" | grep 'v0.3.0' || true)"
|
||
|
|
|
||
|
|
echo "5) Host-Scans werden nicht nach dieser Liste beurteilt"
|
||
|
|
: > "$ARBEIT/results/etwas__host__cfgmon.json"
|
||
|
|
ergebnis=$(runde)
|
||
|
|
pruefe "nichts entfernt" "0" "$(entfernt_aus "$ergebnis")"
|
||
|
|
pruefe "Host-Bericht bleibt" "etwas__host__cfgmon.json" \
|
||
|
|
"$(ls "$ARBEIT_RESULTS" | grep __host__)"
|
||
|
|
|
||
|
|
echo
|
||
|
|
if [ "$FEHLER" -eq 0 ]; then
|
||
|
|
echo "ALLE ZUSICHERUNGEN GRUEN"
|
||
|
|
else
|
||
|
|
echo "$FEHLER ZUSICHERUNG(EN) ROT"
|
||
|
|
fi
|
||
|
|
exit "$FEHLER"
|