Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions vulnerabilities/import_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def run(self) -> None:
"""
importer_name = self.importer_class.qualified_name
importer_class = self.importer_class
Advisory.objects.filter(created_by=importer_name).delete()
logger.info(f"Starting import for {importer_name}")
advisory_datas = importer_class().advisory_data()
count = process_advisories(advisory_datas=advisory_datas, importer_name=importer_name)
Expand Down
47 changes: 47 additions & 0 deletions vulnerabilities/tests/test_deletion_of_advisories.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import os
from unittest import mock

import pytest

from vulnerabilities.import_runner import ImportRunner
from vulnerabilities.importers.nginx import NginxImporter
from vulnerabilities.improve_runner import ImproveRunner
from vulnerabilities.improvers.default import DefaultImprover
from vulnerabilities.models import Package
from vulnerabilities.models import Vulnerability
from vulnerabilities.models import VulnerabilityReference

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
TEST_DATA = os.path.join(BASE_DIR, "test_data", "nginx")


@pytest.mark.django_db
@mock.patch("vulnerabilities.importers.nginx.NginxImporter.fetch")
def test_deletion_of_advisories(fetch):
"""Test that the deletion of advisories works as expected."""
with open(os.path.join(TEST_DATA, "security_advisories.html")) as f:
fetch.return_value = f.read()

ImportRunner(NginxImporter).run()
ImproveRunner(DefaultImprover).run()
packages = Package.objects.all().only("id")
packages_before_deletion = [int(package.id) for package in packages]
vulnerabilities = Vulnerability.objects.all().only("vulnerability_id")
vulnerabilities_before_deletion = [
str(vulnerability.vulnerability_id) for vulnerability in vulnerabilities
]
references = VulnerabilityReference.objects.all().only("id")
references_before_deletion = [int(reference.id) for reference in references]
ImportRunner(NginxImporter).run()
ImproveRunner(DefaultImprover).run()
packages = Package.objects.all().only("id")
packages_after_deletion = [int(package.id) for package in packages]
vulnerabilities = Vulnerability.objects.all().only("vulnerability_id")
vulnerabilities_after_deletion = [
str(vulnerability.vulnerability_id) for vulnerability in vulnerabilities
]
references = VulnerabilityReference.objects.all().only("id")
references_after_deletion = [int(reference.id) for reference in references]
assert packages_before_deletion == packages_after_deletion
assert vulnerabilities_before_deletion == vulnerabilities_after_deletion
assert references_before_deletion == references_after_deletion