tests/test_rules.py
968 B · 36 lines · python Raw
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