2026-06-21 11:49:31 +02:00
|
|
|
"""Detection-quality gate for the in-scope languages.
|
|
|
|
|
|
2026-06-22 17:13:02 +02:00
|
|
|
Runs quick-mode scans against the C/C++, Python, JavaScript, and Java benchmark
|
|
|
|
|
corpora and asserts the project goal: at least 90% recall of known vulnerabilities
|
|
|
|
|
and under a 10% false-positive rate per language. The corpus map and aggregation
|
|
|
|
|
live in ``openultrasast.gate`` (the same gate CI runs as a first-class step).
|
2026-06-21 11:49:31 +02:00
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
2026-06-22 17:13:02 +02:00
|
|
|
from openultrasast.gate import (
|
|
|
|
|
FALSE_POSITIVE_CEILING,
|
|
|
|
|
LANGUAGE_MANIFESTS,
|
|
|
|
|
RECALL_FLOOR,
|
|
|
|
|
detection_gate,
|
|
|
|
|
language_metrics,
|
2026-06-21 11:49:31 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize("language", sorted(LANGUAGE_MANIFESTS))
|
|
|
|
|
def test_language_meets_recall_and_false_positive_goal(language: str) -> None:
|
2026-06-22 17:13:02 +02:00
|
|
|
metrics = language_metrics(LANGUAGE_MANIFESTS[language])
|
2026-06-21 11:49:31 +02:00
|
|
|
|
2026-06-22 17:13:02 +02:00
|
|
|
assert metrics.recall >= RECALL_FLOOR, (
|
|
|
|
|
f"{language} recall {metrics.recall:.2%} below {RECALL_FLOOR:.0%} ({metrics.matched}/{metrics.expected})"
|
|
|
|
|
)
|
|
|
|
|
assert metrics.false_positive_rate < FALSE_POSITIVE_CEILING, (
|
|
|
|
|
f"{language} false-positive rate {metrics.false_positive_rate:.2%} at or above "
|
|
|
|
|
f"{FALSE_POSITIVE_CEILING:.0%} ({metrics.false_positives}/{metrics.actual})"
|
2026-06-21 11:49:31 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_overall_detection_goal_is_met() -> None:
|
2026-06-22 17:13:02 +02:00
|
|
|
verdict = detection_gate({language: language_metrics(names) for language, names in LANGUAGE_MANIFESTS.items()})
|
|
|
|
|
assert verdict.passed, verdict.reasons
|