diff options
| author | J08nY | 2025-09-25 16:28:49 +0200 |
|---|---|---|
| committer | J08nY | 2025-09-25 16:28:49 +0200 |
| commit | daf9ec03ea0b7706079c834bef62d978caed29b1 (patch) | |
| tree | 997f251567dff857a8e9889b92ea8e319596d31a /tests/cc/test_cc_analysis.py | |
| parent | bce2ef9d06f52a98eb543d0760e0f9cd5108bed6 (diff) | |
| download | sec-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.py | 37 |
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)) |
