3535from vulnerabilities .models import ResolvedPackage
3636from vulnerabilities .models import Vulnerability
3737from vulnerabilities .models import VulnerabilityReference
38- from vulnerabilities .scraper import archlinux
3938from vulnerabilities .scraper import debian
4039from vulnerabilities .scraper import ubuntu
4140
@@ -58,7 +57,7 @@ def test_debian_data_dump(self):
5857
5958 self .assertEqual (3 , Vulnerability .objects .count ())
6059 self .assertEqual (3 , VulnerabilityReference .objects .count ())
61- self .assertEqual (3 , Package .objects .count ())
60+ self .assertEqual (2 , Package .objects .count ())
6261
6362 self .assertTrue (Vulnerability .objects .get (
6463 summary = 'Multiple stack-based buffer overflows in mimetex.cgi in mimeTeX' ))
@@ -76,6 +75,22 @@ def test_debian_data_dump(self):
7675 self .assertTrue (Package .objects .get (name = 'git-repair' ))
7776 self .assertEqual (Package .objects .filter (version = '1.50-1.1' )[0 ].version , '1.50-1.1' )
7877
78+ def test_debian_data_dump_twice (self ):
79+ """
80+ Scrape data from Debian' main tracker, save it
81+ in the database and verify entries.
82+ """
83+ with open (os .path .join (TEST_DATA , 'debian.json' )) as f :
84+ test_data = json .loads (f .read ())
85+
86+ extract_data = debian .extract_vulnerabilities (test_data )
87+ debian_dump (extract_data )
88+ debian_dump (extract_data )
89+
90+ self .assertEqual (3 , Vulnerability .objects .count ())
91+ self .assertEqual (3 , VulnerabilityReference .objects .count ())
92+ self .assertEqual (2 , Package .objects .count ())
93+
7994 def test_ubuntu_data_dump (self ):
8095 """
8196 Scrape data from Ubuntu' main tracker, save it
@@ -91,6 +106,23 @@ def test_ubuntu_data_dump(self):
91106 self .assertEqual (reference .reference_id , 'CVE-2002-2439' )
92107 self .assertTrue (Package .objects .filter (name = 'gcc-4.6' )[0 ].name , 'gcc-4.6' )
93108
109+ def test_ubuntu_data_dump_twice (self ):
110+ """
111+ Scrape data from Ubuntu twice from main tracker, save it
112+ in the database and verify single time entry.
113+ """
114+ with open (os .path .join (TEST_DATA , 'ubuntu_main.html' )) as f :
115+ test_data = f .read ()
116+
117+ data = ubuntu .extract_cves (test_data )
118+ ubuntu_dump (data )
119+ count = Package .objects .all ().count ()
120+ ubuntu_dump (data )
121+ self .assertEqual (count , Package .objects .all ().count ())
122+ reference = VulnerabilityReference .objects .filter (reference_id = 'CVE-2002-2439' )
123+ self .assertEqual (reference [0 ].reference_id , 'CVE-2002-2439' )
124+ self .assertTrue (Package .objects .filter (name = 'gcc-4.6' )[0 ].name , 'gcc-4.6' )
125+
94126 def test_archlinux_data_dump (self ):
95127 """
96128 Scrape data from Archlinux' main tracker, save it
@@ -116,4 +148,21 @@ def test_archlinux_data_dump(self):
116148
117149 self .assertTrue (VulnerabilityReference .objects .get (reference_id = 'AVG-708' ))
118150
119- self .assertEqual (Package .objects .filter (name = 'wireshark-cli' )[0 ].name , 'wireshark-cli' )
151+ self .assertEqual (Package .objects .filter (name = 'wireshark-cli' )[0 ].name , 'wireshark-cli' )
152+
153+ def test_archlinux_data_dump_twice (self ):
154+ """
155+ Scrape data from Archlinux' main tracker twice, save it
156+ in the database and verify no multiple entries.
157+ """
158+ with open (os .path .join (TEST_DATA , 'archlinux.json' )) as f :
159+ test_data = json .loads (f .read ())
160+
161+ archlinux_dump (test_data )
162+ archlinux_dump (test_data )
163+ self .assertEqual (1 , Vulnerability .objects .count ())
164+ self .assertEqual (14 , VulnerabilityReference .objects .count ())
165+ self .assertEqual (8 , Package .objects .count ())
166+ self .assertEqual (8 , PackageReference .objects .count ())
167+ self .assertEqual (4 , ImpactedPackage .objects .count ())
168+ self .assertEqual (4 , ResolvedPackage .objects .count ())
0 commit comments