diff options
Diffstat (limited to 'controller-server/src/test')
6 files changed, 67 insertions, 9 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TenantRoleMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TenantRoleMaintainerTest.java index 97656583d04..2f36287df45 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TenantRoleMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TenantRoleMaintainerTest.java @@ -9,12 +9,16 @@ import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; +import com.yahoo.vespa.hosted.controller.tenant.Tenant; import org.junit.jupiter.api.Test; import java.time.Duration; +import java.time.Instant; import java.util.List; +import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; /** @@ -56,6 +60,39 @@ public class TenantRoleMaintainerTest { assertTrue(tenantNames.containsAll(List.of(prodAppTenant2.application().id().tenant(), perfAppTenant1.application().id().tenant()))); } + @Test + void maintain_batch() { + var tenants = List.of( + tester.newDeploymentContext("tenant1", "app1", "default"), + tester.newDeploymentContext("tenant2", "app1", "default"), + tester.newDeploymentContext("tenant3", "app1", "default"), + tester.newDeploymentContext("tenant4", "app1", "default"), + tester.newDeploymentContext("tenant5", "app1", "default"), + tester.newDeploymentContext("tenant6", "app1", "default")); + + var maintainer = new TenantRoleMaintainer(tester.controller(), Duration.ofDays(1)); + maintainer.maintain(); + + var maintainedTenants = tester.controller().tenants().asList().stream() + .filter(t -> t.tenantRolesLastMaintained() != Instant.EPOCH) + .toList(); + + var unmaintainedTenants = tester.controller().tenants().asList().stream() + .filter(t -> t.tenantRolesLastMaintained() == Instant.EPOCH) + .toList(); + + assertEquals(5, maintainedTenants.size()); + assertEquals(1, unmaintainedTenants.size()); + + tester.clock().advance(Duration.ofDays(1)); + + maintainer.maintain(); + var result = tester.controller().tenants().asList().stream() + .collect(Collectors.groupingBy(Tenant::tenantRolesLastMaintained)); + + assertFalse(result.containsKey(Instant.EPOCH)); + } + private long permanentDeployments(Instance instance) { return tester.controller().applications().requireInstance(instance.id()).deployments().values().stream() .filter(deployment -> !deployment.zone().environment().isTest()) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationsDbTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationsDbTest.java index 852d4847b7e..cd1debc71fd 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationsDbTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationsDbTest.java @@ -63,7 +63,8 @@ public class NotificationsDbTest { email)))), List.of(), new ArchiveAccess(), - Optional.empty()); + Optional.empty(), + Instant.EPOCH); private static final List<Notification> notifications = List.of( notification(1001, Type.deployment, Level.error, NotificationSource.from(tenant), "tenant msg"), notification(1101, Type.applicationPackage, Level.warning, NotificationSource.from(TenantAndApplicationId.from(tenant.value(), "app1")), "app msg"), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotifierTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotifierTest.java index ecf42979b40..0c031a13e6f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotifierTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotifierTest.java @@ -44,7 +44,8 @@ public class NotifierTest { email)))), List.of(), new ArchiveAccess(), - Optional.empty()); + Optional.empty(), + Instant.EPOCH); MockCuratorDb curatorDb = new MockCuratorDb(SystemName.Public); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java index 5144c5cb7b4..8da0d665282 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java @@ -89,7 +89,8 @@ public class TenantSerializerTest { Optional.of(new PropertyId("1")), Optional.of(contact()), Instant.EPOCH, - lastLoginInfo(321L, 654L, 987L)); + lastLoginInfo(321L, 654L, 987L), + Instant.EPOCH); AthenzTenant serialized = (AthenzTenant) serializer.tenantFrom(serializer.toSlime(tenant)); assertEquals(tenant.contact(), serialized.contact()); } @@ -105,7 +106,8 @@ public class TenantSerializerTest { TenantInfo.empty(), List.of(), new ArchiveAccess(), - Optional.empty()); + Optional.empty(), + Instant.EPOCH); CloudTenant serialized = (CloudTenant) serializer.tenantFrom(serializer.toSlime(tenant)); assertEquals(tenant.name(), serialized.name()); assertEquals(tenant.creator(), serialized.creator()); @@ -127,7 +129,8 @@ public class TenantSerializerTest { new TenantSecretStore("ss2", "124", "role2") ), new ArchiveAccess().withAWSRole("arn:aws:iam::123456789012:role/my-role"), - Optional.of(Instant.ofEpochMilli(1234567))); + Optional.of(Instant.ofEpochMilli(1234567)), + Instant.EPOCH); CloudTenant serialized = (CloudTenant) serializer.tenantFrom(serializer.toSlime(tenant)); assertEquals(tenant.info(), serialized.info()); assertEquals(tenant.tenantSecretStores(), serialized.tenantSecretStores()); @@ -177,7 +180,8 @@ public class TenantSerializerTest { TenantInfo.empty(), List.of(), new ArchiveAccess().withAWSRole("arn:aws:iam::123456789012:role/my-role").withGCPMember("user:foo@example.com"), - Optional.empty()); + Optional.empty(), + Instant.EPOCH); CloudTenant serialized = (CloudTenant) serializer.tenantFrom(serializer.toSlime(tenant)); assertEquals(serialized.archiveAccess().awsRole().get(), "arn:aws:iam::123456789012:role/my-role"); assertEquals(serialized.archiveAccess().gcpMember().get(), "user:foo@example.com"); @@ -246,6 +250,19 @@ public class TenantSerializerTest { assertEquals(tenant.deletedAt(), serialized.deletedAt()); } + @Test + void tenant_with_roles_maintained() { + AthenzTenant tenant = new AthenzTenant(TenantName.from("athenz-tenant"), + new AthenzDomain("domain1"), + new Property("property1"), + Optional.of(new PropertyId("1")), + Optional.of(contact()), + Instant.EPOCH, + lastLoginInfo(321L, 654L, 987L), + Instant.ofEpochMilli(1_000_000)); + assertEquals(tenant, serializer.tenantFrom(serializer.toSlime(tenant))); + } + private static Contact contact() { return new Contact( URI.create("http://contact1.test"), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index f1381ead221..d40485ff5c0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -1287,7 +1287,7 @@ public class ApplicationApiTest extends ControllerContainerTest { // Create legacy tenant name containing underscores tester.controller().curator().writeTenant(new AthenzTenant(TenantName.from("my_tenant"), ATHENZ_TENANT_DOMAIN, - new Property("property1"), Optional.empty(), Optional.empty(), Instant.EPOCH, LastLoginInfo.EMPTY)); + new Property("property1"), Optional.empty(), Optional.empty(), Instant.EPOCH, LastLoginInfo.EMPTY, Instant.EPOCH)); // POST (add) a Athenz tenant with dashes duplicates existing one with underscores tester.assertResponse(request("/application/v4/tenant/my-tenant", POST) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java index fcbecfa2e68..410bb801e85 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java @@ -78,7 +78,8 @@ public class SignatureFilterTest { TenantInfo.empty(), List.of(), new ArchiveAccess(), - Optional.empty())); + Optional.empty(), + Instant.EPOCH)); tester.curator().writeApplication(new Application(appId, tester.clock().instant())); } @@ -125,7 +126,8 @@ public class SignatureFilterTest { TenantInfo.empty(), List.of(), new ArchiveAccess(), - Optional.empty())); + Optional.empty(), + Instant.EPOCH)); verifySecurityContext(requestOf(signer.signed(request.copy(), Method.POST, () -> new ByteArrayInputStream(hiBytes)), hiBytes), new SecurityContext(new SimplePrincipal("user"), Set.of(Role.reader(id.tenant()), |