Skip to content

Commit 1b834c3

Browse files
committed
Add data migration for old alpine advisory
Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent ea98eeb commit 1b834c3

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
2+
from django.db import migrations
3+
4+
"""
5+
Update the created_by field on Advisory from the old qualified_name
6+
to the new pipeline_id.
7+
"""
8+
9+
10+
def update_created_by(apps, schema_editor):
11+
from vulnerabilities.pipelines.alpine_linux_importer import AlpineLinuxImporterPipeline
12+
13+
Advisory = apps.get_model("vulnerabilities", "Advisory")
14+
Advisory.objects.filter(created_by="vulnerabilities.importers.alpine_linux.AlpineImporter").update(
15+
created_by=AlpineLinuxImporterPipeline.pipeline_id
16+
)
17+
18+
19+
def reverse_update_created_by(apps, schema_editor):
20+
from vulnerabilities.pipelines.alpine_linux_importer import AlpineLinuxImporterPipeline
21+
22+
Advisory = apps.get_model("vulnerabilities", "Advisory")
23+
Advisory.objects.filter(created_by=AlpineLinuxImporterPipeline.pipeline_id).update(
24+
created_by="vulnerabilities.importers.alpine_linux.AlpineImporter"
25+
)
26+
27+
28+
class Migration(migrations.Migration):
29+
30+
dependencies = [
31+
("vulnerabilities", "0085_alter_package_is_ghost_alter_package_version_rank_and_more"),
32+
]
33+
34+
operations = [
35+
migrations.RunPython(update_created_by, reverse_code=reverse_update_created_by),
36+
]

vulnerabilities/tests/test_data_migrations.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -880,3 +880,45 @@ def test_update_pysec_created_by_field(self):
880880

881881
assert adv.filter(created_by="vulnerabilities.importers.pysec.PyPIImporter").count() == 0
882882
assert adv.filter(created_by="pysec_importer").count() == 1
883+
884+
885+
class TestUpdateAlpineAdvisoryCreatedByField(TestMigrations):
886+
app_name = "vulnerabilities"
887+
migrate_from = "0085_alter_package_is_ghost_alter_package_version_rank_and_more"
888+
migrate_to = "0086_update_alpine_advisory_created_by"
889+
890+
advisory_data1 = AdvisoryData(
891+
aliases=["CVE-2020-13371337"],
892+
summary="vulnerability description here",
893+
affected_packages=[
894+
AffectedPackage(
895+
package=PackageURL(type="pypi", name="foobar"),
896+
affected_version_range=VersionRange.from_string("vers:pypi/>=1.0.0|<=2.0.0"),
897+
)
898+
],
899+
references=[Reference(url="https://example.com/with/more/info/CVE-2020-13371337")],
900+
date_published=timezone.now(),
901+
url="https://test.com",
902+
)
903+
904+
def setUpBeforeMigration(self, apps):
905+
Advisory = apps.get_model("vulnerabilities", "Advisory")
906+
adv1 = Advisory.objects.create(
907+
aliases=self.advisory_data1.aliases,
908+
summary=self.advisory_data1.summary,
909+
affected_packages=[pkg.to_dict() for pkg in self.advisory_data1.affected_packages],
910+
references=[ref.to_dict() for ref in self.advisory_data1.references],
911+
url=self.advisory_data1.url,
912+
created_by="vulnerabilities.importers.alpine_linux.AlpineImporter",
913+
date_collected=timezone.now(),
914+
)
915+
916+
def test_update_pysec_created_by_field(self):
917+
Advisory = apps.get_model("vulnerabilities", "Advisory")
918+
adv = Advisory.objects.all()
919+
920+
assert (
921+
adv.filter(created_by="vulnerabilities.importers.alpine_linux.AlpineImporter").count()
922+
== 0
923+
)
924+
assert adv.filter(created_by="alpine_linux_importer").count() == 1

0 commit comments

Comments
 (0)