diff options
| author | Adam Janovsky | 2023-04-20 16:22:52 +0200 |
|---|---|---|
| committer | Adam Janovsky | 2023-04-20 16:22:52 +0200 |
| commit | fec63347e3d012a32038762917a78f565c9e5b1c (patch) | |
| tree | c4a5ab8d2369c36b2ff169a0c118a57b194a6303 | |
| parent | 9545cae8288e7e58e3b1df409fc27b7f164087d9 (diff) | |
| download | sec-certs-fec63347e3d012a32038762917a78f565c9e5b1c.tar.gz sec-certs-fec63347e3d012a32038762917a78f565c9e5b1c.tar.zst sec-certs-fec63347e3d012a32038762917a78f565c9e5b1c.zip | |
share some code in tests, use importlib.resources
| -rw-r--r-- | tests/cc/conftest.py | 57 | ||||
| -rw-r--r-- | tests/cc/test_cc_certificate.py | 63 | ||||
| -rw-r--r-- | tests/cc/test_cc_dataset.py | 37 | ||||
| -rw-r--r-- | tests/cc/test_cc_maintenance_updates.py | 11 | ||||
| -rw-r--r-- | tests/data/cc/certificate/__init__.py | 0 | ||||
| -rw-r--r-- | tests/data/cc/dataset/__init__.py | 0 | ||||
| -rw-r--r-- | tests/data/fips/certificate/__init__.py | 0 | ||||
| -rw-r--r-- | tests/data/fips/iut/__init__.py | 0 | ||||
| -rw-r--r-- | tests/data/fips/mip/__init__.py | 0 | ||||
| -rw-r--r-- | tests/fips/conftest.py | 12 | ||||
| -rw-r--r-- | tests/fips/test_fips_algorithm_dataset.py | 12 | ||||
| -rw-r--r-- | tests/fips/test_fips_analysis.py | 44 | ||||
| -rw-r--r-- | tests/fips/test_fips_certificate.py | 11 | ||||
| -rw-r--r-- | tests/fips/test_fips_dataset.py | 9 | ||||
| -rw-r--r-- | tests/fips/test_fips_iut.py | 4 | ||||
| -rw-r--r-- | tests/fips/test_fips_mip.py | 4 | ||||
| -rw-r--r-- | tests/test_config.py | 5 | ||||
| -rw-r--r-- | tests/test_nvd_dataset_builder.py | 4 |
18 files changed, 129 insertions, 144 deletions
diff --git a/tests/cc/conftest.py b/tests/cc/conftest.py new file mode 100644 index 00000000..fae4ecae --- /dev/null +++ b/tests/cc/conftest.py @@ -0,0 +1,57 @@ +from datetime import date + +import pytest + +from sec_certs.sample.cc import CCCertificate +from sec_certs.sample.protection_profile import ProtectionProfile + + +@pytest.fixture(scope="module") +def cert_one() -> CCCertificate: + return CCCertificate( + "active", + "Access Control Devices and Systems", + "NetIQ Identity Manager 4.7", + "NetIQ Corporation", + "SE", + {"ALC_FLR.2", "EAL3+"}, + date(2020, 6, 15), + date(2025, 6, 15), + "https://www.commoncriteriaportal.org/files/epfiles/Certification%20Report%20-%20NetIQ®%20Identity%20Manager%204.7.pdf", + "https://www.commoncriteriaportal.org/files/epfiles/ST%20-%20NetIQ%20Identity%20Manager%204.7.pdf", + "https://www.commoncriteriaportal.org/files/epfiles/Certifikat%20CCRA%20-%20NetIQ%20Identity%20Manager%204.7_signed.pdf", + "https://www.netiq.com/", + set(), + set(), + None, + None, + None, + ) + + +@pytest.fixture(scope="module") +def cert_two() -> CCCertificate: + pp = ProtectionProfile("sample_pp", None, pp_link="https://sample.pp") + update = CCCertificate.MaintenanceReport( + date(1900, 1, 1), "Sample maintenance", "https://maintenance.up", "https://maintenance.up" + ) + + return CCCertificate( + "archived", + "Sample category", + "Sample certificate name", + "Sample manufacturer", + "Sample scheme", + {"Sample security level"}, + date(1900, 1, 2), + date(1900, 1, 3), + "https://path.to/report/link", + "https://path.to/st/link", + "https://path.to/cert/link", + "https://path.to/manufacturer/web", + {pp}, + {update}, + None, + None, + None, + ) diff --git a/tests/cc/test_cc_certificate.py b/tests/cc/test_cc_certificate.py index 2a5ff222..10dfa248 100644 --- a/tests/cc/test_cc_certificate.py +++ b/tests/cc/test_cc_certificate.py @@ -1,6 +1,6 @@ import json import shutil -from datetime import date +from importlib import resources from pathlib import Path import pytest @@ -9,20 +9,20 @@ import tests.data.cc.certificate from sec_certs.dataset import CCDataset from sec_certs.sample import CCCertificate -from sec_certs.sample.protection_profile import ProtectionProfile @pytest.fixture(scope="module") def data_dir() -> Path: - return Path(tests.data.cc.certificate.__path__[0]) + with resources.path(tests.data.cc.certificate, "") as path: + return path @pytest.fixture(scope="module") def vulnerable_certificate(tmp_path_factory) -> CCCertificate: tmp_dir = tmp_path_factory.mktemp("dset") - dset_json_path = Path(tests.data.cc.analysis.__path__[0]) / "vulnerable_dataset.json" - data_dir_path = dset_json_path.parent - shutil.copytree(data_dir_path, tmp_dir, dirs_exist_ok=True) + + with resources.path(tests.data.cc.analysis, "") as analysis_path: + shutil.copytree(analysis_path, tmp_dir, dirs_exist_ok=True) cc_dset = CCDataset.from_json(tmp_dir / "vulnerable_dataset.json") cc_dset.download_all_artifacts() cc_dset.convert_all_pdfs() @@ -30,57 +30,6 @@ def vulnerable_certificate(tmp_path_factory) -> CCCertificate: return list(cc_dset.certs.values())[0] -@pytest.fixture(scope="module") -def cert_one() -> CCCertificate: - return CCCertificate( - "active", - "Access Control Devices and Systems", - "NetIQ Identity Manager 4.7", - "NetIQ Corporation", - "SE", - {"ALC_FLR.2", "EAL3+"}, - date(2020, 6, 15), - date(2025, 6, 15), - "https://www.commoncriteriaportal.org/files/epfiles/Certification%20Report%20-%20NetIQ®%20Identity%20Manager%204.7.pdf", - "https://www.commoncriteriaportal.org/files/epfiles/ST%20-%20NetIQ%20Identity%20Manager%204.7.pdf", - "https://www.commoncriteriaportal.org/files/epfiles/Certifikat%20CCRA%20-%20NetIQ%20Identity%20Manager%204.7_signed.pdf", - "https://www.netiq.com/", - set(), - set(), - None, - None, - None, - ) - - -@pytest.fixture(scope="module") -def cert_two() -> CCCertificate: - pp = ProtectionProfile("sample_pp", None, pp_link="https://sample.pp") - update = CCCertificate.MaintenanceReport( - date(1900, 1, 1), "Sample maintenance", "https://maintenance.up", "https://maintenance.up" - ) - - return CCCertificate( - "archived", - "Sample category", - "Sample certificate name", - "Sample manufacturer", - "Sample scheme", - {"Sample security level"}, - date(1900, 1, 2), - date(1900, 1, 3), - "https://path.to/report/link", - "https://path.to/st/link", - "https://path.to/cert/link", - "https://path.to/manufacturer/web", - {pp}, - {update}, - None, - None, - None, - ) - - def test_extract_metadata(vulnerable_certificate: CCCertificate): vulnerable_certificate.state.st_extract_ok = True CCCertificate.extract_st_pdf_metadata(vulnerable_certificate) diff --git a/tests/cc/test_cc_dataset.py b/tests/cc/test_cc_dataset.py index 6d6abff4..d9fe79e3 100644 --- a/tests/cc/test_cc_dataset.py +++ b/tests/cc/test_cc_dataset.py @@ -1,6 +1,6 @@ import json import shutil -from datetime import date +from importlib import resources from pathlib import Path from tempfile import TemporaryDirectory @@ -14,35 +14,14 @@ from sec_certs.sample.cc import CCCertificate @pytest.fixture(scope="module") def data_dir() -> Path: - return Path(tests.data.cc.dataset.__path__[0]) - - -@pytest.fixture(scope="module") -def crt() -> CCCertificate: - return CCCertificate( - "active", - "Access Control Devices and Systems", - "NetIQ Identity Manager 4.7", - "NetIQ Corporation", - "SE", - {"ALC_FLR.2", "EAL3+"}, - date(2020, 6, 15), - date(2025, 6, 15), - "https://www.commoncriteriaportal.org/files/epfiles/Certification%20Report%20-%20NetIQ®%20Identity%20Manager%204.7.pdf", - "https://www.commoncriteriaportal.org/files/epfiles/ST%20-%20NetIQ%20Identity%20Manager%204.7.pdf", - "https://www.commoncriteriaportal.org/files/epfiles/Certifikat%20CCRA%20-%20NetIQ%20Identity%20Manager%204.7_signed.pdf", - "https://www.netiq.com/", - set(), - set(), - None, - None, - None, - ) + with resources.path(tests.data.cc.dataset, "") as path: + return path @pytest.fixture -def toy_dataset(data_dir: Path) -> CCDataset: - return CCDataset.from_json(data_dir / "toy_dataset.json") +def toy_dataset() -> CCDataset: + with resources.path(tests.data.cc.dataset, "toy_dataset.json") as path: + return CCDataset.from_json(path) def test_download_and_convert_pdfs(toy_dataset: CCDataset, data_dir: Path): @@ -133,7 +112,7 @@ def test_build_empty_dataset(): assert not dset.state.certs_analyzed -def test_build_dataset(data_dir: Path, crt: CCCertificate, toy_dataset: CCDataset): +def test_build_dataset(data_dir: Path, cert_one: CCCertificate, toy_dataset: CCDataset): with TemporaryDirectory() as tmp_dir: dataset_path = Path(tmp_dir) (dataset_path / "web").mkdir() @@ -147,7 +126,7 @@ def test_build_dataset(data_dir: Path, crt: CCCertificate, toy_dataset: CCDatase assert len(list(dataset_path.iterdir())) == 0 assert len(dset) == 3 - assert crt in dset + assert cert_one in dset assert dset == toy_dataset diff --git a/tests/cc/test_cc_maintenance_updates.py b/tests/cc/test_cc_maintenance_updates.py index 254df45c..a017df8b 100644 --- a/tests/cc/test_cc_maintenance_updates.py +++ b/tests/cc/test_cc_maintenance_updates.py @@ -1,21 +1,18 @@ import json +from importlib import resources from pathlib import Path import pytest import tests.data.cc.dataset -from sec_certs.dataset import CCDataset, CCDatasetMaintenanceUpdates +from sec_certs.dataset import CCDatasetMaintenanceUpdates from sec_certs.sample.cc_maintenance_update import CCMaintenanceUpdate @pytest.fixture(scope="module") def data_dir() -> Path: - return Path(tests.data.cc.dataset.__path__[0]) - - -@pytest.fixture(scope="module") -def cc_dset(data_dir: Path) -> CCDataset: - return CCDataset.from_json(data_dir / "toy_dataset.json") + with resources.path(tests.data.cc.dataset, "") as path: + return path @pytest.fixture diff --git a/tests/data/cc/certificate/__init__.py b/tests/data/cc/certificate/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/data/cc/certificate/__init__.py diff --git a/tests/data/cc/dataset/__init__.py b/tests/data/cc/dataset/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/data/cc/dataset/__init__.py diff --git a/tests/data/fips/certificate/__init__.py b/tests/data/fips/certificate/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/data/fips/certificate/__init__.py diff --git a/tests/data/fips/iut/__init__.py b/tests/data/fips/iut/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/data/fips/iut/__init__.py diff --git a/tests/data/fips/mip/__init__.py b/tests/data/fips/mip/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/data/fips/mip/__init__.py diff --git a/tests/fips/conftest.py b/tests/fips/conftest.py new file mode 100644 index 00000000..4fa3c2b4 --- /dev/null +++ b/tests/fips/conftest.py @@ -0,0 +1,12 @@ +from importlib import resources + +import pytest +import tests.data.fips.dataset + +from sec_certs.dataset import FIPSDataset + + +@pytest.fixture(scope="module") +def toy_dataset() -> FIPSDataset: + with resources.path(tests.data.fips.dataset, "toy_dataset.json") as dataset_path: + return FIPSDataset.from_json(dataset_path) diff --git a/tests/fips/test_fips_algorithm_dataset.py b/tests/fips/test_fips_algorithm_dataset.py index 1d45e67c..0ef9a177 100644 --- a/tests/fips/test_fips_algorithm_dataset.py +++ b/tests/fips/test_fips_algorithm_dataset.py @@ -1,6 +1,6 @@ from __future__ import annotations -from pathlib import Path +from importlib import resources from typing import Any import pytest @@ -23,13 +23,9 @@ def test_alg_dset_from_web(tmp_path): @pytest.fixture(scope="module") -def alg_dset_path() -> Path: - return Path(tests.data.fips.dataset.__path__[0]) / "alg_dataset.json" - - -@pytest.fixture(scope="module") -def alg_dset(alg_dset_path: Path) -> FIPSAlgorithmDataset: - return FIPSAlgorithmDataset.from_json(alg_dset_path) +def alg_dset() -> FIPSAlgorithmDataset: + with resources.path(tests.data.fips.dataset, "alg_dataset.json") as alg_dset_path: + return FIPSAlgorithmDataset.from_json(alg_dset_path) @pytest.fixture(scope="module") diff --git a/tests/fips/test_fips_analysis.py b/tests/fips/test_fips_analysis.py index 4827f43e..f91cac8b 100644 --- a/tests/fips/test_fips_analysis.py +++ b/tests/fips/test_fips_analysis.py @@ -1,48 +1,38 @@ from __future__ import annotations -from importlib import resources - import pytest -import tests.data.common -import tests.data.fips.dataset from sec_certs.dataset import CPEDataset, CVEDataset from sec_certs.dataset.fips import FIPSDataset @pytest.fixture(scope="module") -def toy_static_dataset() -> FIPSDataset: - with resources.path(tests.data.fips.dataset, "toy_dataset.json") as dataset_path: - return FIPSDataset.from_json(dataset_path) - - -@pytest.fixture(scope="module") def processed_dataset( - toy_static_dataset: FIPSDataset, cpe_dataset: CPEDataset, cve_dataset: CVEDataset, tmp_path_factory + toy_dataset: FIPSDataset, cpe_dataset: CPEDataset, cve_dataset: CVEDataset, tmp_path_factory ) -> FIPSDataset: tmp_dir = tmp_path_factory.mktemp("fips_dset") - toy_static_dataset.copy_dataset(tmp_dir) + toy_dataset.copy_dataset(tmp_dir) tested_certs = [ - toy_static_dataset["3095"], - toy_static_dataset["3093"], - toy_static_dataset["3197"], - toy_static_dataset["2441"], + toy_dataset["3095"], + toy_dataset["3093"], + toy_dataset["3197"], + toy_dataset["2441"], ] - toy_static_dataset.certs = {x.dgst: x for x in tested_certs} + toy_dataset.certs = {x.dgst: x for x in tested_certs} - toy_static_dataset.download_all_artifacts() - toy_static_dataset.convert_all_pdfs() - toy_static_dataset.extract_data() - toy_static_dataset._compute_references(keep_unknowns=True) + toy_dataset.download_all_artifacts() + toy_dataset.convert_all_pdfs() + toy_dataset.extract_data() + toy_dataset._compute_references(keep_unknowns=True) - toy_static_dataset.auxiliary_datasets.cpe_dset = cpe_dataset - toy_static_dataset.auxiliary_datasets.cve_dset = cve_dataset - toy_static_dataset.compute_cpe_heuristics() - toy_static_dataset.compute_related_cves() - toy_static_dataset._compute_transitive_vulnerabilities() + toy_dataset.auxiliary_datasets.cpe_dset = cpe_dataset + toy_dataset.auxiliary_datasets.cve_dset = cve_dataset + toy_dataset.compute_cpe_heuristics() + toy_dataset.compute_related_cves() + toy_dataset._compute_transitive_vulnerabilities() - return toy_static_dataset + return toy_dataset @pytest.mark.parametrize( diff --git a/tests/fips/test_fips_certificate.py b/tests/fips/test_fips_certificate.py index 8f68238e..207ae46d 100644 --- a/tests/fips/test_fips_certificate.py +++ b/tests/fips/test_fips_certificate.py @@ -1,5 +1,6 @@ import json import shutil +from importlib import resources from pathlib import Path import pytest @@ -12,15 +13,17 @@ from sec_certs.sample.fips import FIPSCertificate @pytest.fixture(scope="module") def data_dir() -> Path: - return Path(tests.data.fips.certificate.__path__[0]) + with resources.path(tests.data.fips.certificate, "") as path: + return path @pytest.fixture def certificate(tmp_path_factory) -> FIPSCertificate: tmp_dir = tmp_path_factory.mktemp("dset") - dset_json_path = Path(tests.data.fips.dataset.__path__[0]) / "toy_dataset.json" - data_dir_path = dset_json_path.parent - shutil.copytree(data_dir_path, tmp_dir, dirs_exist_ok=True) + + with resources.path(tests.data.fips.dataset, "") as dataset_path: + shutil.copytree(dataset_path, tmp_dir, dirs_exist_ok=True) + fips_dset = FIPSDataset.from_json(tmp_dir / "toy_dataset.json") crt = fips_dset["184097a88a9b4ad9"] diff --git a/tests/fips/test_fips_dataset.py b/tests/fips/test_fips_dataset.py index 50c8352d..7a4bc712 100644 --- a/tests/fips/test_fips_dataset.py +++ b/tests/fips/test_fips_dataset.py @@ -1,5 +1,6 @@ import json import shutil +from importlib import resources from pathlib import Path from tempfile import TemporaryDirectory @@ -13,12 +14,8 @@ from sec_certs.sample.fips import FIPSCertificate @pytest.fixture(scope="module") def data_dir() -> Path: - return Path(tests.data.fips.dataset.__path__[0]) - - -@pytest.fixture -def toy_dataset(data_dir: Path) -> FIPSDataset: - return FIPSDataset.from_json(data_dir / "toy_dataset.json") + with resources.path(tests.data.fips.dataset, "") as path: + return path def test_dataset_to_json(toy_dataset: FIPSDataset, data_dir: Path, tmp_path: Path): diff --git a/tests/fips/test_fips_iut.py b/tests/fips/test_fips_iut.py index 1dca086c..3412f6f2 100644 --- a/tests/fips/test_fips_iut.py +++ b/tests/fips/test_fips_iut.py @@ -1,3 +1,4 @@ +from importlib import resources from pathlib import Path import pytest @@ -9,7 +10,8 @@ from sec_certs.sample import IUTSnapshot @pytest.fixture(scope="module") def data_dir() -> Path: - return Path(tests.data.fips.iut.__path__[0]) + with resources.path(tests.data.fips.iut, "") as path: + return path @pytest.fixture(scope="module") diff --git a/tests/fips/test_fips_mip.py b/tests/fips/test_fips_mip.py index 4918a4c6..807b83af 100644 --- a/tests/fips/test_fips_mip.py +++ b/tests/fips/test_fips_mip.py @@ -1,3 +1,4 @@ +from importlib import resources from pathlib import Path import pytest @@ -9,7 +10,8 @@ from sec_certs.sample import MIPSnapshot @pytest.fixture(scope="module") def data_dir() -> Path: - return Path(tests.data.fips.mip.__path__[0]) + with resources.path(tests.data.fips.mip, "") as path: + return path @pytest.fixture(scope="module") diff --git a/tests/test_config.py b/tests/test_config.py index 39102111..7c20dec1 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -1,6 +1,7 @@ from __future__ import annotations import os +from importlib import resources from pathlib import Path from typing import Any @@ -13,8 +14,8 @@ import tests.data @pytest.fixture(autouse=True) def load_test_config(): - pth = Path(tests.data.__path__[0]) / "settings_tests.yml" - config_module.config.load_from_yaml(pth) + with resources.path(tests.data.common, "settings_tests.yml") as path: + config_module.config.load_from_yaml(path) @pytest.fixture diff --git a/tests/test_nvd_dataset_builder.py b/tests/test_nvd_dataset_builder.py index d887596e..0e71764c 100644 --- a/tests/test_nvd_dataset_builder.py +++ b/tests/test_nvd_dataset_builder.py @@ -4,7 +4,7 @@ from typing import Any import pytest -import tests.data +import tests.data.common from sec_certs.configuration import config from sec_certs.dataset import CCDataset, CPEDataset, CVEDataset from sec_certs.utils.nvd_dataset_builder import ( @@ -17,7 +17,7 @@ from sec_certs.utils.nvd_dataset_builder import ( @pytest.fixture(autouse=True) def load_test_config(): - with resources.path(tests.data, "settings_tests.yml") as path: + with resources.path(tests.data.common, "settings_tests.yml") as path: config.load_from_yaml(path) |
