@@ -51,8 +51,8 @@ def setUpTestData(self):
51
51
with open (os .path .join (TEST_DATA , 'debian.json' )) as f :
52
52
test_data = json .load (f )
53
53
54
- extract_data = debian .extract_vulnerabilities (test_data )
55
- debian_dump (extract_data )
54
+ self . extract_data = debian .extract_vulnerabilities (test_data )
55
+ debian_dump (self . extract_data )
56
56
57
57
def test_Vulnerability (self ):
58
58
"""
@@ -83,9 +83,7 @@ def test_Package(self):
83
83
"""
84
84
Check that all packages from the test data are stored in the database
85
85
"""
86
- # There are five rows in Package because currently the models allow duplicates
87
- # (see issue #28).
88
- self .assertEqual (5 , Package .objects .count ())
86
+ self .assertEqual (3 , Package .objects .count ())
89
87
90
88
self .assertTrue (Package .objects .filter (name = 'mimetex' ))
91
89
self .assertTrue (Package .objects .get (name = 'librsync' ))
@@ -114,15 +112,33 @@ def test_ResolvedPackage(self):
114
112
self .assertIn ('1.50-1.1' , versions )
115
113
self .assertIn ('1.74-1' , versions )
116
114
115
+ def test_debian_data_dump_twice (self ):
116
+ """
117
+ Scrape data from Debian' main tracker, save it
118
+ in the database and verify entries.
119
+ """
120
+ debian_dump (self .extract_data )
121
+
122
+ self .assertEqual (3 , Vulnerability .objects .count ())
123
+ self .assertEqual (3 , VulnerabilityReference .objects .count ())
124
+ self .assertEqual (3 , Package .objects .count ())
125
+
126
+ # Dumping the data twice doesn't create new objects.
127
+ debian_dump (self .extract_data )
128
+
129
+ self .assertEqual (3 , Vulnerability .objects .count ())
130
+ self .assertEqual (3 , VulnerabilityReference .objects .count ())
131
+ self .assertEqual (3 , Package .objects .count ())
132
+
117
133
118
134
class TestUbuntuDataDump (TestCase ):
119
135
@classmethod
120
136
def setUpTestData (self ):
121
137
with open (os .path .join (TEST_DATA , 'ubuntu_main.html' )) as f :
122
138
test_data = f .read ()
123
139
124
- data = ubuntu .extract_cves (test_data )
125
- ubuntu_dump (data )
140
+ self . data = ubuntu .extract_cves (test_data )
141
+ ubuntu_dump (self . data )
126
142
127
143
def test_data_dump (self ):
128
144
"""
@@ -132,15 +148,32 @@ def test_data_dump(self):
132
148
self .assertEqual (reference .reference_id , 'CVE-2002-2439' )
133
149
self .assertTrue (Package .objects .filter (name = 'gcc-4.6' )[0 ].name , 'gcc-4.6' )
134
150
151
+ def test_ubuntu_data_dump_twice (self ):
152
+ """
153
+ Scrape data from Ubuntu twice from main tracker, save it
154
+ in the database and verify single time entry.
155
+ """
156
+ ubuntu_dump (self .data )
157
+ count = Package .objects .all ().count ()
158
+ reference = VulnerabilityReference .objects .filter (
159
+ reference_id = 'CVE-2002-2439' )
160
+ self .assertEqual (reference [0 ].reference_id , 'CVE-2002-2439' )
161
+ self .assertTrue (Package .objects .filter (name = 'gcc-4.6' )[0 ].name ,
162
+ 'gcc-4.6' )
163
+
164
+ # Dumping the data twice doesn't create new objects.
165
+ ubuntu_dump (self .data )
166
+ self .assertEqual (count , Package .objects .all ().count ())
167
+
135
168
136
169
class TestArchLinuxDataDump (TestCase ):
137
170
138
171
@classmethod
139
172
def setUpTestData (self ):
140
173
with open (os .path .join (TEST_DATA , 'archlinux.json' )) as f :
141
- test_data = json .load (f )
174
+ self . test_data = json .load (f )
142
175
143
- archlinux_dump (test_data )
176
+ archlinux_dump (self . test_data )
144
177
145
178
def test_Vulnerability (self ):
146
179
"""
@@ -190,3 +223,25 @@ def test_ResolvedPackage(self):
190
223
191
224
self .assertEqual (4 , len (resolved_pkgs ))
192
225
self .assertEqual ('2.6.1-1' , resolved_pkg .package .version )
226
+
227
+ def test_archlinux_data_dump_twice (self ):
228
+ """
229
+ Scrape data from Archlinux' main tracker twice, save it
230
+ in the database and verify no multiple entries.
231
+ """
232
+ archlinux_dump (self .test_data )
233
+ self .assertEqual (1 , Vulnerability .objects .count ())
234
+ self .assertEqual (14 , VulnerabilityReference .objects .count ())
235
+ self .assertEqual (8 , Package .objects .count ())
236
+ self .assertEqual (8 , PackageReference .objects .count ())
237
+ self .assertEqual (4 , ImpactedPackage .objects .count ())
238
+ self .assertEqual (4 , ResolvedPackage .objects .count ())
239
+
240
+ # Dumping the data twice doesn't create new objects.
241
+ archlinux_dump (self .test_data )
242
+ self .assertEqual (1 , Vulnerability .objects .count ())
243
+ self .assertEqual (14 , VulnerabilityReference .objects .count ())
244
+ self .assertEqual (8 , Package .objects .count ())
245
+ self .assertEqual (8 , PackageReference .objects .count ())
246
+ self .assertEqual (4 , ImpactedPackage .objects .count ())
247
+ self .assertEqual (4 , ResolvedPackage .objects .count ())
0 commit comments