aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2021-06-16 11:35:20 +0200
committerØyvind Grønnesby <oyving@verizonmedia.com>2021-06-16 11:35:20 +0200
commitd06349ca09122c5d0e2c022910edc4aa7a5c8bfa (patch)
tree272f5ba68f3dabd7a10064060930341a2d842cc5 /controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java
parent062427cbeacac0f2850558976da56a7789983b62 (diff)
Expire trial tenants that have not logged in for 14 days
Diffstat (limited to 'controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java89
1 files changed, 89 insertions, 0 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java
new file mode 100644
index 00000000000..7a6f8f1d764
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java
@@ -0,0 +1,89 @@
+package com.yahoo.vespa.hosted.controller.maintenance;
+
+import com.yahoo.config.provision.SystemName;
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.vespa.flags.InMemoryFlagSource;
+import com.yahoo.vespa.flags.PermanentFlags;
+import com.yahoo.vespa.hosted.controller.ControllerTester;
+import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanId;
+import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester;
+import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock;
+import com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo;
+import com.yahoo.vespa.hosted.controller.tenant.Tenant;
+import org.junit.Test;
+
+import java.time.Duration;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+public class CloudTrialExpirerTest {
+ private final ControllerTester tester = new ControllerTester(SystemName.Public);
+ private final DeploymentTester deploymentTester = new DeploymentTester(tester);
+ private final CloudTrialExpirer expirer = new CloudTrialExpirer(tester.controller(), Duration.ofMinutes(5));
+
+ @Test
+ public void expire_inactive_tenant() {
+ registerTenant("trial-tenant", "trial", Duration.ofDays(14).plusMillis(1));
+ expirer.maintain();
+ assertPlan("trial-tenant", "none");
+ }
+
+ @Test
+ public void keep_inactive_nontrial_tenants() {
+ registerTenant("not-a-trial-tenant", "pay-as-you-go", Duration.ofDays(30));
+ expirer.maintain();
+ assertPlan("not-a-trial-tenant", "pay-as-you-go");
+ }
+
+ @Test
+ public void keep_active_trial_tenants() {
+ registerTenant("active-trial-tenant", "trial", Duration.ofHours(14).minusMillis(1));
+ expirer.maintain();
+ assertPlan("active-trial-tenant", "trial");
+ }
+
+ @Test
+ public void keep_inactive_exempt_tenants() {
+ registerTenant("exempt-trial-tenant", "trial", Duration.ofDays(40));
+ ((InMemoryFlagSource) tester.controller().flagSource()).withListFlag(PermanentFlags.EXTENDED_TRIAL_TENANTS.id(), List.of("exempt-trial-tenant"), String.class);
+ expirer.maintain();
+ assertPlan("exempt-trial-tenant", "trial");
+ }
+
+ @Test
+ public void keep_inactive_trial_tenants_with_deployments() {
+ registerTenant("with-deployments", "trial", Duration.ofDays(30));
+ registerDeployment("with-deployments", "my-app", "default", "aws-us-east-1c");
+ expirer.maintain();
+ assertPlan("with-deployments", "trial");
+ }
+
+ private void registerTenant(String tenantName, String plan, Duration timeSinceLastLogin) {
+ var name = TenantName.from(tenantName);
+ tester.createTenant(tenantName, Tenant.Type.cloud);
+ tester.serviceRegistry().billingController().setPlan(name, PlanId.from(plan), false);
+ tester.controller().tenants().updateLastLogin(name, List.of(LastLoginInfo.UserLevel.user), tester.controller().clock().instant().minus(timeSinceLastLogin));
+ }
+
+ private void registerDeployment(String tenantName, String appName, String instanceName, String regionName) {
+ var zone = ZoneApiMock.newBuilder()
+ .withSystem(tester.zoneRegistry().system())
+ .withId("prod." + regionName)
+ .build();
+ tester.zoneRegistry().setZones(zone);
+ var app = tester.createApplication(tenantName, appName, instanceName);
+ var ctx = deploymentTester.newDeploymentContext(tenantName, appName, instanceName);
+ var pkg = new ApplicationPackageBuilder()
+ .instances("default")
+ .region(regionName)
+ .trustDefaultCertificate()
+ .build();
+ ctx.submit(pkg).deploy();
+ }
+
+ private void assertPlan(String tenant, String planId) {
+ assertEquals(planId, tester.serviceRegistry().billingController().getPlan(TenantName.from(tenant)).value());
+ }
+}