Files
sharedinbox/scripts/test_firebase_check.sh
T

90 lines
4.5 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Tests for Firebase CI check patterns used in ci/main.go.
# Run directly: bash scripts/test_firebase_check.sh
PASS=0
FAIL=0
_assert() {
local name="$1" expected="$2" actual="$3"
if [ "$actual" = "$expected" ]; then
PASS=$((PASS + 1))
else
echo "FAIL: $name"
echo " expected: '$expected'"
echo " actual: '$actual'"
FAIL=$((FAIL + 1))
fi
}
# --- auth stderr filter ---
# Lines ignored: "Activated service account credentials for: [...]"
# "Updated property [core/project]."
_filter_auth() {
grep -vF "Activated service account credentials for:" \
| grep -vF "Updated property [core/project]." \
| grep -v "^$" \
|| true
}
_assert "auth: both known messages produce empty output" "" \
"$(printf 'Activated service account credentials for: [ci@sa.iam.gserviceaccount.com]\nUpdated property [core/project].\n' | _filter_auth)"
_assert "auth: only credentials line produces empty output" "" \
"$(printf 'Activated service account credentials for: [ci@sa.iam.gserviceaccount.com]\n' | _filter_auth)"
_assert "auth: only property line produces empty output" "" \
"$(printf 'Updated property [core/project].\n' | _filter_auth)"
_assert "auth: empty input produces empty output" "" \
"$(printf '' | _filter_auth)"
_assert "auth: unexpected line passes through" "some unexpected error" \
"$(printf 'some unexpected error\n' | _filter_auth)"
_assert "auth: unknown line kept alongside known messages" "unexpected line" \
"$(printf 'Activated service account credentials for: [x]\nunexpected line\nUpdated property [core/project].\n' | _filter_auth)"
# --- "error" word detection: grep -qwi 'error' ---
# Matches "error" as a whole word (case-insensitive).
# Must NOT match "error" as part of another word (e.g. "stderr", "AssertionError").
_has_err() { printf '%s\n' "$1" | grep -qwi 'error' && echo yes || echo no; }
_assert "error: non-retryable error line matched" yes "$(_has_err 'A non-retryable error occurred.')"
_assert "error: uppercase ERROR matched" yes "$(_has_err 'ERROR: infrastructure_failure')"
_assert "error: mixed-case Error matched" yes "$(_has_err 'Error: something went wrong')"
_assert "error: normal pending line not matched" no "$(_has_err 'Test is Pending')"
_assert "error: timing line not matched" no "$(_has_err 'Done. Test time = 183 (secs)')"
_assert "error: completion line not matched" no "$(_has_err 'Instrumentation testing complete.')"
_assert "error: 'stderr' word not matched" no "$(_has_err 'some stderr: gcloud output')"
_assert "error: 'AssertionError' not matched" no "$(_has_err 'java.lang.AssertionError: expected true')"
# --- device count from result table ---
# Counts data rows by looking for lines with "│" that contain an outcome word.
TABLE_PASS="┌─────────┬───────────────────────┬──────────────┐
│ OUTCOME │ TEST_AXIS_VALUE │ TEST_DETAILS │
├─────────┼───────────────────────┼──────────────┤
│ Passed │ oriole-33-en-portrait │ -- │
└─────────┴───────────────────────┴──────────────┘"
TABLE_FAIL="┌─────────┬───────────────────────┬──────────────┐
│ OUTCOME │ TEST_AXIS_VALUE │ TEST_DETAILS │
├─────────┼───────────────────────┼──────────────┤
│ Failed │ oriole-33-en-portrait │ -- │
└─────────┴───────────────────────┴──────────────┘"
_count() {
local n
n=$(printf '%s' "$1" | grep "│" | grep -cE "(Passed|Failed|Inconclusive|Skipped)") || n=0
printf '%s' "$n"
}
_assert "count: one passing device gives 1" 1 "$(_count "$TABLE_PASS")"
_assert "count: one failing device gives 1" 1 "$(_count "$TABLE_FAIL")"
_assert "count: no table gives 0" 0 "$(_count 'Test is Pending\nDone.')"
_assert "count: plain output gives 0" 0 "$(_count 'Instrumentation testing complete.')"
echo ""
echo "Results: $PASS passed, $FAIL failed"
[ "$FAIL" -eq 0 ] || exit 1