Skip to content

Commit cdad80f

Browse files
authored
Feature/issue 110 (#119)
* Add some initial unit tests for stat and search * Additional tests
1 parent 37eda8a commit cdad80f

File tree

1 file changed

+140
-28
lines changed

1 file changed

+140
-28
lines changed

test/test_source.py

Lines changed: 140 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import pytest
55

6-
from vdb.lib import VulnerabilityLocation
6+
from vdb.lib import VulnerabilityLocation, db6, search
77
from vdb.lib.aqua import AquaSource
88
from vdb.lib.cve import CVESource
99
from vdb.lib.gha import GitHubSource
@@ -389,67 +389,166 @@ def test_aqua_wolfi_json():
389389
)
390390
with open(test_cve_data, "r") as fp:
391391
return json.loads(fp.read())
392-
392+
393393

394394
def test_convert(test_cve_json):
395395
nvdlatest = NvdSource()
396-
data = nvdlatest.convert(test_cve_json)
397-
assert len(data) == 384
398-
for v in data:
396+
vulnerabilities = nvdlatest.convert(test_cve_json)
397+
assert len(vulnerabilities) == 384
398+
for v in vulnerabilities:
399399
details = v.details
400400
for detail in details:
401401
assert detail
402402
assert detail.severity
403403
assert detail.package
404404
assert detail.package_type
405+
406+
db6.clear_all()
407+
nvdlatest.store(vulnerabilities)
408+
cve_data_count, cve_index_count = db6.stats()
409+
assert cve_data_count == 496
410+
assert cve_index_count == 1155
411+
results_count = len(list(search_db("CVE-2020-0001")))
412+
assert results_count == 4
413+
results_count = len(list(search_db("cpe:2.3:o:google:android:8.1:*:*:*:*:*:*:*")))
414+
assert results_count == 25
415+
405416
cvesource = CVESource()
406-
data = cvesource.convert5(data)
407-
assert len(data) == 384
417+
cve = cvesource.convert5(vulnerabilities)
418+
assert len(cve) == 384
419+
420+
db6.clear_all()
421+
cvesource.store(vulnerabilities)
422+
cve_data_count, cve_index_count = db6.stats()
423+
assert cve_data_count == 0
424+
assert cve_index_count == 0
408425

409426

410427
def test_convert2(test_cve_wconfig_json):
411428
nvdlatest = NvdSource()
412-
data = nvdlatest.convert(test_cve_wconfig_json)
413-
assert len(data) == 1
414-
for v in data:
429+
vulnerabilities = nvdlatest.convert(test_cve_wconfig_json)
430+
assert len(vulnerabilities) == 1
431+
for v in vulnerabilities:
415432
details = v.details
416433
for detail in details:
417434
assert detail
418435
assert detail.severity
419436
assert detail.package
420437
assert detail.package_type
421438
assert not detail.fixed_location
439+
440+
db6.clear_all()
441+
nvdlatest.store(vulnerabilities)
442+
cve_data_count, cve_index_count = db6.stats()
443+
assert cve_data_count == 2
444+
assert cve_index_count == 4
445+
results_count = len(list(search_db("CVE-2020-8022")))
446+
assert results_count == 4
447+
results_count = len(list(search_db("cpe:2.3:o:opensuse:leap:15.1:*:*:*:*:*:*:*")))
448+
assert results_count == 1
449+
422450
cvesource = CVESource()
423-
data = cvesource.convert5(data)
424-
assert len(data) == 1
451+
cve = cvesource.convert5(vulnerabilities)
452+
assert len(cve) == 1
453+
454+
db6.clear_all()
455+
cvesource.store(vulnerabilities)
456+
cve_data_count, cve_index_count = db6.stats()
457+
assert cve_data_count == 0
458+
assert cve_index_count == 0
425459

426460

