56 lines
1.5 KiB
Bash
Executable File
56 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
WATCHER="$SCRIPT_DIR/../docker-critical-events.sh"
|
|
|
|
if [ ! -r "$WATCHER" ]; then
|
|
echo "FAIL: watcher not readable at $WATCHER" >&2
|
|
exit 1
|
|
fi
|
|
|
|
tmp="$(mktemp -d)"
|
|
trap 'rm -rf "$tmp"' EXIT
|
|
|
|
mkdir -p "$tmp/bin"
|
|
cat > "$tmp/bin/docker" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
if [ "${1:-}" != "events" ]; then
|
|
echo "unexpected docker command: $*" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cat <<'EVENTS'
|
|
{"Type":"container","Action":"die","Actor":{"Attributes":{"name":"ok-container","image":"example:latest","exitCode":"0"}}}
|
|
{"Type":"container","Action":"die","Actor":{"Attributes":{"name":"bad-container","image":"example:latest","exitCode":"137"}}}
|
|
{"Type":"container","Action":"oom","Actor":{"Attributes":{"name":"oom-container","image":"example:latest"}}}
|
|
EVENTS
|
|
EOF
|
|
chmod +x "$tmp/bin/docker"
|
|
|
|
PATH="$tmp/bin:$PATH" \
|
|
SEND_NTFY=0 \
|
|
OUTPUT_PATH="$tmp/events.log" \
|
|
bash "$WATCHER"
|
|
|
|
fail() {
|
|
echo "FAIL: $*" >&2
|
|
echo "--- events.log ---" >&2
|
|
cat "$tmp/events.log" >&2 || true
|
|
exit 1
|
|
}
|
|
|
|
[ -s "$tmp/events.log" ] || fail "expected critical event log to be written"
|
|
|
|
if grep -q 'ok-container' "$tmp/events.log"; then
|
|
fail "exitCode 0 die event should not alert"
|
|
fi
|
|
|
|
grep -q 'bad-container' "$tmp/events.log" || fail "non-zero die event missing"
|
|
grep -q 'oom-container' "$tmp/events.log" || fail "oom event missing"
|
|
|
|
line_count="$(wc -l < "$tmp/events.log" | tr -d ' ')"
|
|
[ "$line_count" = "2" ] || fail "expected 2 logged critical events, got $line_count"
|
|
|
|
echo "OK - docker critical events filter test passed"
|