35 lines
1.9 KiB
Python
35 lines
1.9 KiB
Python
import json
|
|
import sqlite3
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'scripts'))
|
|
from build import process_cve,process_nvd,process_osv,walk_cpe
|
|
|
|
class TestBuild(unittest.TestCase):
|
|
def setUp(self):
|
|
self.conn=sqlite3.connect(':memory:')
|
|
self.conn.executescript((Path(__file__).resolve().parents[1]/'sql/schema.sql').read_text())
|
|
def tearDown(self):
|
|
self.conn.close()
|
|
def test_cve(self):
|
|
self.assertTrue(process_cve(self.conn,{'cveMetadata':{'cveId':'CVE-2026-12345','state':'PUBLISHED'}}))
|
|
self.assertEqual(self.conn.execute('select state from vulnerabilities').fetchone()[0],'PUBLISHED')
|
|
def test_osv_range_preserved(self):
|
|
self.assertTrue(process_osv(self.conn,{'id':'GHSA-abcd-efgh-ijkl','aliases':['CVE-2026-12345'],
|
|
'affected':[{'package':{'ecosystem':'PyPI','name':'foo'},'ranges':[{'type':'ECOSYSTEM','events':[{'introduced':'0'},{'fixed':'2.0'}]}]}]}))
|
|
row=self.conn.execute('select ranges_json from affected_packages').fetchone()[0]
|
|
self.assertIn('fixed',row)
|
|
self.assertEqual(self.conn.execute('select count(*) from aliases').fetchone()[0],1)
|
|
def test_nvd_ignores_and(self):
|
|
self.assertTrue(process_nvd(self.conn,{'cve':{'id':'CVE-2026-12345','configurations':[
|
|
{'nodes':[{'operator':'AND','cpeMatch':[{'criteria':'cpe:2.3:a:foo'}]}]}]}}))
|
|
self.assertEqual(self.conn.execute('select count(*) from cpe_matches').fetchone()[0],0)
|
|
def test_simple_nvd(self):
|
|
self.assertTrue(process_nvd(self.conn,{'cve':{'id':'CVE-2026-12345','configurations':[
|
|
{'nodes':[{'operator':'OR','cpeMatch':[{'criteria':'cpe:2.3:a:vendor:product:*:*:*:*:*:*:*:*','vulnerable':True}]}]}]}}))
|
|
self.assertEqual(self.conn.execute('select count(*) from cpe_matches').fetchone()[0],1)
|
|
|
|
if __name__=='__main__': unittest.main()
|