diff options
Diffstat (limited to 'tests/test_cc_oop.py')
| -rw-r--r-- | tests/test_cc_oop.py | 290 |
1 files changed, 170 insertions, 120 deletions
diff --git a/tests/test_cc_oop.py b/tests/test_cc_oop.py index 3ca1935e..2426476d 100644 --- a/tests/test_cc_oop.py +++ b/tests/test_cc_oop.py @@ -1,178 +1,226 @@ -import tempfile -from unittest import TestCase -from pathlib import Path -from tempfile import TemporaryDirectory, mkstemp, NamedTemporaryFile -from datetime import date, datetime -import json import filecmp -import shutil import os +import shutil +import tempfile +from datetime import date, datetime +from pathlib import Path +from tempfile import NamedTemporaryFile, TemporaryDirectory +from unittest import TestCase +import sec_certs.constants as constants +import sec_certs.helpers as helpers from sec_certs.dataset.common_criteria import CCDataset from sec_certs.sample.common_criteria import CommonCriteriaCert from sec_certs.sample.protection_profile import ProtectionProfile -import sec_certs.helpers as helpers -import sec_certs.constants as constants class TestCommonCriteriaOOP(TestCase): def setUp(self): - self.test_data_dir = Path(__file__).parent / 'data' / 'test_cc_oop' - self.crt_one = CommonCriteriaCert('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) + self.test_data_dir = Path(__file__).parent / "data" / "test_cc_oop" + self.crt_one = CommonCriteriaCert( + "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, + ) - self.crt_two = CommonCriteriaCert('active', - 'Access Control Devices and Systems', - 'Magic SSO V4.0', - 'Dreamsecurity Co., Ltd.', - 'KR', - set(), - date(2019, 11, 15), - date(2024, 11, 15), - 'https://www.commoncriteriaportal.org/files/epfiles/KECS-CR-19-70%20Magic%20SSO%20V4.0(eng)%20V1.0.pdf', - 'https://www.commoncriteriaportal.org/files/epfiles/Magic_SSO_V4.0-ST-v1.4_EN.pdf', - None, - 'https://www.dreamsecurity.com/', - {ProtectionProfile('Korean National Protection Profile for Single Sign On V1.0', - 'https://www.commoncriteriaportal.org/files/ppfiles/KECS-PP-0822-2017%20Korean%20National%20PP%20for%20Single%20Sign%20On%20V1.0(eng).pdf')}, - set(), - None, - None, - None) + self.crt_two = CommonCriteriaCert( + "active", + "Access Control Devices and Systems", + "Magic SSO V4.0", + "Dreamsecurity Co., Ltd.", + "KR", + set(), + date(2019, 11, 15), + date(2024, 11, 15), + "https://www.commoncriteriaportal.org/files/epfiles/KECS-CR-19-70%20Magic%20SSO%20V4.0(eng)%20V1.0.pdf", + "https://www.commoncriteriaportal.org/files/epfiles/Magic_SSO_V4.0-ST-v1.4_EN.pdf", + None, + "https://www.dreamsecurity.com/", + { + ProtectionProfile( + "Korean National Protection Profile for Single Sign On V1.0", + "https://www.commoncriteriaportal.org/files/ppfiles/KECS-PP-0822-2017%20Korean%20National%20PP%20for%20Single%20Sign%20On%20V1.0(eng).pdf", + ) + }, + set(), + None, + None, + None, + ) - pp = ProtectionProfile('sample_pp', 'https://sample.pp') - update = CommonCriteriaCert.MaintenanceReport(date(1900, 1, 1), 'Sample maintenance', 'https://maintenance.up', 'https://maintenance.up') - self.fictional_cert = CommonCriteriaCert('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) - self.template_dataset = CCDataset({self.crt_one.dgst: self.crt_one, self.crt_two.dgst: self.crt_two}, Path('/fictional/path/to/dataset'), 'toy dataset', 'toy dataset description') + pp = ProtectionProfile("sample_pp", "https://sample.pp") + update = CommonCriteriaCert.MaintenanceReport( + date(1900, 1, 1), "Sample maintenance", "https://maintenance.up", "https://maintenance.up" + ) + self.fictional_cert = CommonCriteriaCert( + "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, + ) + self.template_dataset = CCDataset( + {self.crt_one.dgst: self.crt_one, self.crt_two.dgst: self.crt_two}, + Path("/fictional/path/to/dataset"), + "toy dataset", + "toy dataset description", + ) self.template_dataset.timestamp = datetime(2020, 11, 16, hour=17, minute=4, second=14, microsecond=770153) self.template_dataset.state.meta_sources_parsed = True - self.template_report_pdf_hashes = {'309ac2fd7f2dcf17': '774c41fbba980191ca40ae610b2f61484c5997417b3325b6fd68b345173bde52', - '8cf86948f02f047d': '533a5995ef8b736cc48cfda30e8aafec77d285511471e0e5a9e8007c8750203a'} - self.template_target_pdf_hashes = {'309ac2fd7f2dcf17': 'b9a45995d9e40b2515506bbf5945e806ef021861820426c6d0a6a074090b47a9', - '8cf86948f02f047d': '3c8614338899d956e9e56f1aa88d90e37df86f3310b875d9d14ec0f71e4759be'} + self.template_report_pdf_hashes = { + "309ac2fd7f2dcf17": "774c41fbba980191ca40ae610b2f61484c5997417b3325b6fd68b345173bde52", + "8cf86948f02f047d": "533a5995ef8b736cc48cfda30e8aafec77d285511471e0e5a9e8007c8750203a", + } + self.template_target_pdf_hashes = { + "309ac2fd7f2dcf17": "b9a45995d9e40b2515506bbf5945e806ef021861820426c6d0a6a074090b47a9", + "8cf86948f02f047d": "3c8614338899d956e9e56f1aa88d90e37df86f3310b875d9d14ec0f71e4759be", + } - self.template_report_txt_path = self.test_data_dir / 'report_869415cc4b91282e.txt' - self.template_target_txt_path = self.test_data_dir / 'target_869415cc4b91282e.txt' + self.template_report_txt_path = self.test_data_dir / "report_869415cc4b91282e.txt" + self.template_target_txt_path = self.test_data_dir / "target_869415cc4b91282e.txt" def test_certificate_input_sanity(self): - self.assertEqual(self.crt_one.report_link, - 'https://www.commoncriteriaportal.org/files/epfiles/Certification%20Report%20-%20NetIQ®%20Identity%20Manager%204.7.pdf', - 'Report link contains some improperly escaped characters.') + self.assertEqual( + self.crt_one.report_link, + "https://www.commoncriteriaportal.org/files/epfiles/Certification%20Report%20-%20NetIQ®%20Identity%20Manager%204.7.pdf", + "Report link contains some improperly escaped characters.", + ) def test_download_and_convert_pdfs(self): - dset = CCDataset.from_json(self.test_data_dir / 'toy_dataset.json') + dset = CCDataset.from_json(self.test_data_dir / "toy_dataset.json") with TemporaryDirectory() as td: dset.root_dir = Path(td) dset.download_all_pdfs() dset.convert_all_pdfs() - actual_report_pdf_hashes = {key: helpers.get_sha256_filepath(val.state.report_pdf_path) for key, val in dset.certs.items()} - actual_target_pdf_hashes = {key: helpers.get_sha256_filepath(val.state.st_pdf_path) for key, val in dset.certs.items()} + actual_report_pdf_hashes = { + key: helpers.get_sha256_filepath(val.state.report_pdf_path) for key, val in dset.certs.items() + } + actual_target_pdf_hashes = { + key: helpers.get_sha256_filepath(val.state.st_pdf_path) for key, val in dset.certs.items() + } - self.assertEqual(actual_report_pdf_hashes, self.template_report_pdf_hashes, 'Hashes of downloaded pdfs (sample report) do not the template') - self.assertEqual(actual_target_pdf_hashes, self.template_target_pdf_hashes, 'Hashes of downloaded pdfs (security target) do not match the template') + self.assertEqual( + actual_report_pdf_hashes, + self.template_report_pdf_hashes, + "Hashes of downloaded pdfs (sample report) do not the template", + ) + self.assertEqual( + actual_target_pdf_hashes, + self.template_target_pdf_hashes, + "Hashes of downloaded pdfs (security target) do not match the template", + ) - self.assertTrue(dset['309ac2fd7f2dcf17'].state.report_txt_path.exists()) - self.assertTrue(dset['309ac2fd7f2dcf17'].state.st_txt_path.exists()) + self.assertTrue(dset["309ac2fd7f2dcf17"].state.report_txt_path.exists()) + self.assertTrue(dset["309ac2fd7f2dcf17"].state.st_txt_path.exists()) - self.assertAlmostEqual(dset['309ac2fd7f2dcf17'].state.st_txt_path.stat().st_size, - self.template_target_txt_path.stat().st_size, - delta=1000) + self.assertAlmostEqual( + dset["309ac2fd7f2dcf17"].state.st_txt_path.stat().st_size, + self.template_target_txt_path.stat().st_size, + delta=1000, + ) - self.assertAlmostEqual(dset['309ac2fd7f2dcf17'].state.report_txt_path.stat().st_size, - self.template_report_txt_path.stat().st_size, - delta=1000) + self.assertAlmostEqual( + dset["309ac2fd7f2dcf17"].state.report_txt_path.stat().st_size, + self.template_report_txt_path.stat().st_size, + delta=1000, + ) def test_cert_to_json(self): - with NamedTemporaryFile('w') as tmp: + with NamedTemporaryFile("w") as tmp: self.fictional_cert.to_json(tmp.name) - self.assertTrue(filecmp.cmp(self.test_data_dir / 'fictional_cert.json', - tmp.name), - 'The sample serialized to json differs from a template.') + self.assertTrue( + filecmp.cmp(self.test_data_dir / "fictional_cert.json", tmp.name), + "The sample serialized to json differs from a template.", + ) def test_dataset_to_json(self): - with NamedTemporaryFile('w') as tmp: + with NamedTemporaryFile("w") as tmp: self.template_dataset.to_json(tmp.name) - self.assertTrue(filecmp.cmp(self.test_data_dir / 'toy_dataset.json', - tmp.name), - 'The dataset serialized to json differs from a template.') + self.assertTrue( + filecmp.cmp(self.test_data_dir / "toy_dataset.json", tmp.name), + "The dataset serialized to json differs from a template.", + ) def test_cert_from_json(self): - self.assertEqual(self.fictional_cert, - CommonCriteriaCert.from_json(self.test_data_dir / 'fictional_cert.json'), - 'The sample serialized from json differs from a template.') + self.assertEqual( + self.fictional_cert, + CommonCriteriaCert.from_json(self.test_data_dir / "fictional_cert.json"), + "The sample serialized from json differs from a template.", + ) def test_dataset_from_json(self): - self.assertEqual(self.template_dataset, - CCDataset.from_json(self.test_data_dir / 'toy_dataset.json'), - 'The dataset serialized from json differs from a template.') + self.assertEqual( + self.template_dataset, + CCDataset.from_json(self.test_data_dir / "toy_dataset.json"), + "The dataset serialized from json differs from a template.", + ) def test_build_empty_dataset(self): with TemporaryDirectory() as tmp_dir: - dset = CCDataset({}, Path(tmp_dir), 'sample_dataset', 'sample dataset description') + dset = CCDataset({}, Path(tmp_dir), "sample_dataset", "sample dataset description") dset.get_certs_from_web(to_download=False, get_archived=False, get_active=False) - self.assertEqual(len(dset), 0, 'The dataset should contain 0 files.') + self.assertEqual(len(dset), 0, "The dataset should contain 0 files.") def test_build_dataset(self): with TemporaryDirectory() as tmp_dir: dataset_path = Path(tmp_dir) - os.mkdir(dataset_path / 'web') - shutil.copyfile(self.test_data_dir / 'cc_products_active.csv', dataset_path / 'web' / 'cc_products_active.csv') - shutil.copyfile(self.test_data_dir / 'cc_products_active.html', dataset_path / 'web' / 'cc_products_active.html') + os.mkdir(dataset_path / "web") + shutil.copyfile( + self.test_data_dir / "cc_products_active.csv", dataset_path / "web" / "cc_products_active.csv" + ) + shutil.copyfile( + self.test_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(keep_metadata=False, - to_download=False, - get_archived=False, - get_active=True, - update_json=False) + dset = CCDataset({}, dataset_path, "sample_dataset", "sample dataset description") + dset.get_certs_from_web( + keep_metadata=False, to_download=False, get_archived=False, get_active=True, update_json=False + ) - self.assertEqual(len(os.listdir(dataset_path)), 0, - 'Meta files (csv, html) were not deleted properly albeit this was explicitly required.') + self.assertEqual( + len(os.listdir(dataset_path)), + 0, + "Meta files (csv, html) were not deleted properly albeit this was explicitly required.", + ) - self.assertEqual(len(dset), 2, 'The dataset should contain 2 files.') + self.assertEqual(len(dset), 2, "The dataset should contain 2 files.") - self.assertTrue(self.crt_one in dset, 'The dataset does not contain the template sample.') - self.assertEqual(dset, self.template_dataset, 'The loaded dataset does not match the template dataset.') + self.assertTrue(self.crt_one in dset, "The dataset does not contain the template sample.") + self.assertEqual(dset, self.template_dataset, "The loaded dataset does not match the template dataset.") def test_download_csv_html_files(self): with TemporaryDirectory() as tmp_dir: dataset_path = Path(tmp_dir) - dset = CCDataset({}, dataset_path, 'sample_dataset', 'sample dataset description') + dset = CCDataset({}, dataset_path, "sample_dataset", "sample dataset description") dset.download_csv_html_resources(get_active=True, get_archived=False) for x in dset.active_html_tuples: @@ -187,4 +235,6 @@ class TestCommonCriteriaOOP(TestCase): self.template_dataset.root_dir = tmp_dir self.template_dataset.process_protection_profiles() self.assertTrue(self.template_dataset.pp_dataset_path.exists()) - self.assertGreaterEqual(self.template_dataset.pp_dataset_path.stat().st_size, constants.MIN_CC_PP_DATASET_SIZE)
\ No newline at end of file + self.assertGreaterEqual( + self.template_dataset.pp_dataset_path.stat().st_size, constants.MIN_CC_PP_DATASET_SIZE + ) |
