tests/test_rules.py
| 1 | """Tests for the rule catalog.""" |
| 2 | |
| 3 | from __future__ import annotations |
| 4 | |
| 5 | from pqc_lint.rules import RULES, get_rules_for_language |
| 6 | |
| 7 | |
| 8 | def test_all_rule_ids_unique(): |
| 9 | ids = [r.id for r in RULES] |
| 10 | assert len(ids) == len(set(ids)) |
| 11 | |
| 12 | |
| 13 | def test_get_rules_for_language_python(): |
| 14 | rules = get_rules_for_language("python") |
| 15 | ids = {r.id for r in rules} |
| 16 | # signatures, kex, encryption, hashes — all apply to python |
| 17 | assert "PQC001" in ids |
| 18 | assert "PQC002" in ids |
| 19 | assert "PQC003" in ids |
| 20 | assert "PQC301" in ids |
| 21 | assert "PQC302" in ids |
| 22 | |
| 23 | |
| 24 | def test_get_rules_for_language_go(): |
| 25 | rules = get_rules_for_language("go") |
| 26 | ids = {r.id for r in rules} |
| 27 | assert "PQC001" in ids |
| 28 | assert "PQC002" in ids |
| 29 | # DSA is python/java only |
| 30 | assert "PQC004" not in ids |
| 31 | |
| 32 | |
| 33 | def test_rule_suggestion_non_empty_for_known_primitives(): |
| 34 | for rule in RULES: |
| 35 | assert rule.suggestion != "", f"rule {rule.id} ({rule.classical_primitive}) has no suggestion" |
| 36 | |