2323import json
2424import os
2525from unittest .mock import patch
26+ from unittest .mock import MagicMock
2627
2728from django .test import TestCase
2829
2930from vulnerabilities import models
3031from vulnerabilities .import_runner import ImportRunner
32+ from vulnerabilities .importers import DebianDataSource
3133
3234BASE_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
3638class 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