Skip to content

Commit 514624b

Browse files
authored
Fix import runner's process_inferences (#1360)
Signed-off-by: Tushar Goel <[email protected]>
1 parent 57ee15f commit 514624b

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

vulnerabilities/import_runner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def process_inferences(inferences: List[Inference], advisory: Advisory, improver
149149
for inference in inferences:
150150
vulnerability = get_or_create_vulnerability_and_aliases(
151151
vulnerability_id=inference.vulnerability_id,
152-
alias_names=inference.aliases,
152+
aliases=inference.aliases,
153153
summary=inference.summary,
154154
)
155155

vulnerabilities/tests/test_import_runner.py

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,22 @@
77
# See https://aboutcode.org for more information about nexB OSS projects.
88
#
99

10-
from datetime import datetime
11-
from datetime import timezone
12-
1310
import pytest
11+
from django.utils import timezone
1412
from univers.version_range import VersionRange
1513

1614
from vulnerabilities import models
1715
from vulnerabilities.import_runner import ImportRunner
16+
from vulnerabilities.import_runner import process_inferences
1817
from vulnerabilities.importer import AdvisoryData
1918
from vulnerabilities.importer import AffectedPackage
2019
from vulnerabilities.importer import Importer
2120
from vulnerabilities.importer import PackageURL
2221
from vulnerabilities.importer import Reference
22+
from vulnerabilities.improver import Inference
23+
from vulnerabilities.tests.test_improve_runner import (
24+
get_objects_in_all_tables_used_by_process_inferences,
25+
)
2326

2427
ADVISORY_DATAS = [
2528
AdvisoryData(
@@ -32,7 +35,7 @@
3235
)
3336
],
3437
references=[Reference(url="https://example.com/with/more/info/CVE-2020-13371337")],
35-
date_published=datetime.now(timezone.utc),
38+
date_published=timezone.now(),
3639
)
3740
]
3841

@@ -106,3 +109,45 @@ def test_advisory_summary_clean_up():
106109
summary="The X509Extension in pyOpenSSL before 0.13.1 does not properly handle a '\x00' character in a domain name in the Subject Alternative Name field of an X.509 certificate, which allows man-in-the-middle attackers to spoof arbitrary SSL servers via a crafted certificate issued by a legitimate Certification Authority."
107110
)
108111
assert "\x00" not in adv.summary
112+
113+
114+
DUMMY_ADVISORY = models.Advisory(summary="dummy", created_by="tests", date_collected=timezone.now())
115+
116+
117+
INFERENCES = [
118+
Inference(
119+
aliases=["CVE-1", "CVE-2"],
120+
summary="One upon a time, in a package far far away",
121+
affected_purls=[
122+
PackageURL(type="character", namespace="star-wars", name="anakin", version="1")
123+
],
124+
fixed_purl=PackageURL(
125+
type="character", namespace="star-wars", name="darth-vader", version="1"
126+
),
127+
references=[Reference(reference_id="imperial-vessel-1", url="https://m47r1x.github.io")],
128+
)
129+
]
130+
131+
132+
@pytest.mark.django_db
133+
def test_process_inferences_with_no_inference():
134+
assert not process_inferences(
135+
inferences=[], advisory=DUMMY_ADVISORY, improver_name="test_improver"
136+
)
137+
138+
139+
@pytest.mark.django_db
140+
def test_process_inferences_with_unknown_but_specified_vulnerability():
141+
inference = Inference(vulnerability_id="VCID-Does-Not-Exist-In-DB", aliases=["MATRIX-Neo"])
142+
assert not process_inferences(
143+
inferences=[inference], advisory=DUMMY_ADVISORY, improver_name="test_improver"
144+
)
145+
146+
147+
@pytest.mark.django_db
148+
def test_process_inferences_idempotency():
149+
process_inferences(INFERENCES, DUMMY_ADVISORY, improver_name="test_improver")
150+
all_objects = get_objects_in_all_tables_used_by_process_inferences()
151+
process_inferences(INFERENCES, DUMMY_ADVISORY, improver_name="test_improver")
152+
process_inferences(INFERENCES, DUMMY_ADVISORY, improver_name="test_improver")
153+
assert all_objects == get_objects_in_all_tables_used_by_process_inferences()

0 commit comments

Comments
 (0)