From a522ef93213f7d966f37a236d3c945e3be097fc6 Mon Sep 17 00:00:00 2001 From: Josh Eckels Date: Wed, 4 Feb 2026 10:25:10 -0800 Subject: [PATCH 1/2] Make CSP error logging validation more robust (#2868) --- .../labkey/test/tests/wiki/WikiCspTest.java | 31 ++++++++++++++----- .../test/util/core/admin/CspConfigHelper.java | 5 +++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/org/labkey/test/tests/wiki/WikiCspTest.java b/src/org/labkey/test/tests/wiki/WikiCspTest.java index e54819b6d8..5f6976008a 100644 --- a/src/org/labkey/test/tests/wiki/WikiCspTest.java +++ b/src/org/labkey/test/tests/wiki/WikiCspTest.java @@ -13,6 +13,7 @@ import org.labkey.test.util.CspLogUtil; import org.labkey.test.util.TextSearcher; import org.labkey.test.util.WikiHelper; +import org.labkey.test.util.core.admin.CspConfigHelper; import java.util.Arrays; import java.util.List; @@ -21,7 +22,7 @@ @BaseWebDriverTest.ClassTimeout(minutes = 2) public class WikiCspTest extends BaseWebDriverTest { - private static final String PROJECT_NAME = TRICKY_CHARACTERS_FOR_PROJECT_NAMES + "WikiCspTest"; + private static final String PROJECT_NAME = TRICKY_CHARACTERS_FOR_PROJECT_NAMES; private static final String WIKI_PAGE_TITLE = "TOC_with_inline"; private static final String WIKI_PAGE_BODY = // Issue 52483: HTML substitution patterns can throw errors during wiki validation @@ -53,6 +54,17 @@ private void doSetup() _containerHelper.createProject(PROJECT_NAME, null); _containerHelper.enableModules(Arrays.asList("Wiki")); goToProjectHome(); + CspConfigHelper.debugCspWarnings(); // Ensure that CSP violation logs aren't suppressed by de-duping efforts + } + + @Override + protected void doCleanup(boolean afterTest) + { + super.doCleanup(afterTest); + if (afterTest) + { + CspConfigHelper.infoCspWarnings(); + } } @Override @@ -76,13 +88,18 @@ public void testCspChecks() waitForText("Click me"); - try + waitFor(() -> { - CspLogUtil.checkNewCspWarnings(getArtifactCollector()); - } - catch (CspLogUtil.CspWarningDetectedException ignore) {} - - goToAdminConsole().goToSettingsSection(); + try + { + CspLogUtil.checkNewCspWarnings(getArtifactCollector()); + return false; + } + catch (CspLogUtil.CspWarningDetectedException ignore) + { + return true; + } + }, "Should have triggered a CSP error", WAIT_FOR_PAGE); SiteValidationPage validationPage = goToAdminConsole().clickSiteValidation(); validationPage.setAllValidators(false); diff --git a/src/org/labkey/test/util/core/admin/CspConfigHelper.java b/src/org/labkey/test/util/core/admin/CspConfigHelper.java index a8ec0125ed..55f4546e2b 100644 --- a/src/org/labkey/test/util/core/admin/CspConfigHelper.java +++ b/src/org/labkey/test/util/core/admin/CspConfigHelper.java @@ -75,6 +75,11 @@ public static void debugCspWarnings() Log4jUtils.setLogLevel("org.labkey.core.admin.AdminController.ContentSecurityPolicyReportAction", ManagerPage.LoggingLevel.DEBUG); } + public static void infoCspWarnings() + { + Log4jUtils.setLogLevel("org.labkey.core.admin.AdminController.ContentSecurityPolicyReportAction", ManagerPage.LoggingLevel.INFO); + } + public static class AllowedHost { private final Directive _directive; From 2fc396d6110d13c7284b4ca7f58938f3fe6e68ea Mon Sep 17 00:00:00 2001 From: Susan Hert Date: Tue, 10 Feb 2026 07:22:11 -0800 Subject: [PATCH 2/2] Move getExpectedAuditDataChange method to AuditLogHelper. (#2880) --- src/org/labkey/test/util/AuditLogHelper.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/org/labkey/test/util/AuditLogHelper.java b/src/org/labkey/test/util/AuditLogHelper.java index 89bf6e0010..7509898328 100644 --- a/src/org/labkey/test/util/AuditLogHelper.java +++ b/src/org/labkey/test/util/AuditLogHelper.java @@ -293,6 +293,17 @@ public Map getTransactionAuditLogDetails(Integer transactionAudi return new JSONObject(detailJSON).toMap(); } + public static String getExpectedAuditDataChange(String field, Object oldValue, Object newValue) + { + String dataChangeString = field + ": "; + if (oldValue != null) + dataChangeString += oldValue; + if (newValue != null) + dataChangeString += " > " + newValue; + return dataChangeString; + } + + public void checkLastTransactionAuditLogDetails(String containerPath, Map expectedDetails) { Integer transactionAuditId = getLastTransactionId(containerPath);