summaryrefslogtreecommitdiffstats
path: root/controller-server/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'controller-server/src/test')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TenantRoleMaintainerTest.java37
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationsDbTest.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotifierTest.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java25
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java6
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()),