Skip to content

Commit 9e8b8e5

Browse files
committed
Fix the test for osv pipelines
Update the function docs osv_v2 Signed-off-by: ziad hany <ziadhany2016@gmail.com>
1 parent eb238c2 commit 9e8b8e5

File tree

3 files changed

+32
-19
lines changed

3 files changed

+32
-19
lines changed

vulnerabilities/importers/osv_v2.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
from cvss.exceptions import CVSS3MalformedError
1818
from cvss.exceptions import CVSS4MalformedError
1919
from packageurl import PackageURL
20-
from univers.version_constraint import VersionConstraint, validate_comparators
20+
from univers.version_constraint import VersionConstraint
21+
from univers.version_constraint import validate_comparators
2122
from univers.version_range import RANGE_CLASS_BY_SCHEMES
2223
from univers.versions import InvalidVersion
2324
from univers.versions import SemverVersion
@@ -119,7 +120,7 @@ def parse_advisory_data_v3(
119120
)
120121
except Exception as e:
121122
logger.error(
122-
f"Invalid Commit Data: repo_url:{repo_url!r} - commit_hash: {commit_hash} for OSV id: {advisory_id}"
123+
f"Invalid Commit Data: repo_url:{repo_url!r} - commit_hash: {commit_hash} error: {e} for OSV id: {advisory_id}"
123124
)
124125
continue
125126
for patch_obj in patch_objs:
@@ -183,7 +184,8 @@ def parse_advisory_data_v3(
183184
weaknesses=weaknesses,
184185
patches=patches,
185186
url=advisory_url,
186-
original_advisory_text=advisory_text or json.dumps(raw_data, indent=2, ensure_ascii=False),
187+
original_advisory_text=advisory_text
188+
or json.dumps(raw_data, indent=2, ensure_ascii=False),
187189
)
188190
except Exception as e:
189191
logger.error(f"Invalid AdvisoryData for {advisory_id}: {e}")
@@ -324,8 +326,7 @@ def get_affected_purl(affected_pkg, raw_id):
324326

