From 58485edcfca393219896d8a7cf7d17da760e972e Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Tue, 16 Jun 2026 14:32:17 -0700 Subject: [PATCH 1/3] Enable mothership module so its controller can handle requests --- .../permissions/AbstractContainerScopingTest.java | 10 +++++++++- .../org/labkey/mothership/MothershipController.java | 5 +++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java b/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java index bb5db4d34a6..8660b8d31a8 100644 --- a/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java +++ b/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java @@ -33,8 +33,10 @@ import org.springframework.mock.web.MockHttpServletResponse; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * Base class for "container scoping" (a.k.a. broken-object-level-authorization / BOLA / IDOR) integration tests. These @@ -71,10 +73,16 @@ protected User getAdmin() * automatic cleanup. Callers pass a short local name (e.g. "A"/"B"/"Source"); the class name is prepended so two * test classes can both ask for "A" without colliding. */ - protected Container createContainer(String name) + protected Container createContainer(String name, org.labkey.api.module.Module... enabledModules) { Container junit = JunitUtil.getTestContainer(); Container c = ContainerManager.ensureContainer(junit.getParsedPath().append(getClass().getSimpleName() + "-" + name, true), getAdmin()); + if (enabledModules.length > 0) + { + Set m = new HashSet<>(c.getActiveModules()); + m.addAll(Set.of(enabledModules)); + c.setActiveModules(m); + } _containers.add(c); return c; } diff --git a/mothership/src/org/labkey/mothership/MothershipController.java b/mothership/src/org/labkey/mothership/MothershipController.java index dbbe9c2a009..a46431a6e58 100644 --- a/mothership/src/org/labkey/mothership/MothershipController.java +++ b/mothership/src/org/labkey/mothership/MothershipController.java @@ -54,6 +54,7 @@ import org.labkey.api.data.TableInfo; import org.labkey.api.data.TableSelector; import org.labkey.api.module.AllowedDuringUpgrade; +import org.labkey.api.module.ModuleLoader; import org.labkey.api.query.DetailsURL; import org.labkey.api.query.FieldKey; import org.labkey.api.query.QueryService; @@ -1887,8 +1888,8 @@ public static class ContainerScopingTestCase extends AbstractContainerScopingTes public void testUpdateInstallationContainerScoping() throws Exception { User admin = getAdmin(); - Container folderA = createContainer("A"); - Container folderB = createContainer("B"); + Container folderA = createContainer("A", ModuleLoader.getInstance().getModule(MothershipModule.class)); + Container folderB = createContainer("B", ModuleLoader.getInstance().getModule(MothershipModule.class)); // An installation row that lives in folder B ServerInstallation si = new ServerInstallation(); From f599c224e9128fcc43283e7bb261b79ee5619226 Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Tue, 16 Jun 2026 14:56:17 -0700 Subject: [PATCH 2/3] Minor tweaks --- .../security/permissions/AbstractContainerScopingTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java b/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java index 8660b8d31a8..c1e820a6b4f 100644 --- a/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java +++ b/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java @@ -33,6 +33,7 @@ import org.springframework.mock.web.MockHttpServletResponse; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -80,8 +81,8 @@ protected Container createContainer(String name, org.labkey.api.module.Module... if (enabledModules.length > 0) { Set m = new HashSet<>(c.getActiveModules()); - m.addAll(Set.of(enabledModules)); - c.setActiveModules(m); + Collections.addAll(m, enabledModules); + c.setActiveModules(m, getAdmin()); } _containers.add(c); return c; From 70a78771027b04710316f99426f10dbe12c4b673 Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Tue, 16 Jun 2026 16:41:49 -0700 Subject: [PATCH 3/3] Share module activation --- .../permissions/AbstractContainerScopingTest.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java b/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java index c1e820a6b4f..1146126f196 100644 --- a/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java +++ b/api/src/org/labkey/api/security/permissions/AbstractContainerScopingTest.java @@ -19,6 +19,7 @@ import org.junit.Assert; import org.labkey.api.data.Container; import org.labkey.api.data.ContainerManager; +import org.labkey.api.module.Module; import org.labkey.api.security.MutableSecurityPolicy; import org.labkey.api.security.SecurityManager; import org.labkey.api.security.SecurityPolicyManager; @@ -78,13 +79,19 @@ protected Container createContainer(String name, org.labkey.api.module.Module... { Container junit = JunitUtil.getTestContainer(); Container c = ContainerManager.ensureContainer(junit.getParsedPath().append(getClass().getSimpleName() + "-" + name, true), getAdmin()); + activateModules(c, enabledModules); + _containers.add(c); + return c; + } + + protected Container activateModules(Container c, Module... enabledModules) + { if (enabledModules.length > 0) { Set m = new HashSet<>(c.getActiveModules()); Collections.addAll(m, enabledModules); c.setActiveModules(m, getAdmin()); } - _containers.add(c); return c; }