Skip to content

Commit fa7a3d4

Browse files
committed
Add tests for v2 OpenSSL importer pipeline
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent ea93138 commit fa7a3d4

File tree

8 files changed

+900
-7
lines changed

8 files changed

+900
-7
lines changed

vulnerabilities/tests/pipelines/v2_importers/test_openssl_importer.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,26 @@
1414
from django.test import TestCase
1515

1616
from vulnerabilities.models import AdvisoryV2
17-
from vulnerabilities.models import PackageV2
1817
from vulnerabilities.pipelines.v2_importers.openssl_importer import OpenSSLImporterPipeline
1918
from vulnerabilities.tests import util_tests
19+
from vulnerabilities.tests.pipelines import TestLogger
2020

2121
TEST_DATA = Path(__file__).parent.parent.parent / "test_data" / "openssl" / "release_metadata"
2222

2323

2424
class TestOpenSSLImporterPipeline(TestCase):
25+
def setUp(self):
26+
self.logger = TestLogger()
27+
2528
@patch("vulnerabilities.pipelines.v2_importers.openssl_importer.OpenSSLImporterPipeline.clone")
2629
def test_redhat_advisories_v2(self, mock_clone):
2730
mock_clone.__name__ = "clone"
2831
pipeline = OpenSSLImporterPipeline()
2932
pipeline.advisory_path = TEST_DATA
3033
pipeline.vcs_response = None
34+
pipeline.log = self.logger.write
3135
pipeline.execute()
3236

33-
# self.assertEqual(6, AdvisoryV2.objects.count())
34-
# self.assertEqual(93, PackageV2.objects.count())
35-
3637
expected_file = TEST_DATA / "openssl_advisoryv2-expected.json"
37-
result = [adv.to_advisory_data() for adv in AdvisoryV2.objects.all()]
38-
print(result)
39-
# util_tests.check_results_against_json(result, expected_file, regen=True)
38+
result = [adv.to_advisory_data().to_dict() for adv in AdvisoryV2.objects.all()]
39+
util_tests.check_results_against_json(result, expected_file)

vulnerabilities/tests/pipes/test_openssl.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,82 @@
66
# See https://github.com/aboutcode-org/vulnerablecode for support or download.
77
# See https://aboutcode.org for more information about nexB OSS projects.
88
#
9+
10+
11+
from unittest import TestCase
12+
13+
from vulnerabilities.importer import ReferenceV2
14+
from vulnerabilities.models import AdvisoryReference
15+
from vulnerabilities.pipes.openssl import get_commit_patch
16+
from vulnerabilities.pipes.openssl import get_reference
17+
from vulnerabilities.pipes.openssl import parse_affected_fixed
18+
from vulnerabilities.tests.pipelines import TestLogger
19+
20+
21+
class TestPipeOpenSSL(TestCase):
22+
def setUp(self):
23+
self.logger = TestLogger()
24+
25+
def test_vulnerability_pipes_openssl_get_reference(self):
26+
refrence_name = "OpenSSL Advisory"
27+
tag = "vendor-advisory"
28+
refrence_url = "https://www.openssl.org/news/secadv/20221213.txt"
29+
result = get_reference(
30+
reference_name=refrence_name,
31+
tag=tag,
32+
reference_url=refrence_url,
33+
)
34+
expected = ReferenceV2(
35+
reference_id=refrence_name,
36+
reference_type=AdvisoryReference.ADVISORY,
37+
url=refrence_url,
38+
)
39+
40+
self.assertEqual(result, expected)
41+
42+
def test_vulnerability_pipes_openssl_get_commit_patch(self):
43+
url = "https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=cca1cd9a3447dd067503e4a85ebd1679ee78a48e"
44+
result_patch = get_commit_patch(url=url, logger=self.logger.write)
45+
expected_vcs = "https://github.com/openssl/openssl/"
46+
expected_hash = "cca1cd9a3447dd067503e4a85ebd1679ee78a48e"
47+
48+
self.assertEqual(result_patch.vcs_url, expected_vcs)
49+
self.assertEqual(result_patch.commit_hash, expected_hash)
50+
51+
def test_vulnerability_pipes_openssl_get_commit_patch_unsupported(self):
52+
url = "https://someunsupported.url/commit/93l232slfsll3l23l2"
53+
get_commit_patch(url=url, logger=self.logger.write)
54+
55+
self.assertIn("Unsupported commit url", self.logger.getvalue())
56+
57+
def test_vulnerability_pipes_openssl_parse_affected_fixed_lessthan(self):
58+
affected = {
59+
"lessThan": "0.9.7a",
60+
"status": "affected",
61+
"version": "0.9.7",
62+
"versionType": "custom",
63+
}
64+
65+
result_affected, result_fixed = parse_affected_fixed(affected)
66+
result_affected = [str(const) for const in result_affected]
67+
expected_affected = [">=0.9.7", "<0.9.7a"]
68+
expected_fixed = "0.9.7a"
69+
70+
self.assertCountEqual(result_affected, expected_affected)
71+
self.assertEqual(result_fixed, expected_fixed)
72+
73+
def test_vulnerability_pipes_openssl_parse_affected_fixed_lessthanorequal(self):
74+
affected = {
75+
"lessThanOrEqual": "3.0.7",
76+
"status": "affected",
77+
"version": "3.0.0",
78+
"versionType": "semver",
79+
}
80+
81+
result_affected, result_fixed = parse_affected_fixed(affected)
82+
result_affected = [str(const) for const in result_affected]
83+
expected_affected = [">=3.0.0", "<=3.0.7"]
84+
expected_fixed = None
85+
86+
self.assertCountEqual(result_affected, expected_affected)
87+
self.assertEqual(result_fixed, expected_fixed)

0 commit comments

Comments
 (0)