|
7 | 7 | # See https://aboutcode.org for more information about nexB OSS projects. |
8 | 8 | # |
9 | 9 |
|
10 | | -from datetime import datetime |
11 | | -from datetime import timezone |
12 | | - |
13 | 10 | import pytest |
| 11 | +from django.utils import timezone |
14 | 12 | from univers.version_range import VersionRange |
15 | 13 |
|
16 | 14 | from vulnerabilities import models |
17 | 15 | from vulnerabilities.import_runner import ImportRunner |
| 16 | +from vulnerabilities.import_runner import process_inferences |
18 | 17 | from vulnerabilities.importer import AdvisoryData |
19 | 18 | from vulnerabilities.importer import AffectedPackage |
20 | 19 | from vulnerabilities.importer import Importer |
21 | 20 | from vulnerabilities.importer import PackageURL |
22 | 21 | from vulnerabilities.importer import Reference |
| 22 | +from vulnerabilities.improver import Inference |
| 23 | +from vulnerabilities.tests.test_improve_runner import ( |
| 24 | + get_objects_in_all_tables_used_by_process_inferences, |
| 25 | +) |
23 | 26 |
|
24 | 27 | ADVISORY_DATAS = [ |
25 | 28 | AdvisoryData( |
|
32 | 35 | ) |
33 | 36 | ], |
34 | 37 | references=[Reference(url="https://example.com/with/more/info/CVE-2020-13371337")], |
35 | | - date_published=datetime.now(timezone.utc), |
| 38 | + date_published=timezone.now(), |
36 | 39 | ) |
37 | 40 | ] |
38 | 41 |
|
@@ -106,3 +109,45 @@ def test_advisory_summary_clean_up(): |
106 | 109 | summary="The X509Extension in pyOpenSSL before 0.13.1 does not properly handle a '\x00' character in a domain name in the Subject Alternative Name field of an X.509 certificate, which allows man-in-the-middle attackers to spoof arbitrary SSL servers via a crafted certificate issued by a legitimate Certification Authority." |
107 | 110 | ) |
108 | 111 | assert "\x00" not in adv.summary |
| 112 | + |
| 113 | + |
| 114 | +DUMMY_ADVISORY = models.Advisory(summary="dummy", created_by="tests", date_collected=timezone.now()) |
| 115 | + |
| 116 | + |
| 117 | +INFERENCES = [ |
| 118 | + Inference( |
| 119 | + aliases=["CVE-1", "CVE-2"], |
| 120 | + summary="One upon a time, in a package far far away", |
| 121 | + affected_purls=[ |
| 122 | + PackageURL(type="character", namespace="star-wars", name="anakin", version="1") |
| 123 | + ], |
| 124 | + fixed_purl=PackageURL( |
| 125 | + type="character", namespace="star-wars", name="darth-vader", version="1" |
| 126 | + ), |
| 127 | + references=[Reference(reference_id="imperial-vessel-1", url="https://m47r1x.github.io")], |
| 128 | + ) |
| 129 | +] |
| 130 | + |
| 131 | + |
| 132 | +@pytest.mark.django_db |
| 133 | +def test_process_inferences_with_no_inference(): |
| 134 | + assert not process_inferences( |
| 135 | + inferences=[], advisory=DUMMY_ADVISORY, improver_name="test_improver" |
| 136 | + ) |
| 137 | + |
| 138 | + |
| 139 | +@pytest.mark.django_db |
| 140 | +def test_process_inferences_with_unknown_but_specified_vulnerability(): |
| 141 | + inference = Inference(vulnerability_id="VCID-Does-Not-Exist-In-DB", aliases=["MATRIX-Neo"]) |
| 142 | + assert not process_inferences( |
| 143 | + inferences=[inference], advisory=DUMMY_ADVISORY, improver_name="test_improver" |
| 144 | + ) |
| 145 | + |
| 146 | + |
| 147 | +@pytest.mark.django_db |
| 148 | +def test_process_inferences_idempotency(): |
| 149 | + process_inferences(INFERENCES, DUMMY_ADVISORY, improver_name="test_improver") |
| 150 | + all_objects = get_objects_in_all_tables_used_by_process_inferences() |
| 151 | + process_inferences(INFERENCES, DUMMY_ADVISORY, improver_name="test_improver") |
| 152 | + process_inferences(INFERENCES, DUMMY_ADVISORY, improver_name="test_improver") |
| 153 | + assert all_objects == get_objects_in_all_tables_used_by_process_inferences() |
0 commit comments