|
23 | 23 | import json |
24 | 24 | import os |
25 | 25 |
|
| 26 | +import pytest |
26 | 27 | from packageurl import PackageURL |
27 | 28 | from univers.versions import AlpineLinuxVersion |
28 | 29 |
|
29 | 30 | from vulnerabilities.importer import AdvisoryData |
30 | 31 | from vulnerabilities.importer import AffectedPackage |
31 | 32 | from vulnerabilities.importers.alpine_linux import fetch_advisory_directory_links |
32 | 33 | from vulnerabilities.importers.alpine_linux import fetch_advisory_links |
| 34 | +from vulnerabilities.importers.alpine_linux import load_advisories |
33 | 35 | from vulnerabilities.importers.alpine_linux import process_record |
34 | 36 | from vulnerabilities.references import XsaReference |
35 | 37 |
|
|
38 | 40 |
|
39 | 41 |
|
40 | 42 | def test_process_record(): |
41 | | - # INVALID VERSIONS |
42 | | - # 1.9.5p2-r0 |
43 | | - # 6.6.2p1-r0 |
44 | | - # 6.6.4p1-r1 |
45 | | - # 4.10-1-r1 |
46 | 43 | expected_advisories = [ |
47 | 44 | AdvisoryData( |
48 | 45 | aliases=[], |
@@ -483,7 +480,63 @@ def test_fetch_advisory_directory_links(): |
483 | 480 | assert fetch_advisory_directory_links(f.read()) == expected |
484 | 481 |
|
485 | 482 |
|
| 483 | +def test_fetch_advisory_directory_links_failure(): |
| 484 | + with open(os.path.join(TEST_DATA, "web_pages", "fail_directory.html")) as f: |
| 485 | + with pytest.raises(Exception): |
| 486 | + fetch_advisory_directory_links(f.read()) |
| 487 | + |
| 488 | + |
486 | 489 | def test_fetch_advisory_links(): |
487 | 490 | expected = ["v3.11community.json", "v3.11main.json"] |
488 | 491 | with open(os.path.join(TEST_DATA, "web_pages", "v3.11.html")) as f: |
489 | 492 | assert list(fetch_advisory_links(f.read(), "v3.11")) == expected |
| 493 | + |
| 494 | + |
| 495 | +def test_fetch_advisory_links_failure(): |
| 496 | + with open(os.path.join(TEST_DATA, "web_pages", "fail_directory.html")) as f: |
| 497 | + with pytest.raises(Exception): |
| 498 | + fetch_advisory_links(f.read()) |
| 499 | + |
| 500 | + |
| 501 | +def test_process_record_without_packages(): |
| 502 | + with open(os.path.join(TEST_DATA, os.path.join(TEST_DATA, "v3.3", "community.json"))) as f: |
| 503 | + with pytest.raises(Exception): |
| 504 | + process_record(f.read()) |
| 505 | + |
| 506 | + |
| 507 | +def test_load_advisories_package_without_name(): |
| 508 | + package = { |
| 509 | + "secfixes": {"4.10.0-r1": ["XSA-248"], "4.10.0-r2": ["CVE-2018-7540 XSA-252"]}, |
| 510 | + } |
| 511 | + with pytest.raises(Exception): |
| 512 | + list(load_advisories(package, "v3.11", "main", archs=[])) |
| 513 | + |
| 514 | + |
| 515 | +def test_load_advisories_package_without_secfixes(): |
| 516 | + package = { |
| 517 | + "name": "xen", |
| 518 | + "secfixes": {"4.10.0-r1": []}, |
| 519 | + } |
| 520 | + with pytest.raises(Exception): |
| 521 | + list(load_advisories(package, "v3.11", "main", archs=[])) |
| 522 | + |
| 523 | + |
| 524 | +@pytest.mark.parametrize( |
| 525 | + "test_case", |
| 526 | + [ |
| 527 | + # these are the tests are not supported yet |
| 528 | + # when we start supporting these version, |
| 529 | + # they will be moved back to main test suite |
| 530 | + "1.9.5p2-r0", |
| 531 | + "6.6.2p1-r0", |
| 532 | + "6.6.4p1-r1", |
| 533 | + "4.10-1-r1", |
| 534 | + ], |
| 535 | +) |
| 536 | +def test_load_advisories_package_with_invalid_alpine_version(test_case): |
| 537 | + package = { |
| 538 | + "name": "xen", |
| 539 | + "secfixes": {f"{test_case}": ["XSA-248"]}, |
| 540 | + } |
| 541 | + with pytest.raises(Exception): |
| 542 | + list(load_advisories(package, "v3.11", "main", archs=[])) |
0 commit comments