diff options
author | Martin Polden <mpolden@mpolden.no> | 2017-09-04 11:19:30 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2017-09-22 09:29:11 +0200 |
commit | 5238ca484594f4c0cf20305149bf99b64c37a1fa (patch) | |
tree | 8cc00888506ccb6a465a0b33a57df922bb8c0425 /controller-server/src/test | |
parent | b77d42c9a25531982d2d77af32561850cf56ab36 (diff) |
Remove self-triggering support
Diffstat (limited to 'controller-server/src/test')
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) ); } |