Skip to content

Commit d408b62

Browse files
committed
Add tests
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 519b52b commit d408b62

File tree

3 files changed

+138
-3
lines changed

3 files changed

+138
-3
lines changed

vulnerabilities/importers/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
from vulnerabilities.pipelines.v2_importers import apache_tomcat_importer as apache_tomcat_v2
4848
from vulnerabilities.pipelines.v2_importers import archlinux_importer as archlinux_importer_v2
4949
from vulnerabilities.pipelines.v2_importers import curl_importer as curl_importer_v2
50+
from vulnerabilities.pipelines.v2_importers import debian_importer as debian_importer_v2
5051
from vulnerabilities.pipelines.v2_importers import (
5152
elixir_security_importer as elixir_security_importer_v2,
5253
)
@@ -75,7 +76,6 @@
7576
from vulnerabilities.pipelines.v2_importers import ruby_importer as ruby_importer_v2
7677
from vulnerabilities.pipelines.v2_importers import vulnrichment_importer as vulnrichment_importer_v2
7778
from vulnerabilities.pipelines.v2_importers import xen_importer as xen_importer_v2
78-
from vulnerabilities.pipelines.v2_importers import debian_importer as debian_importer_v2
7979
from vulnerabilities.utils import create_registry
8080

8181
IMPORTERS_REGISTRY = create_registry(

vulnerabilities/pipelines/v2_importers/debian_importer.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
from packageurl import PackageURL
1616
from univers.version_range import DebianVersionRange
17-
from univers.versions import DebianVersion
1817

1918
from vulnerabilities.importer import AdvisoryData
2019
from vulnerabilities.importer import AffectedPackageV2
@@ -27,7 +26,7 @@
2726

2827

2928
class DebianImporterPipeline(VulnerableCodeBaseImporterPipelineV2):
30-
"""ArchLinux Importer Pipeline"""
29+
"""Debian Importer Pipeline"""
3130

3231
pipeline_id = "debian_importer_v2"
3332
spdx_license_expression = "LicenseRef-scancode-other-permissive"
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
#
2+
# Copyright (c) nexB Inc. and others. All rights reserved.
3+
# VulnerableCode is a trademark of nexB Inc.
4+
# SPDX-License-Identifier: Apache-2.0
5+
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
6+
# See https://github.com/aboutcode-org/vulnerablecode for support or download.
7+
# See https://aboutcode.org for more information about nexB OSS projects.
8+
#
9+
10+
from unittest.mock import MagicMock
11+
from unittest.mock import patch
12+
13+
import pytest
14+
from packageurl import PackageURL
15+
from univers.version_range import DebianVersionRange
16+
17+
from vulnerabilities.importer import AdvisoryData
18+
from vulnerabilities.importer import AffectedPackageV2
19+
from vulnerabilities.importer import ReferenceV2
20+
from vulnerabilities.pipelines.v2_importers.debian_importer import DebianImporterPipeline
21+
from vulnerabilities.pipelines.v2_importers.debian_importer import get_cwe_from_debian_advisory
22+
23+
24+
@pytest.fixture
25+
def importer():
26+
return DebianImporterPipeline()
27+
28+
29+
@pytest.fixture
30+
def sample_response():
31+
return {
32+
"openssl": {
33+
"CVE-2023-1234": {
34+
"description": "Some vulnerability description (CWE-79)",
35+
"debianbug": 123456,
36+
"releases": {
37+
"bullseye": {
38+
"status": "resolved",
39+
"repositories": {"bullseye": "1.1.1k-1"},
40+
"fixed_version": "1.1.1k-2",
41+
},
42+
"bookworm": {
43+
"status": "open",
44+
"repositories": {"bookworm": "1.1.1l-1"},
45+
},
46+
},
47+
}
48+
}
49+
}
50+
51+
52+
def test_get_cwe_from_debian_advisory_with_cwe():
53+
record = {"description": "This issue relates to improper input validation (CWE-20)."}
54+
55+
weaknesses = get_cwe_from_debian_advisory(record)
56+
57+
assert len(weaknesses) == 1
58+
assert weaknesses[0] == 20
59+
60+
61+
def test_get_cwe_from_debian_advisory_without_cwe():
62+
record = {"description": "No weakness mentioned here."}
63+
64+
weaknesses = get_cwe_from_debian_advisory(record)
65+
66+
assert weaknesses == []
67+
68+
69+
@patch("vulnerabilities.pipelines.v2_importers.debian_importer.fetch_response")
70+
def test_get_response_success(mock_fetch, importer, sample_response):
71+
mock_resp = MagicMock()
72+
mock_resp.json.return_value = sample_response
73+
mock_fetch.return_value = mock_resp
74+
75+
response = importer.get_response()
76+
77+
assert response == sample_response
78+
mock_fetch.assert_called_once_with(importer.api_url)
79+
80+
81+
@patch("vulnerabilities.pipelines.v2_importers.debian_importer.fetch_response")
82+
def test_get_response_failure(mock_fetch, importer):
83+
mock_fetch.side_effect = Exception("network error")
84+
85+
response = importer.get_response()
86+
87+
assert response == {}
88+
89+
90+
def test_advisories_count(importer, sample_response):
91+
importer.response = sample_response
92+
93+
count = importer.advisories_count()
94+
95+
assert count == 1
96+
97+
98+
def test_collect_advisories(importer, sample_response):
99+
importer.response = sample_response
100+
101+
advisories = list(importer.collect_advisories())
102+
103+
assert len(advisories) == 1
104+
advisory = advisories[0]
105+
106+
assert isinstance(advisory, AdvisoryData)
107+
assert advisory.advisory_id == "openssl/CVE-2023-1234"
108+
assert advisory.summary.startswith("Some vulnerability")
109+
110+
111+
def test_affected_packages_generation(importer, sample_response):
112+
importer.response = sample_response
113+
114+
advisory = next(importer.collect_advisories())
115+
affected_packages = advisory.affected_packages
116+
117+
assert len(affected_packages) == 2
118+
119+
for pkg in affected_packages:
120+
assert isinstance(pkg, AffectedPackageV2)
121+
assert isinstance(pkg.package, PackageURL)
122+
assert isinstance(pkg.fixed_version_range, DebianVersionRange)
123+
124+
125+
def test_debian_bug_reference(importer, sample_response):
126+
importer.response = sample_response
127+
128+
advisory = next(importer.collect_advisories())
129+
references = advisory.references
130+
131+
assert len(references) == 1
132+
ref = references[0]
133+
134+
assert isinstance(ref, ReferenceV2)
135+
assert ref.reference_id == "123456"
136+
assert "bugs.debian.org" in ref.url

0 commit comments

Comments
 (0)