11import os
22import unittest
3+ from unittest .mock import patch
34import xml .etree .ElementTree as ET
5+ from collections import OrderedDict
6+ import asyncio
47
58from dephell_specifier import RangeSpecifier
6-
9+ from packageurl import PackageURL
710
811from vulnerabilities .importers .oval_parser import OvalParser
9-
12+ from vulnerabilities .importers .ubuntu import UbuntuDataSource
13+ from vulnerabilities .data_source import Advisory
1014
1115BASE_DIR = os .path .dirname (os .path .abspath (__file__ ))
1216TEST_DATA = os .path .join (BASE_DIR , "test_data/" )
@@ -84,8 +88,8 @@ def test_get_pkgs_from_obj(self):
8488 pkg_set1 = set (self .parsed_oval .get_pkgs_from_obj (obj_t2 ))
8589 pkg_set2 = set (self .parsed_oval .get_pkgs_from_obj (obj_t1 ))
8690
87- assert pkg_set1 == {"potrace" , "libpotrace0" }
88- assert pkg_set2 == {"tor" , "tor-geoipdb" }
91+ assert pkg_set1 == {"potrace" }
92+ assert pkg_set2 == {"tor" }
8993
9094 def test_get_versionsrngs_from_state (self ):
9195
@@ -99,15 +103,15 @@ def test_get_versionsrngs_from_state(self):
99103
100104 assert self .parsed_oval .get_versionsrngs_from_state (state_1 ) == exp_range_1
101105 assert self .parsed_oval .get_versionsrngs_from_state (state_2 ) == exp_range_2
102-
106+
103107 def test_get_urls_from_definition (self ):
104108
105109 def1_urls = {'http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8703.html' ,
106110 'https://blogs.gentoo.org/ago/2016/08/08/potrace-multiplesix-heap-based-buffer-overflow-in-bm_readbody_bmp-bitmap_io-c/' ,
107111 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8703'
108112 }
109113
110- assert def1_urls == self .parsed_oval .get_urls_from_definition (self .definition_1 )
114+ assert def1_urls == self .parsed_oval .get_urls_from_definition (self .definition_1 )
111115
112116 def2_urls = {'http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8860.html' ,
113117 'https://trac.torproject.org/projects/tor/ticket/20384' ,
@@ -117,15 +121,15 @@ def test_get_urls_from_definition(self):
117121 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8860' ,
118122 }
119123
120- assert def2_urls == self .parsed_oval .get_urls_from_definition (self .definition_2 )
124+ assert def2_urls == self .parsed_oval .get_urls_from_definition (self .definition_2 )
121125
122126 def test_get_data (self ):
123127
124128 expected_data = [
125129 {
126130 "test_data" : [
127131 {
128- "package_list" : ["libpotrace0" , " potrace" ],
132+ "package_list" : ["potrace" ],
129133 "version_ranges" : RangeSpecifier ("<1.14-2" ),
130134 }
131135 ],
@@ -141,7 +145,7 @@ def test_get_data(self):
141145 {
142146 "test_data" : [
143147 {
144- "package_list" : ["tor" , "tor-geoipdb" ],
148+ "package_list" : ["tor" ],
145149 "version_ranges" : RangeSpecifier ("<0.2.8.9-1ubuntu1" ),
146150 }
147151 ],
@@ -160,4 +164,107 @@ def test_get_data(self):
160164 ]
161165
162166 assert expected_data == self .parsed_oval .get_data ()
163-
167+
168+ #This is horrible, there must be a better way
169+ async def mock (a ,b ):
170+ pass
171+
172+ class TestUbuntuDataSource (unittest .TestCase ):
173+
174+ @classmethod
175+ def setUpClass (cls ):
176+ pass
177+
178+ @patch (
179+ 'vulnerabilities.importers.ubuntu.VersionAPI.get' ,
180+ return_value = {
181+ '0.3.0' ,
182+ '0.2.0' ,
183+ '2.14-2' })
184+ @patch ('vulnerabilities.importers.ubuntu.VersionAPI.load_api' ,new = mock )
185+ def test_get_data_from_xml_doc (self , mock_write ):
186+
187+ data_source_cfg = {
188+ 'releases' : 'eg-ubuntu' }
189+ ubuntu_data_src = UbuntuDataSource (
190+ batch_size = 1 , config = data_source_cfg )
191+ expected_data = {
192+ Advisory (
193+ summary = ('Tor before 0.2.8.9 and 0.2.9.x before 0.2.9.4-alpha had '
194+ 'internal functions that were entitled to expect that buf_t data had '
195+ 'NUL termination, but the implementation of or/buffers.c did not '
196+ 'ensure that NUL termination was present, which allows remote '
197+ 'attackers to cause a denial of service (client, hidden '
198+ 'service, relay, or authority crash) via crafted data.' ),
199+ impacted_package_urls = {
200+ PackageURL (
201+ type = 'deb' ,
202+ namespace = None ,
203+ name = 'tor' ,
204+ version = '0.2.0' ,
205+ qualifiers = OrderedDict (),
206+ subpath = None )},
207+ resolved_package_urls = {
208+ PackageURL (
209+ type = 'deb' ,
210+ namespace = None ,
211+ name = 'tor' ,
212+ version = '0.3.0' ,
213+ qualifiers = OrderedDict (),
214+ subpath = None ),
215+ PackageURL (
216+ type = 'deb' ,
217+ namespace = None ,
218+ name = 'tor' ,
219+ version = '2.14-2' ,
220+ qualifiers = OrderedDict (),
221+ subpath = None )},
222+ reference_urls = {
223+ 'http://www.openwall.com/lists/oss-security/2016/10/18/11' ,
224+ 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8860' ,
225+ 'http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8860.html' ,
226+ 'https://github.com/torproject/tor/commit/3cea86eb2fbb65949673eb4ba8ebb695c87a57ce' ,
227+ 'https://blog.torproject.org/blog/tor-0289-released-important-fixes' ,
228+ 'https://trac.torproject.org/projects/tor/ticket/20384' },
229+ reference_ids = [],
230+ cve_id = 'CVE-2016-8860' ),
231+ Advisory (
232+ summary = ('Heap-based buffer overflow in the bm_readbody_bmp function'
233+ ' in bitmap_io.c in potrace before 1.13 allows remote attackers to '
234+ 'have unspecified impact via a crafted BMP image, a different '
235+ 'vulnerability than CVE-2016-8698, CVE-2016-8699, '
236+ 'CVE-2016-8700, CVE-2016-8701, and CVE-2016-8702.' ),
237+ impacted_package_urls = {
238+ PackageURL (
239+ type = 'deb' ,
240+ namespace = None ,
241+ name = 'potrace' ,
242+ version = '0.3.0' ,
243+ qualifiers = OrderedDict (),
244+ subpath = None ),
245+ PackageURL (
246+ type = 'deb' ,
247+ namespace = None ,
248+ name = 'potrace' ,
249+ version = '0.2.0' ,
250+ qualifiers = OrderedDict (),
251+ subpath = None )},
252+ resolved_package_urls = {
253+ PackageURL (
254+ type = 'deb' ,
255+ namespace = None ,
256+ name = 'potrace' ,
257+ version = '2.14-2' ,
258+ qualifiers = OrderedDict (),
259+ subpath = None )},
260+ reference_urls = {
261+ 'http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8703.html' ,
262+ 'https://blogs.gentoo.org/ago/2016/08/08/potrace-multiplesix-heap-based-buffer-overflow-in-bm_readbody_bmp-bitmap_io-c/' ,
263+ 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8703' },
264+ reference_ids = [],
265+ cve_id = 'CVE-2016-8703' )}
266+
267+ xml_doc = ET .parse (os .path .join (TEST_DATA , "ubuntu_oval_data.xml" ))
268+ data = set (ubuntu_data_src .get_data_from_xml_doc (xml_doc ))
269+
270+ assert expected_data == data
0 commit comments