mirror of
https://github.com/cozystack/cozystack.git
synced 2026-11-04 02:57:27 +09:00
The shell translator rewrites test bodies and loses Bats reporting. The unit lane needs complete TAP results and JUnit reports without changing how live-cluster suites run. Sourced production helpers still need a dash pass, and unit test bodies need nounset without exporting shell options into subprocesses. Assisted-by: LLM Signed-off-by: Myasnikov Daniil <myasnikovdaniil2001@gmail.com>
99 lines
3.8 KiB
Bash
99 lines
3.8 KiB
Bash
#!/usr/bin/env bats
|
|
# -----------------------------------------------------------------------------
|
|
# Unit tests for hack/e2e-chainsaw/_lib/remediation-guard.sh
|
|
#
|
|
# helmrelease_has_remediation_cycle takes a newline-delimited list of
|
|
# HelmRelease history snapshot status values (deployed/superseded/failed/
|
|
# uninstalled/...) and returns 0 when any entry is "failed" or "uninstalled"
|
|
# (meaning flux helm-controller performed install/upgrade remediation).
|
|
#
|
|
# This is used by the e2e script after the HelmRelease reaches Ready. The
|
|
# failure/upgrade counters (.status.installFailures / .status.upgradeFailures)
|
|
# are useless there because flux's ClearFailures zeroes them on successful
|
|
# reconciliation; .status.history retains the snapshot trail.
|
|
#
|
|
# CI runs this file under Bats through `make bats-unit-tests`. It also remains
|
|
# compatible with the legacy `hack/cozytest.sh` translator, whose awk parser
|
|
# recognizes only @test blocks and a bare `}` on its own line. The tests avoid
|
|
# `run` and `$status` for that compatibility path and use direct shell assertions.
|
|
#
|
|
# Run with: bats hack/remediation-guard.bats
|
|
# -----------------------------------------------------------------------------
|
|
|
|
load test_helper
|
|
|
|
@test "empty history returns not-detected" {
|
|
. hack/e2e-chainsaw/_lib/remediation-guard.sh
|
|
if helmrelease_has_remediation_cycle ""; then
|
|
echo "expected not-detected for empty history" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
@test "single deployed snapshot returns not-detected" {
|
|
. hack/e2e-chainsaw/_lib/remediation-guard.sh
|
|
if helmrelease_has_remediation_cycle "deployed"; then
|
|
echo "expected not-detected for deployed-only history" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
@test "deployed then superseded returns not-detected" {
|
|
. hack/e2e-chainsaw/_lib/remediation-guard.sh
|
|
statuses=$(printf 'deployed\nsuperseded\n')
|
|
if helmrelease_has_remediation_cycle "${statuses}"; then
|
|
echo "expected not-detected for deployed+superseded history" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
@test "single failed snapshot returns detected" {
|
|
. hack/e2e-chainsaw/_lib/remediation-guard.sh
|
|
if ! helmrelease_has_remediation_cycle "failed"; then
|
|
echo "expected detected when history contains failed snapshot" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
@test "single uninstalled snapshot returns detected" {
|
|
# The exact signature of the install-remediation race: the first install
|
|
# exceeded flux's wait budget, remediation uninstalled, the next retry
|
|
# eventually succeeded. History still carries the uninstalled snapshot.
|
|
. hack/e2e-chainsaw/_lib/remediation-guard.sh
|
|
if ! helmrelease_has_remediation_cycle "uninstalled"; then
|
|
echo "expected detected when history contains uninstalled snapshot" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
@test "uninstalled then deployed still returns detected" {
|
|
. hack/e2e-chainsaw/_lib/remediation-guard.sh
|
|
statuses=$(printf 'uninstalled\ndeployed\n')
|
|
if ! helmrelease_has_remediation_cycle "${statuses}"; then
|
|
echo "expected detected despite later successful deploy" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
@test "deployed then failed still returns detected" {
|
|
. hack/e2e-chainsaw/_lib/remediation-guard.sh
|
|
statuses=$(printf 'deployed\nfailed\n')
|
|
if ! helmrelease_has_remediation_cycle "${statuses}"; then
|
|
echo "expected detected when any entry is failed" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
@test "the predicate does not overwrite a caller variable named statuses" {
|
|
# This library is sourced rather than executed, and the helper assigns
|
|
# "statuses" internally, so without a local the argument lands in the
|
|
# caller's scope.
|
|
. hack/e2e-chainsaw/_lib/remediation-guard.sh
|
|
statuses=sentinel
|
|
helmrelease_has_remediation_cycle "failed"
|
|
if [ "${statuses}" != sentinel ]; then
|
|
echo "helmrelease_has_remediation_cycle replaced the caller's statuses with: ${statuses}" >&2
|
|
exit 1
|
|
fi
|
|
}
|