summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2021-09-02 13:59:43 +0200
committerOla Aunrønning <olaa@verizonmedia.com>2021-09-02 13:59:43 +0200
commite5cc08ddc51e399c91bf39ec7f2fd8380d86cd0a (patch)
treec64f72cdbe55bc345917d19b5bc5a92b7cd8a7d6 /controller-server
parent696be9ae9a3c8e476ae00afed3bacae6a592b36e (diff)
Add test
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainer.java30
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainerTest.java44
2 files changed, 61 insertions, 13 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainer.java
index ffc11106fe2..6b509e82dba 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainer.java
@@ -6,8 +6,10 @@ import com.yahoo.vespa.hosted.controller.Application;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.api.integration.user.Roles;
import com.yahoo.vespa.hosted.controller.api.integration.user.UserManagement;
+import com.yahoo.vespa.hosted.controller.api.role.Role;
import java.time.Duration;
+import java.util.List;
import java.util.logging.Logger;
import java.util.stream.Collectors;
@@ -31,6 +33,18 @@ public class UserManagementMaintainer extends ControllerMaintainer {
@Override
protected double maintain() {
+ findLeftoverRoles().forEach(role -> {
+ /*
+ Log discrepancy now
+ TODO: userManagement.deleteRole(role);
+ */
+ logger.warning(String.format("Found unexpected role %s - Please investigate", role.toString()));
+ });
+ return 1.0;
+ }
+
+ // protected for testing
+ protected List<Role> findLeftoverRoles() {
var tenantRoles = controller().tenants().asList()
.stream()
.flatMap(tenant -> Roles.tenantRoles(tenant.name()).stream())
@@ -42,19 +56,9 @@ public class UserManagementMaintainer extends ControllerMaintainer {
.flatMap(applicationId -> Roles.applicationRoles(applicationId.tenant(), applicationId.application()).stream())
.collect(Collectors.toList());
- var roles = userManagement.listRoles();
-
- roles.forEach(role -> {
- if (!tenantRoles.contains(role) && !applicationRoles.contains(role)) {
- /*
- Log discrepancy now
- TODO: userManagement.deleteRole(role);
- */
- logger.warning(String.format("Found unexpected role %s - Please investigate", role.toString()));
- }
-
- });
- return 1.0;
+ return userManagement.listRoles().stream()
+ .filter(role -> !tenantRoles.contains(role) && !applicationRoles.contains(role))
+ .collect(Collectors.toList());
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainerTest.java
new file mode 100644
index 00000000000..08be2266b2e
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainerTest.java
@@ -0,0 +1,44 @@
+package com.yahoo.vespa.hosted.controller.maintenance;
+
+import com.yahoo.config.provision.ApplicationName;
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.vespa.hosted.controller.ControllerTester;
+import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockUserManagement;
+import com.yahoo.vespa.hosted.controller.api.integration.user.Roles;
+import com.yahoo.vespa.hosted.controller.api.integration.user.UserManagement;
+import org.junit.Test;
+
+import java.time.Duration;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author olaa
+ */
+public class UserManagementMaintainerTest {
+
+ private final ControllerTester tester = new ControllerTester();
+ private final UserManagement userManagement = new MockUserManagement();
+ private final UserManagementMaintainer userManagementMaintainer = new UserManagementMaintainer(tester.controller(), Duration.ofMinutes(1), userManagement);
+
+ private final TenantName tenant = TenantName.from("tenant1");
+ private final ApplicationName app = ApplicationName.from("app1");
+ private final TenantName deletedTenant = TenantName.from("deleted-tenant");
+
+ @Test
+ public void finds_superfluous_roles() {
+ tester.createTenant(tenant.value());
+ tester.createApplication(tenant.value(), app.value());
+
+ Roles.tenantRoles(tenant).forEach(userManagement::createRole);
+ Roles.applicationRoles(tenant, app).forEach(userManagement::createRole);
+ Roles.tenantRoles(deletedTenant).forEach(userManagement::createRole);
+
+ var expectedRoles = Roles.tenantRoles(deletedTenant);
+ var actualRoles = userManagementMaintainer.findLeftoverRoles();
+
+ assertEquals(expectedRoles.size(), actualRoles.size());
+ assertTrue(expectedRoles.containsAll(actualRoles) && actualRoles.containsAll(expectedRoles));
+ }
+
+} \ No newline at end of file