Skip to content

Commit d1e9573

Browse files
Maffoochclaude
andcommitted
test(vuln-id): fix fixture/perf tests for default-on entity reads
Three test-only fixes surfaced by V3_FEATURE_VULNERABILITY_IDS defaulting True in OSS (reads hit the entity store): - test_bulk_risk_acceptance_api + test_pdf_report_rendering seeded vuln ids via the legacy Vulnerability_Id table directly, so entity reads returned empty flag-on. Seed via save_vulnerability_ids (unconditional dual-write) instead — production code is unchanged and correct. bulk_risk verified locally (3 tests green flag-on); the pdf report test loads dojo_testdata (can't run in the Pro container) and relies on OSS CI. - test_tag_inheritance_perf: re-baseline the 6 EXPECTED_ZAP_* assertNumQueries constants for the dual-write delta (+2 import / +12 reimport-no-change / +6 reimport-with-new), from a pure-OSS CI run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent bc0c7fc commit d1e9573

3 files changed

Lines changed: 22 additions & 16 deletions

File tree

unittests/test_bulk_risk_acceptance_api.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
Role,
1010
)
1111
from dojo.authorization.roles_permissions import Roles
12+
from dojo.finding.helper import save_vulnerability_ids
1213
from dojo.models import (
1314
Dojo_User,
1415
Engagement,
@@ -19,7 +20,6 @@
1920
Test,
2021
Test_Type,
2122
User,
22-
Vulnerability_Id,
2323
)
2424

2525

@@ -61,24 +61,24 @@ def create_finding(test: Test, reporter: User, cve: str) -> Finding:
6161
Finding.objects.bulk_create(
6262
create_finding(cls.test_a, cls.user, f"CVE-1999-{i}") for i in range(50, 150, 3))
6363
for finding in Finding.objects.filter(test=cls.test_a):
64-
Vulnerability_Id.objects.get_or_create(finding=finding, vulnerability_id=finding.cve)
64+
save_vulnerability_ids(finding, [finding.cve])
6565
Finding.objects.bulk_create(
6666
create_finding(cls.test_b, cls.user, f"CVE-1999-{i}") for i in range(51, 150, 3))
6767
for finding in Finding.objects.filter(test=cls.test_b):
68-
Vulnerability_Id.objects.get_or_create(finding=finding, vulnerability_id=finding.cve)
68+
save_vulnerability_ids(finding, [finding.cve])
6969
Finding.objects.bulk_create(
7070
create_finding(cls.test_c, cls.user, f"CVE-1999-{i}") for i in range(52, 150, 3))
7171
for finding in Finding.objects.filter(test=cls.test_c):
72-
Vulnerability_Id.objects.get_or_create(finding=finding, vulnerability_id=finding.cve)
72+
save_vulnerability_ids(finding, [finding.cve])
7373

7474
Finding.objects.bulk_create(
7575
create_finding(cls.test_d, cls.user, f"CVE-2000-{i}") for i in range(50, 150, 3))
7676
for finding in Finding.objects.filter(test=cls.test_d):
77-
Vulnerability_Id.objects.get_or_create(finding=finding, vulnerability_id=finding.cve)
77+
save_vulnerability_ids(finding, [finding.cve])
7878
Finding.objects.bulk_create(
7979
create_finding(cls.test_e, cls.user, f"CVE-1999-{i}") for i in range(50, 150, 3))
8080
for finding in Finding.objects.filter(test=cls.test_e):
81-
Vulnerability_Id.objects.get_or_create(finding=finding, vulnerability_id=finding.cve)
81+
save_vulnerability_ids(finding, [finding.cve])
8282

8383
def setUp(self) -> None:
8484
self.client = APIClient()
@@ -204,13 +204,13 @@ def create_finding(test, reporter, cve):
204204
Finding.objects.bulk_create(
205205
create_finding(cls.test_enabled, cls.writer, f"CVE-2024-{i}") for i in range(10))
206206
for f in Finding.objects.filter(test=cls.test_enabled):
207-
Vulnerability_Id.objects.get_or_create(finding=f, vulnerability_id=f.cve)
207+
save_vulnerability_ids(f, [f.cve])
208208

209209
# Findings on the disabled product
210210
Finding.objects.bulk_create(
211211
create_finding(cls.test_disabled, cls.writer, f"CVE-2024-{i + 100}") for i in range(5))
212212
for f in Finding.objects.filter(test=cls.test_disabled):
213-
Vulnerability_Id.objects.get_or_create(finding=f, vulnerability_id=f.cve)
213+
save_vulnerability_ids(f, [f.cve])
214214

215215
def _client_for(self, token):
216216
client = APIClient()

unittests/test_pdf_report_rendering.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.template import engines
22
from django.utils.timezone import now
33

4+
from dojo.finding.helper import save_vulnerability_ids
45
from dojo.models import (
56
Engagement,
67
Finding,
@@ -9,7 +10,6 @@
910
Test,
1011
Test_Type,
1112
User,
12-
Vulnerability_Id,
1313
)
1414
from unittests.dojo_test_case import DojoTestCase, versioned_fixtures
1515

@@ -176,7 +176,9 @@ def test_report_field_contains_rendered_content(self):
176176
def test_report_finding_table_includes_vulnerability_ids(self):
177177
"""Finding PDF reports should show vulnerability IDs in the finding table."""
178178
finding = self._create_finding()
179-
Vulnerability_Id.objects.create(finding=finding, vulnerability_id="CVE-2026-12345")
179+
# Dual-write (legacy row + entity reference) so the report's flag-appropriate
180+
# read resolves whether V3_FEATURE_VULNERABILITY_IDS is on (default) or off.
181+
save_vulnerability_ids(finding, ["CVE-2026-12345"])
180182

181183
html = self._render_finding_report(Finding.objects.filter(pk=finding.pk))
182184

unittests/test_tag_inheritance_perf.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -597,9 +597,13 @@ def test_baseline_zap_scan_reimport_with_new_findings_v3(self):
597597
# Multiple-CWEs feature: +2 import / +2 reimport-no-change (Finding_CWE
598598
# store + bulk flush) and +10 reimport-with-new (per-finding reconcile reads
599599
# existing Finding_CWE rows for each changed finding).
600-
EXPECTED_ZAP_IMPORT_V2 = 294
601-
EXPECTED_ZAP_IMPORT_V3 = 318
602-
EXPECTED_ZAP_REIMPORT_NO_CHANGE_V2 = 79
603-
EXPECTED_ZAP_REIMPORT_NO_CHANGE_V3 = 91
604-
EXPECTED_ZAP_REIMPORT_WITH_NEW_V2 = 161
605-
EXPECTED_ZAP_REIMPORT_WITH_NEW_V3 = 190
600+
# Vulnerability_Id entity dual-write (unconditional): +2 import / +12
601+
# reimport-no-change / +6 reimport-with-new queries (VulnerabilityId entity +
602+
# FindingVulnerabilityReference bulk writes alongside the legacy rows; batched,
603+
# not per-finding).
604+
EXPECTED_ZAP_IMPORT_V2 = 296
605+
EXPECTED_ZAP_IMPORT_V3 = 320
606+
EXPECTED_ZAP_REIMPORT_NO_CHANGE_V2 = 91
607+
EXPECTED_ZAP_REIMPORT_NO_CHANGE_V3 = 103
608+
EXPECTED_ZAP_REIMPORT_WITH_NEW_V2 = 167
609+
EXPECTED_ZAP_REIMPORT_WITH_NEW_V3 = 196

0 commit comments

Comments
 (0)