Skip to content

Commit e5bf448

Browse files
authored
fix: case when fetching vulnerabilities for 0 packages (#503)
Signed-off-by: tdruez <[email protected]>
1 parent c119924 commit e5bf448

2 files changed

Lines changed: 22 additions & 5 deletions

File tree

vulnerabilities/fetch.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,28 +50,31 @@ def fetch_from_vulnerablecode(dataspace, batch_size, update, timeout, log_func=N
5050
timeout=timeout,
5151
log_func=log_func,
5252
)
53+
5354
run_time = timer() - start_time
5455
if log_func:
5556
log_func(f"+ Created {intcomma(results.get('created', 0))} vulnerabilities")
5657
log_func(f"+ Updated {intcomma(results.get('updated', 0))} vulnerabilities")
5758
log_func(f"Completed in {humanize_time(run_time)}")
5859

59-
dataspace.vulnerabilities_updated_at = timezone.now()
60-
dataspace.save(update_fields=["vulnerabilities_updated_at"])
61-
log_func("Dataspace.vulnerabilities_updated_at updated")
60+
if results:
61+
dataspace.vulnerabilities_updated_at = timezone.now()
62+
dataspace.save(update_fields=["vulnerabilities_updated_at"])
63+
log_func("Dataspace.vulnerabilities_updated_at updated")
6264

6365

6466
def fetch_for_packages(
6567
queryset, dataspace, batch_size=50, update=True, timeout=None, log_func=None
6668
):
6769
from product_portfolio.models import ProductPackage
6870

71+
results = {"created": 0, "updated": 0}
72+
6973
object_count = queryset.count()
7074
if object_count < 1:
71-
return
75+
return results
7276

7377
vulnerablecode = VulnerableCode(dataspace)
74-
results = {"created": 0, "updated": 0}
7578

7679
for index, batch in enumerate(chunked_queryset(queryset, batch_size), start=1):
7780
if log_func:

vulnerabilities/tests/test_fetch.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,20 @@ def test_vulnerabilities_fetch_from_vulnerablecode(
5858
self.dataspace.refresh_from_db()
5959
self.assertIsNotNone(self.dataspace.vulnerabilities_updated_at)
6060

61+
buffer = io.StringIO()
62+
dataspace_empty = Dataspace.objects.create(name="empty")
63+
mock_fetch_for_packages.return_value = {}
64+
fetch_from_vulnerablecode(
65+
dataspace_empty, batch_size=1, update=True, timeout=None, log_func=buffer.write
66+
)
67+
expected = (
68+
"0 Packages in the queue."
69+
"+ Created 0 vulnerabilities"
70+
"+ Updated 0 vulnerabilities"
71+
"Completed in 0 seconds"
72+
)
73+
self.assertEqual(expected, buffer.getvalue())
74+
6175
@mock.patch("dejacode_toolkit.vulnerablecode.VulnerableCode.bulk_search_by_purl")
6276
def test_vulnerabilities_fetch_for_packages(self, mock_bulk_search_by_purl):
6377
buffer = io.StringIO()

0 commit comments

Comments
 (0)