Skip to content

Commit 76bb59a

Browse files
committed
✔️ Add test for date checker
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent 1575db2 commit 76bb59a

1 file changed

Lines changed: 36 additions & 25 deletions

File tree

vulnerabilities/tests/test_debian.py

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,32 +23,31 @@
2323
import json
2424
import os
2525
from unittest.mock import patch
26+
from unittest.mock import MagicMock
2627

2728
from django.test import TestCase
2829

2930
from vulnerabilities import models
3031
from vulnerabilities.import_runner import ImportRunner
32+
from vulnerabilities.importers import DebianDataSource
3133

3234
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
33-
TEST_DATA = os.path.join(BASE_DIR, 'test_data/')
35+
TEST_DATA = os.path.join(BASE_DIR, "test_data/")
3436

3537

3638
class DebianImportTest(TestCase):
37-
3839
@classmethod
3940
def setUpClass(cls) -> None:
40-
fixture_path = os.path.join(TEST_DATA, 'debian.json')
41+
fixture_path = os.path.join(TEST_DATA, "debian.json")
4142
with open(fixture_path) as f:
4243
cls.mock_response = json.load(f)
4344

4445
cls.importer = models.Importer.objects.create(
45-
name='debian_unittests',
46-
license='',
47-
last_run=None,
48-
data_source='DebianDataSource',
49-
data_source_cfg={
50-
'debian_tracker_url': 'https://security.example.com/json',
51-
},
46+
name="debian_unittests",
47+
license="",
48+
last_run="2019-08-05 13:14:17.733232+05:30",
49+
data_source="DebianDataSource",
50+
data_source_cfg={"debian_tracker_url": "https://security.example.com/json"},
5251
)
5352

5453
@classmethod
@@ -59,31 +58,43 @@ def test_import(self):
5958
runner = ImportRunner(self.importer, 5)
6059

6160
with patch(
62-
'vulnerabilities.importers.DebianDataSource._fetch',
63-
return_value=self.mock_response
61+
"vulnerabilities.importers.DebianDataSource._fetch", return_value=self.mock_response
6462
):
65-
runner.run()
63+
with patch(
64+
"vulnerabilities.importers.DebianDataSource.response_is_new", return_value=True
65+
):
66+
runner.run()
6667

6768
assert models.Vulnerability.objects.count() == 3
6869
assert models.VulnerabilityReference.objects.count() == 3
6970
assert models.PackageRelatedVulnerability.objects.filter(is_vulnerable=True).count() == 2
70-
assert models.PackageRelatedVulnerability.objects.filter(
71-
is_vulnerable=False).count() == 8
71+
assert models.PackageRelatedVulnerability.objects.filter(is_vulnerable=False).count() == 8
7272
assert models.Package.objects.count() == 6
7373

74-
self.assert_for_package('librsync', '0.9.7-10', 'jessie', cve_ids={'CVE-2014-8242'})
75-
self.assert_for_package('librsync', '0.9.7-10', 'buster', cve_ids={'CVE-2014-8242'})
76-
self.assert_for_package('mimetex', '1.50-1.1', 'stretch')
77-
self.assert_for_package('mimetex', '1.74-1', 'stretch')
78-
self.assert_for_package('mimetex', '1.50-1.1', 'buster')
79-
self.assert_for_package('mimetex', '1.76-1', 'buster')
74+
self.assert_for_package("librsync", "0.9.7-10", "jessie", cve_ids={"CVE-2014-8242"})
75+
self.assert_for_package("librsync", "0.9.7-10", "buster", cve_ids={"CVE-2014-8242"})
76+
self.assert_for_package("mimetex", "1.50-1.1", "stretch")
77+
self.assert_for_package("mimetex", "1.74-1", "stretch")
78+
self.assert_for_package("mimetex", "1.50-1.1", "buster")
79+
self.assert_for_package("mimetex", "1.76-1", "buster")
80+
81+
def test_response_is_new(self):
82+
83+
test_data_source = self.importer.make_data_source(batch_size=1)
84+
mock_resp = MagicMock()
85+
mock_resp.headers = {"last-modified": "Wed, 05 Aug 2021 09:12:19 GMT"}
86+
87+
with patch("vulnerabilities.importers.debian.requests.head", return_value=mock_resp):
88+
assert test_data_source.response_is_new() is True
89+
90+
mock_resp.headers = {"last-modified": "Wed, 05 Aug 2019 09:12:19 GMT"}
91+
92+
with patch("vulnerabilities.importers.debian.requests.head", return_value=mock_resp):
93+
assert test_data_source.response_is_new() is False
8094

8195
def assert_for_package(self, name, version, release, cve_ids=None):
8296
qs = models.Package.objects.filter(
83-
name=name,
84-
version=version,
85-
type='deb',
86-
namespace='debian',
97+
name=name, version=version, type="deb", namespace="debian",
8798
)
8899
qs = qs.filter(qualifiers__distro=release)
89100
assert qs

0 commit comments

Comments
 (0)