Files

36 lines
1.3 KiB
Python
Raw Permalink Normal View History

"""Detection-quality gate for the in-scope languages.
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).
"""
import pytest
from openultrasast.gate import (
FALSE_POSITIVE_CEILING,
LANGUAGE_MANIFESTS,
RECALL_FLOOR,
detection_gate,
language_metrics,
)
@pytest.mark.parametrize("language", sorted(LANGUAGE_MANIFESTS))
def test_language_meets_recall_and_false_positive_goal(language: str) -> None:
metrics = language_metrics(LANGUAGE_MANIFESTS[language])
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})"
)
def test_overall_detection_goal_is_met() -> None:
verdict = detection_gate({language: language_metrics(names) for language, names in LANGUAGE_MANIFESTS.items()})
assert verdict.passed, verdict.reasons