# All fast tests with coverage
pytest --cov
# Include slow tests (sentence-transformers model download)
pytest --run-slow
# Single file / single test
pytest tests/test_foo.py
pytest tests/test_foo.py::test_barCoverage gate: fail_under = 99 (enforced in CI and locally via pytest --cov).
pytest tests/test_audit_integrity_stress.py \
tests/test_audit_tamper_campaign.py \
tests/test_jailbreak_guard_stress.py \
tests/test_security_corpus_regression.py -qValidates deterministic stress metrics against a versioned snapshot:
- JailbreakGuard attack/benign regression rates
- Audit integrity tamper detection baseline
- Deterministic fuzz campaign mismatch profile
make security_baseline
# or:
python -m aetherya.security_baseline \
--baseline-path tests/fixtures/security_baseline/v1/stress_baseline.jsonUpdate snapshot intentionally:
python -m aetherya.security_baseline --update-baselinepytest tests/test_audit_chaos_bytes.py tests/test_pipeline_policy_adapter_shadow.py -qpytest tests/test_llm_provider.py tests/test_pipeline_llm_shadow.py -qCorpus: 100 inputs. SLOs:
p95 ≤ 10msp99 ≤ 15ms
make pipeline_benchmark
# or: aetherya benchmark pipeline -- --runs 1 --corpus-size 100 --jsonSLOs:
p95 ≤ 12msp99 ≤ 20ms- detection rate =
1.0
make chaos_benchmark
# or: aetherya benchmark chaos -- --runs 25 --events 48 --jsonEach run uploads audit/chaos/chaos_benchmark_metrics.json as a CI artifact.
Corpus: 50 inputs. SLOs:
p95 ≤ 150msp99 ≤ 200ms
Run with pytest --run-slow or via the dedicated CI job (semantic_slo, which caches the model).
make property_testsRandomized tests over RiskAggregator + chaos paths.
make audit_fuzzPhase-2 mutation round over release artifacts.
10-minute memory soak over repeated pipeline benchmark loops:
make pipeline_memory_soakFinal smoke test before API deployment (actor spoofing, shadow timeout, chain integrity):
make pre_api_gateReport written to: audit/pre_api/pre_api_gate_report.json.
Real provider, authority invariance check:
make openai_shadow_smokeFormat + lint + type + coverage:
make checkIndividual steps:
make fmt # ruff + black
make lint # ruff --fix
make type # mypy src/aetherya