Skip to content

Commit b68c28e

Browse files
committed
Move example importer and improver to tests dir
It serves as a test data source and does not contribute any actual data. Signed-off-by: Hritik Vijay <hritikxx8@gmail.com>
1 parent ad3ff5a commit b68c28e

1 file changed

Lines changed: 118 additions & 0 deletions

File tree

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
import datetime
2+
import os
3+
from unittest.mock import patch
4+
5+
from django.test import TestCase
6+
from packageurl import PackageURL
7+
from univers.version_constraint import VersionConstraint
8+
from univers.version_range import NginxVersionRange
9+
from univers.versions import SemverVersion
10+
11+
from vulnerabilities import models
12+
from vulnerabilities.import_runner import ImportRunner
13+
from vulnerabilities.importer import AdvisoryData
14+
from vulnerabilities.importer import AffectedPackage
15+
from vulnerabilities.importer import Reference
16+
from vulnerabilities.importer import ScoringSystem
17+
from vulnerabilities.importer import VulnerabilitySeverity
18+
from vulnerabilities.importers.example import ExampleAliasImprover
19+
from vulnerabilities.importers.example import ExampleImporter
20+
from vulnerabilities.importers.example import parse_advisory_data
21+
from vulnerabilities.improve_runner import ImproveRunner
22+
from vulnerabilities.improvers.default import DefaultImprover
23+
24+
25+
def mock_fetch_advisory_data():
26+
return [
27+
{
28+
"id": "CVE-2021-12341337",
29+
"summary": "Dummy advisory",
30+
"advisory_severity": "high",
31+
"vulnerable": "0.6.18-1.20.0",
32+
"fixed": "1.20.1",
33+
"reference": "http://example.com/cve-2021-1234",
34+
"published_on": "06-10-2021 UTC",
35+
}
36+
]
37+
38+
39+
def mock_fetch_additional_aliases(alias):
40+
alias_map = {
41+
"CVE-2021-12341337": ["ANONSEC-1337", "CERTDES-1337"],
42+
}
43+
return alias_map.get(alias)
44+
45+
46+
@patch("vulnerabilities.importers.example.fetch_advisory_data", mock_fetch_advisory_data)
47+
@patch("vulnerabilities.importers.example.fetch_additional_aliases", mock_fetch_additional_aliases)
48+
class TestExampleImporter(TestCase):
49+
def test_parse_advisory_data(self):
50+
raw_data = mock_fetch_advisory_data()[0]
51+
expected = AdvisoryData(
52+
aliases=["CVE-2021-12341337"],
53+
summary="Dummy advisory",
54+
affected_packages=[
55+
AffectedPackage(
56+
package=PackageURL(
57+
type="example",
58+
namespace=None,
59+
name="dummy_package",
60+
version=None,
61+
qualifiers={},
62+
subpath=None,
63+
),
64+
affected_version_range=NginxVersionRange(
65+
constraints=(
66+
VersionConstraint(
67+
comparator=">=", version=SemverVersion(string="0.6.18")
68+
),
69+
VersionConstraint(
70+
comparator="<=", version=SemverVersion(string="1.20.0")
71+
),
72+
)
73+
),
74+
fixed_version=SemverVersion(string="1.20.1"),
75+
)
76+
],
77+
references=[
78+
Reference(
79+
reference_id="",
80+
url="http://example.com/cve-2021-1234",
81+
severities=[
82+
VulnerabilitySeverity(
83+
system=ScoringSystem(
84+
identifier="generic_textual",
85+
name="Generic textual severity rating",
86+
url="",
87+
notes="Severity for unknown scoring systems. Contains generic textual values like High, Low etc",
88+
),
89+
value="high",
90+
)
91+
],
92+
)
93+
],
94+
date_published=datetime.datetime(2021, 10, 6, 0, 0, tzinfo=datetime.timezone.utc),
95+
)
96+
actual = parse_advisory_data(raw_data)
97+
assert actual == expected
98+
99+
def test_import_framework_using_example_importer(self):
100+
raw_datas = mock_fetch_advisory_data()
101+
ImportRunner(ExampleImporter).run()
102+
103+
for raw_data in raw_datas:
104+
assert models.Advisory.objects.get(aliases__contains=raw_data["id"])
105+
106+
def test_improve_framework_using_example_improver(self):
107+
ImportRunner(ExampleImporter).run()
108+
ImproveRunner(DefaultImprover).run()
109+
ImproveRunner(ExampleAliasImprover).run()
110+
raw_datas = mock_fetch_advisory_data()
111+
112+
assert models.Package.objects.count() == 3
113+
assert models.PackageRelatedVulnerability.objects.filter(fix=True).count() == 1
114+
assert models.PackageRelatedVulnerability.objects.filter(fix=False).count() == 2
115+
assert models.VulnerabilitySeverity.objects.count() == 1
116+
assert models.VulnerabilityReference.objects.count() == 1
117+
for raw_data in raw_datas:
118+
assert models.Vulnerability.objects.get(summary=raw_data["summary"])

0 commit comments

Comments
 (0)