Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
strategy:
max-parallel: 4
matrix:
python-version: [3.7]
python-version: [3.8]

steps:
- name: Checkout code
Expand Down
7 changes: 6 additions & 1 deletion vulnerabilities/importers/debian.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,12 @@ def _parse(self, pkg_name: str, records: Mapping[str, Any]) -> List[Advisory]:
return advisories

def response_is_new(self):
date_str = requests.head(self.config.debian_tracker_url).headers.get("last-modified")
"""
Return True if a request response is for new data likely changed or
updated since we last checked.
"""
head = requests.head(self.config.debian_tracker_url)
date_str = head.headers.get("last-modified")
last_modified_date = dateparser.parse(date_str)
if self.config.last_run_date:
return self.config.last_run_date < last_modified_date
Expand Down
18 changes: 11 additions & 7 deletions vulnerabilities/tests/test_debian.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
# for any legal advice.
# VulnerableCode is a free software code scanning tool from nexB Inc. and others.
# Visit https://github.com/nexB/vulnerablecode/ for support and download.

import json
import os
from dateutil import parser as dateparser
from unittest.mock import patch
from unittest.mock import MagicMock

Expand All @@ -45,14 +47,16 @@ def setUpClass(cls) -> None:
cls.importer = models.Importer.objects.create(
name="debian_unittests",
license="",
last_run="2019-08-05 13:14:17.733232+05:30",
last_run=dateparser.parse("2019-08-05 13:14:17.733232+05:30"),
data_source="DebianDataSource",
data_source_cfg={"debian_tracker_url": "https://security.example.com/json"},
)
return super().setUpClass()

@classmethod
def tearDownClass(cls) -> None:
pass
def tearDown(self) -> None:
self.importer.data_source_cfg = {"debian_tracker_url": "https://security.example.com/json"}
self.importer.last_run = dateparser.parse("2019-08-05 13:14:17.733232+05:30")
self.importer.save()

def test_import(self):
runner = ImportRunner(self.importer, 5)
Expand Down Expand Up @@ -84,12 +88,12 @@ def test_response_is_new(self):
mock_resp.headers = {"last-modified": "Wed, 05 Aug 2021 09:12:19 GMT"}

with patch("vulnerabilities.importers.debian.requests.head", return_value=mock_resp):
assert test_data_source.response_is_new() is True
assert test_data_source.response_is_new()

mock_resp.headers = {"last-modified": "Wed, 05 Aug 2019 09:12:19 GMT"}
mock_resp.headers = {"last-modified": "Wed, 04 Aug 2019 09:12:19 GMT"}

with patch("vulnerabilities.importers.debian.requests.head", return_value=mock_resp):
assert test_data_source.response_is_new() is False
assert not test_data_source.response_is_new()

def assert_for_package(self, name, version, release, cve_ids=None):
qs = models.Package.objects.filter(
Expand Down