325327
def get_explicit_affected_constraints(affected_pkg, raw_id, supported_ecosystem):
326328
"""
327-
Return a univers VersionRange for the ``affected_pkg`` package data mapping
328-
or None. Use a ``raw_id`` OSV id and ``supported_ecosystem``.
329+
Return a list of explicit version constraints for the ``affected_pkg`` data.
329330
"""
330331
affected_versions = affected_pkg.get("versions") or []
331332
constraints = []
@@ -340,7 +341,6 @@ def get_explicit_affected_constraints(affected_pkg, raw_id, supported_ecosystem)
340341
version_obj = version_range_class.version_class(version)
341342
constraint = VersionConstraint(comparator="=", version=version_obj)
342343
constraints.append(constraint)
343-
validate_comparators(constraints)
344344
except Exception as e:
345345
logger.error(
346346
f"Invalid VersionConstraint: {version} " f"for OSV id: {raw_id!r}: error:{e!r}"
@@ -349,25 +349,30 @@ def get_explicit_affected_constraints(affected_pkg, raw_id, supported_ecosystem)
349349
try:
350350
validate_comparators(constraints)
351351
except Exception as e:
352-
logger.error(
353-
f"InvalidConstraint: {version} " f"for OSV id: {raw_id!r}: error:{e!r}"
354-
)
352+
logger.error(f"InvalidConstraint: {version} " f"for OSV id: {raw_id!r}: error:{e!r}")
355353
return constraints
356354

357355

358356
def get_version_ranges_constraints(ranges, raw_id, supported_ecosystem):
359357
"""
360-
Return a list of unique fixed univers Versions given a ``fixed_range``
361-
univers VersionRange and a ``raw_id``.
358+
Return a tuple containing lists of affected constraints, fixed constraints,
359+
introduced commits, and fixed commits
362360
For example::
363-
>>> get_version_ranges_constraints(range={}, raw_id="GHSA-j3f7-7rmc-6wqj", supported_ecosystem="pypi",)
361+
>>> get_version_ranges_constraints(ranges={}, raw_id="GHSA-j3f7-7rmc-6wqj", supported_ecosystem="pypi")
364362
[]
365-
>>> get_version_ranges_constraints(
366-
... ranges={"type": "ECOSYSTEM", "events": [{"fixed": "1.7.0"}], },
363+
>>> affected, fixed, intro_commits, fixed_commits = get_version_ranges_constraints(
364+
... ranges={"type": "ECOSYSTEM", "events": [{"fixed": "1.7.0"}]},
367365
... raw_id="GHSA-j3f7-7rmc-6wqj",
368366
... supported_ecosystem="pypi",
369367
... )
370-
[PypiVersion(string='1.7.0')]
368+
>>> affected
369+
[VersionConstraint(comparator='<', version=PypiVersion(string='1.7.0'))]
370+
>>> fixed
371+
[VersionConstraint(comparator='=', version=PypiVersion(string='1.7.0'))]
372+
>>> intro_commits
373+
[]
374+
>>> fixed_commits
375+
[]
371376
"""
372377
fixed_commits = []
373378
intro_commits = []

vulnerabilities/tests/pipelines/v2_importers/test_pypa_importer_pipeline_v2.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ def test_collect_advisories(mock_pathlib, mock_vcs_response, mock_fetch_via_vcs)
8989
mock_vcs_response.dest_dir = str(mock_pathlib.parent)
9090

9191
# Mock `parse_advisory_data` to return an AdvisoryData object
92-
with patch("vulnerabilities.importers.osv.parse_advisory_data_v2") as mock_parse:
92+
with patch(
93+
"vulnerabilities.pipelines.v2_importers.pypa_importer.parse_advisory_data_v3"
94+
) as mock_parse:
9395
mock_parse.return_value = AdvisoryData(
9496
advisory_id="CVE-2021-1234",
9597
summary="Sample PyPI vulnerability",
@@ -149,7 +151,9 @@ def test_collect_advisories_with_invalid_yaml(mock_pathlib, mock_vcs_response, m
149151

150152
mock_vcs_response.dest_dir = str(mock_pathlib.parent)
151153

152-
with patch("vulnerabilities.importers.osv.parse_advisory_data_v2") as mock_parse:
154+
with patch(
155+
"vulnerabilities.pipelines.v2_importers.pypa_importer.parse_advisory_data_v3"
156+
) as mock_parse:
153157
# Mock parse_advisory_data to raise an error on invalid YAML
154158
mock_parse.side_effect = saneyaml.YAMLError("Invalid YAML")
155159

vulnerabilities/tests/pipelines/v2_importers/test_pysec_importer_v2.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ def test_collect_advisories(mock_requests_get, mock_zip_data):
7979
pipeline.fetch_zip()
8080

8181
# Mock the `parse_advisory_data_v2` function to return a dummy AdvisoryData
82-
with patch("vulnerabilities.importers.osv.parse_advisory_data_v2") as mock_parse:
82+
with patch(
83+
"vulnerabilities.pipelines.v2_importers.pysec_importer.parse_advisory_data_v3"
84+
) as mock_parse:
8385
mock_parse.return_value = AdvisoryData(
8486
advisory_id="PYSEC-1234",
8587
summary="Sample PyPI advisory",
@@ -117,7 +119,9 @@ def test_collect_advisories_invalid_file(mock_requests_get, mock_zip_data):
117119
pipeline.fetch_zip()
118120

119121
# Mock the `parse_advisory_data_v2` function
120-
with patch("vulnerabilities.importers.osv.parse_advisory_data_v2") as mock_parse:
122+
with patch(
123+
"vulnerabilities.pipelines.v2_importers.pysec_importer.parse_advisory_data_v3"
124+
) as mock_parse:
121125
mock_parse.return_value = AdvisoryData(
122126
advisory_id="PYSEC-1234",
123127
summary="Sample PyPI advisory",

0 commit comments

Comments
 (0)