|
6 | 6 | # See https://github.com/aboutcode-org/vulnerablecode for support or download. |
7 | 7 | # See https://aboutcode.org for more information about nexB OSS projects. |
8 | 8 | # |
| 9 | + |
9 | 10 | from datetime import datetime |
10 | 11 |
|
11 | 12 | from django.apps import apps |
@@ -1088,3 +1089,98 @@ def test_latest_is_actually_recent(self): |
1088 | 1089 |
|
1089 | 1090 | latest = AdvisoryV2.objects.get(avid="test_pipeline/test_adv", is_latest=True) |
1090 | 1091 | self.assertEqual("New advisory", latest.summary) |
| 1092 | + |
| 1093 | + |
| 1094 | +class TestMalformedAliasesAVIDMigration(TestMigrations): |
| 1095 | + app_name = "vulnerabilities" |
| 1096 | + migrate_from = "0121_advisoryv2_is_latest_alter_advisoryv2_advisory_id_and_more" |
| 1097 | + migrate_to = "0122_advisoryv2_remove_malformed_aliases_and_dvisory_id" |
| 1098 | + raw_alias_inputs = [ |
| 1099 | + ("CVE-2023-1111", True), |
| 1100 | + ("GHSA-abcd-1234", True), |
| 1101 | + ("", False), |
| 1102 | + ("(not", False), |
| 1103 | + ("applicable)", False), |
| 1104 | + ("(BABEL)", False), |
| 1105 | + ("(was", False), |
| 1106 | + ("--with-systemd)", False), |
| 1107 | + ("fixed", False), |
| 1108 | + ("printing", False), |
| 1109 | + ("(AFS/RX)", False), |
| 1110 | + ("unreliably", False), |
| 1111 | + ("(ICMP)", False), |
| 1112 | + ("CVE", False), |
| 1113 | + ("(Not", False), |
| 1114 | + ("(RSVP)", False), |
| 1115 | + ("libpcap)", False), |
| 1116 | + ("(SMB", False), |
| 1117 | + ("fix)", False), |
| 1118 | + ("(DCCP)", False), |
| 1119 | + ("(HNCP)", False), |
| 1120 | + ("(+", False), |
| 1121 | + ("(IKEv1)", False), |
| 1122 | + ("(FrameRelay)", False), |
| 1123 | + ("XPTI", False), |
| 1124 | + ("CVE_2019-2426", False), |
| 1125 | + ("(BGP)", False), |
| 1126 | + ("disabled)", False), |
| 1127 | + ("(RPL)", False), |
| 1128 | + ("regression", False), |
| 1129 | + ("actually", False), |
| 1130 | + ("(VRRP)", False), |
| 1131 | + ("-V)", False), |
| 1132 | + ("2025-48379", False), |
| 1133 | + ("fixed,", False), |
| 1134 | + ("(802.11)", False), |
| 1135 | + ("affected,", False), |
| 1136 | + ("SMB", False), |
| 1137 | + ("(OSPF6)", False), |
| 1138 | + ("too", False), |
| 1139 | + ("partially", False), |
| 1140 | + ("in", False), |
| 1141 | + ("(SMB)", False), |
| 1142 | + ("but", False), |
| 1143 | + ("-", False), |
| 1144 | + ("(LDP)", False), |
| 1145 | + ("reproduced,", False), |
| 1146 | + ("N/A", False), |
| 1147 | + ("(tcpdump", False), |
| 1148 | + ("requires", False), |
| 1149 | + ("(AoE)", False), |
| 1150 | + ("(LMP)", False), |
| 1151 | + (" CVE-2025-55070", False), |
| 1152 | + ("n/a", False), |
| 1153 | + ("No CVE assigned", False), |
| 1154 | + ("- CVE-2026-26365", False), |
| 1155 | + ] |
| 1156 | + |
| 1157 | + def setUpBeforeMigration(self, apps): |
| 1158 | + AdvisoryV2 = apps.get_model("vulnerabilities", "AdvisoryV2") |
| 1159 | + AdvisoryAlias = apps.get_model("vulnerabilities", "AdvisoryAlias") |
| 1160 | + |
| 1161 | + for i, (raw_input, _) in enumerate(self.raw_alias_inputs): |
| 1162 | + adv = AdvisoryV2.objects.create( |
| 1163 | + unique_content_id=f"content_{i}", |
| 1164 | + url="https://example.com", |
| 1165 | + summary=f"Advisory for {raw_input}", |
| 1166 | + advisory_id=raw_input, |
| 1167 | + avid=f"test_pipeline/{raw_input}", |
| 1168 | + datasource_id="test_pipeline", |
| 1169 | + ) |
| 1170 | + alias = AdvisoryAlias.objects.create(alias=raw_input) |
| 1171 | + adv.aliases.add(alias) |
| 1172 | + |
| 1173 | + def test_migration_processes_malformed_aliases(self): |
| 1174 | + AdvisoryV2 = self.apps.get_model("vulnerabilities", "AdvisoryV2") |
| 1175 | + AdvisoryAlias = self.apps.get_model("vulnerabilities", "AdvisoryAlias") |
| 1176 | + |
| 1177 | + for i, (raw_input, expected_to_survive) in enumerate(self.raw_alias_inputs): |
| 1178 | + adv_exists = AdvisoryV2.objects.filter(unique_content_id=f"content_{i}").exists() |
| 1179 | + alias_exists = AdvisoryAlias.objects.filter(alias=raw_input).exists() |
| 1180 | + |
| 1181 | + if expected_to_survive: |
| 1182 | + assert adv_exists == True |
| 1183 | + assert alias_exists == True |
| 1184 | + else: |
| 1185 | + assert adv_exists == False |
| 1186 | + assert alias_exists == False |
0 commit comments