3
3
4
4
import pytest
5
5
6
- from vdb .lib import VulnerabilityLocation
6
+ from vdb .lib import VulnerabilityLocation , db6 , search
7
7
from vdb .lib .aqua import AquaSource
8
8
from vdb .lib .cve import CVESource
9
9
from vdb .lib .gha import GitHubSource
@@ -389,67 +389,166 @@ def test_aqua_wolfi_json():
389
389
)
390
390
with open (test_cve_data , "r" ) as fp :
391
391
return json .loads (fp .read ())
392
-
392
+
393
393
394
394
def test_convert (test_cve_json ):
395
395
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 :
399
399
details = v .details
400
400
for detail in details :
401
401
assert detail
402
402
assert detail .severity
403
403
assert detail .package
404
404
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
+
405
416
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
408
425
409
426
410
427
def test_convert2 (test_cve_wconfig_json ):
411
428
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 :
415
432
details = v .details
416
433
for detail in details :
417
434
assert detail
418
435
assert detail .severity
419
436
assert detail .package
420
437
assert detail .package_type
421
438
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
+
422
450
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
425
459
426
460
427
461
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
428
463
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 :
432
467
details = v .details
433
468
for detail in details :
434
469
assert detail
435
470
assert detail .severity
436
471
assert detail .package
437
472
assert detail .package_type
438
473
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
441
490
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
453
552
454
553
455
554
@pytest .mark .skip (reason = "This downloads and tests with live data" )
@@ -654,3 +753,16 @@ def test_vuln_location():
654
753
vl = VulnerabilityLocation .from_values ("cpe:2.3:a:org.springframework:spring-web:*:*:*:*:*:*:*:*" , "5.0.0.RC2" ,
655
754
"*" , "" , "5.0.0.RC3" )
656
755
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