aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/test
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2017-09-04 11:19:30 +0200
committerMartin Polden <mpolden@mpolden.no>2017-09-22 09:29:11 +0200
commit5238ca484594f4c0cf20305149bf99b64c37a1fa (patch)
tree8cc00888506ccb6a465a0b33a57df922bb8c0425 /controller-server/src/test
parentb77d42c9a25531982d2d77af32561850cf56ab36 (diff)
Remove self-triggering support
Diffstat (limited to 'controller-server/src/test')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java74
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java13
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java20
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java52
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java3
9 files changed, 66 insertions, 109 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
index 3ab98d31a82..7a6dce9f8fa 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
@@ -101,7 +101,7 @@ public class ControllerTest {
// staging job - succeeding
Version version1 = Version.fromString("6.1"); // Set in config server mock
Application app1 = tester.createApplication("app1", "tenant1", 1, 11L);
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
assertFalse("Revision is currently not known",
((Change.ApplicationChange)tester.controller().applications().require(app1.id()).deploying().get()).revision().isPresent());
tester.deployAndNotify(app1, applicationPackage, true, systemTest);
@@ -143,7 +143,7 @@ public class ControllerTest {
tester.clock().advance(Duration.ofSeconds(1));
// system and staging test job - succeeding
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
tester.deployAndNotify(app1, applicationPackage, true, systemTest);
assertStatus(JobStatus.initial(systemTest)
.withTriggering(version1, revision, false, tester.clock().instant())
@@ -170,7 +170,7 @@ public class ControllerTest {
.environment(Environment.prod)
.region("us-east-3")
.build();
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
try {
tester.deploy(systemTest, app1, applicationPackage);
fail("Expected exception due to unallowed production deployment removal");
@@ -210,7 +210,7 @@ public class ControllerTest {
applications.store(app1.with(app1.deploymentJobs().asSelfTriggering(false)), applications.lock(app1.id()));
// First deployment: An application change
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
tester.deployAndNotify(app1, applicationPackage, true, systemTest);
tester.deployAndNotify(app1, applicationPackage, true, stagingTest);
tester.deployAndNotify(app1, applicationPackage, true, productionUsWest1);
@@ -233,7 +233,7 @@ public class ControllerTest {
.region("us-west-1")
.region("us-east-3")
.build();
- applications.notifyJobCompletion(mockReport(app1, component, true, false));
+ applications.notifyJobCompletion(mockReport(app1, component, true));
tester.deployAndNotify(app1, applicationPackage, true, systemTest);
tester.deployAndNotify(app1, applicationPackage, true, stagingTest);
tester.deployAndNotify(app1, applicationPackage, true, productionUsWest1);
@@ -404,23 +404,6 @@ public class ControllerTest {
}
@Test
- public void selfTriggeringApplicationIsNotTriggered() {
- ControllerTester tester = new ControllerTester();
- ApplicationController applications = tester.controller().applications();
-
- // Create application and report completion from component job
- long projectId = 1;
- TenantId tenant = tester.createTenant("tenant", "domain", 1L);
- Application application = tester.createApplication(tenant, "application", "default", projectId);
- applications.notifyJobCompletion(mockReport(application, component, true, true));
-
- // Only component completion status is persisted and no further jobs are triggered
- assertEquals(1, applications.get(application.id()).get().deploymentJobs().jobStatus().size());
- assertStatus(JobStatus.initial(component).withCompletion(Optional.empty(), tester.clock().instant(), tester.controller()),
- application.id(), tester.controller());
- }
-
- @Test
public void requeueOutOfCapacityStagingJob() {
DeploymentTester tester = new DeploymentTester();
@@ -491,19 +474,18 @@ public class ControllerTest {
assertEquals(expectedStatus, existingStatus);
}
- private JobReport mockReport(Application application, JobType jobType, Optional<JobError> jobError, boolean selfTriggering) {
+ private JobReport mockReport(Application application, JobType jobType, Optional<JobError> jobError) {
return new JobReport(
application.id(),
jobType,
application.deploymentJobs().projectId().get(),
42,
- jobError,
- selfTriggering
+ jobError
);
}
- private JobReport mockReport(Application application, JobType jobType, boolean success, boolean selfTriggering) {
- return mockReport(application, jobType, JobError.from(success), selfTriggering);
+ private JobReport mockReport(Application application, JobType jobType, boolean success) {
+ return mockReport(application, jobType, JobError.from(success));
}
@Test
@@ -533,44 +515,6 @@ public class ControllerTest {
}
@Test
- public void testLegacyDeployments() {
- // Setup system
- DeploymentTester tester = new DeploymentTester();
- ApplicationController applications = tester.controller().applications();
- ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
- .environment(Environment.prod)
- .region("us-east-3")
- .build();
- Version systemVersion = tester.controller().versionStatus().systemVersion().get().versionNumber();
-
- Application app1 = tester.createApplication("application1", "tenant1", 1, 1L);
- applications.store(app1.with(app1.deploymentJobs().asSelfTriggering(true)), applications.lock(app1.id()));
-
- // Scenario: App already on 6.0, Upgrade to 6.1 (systemversion)
- Zone prodZone = new Zone(Environment.prod, RegionName.from("us-east-3"));
- Zone stagingZone = new Zone(Environment.staging, RegionName.from("us-east-3"));
- Version existingVersion = Version.fromString("6.0");
-
- // Add deployment on existing version
- legacyDeploy(tester.controller(), app1, applicationPackage, prodZone, Optional.of(existingVersion), false);
-
- // Add dev/perf deployment on old version to verify that this does not affect Initialize staging step. VESPA-8469
- Version devVersion = Version.fromString("5.0");
- legacyDeploy(tester.controller(), app1, applicationPackage, new Zone(Environment.dev, RegionName.from("us-east-1")), Optional.of(devVersion), false);
- legacyDeploy(tester.controller(), app1, applicationPackage, new Zone(Environment.perf, RegionName.from("us-east-3")), Optional.of(devVersion), false);
-
- // Initialize staging on existing version
- legacyDeploy(tester.controller(), app1, applicationPackage, stagingZone, Optional.of(systemVersion), true);
- app1 = applications.require(app1.id());
- assertEquals(existingVersion, app1.currentDeployVersion(tester.controller(), stagingZone));
-
- // Upgrade to the new version in staging
- legacyDeploy(tester.controller(), app1, applicationPackage, stagingZone, Optional.of(systemVersion), false);
- app1 = applications.require(app1.id());
- assertEquals(systemVersion, app1.currentDeployVersion(tester.controller(), stagingZone));
- }
-
- @Test
public void testDeployUntestedChangeFails() {
ControllerTester tester = new ControllerTester();
ApplicationController applications = tester.controller().applications();TenantId tenant = tester.createTenant("tenant1", "domain1", 11L);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
index 63feb01f1f2..70e370da502 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
@@ -9,7 +9,6 @@ import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.test.ManualClock;
-import com.yahoo.vespa.curator.Lock;
import com.yahoo.vespa.hosted.controller.api.Tenant;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.GitRevision;
@@ -22,6 +21,8 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.Property;
import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId;
import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId;
import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId;
+import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensDbMock;
+import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock;
import com.yahoo.vespa.hosted.controller.api.integration.chef.ChefMock;
import com.yahoo.vespa.hosted.controller.api.integration.dns.MemoryNameService;
import com.yahoo.vespa.hosted.controller.api.integration.entity.MemoryEntityService;
@@ -29,7 +30,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.github.GitHubMock;
import com.yahoo.vespa.hosted.controller.api.integration.jira.JiraMock;
import com.yahoo.vespa.hosted.controller.api.integration.routing.MemoryGlobalRoutingService;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
-import com.yahoo.vespa.hosted.controller.application.Change;
import com.yahoo.vespa.hosted.controller.cost.CostMock;
import com.yahoo.vespa.hosted.controller.cost.MockInsightBackend;
import com.yahoo.vespa.hosted.controller.integration.MockMetricsService;
@@ -40,8 +40,6 @@ import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
import com.yahoo.vespa.hosted.controller.routing.MockRoutingGenerator;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
import com.yahoo.vespa.hosted.rotation.MemoryRotationRepository;
-import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock;
-import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensDbMock;
import java.util.Optional;
@@ -109,13 +107,6 @@ public final class ControllerTester {
public GitHubMock gitHubClientMock () { return gitHubMock; }
- /** Set the application with the given id to currently be in the progress of rolling out the given change */
- public void setDeploying(ApplicationId id, Optional<Change> change) {
- try (Lock lock = controller.applications().lock(id)) {
- controller.applications().store(controller.applications().require(id).withDeploying(change), lock);
- }
- }
-
/** Creates the given tenant and application and deploys it */
public Application createAndDeploy(String tenantName, String domainName, String applicationName, Environment environment, long projectId, Long propertyId) {
return createAndDeploy(tenantName, domainName, applicationName, toZone(environment), projectId, propertyId);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java
index 3edbcea9843..dc62de5cb52 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java
@@ -194,8 +194,7 @@ public class DeploymentTester {
jobType,
application.deploymentJobs().projectId().get(),
42,
- jobError,
- false
+ jobError
);
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java
index b9e66b354de..0293ea08d65 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/MockBuildService.java
@@ -161,8 +161,7 @@ public class MockBuildService implements BuildService {
jobType,
projectId,
42,
- JobError.from(success),
- false
+ JobError.from(success)
));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java
index 779af370ff4..c869bd90924 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/PolledBuildSystemTest.java
@@ -2,12 +2,9 @@
package com.yahoo.vespa.hosted.controller.deployment;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.Environment;
-import com.yahoo.vespa.curator.mock.MockCurator;
-import com.yahoo.vespa.hosted.controller.ControllerTester;
import com.yahoo.vespa.hosted.controller.api.integration.BuildService.BuildJob;
+import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType;
-import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -37,15 +34,16 @@ public class PolledBuildSystemTest {
@Test
public void throttle_capacity_constrained_jobs() {
- ControllerTester tester = new ControllerTester();
+ DeploymentTester tester = new DeploymentTester();
BuildSystem buildSystem = new PolledBuildSystem(tester.controller(), new MockCuratorDb());
- long fooProjectId = 1;
- long barProjectId = 2;
- ApplicationId foo = tester.createAndDeploy("tenant1", "domain1", "app1",
- Environment.prod, fooProjectId).id();
- ApplicationId bar = tester.createAndDeploy("tenant2", "domain2", "app2",
- Environment.prod, barProjectId).id();
+ int fooProjectId = 1;
+ int barProjectId = 2;
+ ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .region("us-west-1")
+ .build();
+ ApplicationId foo = tester.createAndDeploy("app1", fooProjectId, applicationPackage).id();
+ ApplicationId bar = tester.createAndDeploy("app2", barProjectId, applicationPackage).id();
// Trigger jobs in capacity constrained environment
buildSystem.addJob(foo, jobType, false);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java
index 4c53a6d37e4..5b758957571 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java
@@ -1,16 +1,22 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.maintenance;
-import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.Zone;
-import com.yahoo.vespa.hosted.controller.ControllerTester;
+import com.yahoo.vespa.hosted.controller.Application;
+import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
+import com.yahoo.vespa.hosted.controller.application.Deployment;
+import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester;
import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
+import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.time.Duration;
+import java.util.List;
+import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
@@ -19,28 +25,50 @@ import static org.junit.Assert.assertEquals;
*/
public class DeploymentExpirerTest {
+ private DeploymentTester tester;
+
+ @Before
+ public void before() {
+ tester = new DeploymentTester();
+ }
+
@Test
public void testDeploymentExpiry() throws IOException, InterruptedException {
- ControllerTester tester = new ControllerTester();
- tester.getZoneRegistryMock().setDeploymentTimeToLive(new Zone(Environment.dev, RegionName.from("us-east-1")), Duration.ofDays(14));
+ tester.controllerTester().getZoneRegistryMock().setDeploymentTimeToLive(new Zone(Environment.dev, RegionName.from("us-east-1")), Duration.ofDays(14));
DeploymentExpirer expirer = new DeploymentExpirer(tester.controller(), Duration.ofDays(10),
tester.clock(), new JobControl(new MockCuratorDb()));
- ApplicationId devApp = tester.createAndDeploy("tenant1", "domain1", "app1", Environment.dev, 123).id();
- ApplicationId prodApp = tester.createAndDeploy("tenant2", "domain2", "app2", Environment.prod, 456).id();
+ Application devApp = tester.createApplication("app1", "tenant1", 123L, 1L);
+ Application prodApp = tester.createApplication("app2", "tenant2", 456L, 2L);
+
+ // Deploy dev
+ tester.controllerTester().deploy(devApp, tester.controllerTester().toZone(Environment.dev));
- assertEquals(1, tester.controller().applications().get(devApp).get().deployments().size());
- assertEquals(1, tester.controller().applications().get(prodApp).get().deployments().size());
+ // Deploy prod
+ ApplicationPackage prodAppPackage = new ApplicationPackageBuilder()
+ .region("us-west-1")
+ .build();
+ tester.deployCompletely(prodApp, prodAppPackage);
+
+ assertEquals(1, permanentDeployments(devApp).size());
+ assertEquals(1, permanentDeployments(prodApp).size());
// Not expired at first
expirer.maintain();
- assertEquals(1, tester.controller().applications().get(devApp).get().deployments().size());
- assertEquals(1, tester.controller().applications().get(prodApp).get().deployments().size());
+ assertEquals(1, permanentDeployments(devApp).size());
+ assertEquals(1, permanentDeployments(prodApp).size());
// The dev application is removed
tester.clock().advance(Duration.ofDays(15));
expirer.maintain();
- assertEquals(0, tester.controller().applications().get(devApp).get().deployments().size());
- assertEquals(1, tester.controller().applications().get(prodApp).get().deployments().size());
+ assertEquals(0, permanentDeployments(devApp).size());
+ assertEquals(1, permanentDeployments(prodApp).size());
+ }
+
+ private List<Deployment> permanentDeployments(Application application) {
+ return tester.controller().applications().get(application.id()).get().deployments().values().stream()
+ .filter(deployment -> deployment.zone().environment() != Environment.test &&
+ deployment.zone().environment() != Environment.staging)
+ .collect(Collectors.toList());
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
index 1aaf41350f2..8babd181d36 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
@@ -67,7 +67,7 @@ public class ApplicationSerializerTest {
.withTriggering(Version.fromString("5.6.6"), Optional.empty(), true, Instant.ofEpochMilli(5))
.withCompletion(Optional.of(JobError.unknown), Instant.ofEpochMilli(6), tester.controller()));
- DeploymentJobs deploymentJobs = new DeploymentJobs(projectId, statusList, Optional.empty(), false);
+ DeploymentJobs deploymentJobs = new DeploymentJobs(projectId, statusList, Optional.empty());
Application original = new Application(ApplicationId.from("t1", "a1", "i1"),
deploymentSpec,
@@ -98,7 +98,6 @@ public class ApplicationSerializerTest {
assertEquals( original.deploymentJobs().jobStatus().get(DeploymentJobs.JobType.stagingTest),
serialized.deploymentJobs().jobStatus().get(DeploymentJobs.JobType.stagingTest));
assertEquals(original.deploymentJobs().failingSince(), serialized.deploymentJobs().failingSince());
- assertEquals(original.deploymentJobs().isSelfTriggering(), serialized.deploymentJobs().isSelfTriggering());
assertEquals(original.hasOutstandingChange(), serialized.hasOutstandingChange());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
index ef606a0eced..ed7378ac6b5 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
@@ -89,8 +89,8 @@ public class ContainerControllerTester {
public void notifyJobCompletion(ApplicationId applicationId, long projectId, boolean success, DeploymentJobs.JobType job) {
controller().applications().notifyJobCompletion(new DeploymentJobs.JobReport(applicationId, job, projectId,
42,
- success ? Optional.empty() : Optional.of(DeploymentJobs.JobError.unknown),
- false));
+ success ? Optional.empty() : Optional.of(DeploymentJobs.JobError.unknown)
+ ));
}
public AthensDomain addTenantAthensDomain(String domainName, String userName) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
index a2fb5f38457..1de9603bde0 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
@@ -274,8 +274,7 @@ public class VersionStatusTest {
jobType,
application.deploymentJobs().projectId().get(),
42,
- JobError.from(success),
- false
+ JobError.from(success)
);
}