aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/cc/test_cc_analysis.py
diff options
context:
space:
mode:
authorJ08nY2025-09-25 16:28:49 +0200
committerJ08nY2025-09-25 16:28:49 +0200
commitdaf9ec03ea0b7706079c834bef62d978caed29b1 (patch)
tree997f251567dff857a8e9889b92ea8e319596d31a /tests/cc/test_cc_analysis.py
parentbce2ef9d06f52a98eb543d0760e0f9cd5108bed6 (diff)
downloadsec-certs-daf9ec03ea0b7706079c834bef62d978caed29b1.tar.gz
sec-certs-daf9ec03ea0b7706079c834bef62d978caed29b1.tar.zst
sec-certs-daf9ec03ea0b7706079c834bef62d978caed29b1.zip
Make a JSON schema for CC Certificate and Dataset objects.
Diffstat (limited to 'tests/cc/test_cc_analysis.py')
-rw-r--r--tests/cc/test_cc_analysis.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/cc/test_cc_analysis.py b/tests/cc/test_cc_analysis.py
index 4606383c..42c97bac 100644
--- a/tests/cc/test_cc_analysis.py
+++ b/tests/cc/test_cc_analysis.py
@@ -1,14 +1,19 @@
from __future__ import annotations
+import json
import shutil
from collections.abc import Generator
from importlib import resources
from pathlib import Path
+from tempfile import TemporaryDirectory
import pytest
import tests.data.cc.analysis
import tests.data.common
+from jsonschema import Draft7Validator, validate
+from referencing import Registry, Resource
+import sec_certs.serialization.schemas
from sec_certs.cert_rules import SARS_IMPLIED_FROM_EAL
from sec_certs.dataset.auxiliary_dataset_handling import (
CPEDatasetHandler,
@@ -258,3 +263,35 @@ def test_segment_extractor(reference_dataset: CCDataset):
df = ReferenceSegmentExtractor()(reference_dataset.certs.values())
assert df is not None
assert not df.empty
+
+
+def test_schema_validate_single(reference_dataset: CCDataset):
+ with (
+ resources.open_text(sec_certs.serialization.schemas, "cc_certificate.json") as schema_file,
+ TemporaryDirectory() as tmp_dir,
+ ):
+ schema = json.load(schema_file)
+ for cert in reference_dataset:
+ fname = Path(tmp_dir) / (cert.dgst + ".json")
+ cert.to_json(fname)
+ with fname.open("r") as handle:
+ validate(instance=json.load(handle), schema=schema)
+
+
+def test_schema_validate_full(reference_dataset: CCDataset):
+ registry = Registry()
+ with (
+ resources.open_text(sec_certs.serialization.schemas, "cc_certificate.json") as cert_schema_file,
+ resources.open_text(sec_certs.serialization.schemas, "cc_dataset.json") as dataset_schema_file,
+ ):
+ cert_schema = json.load(cert_schema_file)
+ registry = Resource.from_contents(cert_schema) @ registry
+ dataset_schema = json.load(dataset_schema_file)
+ registry = Resource.from_contents(dataset_schema) @ registry
+ validator = Draft7Validator(schema={"$ref": "http://sec-certs.org/schemas/cc_dataset.json"}, registry=registry)
+
+ with TemporaryDirectory() as tmp_dir:
+ fname = Path(tmp_dir) / "dataset.json"
+ reference_dataset.to_json(fname)
+ with fname.open("r") as handle:
+ validator.validate(instance=json.load(handle))