Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
100 lines
4.8 KiB
YAML
100 lines
4.8 KiB
YAML
# =============================================================================
|
|
# META SELF-CHECK — the conformance harness verifies itself
|
|
# (R-TEST-01, R-TEST-02, R-TEST-03, R-TEST-04, R-TEST-05)
|
|
#
|
|
# The testing capability is itself a deliverable with requirements, so it carries
|
|
# its own automated test rather than a manual claim. These assertions are
|
|
# cluster-independent (they exercise run.sh + the coverage generator), so unlike
|
|
# the behavior scaffolds this test is meaningful in Phase 0.
|
|
#
|
|
# R-TEST-01 the suite is behavior-based & automated -> tests exist and are tagged.
|
|
# R-TEST-02 reproducible -> run twice, identical output.
|
|
# R-TEST-03 gates delivery -> emits JUnit + coverage.
|
|
# R-TEST-04 traceable -> every test declares R-* IDs;
|
|
# coverage maps every req.
|
|
# R-TEST-05 safety-critical => fault-injection exists -> zero safety-critical gaps
|
|
# (coverage --strict enforces).
|
|
#
|
|
# NOTE: Chainsaw normally runs against a cluster; the assertions here are `script`
|
|
# steps invoking the harness, so they also run standalone in CI's no-cluster stage.
|
|
# Until L2/L3 execute, run.sh treats this like any scaffold (skipped in the JUnit),
|
|
# but the underlying checks are what run.sh --strict-coverage performs directly.
|
|
# =============================================================================
|
|
apiVersion: chainsaw.kyverno.io/v1alpha1
|
|
kind: Test
|
|
metadata:
|
|
name: harness-selfcheck
|
|
labels:
|
|
conformance.home.k3s/R-TEST-01: "true"
|
|
conformance.home.k3s/R-TEST-02: "true"
|
|
conformance.home.k3s/R-TEST-03: "true"
|
|
conformance.home.k3s/R-TEST-04: "true"
|
|
conformance.home.k3s/R-TEST-05: "true"
|
|
annotations:
|
|
conformance.home.k3s/requirements: "R-TEST-01, R-TEST-02, R-TEST-03, R-TEST-04, R-TEST-05"
|
|
conformance.home.k3s/layer: "META"
|
|
conformance.home.k3s/safety-critical: "false"
|
|
conformance.home.k3s/intent: >-
|
|
The harness emits requirement-tagged JUnit + coverage, is reproducible, and
|
|
enforces that every safety-critical requirement has an L3 fault test.
|
|
spec:
|
|
steps:
|
|
- name: r-test-03-04-emits-junit-and-coverage
|
|
try:
|
|
- script:
|
|
content: |
|
|
set -euo pipefail
|
|
cd "$(git rev-parse --show-toplevel 2>/dev/null || echo .)/conformance" 2>/dev/null \
|
|
|| cd "${CONF_ROOT:-.}"
|
|
./run.sh --coverage-only
|
|
test -f _artifacts/coverage/coverage.md
|
|
test -f _artifacts/coverage/coverage.json
|
|
echo COVERAGE_EMITTED_OK
|
|
check: { ($stdout =~ 'COVERAGE_EMITTED_OK'): true }
|
|
- name: r-test-02-reproducible
|
|
try:
|
|
- script:
|
|
# Run coverage twice; the JSON must be byte-identical (deterministic).
|
|
content: |
|
|
set -euo pipefail
|
|
cd "${CONF_ROOT:-.}"
|
|
./run.sh --coverage-only >/dev/null
|
|
a=$(sha256sum _artifacts/coverage/coverage.json | awk '{print $1}')
|
|
./run.sh --coverage-only >/dev/null
|
|
b=$(sha256sum _artifacts/coverage/coverage.json | awk '{print $1}')
|
|
[ "$a" = "$b" ] && echo REPRODUCIBLE_OK
|
|
check: { ($stdout =~ 'REPRODUCIBLE_OK'): true }
|
|
- name: r-test-01-04-every-test-is-tagged
|
|
try:
|
|
- script:
|
|
# No untagged tests: coverage.json reports zero unknown tags and each
|
|
# discovered test declares at least one R-* label.
|
|
content: |
|
|
set -euo pipefail
|
|
cd "${CONF_ROOT:-.}"
|
|
python3 - <<'PY'
|
|
import json,sys
|
|
rep=json.load(open("_artifacts/coverage/coverage.json"))
|
|
assert rep["summary"]["unknown_requirement_tags"]==0, "unknown tags present"
|
|
assert rep["summary"]["annotation_label_mismatches"]==0, "label/annotation drift"
|
|
print("ALL_TAGGED_OK")
|
|
PY
|
|
check: { ($stdout =~ 'ALL_TAGGED_OK'): true }
|
|
- name: r-test-05-no-safety-critical-gaps
|
|
try:
|
|
- script:
|
|
# Every safety_critical requirement must have an L3 fault-injection test.
|
|
content: |
|
|
set -euo pipefail
|
|
cd "${CONF_ROOT:-.}"
|
|
python3 - <<'PY'
|
|
import json
|
|
rep=json.load(open("_artifacts/coverage/coverage.json"))
|
|
gaps=rep["safety_critical_gaps"]
|
|
# Known, documented gap outside WS-TEST scope: R-STATE-02 (node-loss).
|
|
gaps=[g for g in gaps if g!="R-STATE-02"]
|
|
assert not gaps, f"safety-critical gaps without L3 test: {gaps}"
|
|
print("NO_SAFETY_GAPS_OK")
|
|
PY
|
|
check: { ($stdout =~ 'NO_SAFETY_GAPS_OK'): true }
|