diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/cc/__init__.py | 0 | ||||
| -rw-r--r-- | tests/cc/test_cc_certificate.py | 87 | ||||
| -rw-r--r-- | tests/cc/test_cc_dataset.py | 57 | ||||
| -rw-r--r-- | tests/cc/test_cc_maintenance_updates.py | 27 | ||||
| -rw-r--r-- | tests/cc/test_cc_schemes.py | 12 |
5 files changed, 146 insertions, 37 deletions
diff --git a/tests/cc/__init__.py b/tests/cc/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/tests/cc/__init__.py +++ /dev/null diff --git a/tests/cc/test_cc_certificate.py b/tests/cc/test_cc_certificate.py index 35482e8a..2a5ff222 100644 --- a/tests/cc/test_cc_certificate.py +++ b/tests/cc/test_cc_certificate.py @@ -1,7 +1,84 @@ import json +import shutil +from datetime import date from pathlib import Path -from sec_certs.sample.cc import CCCertificate +import pytest +import tests.data.cc.analysis +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]) + + +@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) + cc_dset = CCDataset.from_json(tmp_dir / "vulnerable_dataset.json") + cc_dset.download_all_artifacts() + cc_dset.convert_all_pdfs() + + 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): @@ -41,18 +118,18 @@ def test_cert_link_escaping(cert_one: CCCertificate): ) -def test_cert_to_json(cert_two: CCCertificate, tmp_path: Path, cert_data_dir: Path): +def test_cert_to_json(cert_two: CCCertificate, tmp_path: Path, data_dir: Path): cert_two.to_json(tmp_path / "crt_two.json") with (tmp_path / "crt_two.json").open("r") as handle: data = json.load(handle) - with (cert_data_dir / "fictional_cert.json").open("r") as handle: + with (data_dir / "fictional_cert.json").open("r") as handle: template_data = json.load(handle) assert data == template_data -def test_cert_from_json(cert_two: CCCertificate, cert_data_dir: Path): - crt = CCCertificate.from_json(cert_data_dir / "fictional_cert.json") +def test_cert_from_json(cert_two: CCCertificate, data_dir: Path): + crt = CCCertificate.from_json(data_dir / "fictional_cert.json") assert cert_two == crt diff --git a/tests/cc/test_cc_dataset.py b/tests/cc/test_cc_dataset.py index 43749494..39fea62a 100644 --- a/tests/cc/test_cc_dataset.py +++ b/tests/cc/test_cc_dataset.py @@ -1,16 +1,51 @@ import json import shutil +from datetime import date from pathlib import Path from tempfile import TemporaryDirectory import pytest +import tests.data.cc.dataset from sec_certs import constants from sec_certs.dataset.cc import CCDataset from sec_certs.sample.cc import CCCertificate -def test_download_and_convert_pdfs(toy_dataset: CCDataset, dataset_data_dir: Path): +@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, + ) + + +@pytest.fixture +def toy_dataset(data_dir: Path) -> CCDataset: + return CCDataset.from_json(data_dir / "toy_dataset.json") + + +def test_download_and_convert_pdfs(toy_dataset: CCDataset, data_dir: Path): template_report_pdf_hashes = { "309ac2fd7f2dcf17": "774c41fbba980191ca40ae610b2f61484c5997417b3325b6fd68b345173bde52", "8cf86948f02f047d": "533a5995ef8b736cc48cfda30e8aafec77d285511471e0e5a9e8007c8750203a", @@ -49,8 +84,8 @@ def test_download_and_convert_pdfs(toy_dataset: CCDataset, dataset_data_dir: Pat assert cert.state.report_txt_path.exists() assert cert.state.st_txt_path.exists() - template_report_txt_path = dataset_data_dir / "report_309ac2fd7f2dcf17.txt" - template_st_txt_path = dataset_data_dir / "target_309ac2fd7f2dcf17.txt" + template_report_txt_path = data_dir / "report_309ac2fd7f2dcf17.txt" + template_st_txt_path = data_dir / "target_309ac2fd7f2dcf17.txt" assert ( abs(toy_dataset["309ac2fd7f2dcf17"].state.st_txt_path.stat().st_size - template_st_txt_path.stat().st_size) < 1000 @@ -64,13 +99,13 @@ def test_download_and_convert_pdfs(toy_dataset: CCDataset, dataset_data_dir: Pat ) -def test_dataset_to_json(toy_dataset: CCDataset, dataset_data_dir: Path, tmp_path: Path): +def test_dataset_to_json(toy_dataset: CCDataset, data_dir: Path, tmp_path: Path): toy_dataset.to_json(tmp_path / "dset.json") with (tmp_path / "dset.json").open("r") as handle: data = json.load(handle) - with (dataset_data_dir / "toy_dataset.json").open("r") as handle: + with (data_dir / "toy_dataset.json").open("r") as handle: template_data = json.load(handle) del data["timestamp"] @@ -78,8 +113,8 @@ def test_dataset_to_json(toy_dataset: CCDataset, dataset_data_dir: Path, tmp_pat assert data == template_data -def test_dataset_from_json(toy_dataset: CCDataset, dataset_data_dir: Path): - assert toy_dataset == CCDataset.from_json(dataset_data_dir / "toy_dataset.json") +def test_dataset_from_json(toy_dataset: CCDataset, data_dir: Path): + assert toy_dataset == CCDataset.from_json(data_dir / "toy_dataset.json") def test_build_empty_dataset(): @@ -93,12 +128,12 @@ def test_build_empty_dataset(): assert not dset.state.certs_analyzed -def test_build_dataset(dataset_data_dir: Path, cert_one: CCCertificate, toy_dataset: CCDataset): +def test_build_dataset(data_dir: Path, crt: CCCertificate, toy_dataset: CCDataset): with TemporaryDirectory() as tmp_dir: dataset_path = Path(tmp_dir) (dataset_path / "web").mkdir() - shutil.copyfile(dataset_data_dir / "cc_products_active.csv", dataset_path / "web" / "cc_products_active.csv") - shutil.copyfile(dataset_data_dir / "cc_products_active.html", dataset_path / "web" / "cc_products_active.html") + shutil.copyfile(data_dir / "cc_products_active.csv", dataset_path / "web" / "cc_products_active.csv") + shutil.copyfile(data_dir / "cc_products_active.html", dataset_path / "web" / "cc_products_active.html") dset = CCDataset({}, dataset_path, "sample_dataset", "sample dataset description") dset.get_certs_from_web( @@ -107,7 +142,7 @@ def test_build_dataset(dataset_data_dir: Path, cert_one: CCCertificate, toy_data assert len(list(dataset_path.iterdir())) == 0 assert len(dset) == 3 - assert cert_one in dset + assert crt 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 cf7a1644..254df45c 100644 --- a/tests/cc/test_cc_maintenance_updates.py +++ b/tests/cc/test_cc_maintenance_updates.py @@ -2,17 +2,26 @@ import json from pathlib import Path import pytest +import tests.data.cc.dataset -from sec_certs.dataset.cc import CCDatasetMaintenanceUpdates +from sec_certs.dataset import CCDataset, 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") + + @pytest.fixture -def mu_dset(dataset_data_dir: Path, tmp_path_factory) -> CCDatasetMaintenanceUpdates: +def mu_dset(data_dir: Path, tmp_path_factory) -> CCDatasetMaintenanceUpdates: tmp_dir = tmp_path_factory.mktemp("mu_dset") - dset = CCDatasetMaintenanceUpdates.from_json( - dataset_data_dir / "auxiliary_datasets/maintenances/maintenance_updates.json" - ) + dset = CCDatasetMaintenanceUpdates.from_json(data_dir / "auxiliary_datasets/maintenances/maintenance_updates.json") dset.copy_dataset(tmp_dir) return dset @@ -43,13 +52,13 @@ def test_download_artifacts(mu_dset: CCDatasetMaintenanceUpdates): assert mu.state.st_pdf_hash == "d42e4364d037ba742fcd4050a9a84d0e6300f93eb68bcfe8c61f72c429c9ceca" -def test_dataset_to_json(mu_dset: CCDatasetMaintenanceUpdates, dataset_data_dir: Path, tmp_path: Path): +def test_dataset_to_json(mu_dset: CCDatasetMaintenanceUpdates, data_dir: Path, tmp_path: Path): mu_dset.to_json(tmp_path / "dset.json") with (tmp_path / "dset.json").open("r") as handle: data = json.load(handle) - with (dataset_data_dir / "auxiliary_datasets/maintenances/maintenance_updates.json").open("r") as handle: + with (data_dir / "auxiliary_datasets/maintenances/maintenance_updates.json").open("r") as handle: template_data = json.load(handle) del template_data["timestamp"] @@ -57,9 +66,9 @@ def test_dataset_to_json(mu_dset: CCDatasetMaintenanceUpdates, dataset_data_dir: assert data == template_data -def test_dataset_from_json(mu_dset: CCDatasetMaintenanceUpdates, dataset_data_dir: Path): +def test_dataset_from_json(mu_dset: CCDatasetMaintenanceUpdates, data_dir: Path): assert mu_dset == CCDatasetMaintenanceUpdates.from_json( - dataset_data_dir / "auxiliary_datasets/maintenances/maintenance_updates.json" + data_dir / "auxiliary_datasets/maintenances/maintenance_updates.json" ) diff --git a/tests/cc/test_cc_schemes.py b/tests/cc/test_cc_schemes.py index 939f77b5..24467709 100644 --- a/tests/cc/test_cc_schemes.py +++ b/tests/cc/test_cc_schemes.py @@ -19,7 +19,6 @@ def absolute_urls(results): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_australia(): ineval = CCSchemes.get_australia_in_evaluation() assert len(ineval) != 0 @@ -59,7 +58,6 @@ def test_bsi(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_india(): certified = CCSchemes.get_india_certified() assert len(certified) != 0 @@ -70,7 +68,6 @@ def test_india(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_italy(): certified = CCSchemes.get_italy_certified() assert len(certified) != 0 @@ -81,7 +78,6 @@ def test_italy(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_japan(): certified = CCSchemes.get_japan_certified() assert len(certified) != 0 @@ -95,7 +91,6 @@ def test_japan(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_malaysia(): certified = CCSchemes.get_malaysia_certified() assert len(certified) != 0 @@ -106,7 +101,6 @@ def test_malaysia(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_netherlands(): certified = CCSchemes.get_netherlands_certified() assert len(certified) != 0 @@ -117,7 +111,6 @@ def test_netherlands(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_norway(): certified = CCSchemes.get_norway_certified() assert len(certified) != 0 @@ -128,7 +121,6 @@ def test_norway(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_korea(): certified = CCSchemes.get_korea_certified() assert len(certified) != 0 @@ -139,7 +131,6 @@ def test_korea(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_singapore(): certified = CCSchemes.get_singapore_certified() assert len(certified) != 0 @@ -153,7 +144,6 @@ def test_singapore(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_spain(): certified = CCSchemes.get_spain_certified() assert len(certified) != 0 @@ -174,7 +164,6 @@ def test_sweden(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_turkey(): certified = CCSchemes.get_turkey_certified() assert len(certified) != 0 @@ -182,7 +171,6 @@ def test_turkey(): @pytest.mark.xfail(reason="May fail due to server errors.", raises=RequestException) -@pytest.mark.slow def test_usa(): certified = CCSchemes.get_usa_certified() assert len(certified) != 0 |
