Skip to content

Commit 4d9b13a

Browse files
committed
add tests for failing cases
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 7aaf244 commit 4d9b13a

3 files changed

Lines changed: 68 additions & 11 deletions

File tree

vulnerabilities/importers/alpine_linux.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
# for any legal advice.
2121
# VulnerableCode is a free software code scanning tool from nexB Inc. and others.
2222
# Visit https://github.com/nexB/vulnerablecode/ for support and download.
23+
import logging
2324
from typing import Any
2425
from typing import Iterable
2526
from typing import List
@@ -38,6 +39,7 @@
3839
from vulnerabilities.references import XsaReference
3940
from vulnerabilities.references import ZbxReference
4041

42+
LOGGER = logging.getLogger(__name__)
4143
BASE_URL = "https://secdb.alpinelinux.org/"
4244

4345

@@ -104,6 +106,8 @@ def process_record(record: dict) -> List[AdvisoryData]:
104106
Return a list of AdvisoryData objects by processing data
105107
present in that `record`
106108
"""
109+
if not record["packages"]:
110+
raise Exception(f'"packages" not found in this {record!r}')
107111

108112
advisories: List[AdvisoryData] = []
109113

@@ -126,21 +130,18 @@ def load_advisories(
126130
pkg_infos: Mapping[str, Any],
127131
distroversion: str,
128132
reponame: str,
129-
archs: Iterable[str],
133+
archs: List[str],
130134
) -> Iterable[AdvisoryData]:
131135
"""
132136
Yields AdvisoryData by mapping data from `pkg_infos`
133137
and form PURL for AffectedPackages by using
134138
`distroversion`, `reponame`, `archs`
135139
"""
136-
137-
if not pkg_infos.get("name"):
138-
raise Exception('"name" is not available in package')
140+
assert pkg_infos.get("name"), '"name" is not available in package'
139141

140142
for version, fixed_vulns in pkg_infos["secfixes"].items():
141143

142-
if fixed_vulns is None:
143-
raise Exception(f"No fixed vulnerabilities in {version}")
144+
assert fixed_vulns, f"No fixed vulnerabilities in {version}"
144145

145146
for vuln_ids in fixed_vulns:
146147
assert isinstance(vuln_ids, str)

vulnerabilities/tests/test_alpine.py

Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323
import json
2424
import os
2525

26+
import pytest
2627
from packageurl import PackageURL
2728
from univers.versions import AlpineLinuxVersion
2829

2930
from vulnerabilities.importer import AdvisoryData
3031
from vulnerabilities.importer import AffectedPackage
3132
from vulnerabilities.importers.alpine_linux import fetch_advisory_directory_links
3233
from vulnerabilities.importers.alpine_linux import fetch_advisory_links
34+
from vulnerabilities.importers.alpine_linux import load_advisories
3335
from vulnerabilities.importers.alpine_linux import process_record
3436
from vulnerabilities.references import XsaReference
3537

@@ -38,11 +40,6 @@
3840

3941

4042
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
4643
expected_advisories = [
4744
AdvisoryData(
4845
aliases=[],
@@ -483,7 +480,63 @@ def test_fetch_advisory_directory_links():
483480
assert fetch_advisory_directory_links(f.read()) == expected
484481

485482

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+
486489
def test_fetch_advisory_links():
487490
expected = ["v3.11community.json", "v3.11main.json"]
488491
with open(os.path.join(TEST_DATA, "web_pages", "v3.11.html")) as f:
489492
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=[]))
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<html>
2+
3+
</html>

0 commit comments

Comments
 (0)