427461
def test_nvd_api_convert(test_nvd_api_json1, test_nvd_api_json2, test_nvd_api_json3, test_nvd_api_json4, test_nvd_api_git_json):
462+
#json1
428463
nvdlatest = NvdSource()
429-
data = nvdlatest.convert(test_nvd_api_json1)
430-
assert len(data) == 1
431-
for v in data:
464+
vulnerabilities = nvdlatest.convert(test_nvd_api_json1)
465+
assert len(vulnerabilities) == 1
466+
for v in vulnerabilities:
432467
details = v.details
433468
for detail in details:
434469
assert detail
435470
assert detail.severity
436471
assert detail.package
437472
assert detail.package_type
438473
assert not detail.fixed_location
439-
data = nvdlatest.convert(test_nvd_api_json2)
440-
assert len(data) == 1
474+
475+
db6.clear_all()
476+
nvdlatest.store(vulnerabilities)
477+
cve_data_count, cve_index_count = db6.stats()
478+
assert cve_data_count == 4
479+
assert cve_index_count == 20
480+
results_count = len(list(search_db("CVE-2020-8022")))
481+
assert results_count == 0
482+
results_count = len(list(search_db("CVE-2024-0057")))
483+
assert results_count == 10
484+
results_count = len(list(search_db("cpe:2.3:a:microsoft:.net:*:*:*:*:*:*:*:*")))
485+
assert results_count == 1
486+
487+
#json2
488+
vulnerabilities = nvdlatest.convert(test_nvd_api_json2)
489+
assert len(vulnerabilities) == 1
441490
cvesource = CVESource()
442-
data = cvesource.convert5(data)
443-
assert len(data) == 1
444-
data = nvdlatest.convert(test_nvd_api_json3)
445-
assert len(data) == 0
446-
data = cvesource.convert5(data)
447-
assert len(data) == 0
448-
data = nvdlatest.convert(test_nvd_api_json4)
449-
assert len(data) == 1
450-
data = nvdlatest.convert(test_nvd_api_git_json)
451-
assert len(data) == 1
452-
assert len(data[0].details) == 2
491+
cve = cvesource.convert5(vulnerabilities)
492+
assert len(cve) == 1
493+
494+
db6.clear_all()
495+
nvdlatest.store(vulnerabilities)
496+
cve_data_count, cve_index_count = db6.stats()
497+
assert cve_data_count == 1
498+
assert cve_index_count == 7
499+
results_count = len(list(search_db("CVE-2020-8022")))
500+
assert results_count == 0
501+
results_count = len(list(search_db("CVE-2024-21312")))
502+
assert results_count == 7
503+
504+
#json3
505+
vulnerabilities = nvdlatest.convert(test_nvd_api_json3)
506+
assert len(vulnerabilities) == 0
507+
cve = cvesource.convert5(vulnerabilities)
508+
assert len(cve) == 0
509+
510+
db6.clear_all()
511+
nvdlatest.store(vulnerabilities)
512+
cve_data_count, cve_index_count = db6.stats()
513+
assert cve_data_count == 0
514+
assert cve_index_count == 0
515+
results_count = len(list(search_db("CVE-2020-8022")))
516+
assert results_count == 0
517+
results_count = len(list(search_db("CVE-2024-23771")))
518+
assert results_count == 0
519+
520+
#json4
521+
vulnerabilities = nvdlatest.convert(test_nvd_api_json4)
522+
assert len(vulnerabilities) == 1
523+
524+
db6.clear_all()
525+
nvdlatest.store(vulnerabilities)
526+
cve_data_count, cve_index_count = db6.stats()
527+
assert cve_data_count == 2
528+
assert cve_index_count == 21
529+
results_count = len(list(search_db("CVE-2020-8022")))
530+
assert results_count == 0
531+
results_count = len(list(search_db("CVE-2015-3192")))
532+
assert results_count == 21
533+
results_count = len(list(search_db("cpe:2.3:a:pivotal_software:spring_framework:3.2.0:*:*:*:*:*:*:*")))
534+
assert results_count == 2
535+
536+
#git_json
537+
vulnerabilities = nvdlatest.convert(test_nvd_api_git_json)
538+
assert len(vulnerabilities) == 1
539+
assert len(vulnerabilities[0].details) == 2
540+
541+
db6.clear_all()
542+
nvdlatest.store(vulnerabilities)
543+
cve_data_count, cve_index_count = db6.stats()
544+
assert cve_data_count == 2
545+
assert cve_index_count == 2
546+
results_count = len(list(search_db("CVE-2020-8022")))
547+
assert results_count == 0
548+
results_count = len(list(search_db("CVE-2023-52426")))
549+
assert results_count == 2
550+
results_count = len(list(search_db("cpe:2.3:a:libexpat_project:libexpat:*:*:*:*:*:*:*:*")))
551+
assert results_count == 1
453552

454553

455554
@pytest.mark.skip(reason="This downloads and tests with live data")
@@ -654,3 +753,16 @@ def test_vuln_location():
654753
vl = VulnerabilityLocation.from_values("cpe:2.3:a:org.springframework:spring-web:*:*:*:*:*:*:*:*", "5.0.0.RC2",
655754
"*", "", "5.0.0.RC3")
656755
assert vl.version == ">=5.0.0.RC2-<5.0.0.RC3"
756+
757+
758+
def search_db(query):
759+
if query.startswith("pkg:"):
760+
results = search.search_by_purl_like(query, with_data=True)
761+
elif query.startswith("CVE-") or query.startswith("GHSA-") or query.startswith("MAL-"):
762+
results = search.search_by_cve(query, with_data=True)
763+
elif query.startswith("http"):
764+
results = search.search_by_url(query, with_data=True)
765+
else:
766+
results = search.search_by_cpe_like(query, with_data=True)
767+
768+
return results

0 commit comments

Comments
 (0)