import json
import os.path
import pytest
import demistomock as demisto
@pytest.fixture()
def advisories_list():
from CheckPanosVersionAffected import Advisory
return [
Advisory(
data_type="CVE",
data_format="MITRE",
cve_id="CVE-2019-17440",
cve_date_public="2019-12-19T19:35:00.000Z",
cve_title="PAN-OS on PA-7000 Series: Improper restriction of communication to Log Forwarding Card (LFC)",
description="Improper restriction of communication",
cvss_score=10,
cvss_severity="CRITICAL",
cvss_vector_string="CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
affected_version_list=[
"PAN-OS 9.0.5",
"PAN-OS 9.0.4",
"PAN-OS 9.0.3-h3",
"PAN-OS 9.0.3-h2",
"PAN-OS 9.0.3-h1",
"PAN-OS 9.0.3",
"PAN-OS 9.0.2-h4",
"PAN-OS 9.0.2-h3",
"PAN-OS 9.0.2-h2",
"PAN-OS 9.0.2-h1",
"PAN-OS 9.0.2",
"PAN-OS 9.0.1",
"PAN-OS 9.0.0",
"PAN-OS 9.0",
"PAN-OS 8.1.11",
],
),
Advisory(
data_type="CVE",
data_format="MITRE",
cve_id="CVE-2019-17441",
cve_date_public="2019-12-15T19:35:00.000Z",
cve_title="This is a fake advisory",
description="Improper restriction of communication",
cvss_score=10,
cvss_severity="CRITICAL",
cvss_vector_string="CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
affected_version_list=["PAN-OS 8.1.12-h3", "PAN-OS 8.1.11", "PAN-OS 8.1.10"],
),
]
def test_compare_version_with_advisories(advisories_list):
"""
Given a list of advisories as dataclasses, tests the comparison function
"""
from CheckPanosVersionAffected import compare_version_with_advisories
# Match single item
match = compare_version_with_advisories(panos_version="9.0.5", advisories_list=advisories_list)
assert len(match) == 1
assert match[0].cve_id == "CVE-2019-17440"
# Match multiple advisories
match = compare_version_with_advisories(panos_version="8.1.11", advisories_list=advisories_list)
assert len(match) == 2
# Match no advisories
match = compare_version_with_advisories(panos_version="7.1.11", advisories_list=advisories_list)
assert len(match) == 0
def test_main(mocker):
"""
Tests the complete main() function, including reading advisories in as a list from the context data as it is produced by the
integration command.
"""
from CheckPanosVersionAffected import main
advisories_list = json.load(open(os.path.sep.join(["test_data", "example_advisories_data.json"])))
mocker.patch.object(demisto, "args", return_value={"advisories": advisories_list, "version": "9.1.3"})
expected_results = json.load(open(os.path.sep.join(["test_data", "expected_response.json"])))
mocker.patch.object(demisto, "results")
main()
demisto.results.assert_called_with(expected_results)