diff options
Diffstat (limited to 'controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance')
6 files changed, 102 insertions, 79 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporterTest.java index e57edcf6da0..155c9f14f77 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporterTest.java @@ -78,14 +78,14 @@ public class DeploymentIssueReporterTest { // NOTE: All maintenance should be idempotent within a small enough time interval, so maintain is called twice in succession throughout. // apps 1 and 3 have one failure each. - tester.notifyJobCompletion(component, app1, true); + tester.jobCompletion(component).application(app1).uploadArtifact(applicationPackage).submit(); tester.deployAndNotify(app1, applicationPackage, true, systemTest); tester.deployAndNotify(app1, applicationPackage, false, stagingTest); // app2 is successful, but will fail later. tester.deployCompletely(app2, canaryPackage); - tester.notifyJobCompletion(component, app3, true); + tester.jobCompletion(component).application(app3).uploadArtifact(applicationPackage).submit(); tester.deployAndNotify(app3, applicationPackage, true, systemTest); tester.deployAndNotify(app3, applicationPackage, true, stagingTest); tester.deployAndNotify(app3, applicationPackage, false, productionCorpUsEast1); @@ -134,7 +134,7 @@ public class DeploymentIssueReporterTest { // app3 now has a new failure past max failure age; see that a new issue is filed. - tester.notifyJobCompletion(component, app3, true); + tester.jobCompletion(component).application(app3).submit(); tester.deployAndNotify(app3, applicationPackage, false, systemTest); tester.clock().advance(maxInactivity.plus(maxFailureAge)); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainerTest.java index 8aa92ec5fce..5ed4c3a186e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainerTest.java @@ -4,11 +4,11 @@ package com.yahoo.vespa.hosted.controller.maintenance; import com.yahoo.config.application.api.ValidationId; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; -import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId; -import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.athenz.api.NToken; +import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordName; +import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; @@ -74,7 +74,8 @@ public class DnsMaintainerTest { .environment(Environment.prod) .allow(ValidationId.deploymentRemoval) .build(); - tester.notifyJobCompletion(component, application, true); + tester.jobCompletion(component).application(application).uploadArtifact(applicationPackage).submit(); + tester.deployAndNotify(application, applicationPackage, true, systemTest); tester.applications().deactivate(application, ZoneId.from(Environment.test, RegionName.from("us-east-1"))); tester.applications().deactivate(application, ZoneId.from(Environment.staging, RegionName.from("us-east-3"))); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java index 11e85c6be9f..6b8901ace88 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java @@ -18,6 +18,7 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.time.Duration; +import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.component; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -39,7 +40,7 @@ public class FailureRedeployerTest { tester.updateVersionStatus(version); Application app = tester.createApplication("app1", "tenant1", 1, 11L); - tester.notifyJobCompletion(DeploymentJobs.JobType.component, app, true); + tester.jobCompletion(component).application(app).uploadArtifact(applicationPackage).submit(); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.systemTest); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.stagingTest); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3); @@ -82,7 +83,7 @@ public class FailureRedeployerTest { tester.deployAndNotify(app, applicationPackage, false, DeploymentJobs.JobType.productionUsEast3); tester.buildSystem().takeJobsToRun(); tester.clock().advance(Duration.ofMinutes(10)); - tester.notifyJobCompletion(DeploymentJobs.JobType.productionUsEast3, app, false); + tester.jobCompletion(DeploymentJobs.JobType.productionUsEast3).application(app).unsuccessful().submit(); assertTrue("Retries exhausted", tester.buildSystem().jobs().isEmpty()); assertTrue("Failure is recorded", tester.application(app.id()).deploymentJobs().hasFailures()); @@ -108,7 +109,7 @@ public class FailureRedeployerTest { .build(); Application app = tester.createApplication("app1", "tenant1", 1, 11L); - tester.notifyJobCompletion(DeploymentJobs.JobType.component, app, true); + tester.jobCompletion(component).application(app).uploadArtifact(applicationPackage).submit(); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.systemTest); // staging-test starts, but does not complete @@ -123,7 +124,7 @@ public class FailureRedeployerTest { // Deployment completes tester.deploy(DeploymentJobs.JobType.stagingTest, app, applicationPackage, true); - tester.notifyJobCompletion(DeploymentJobs.JobType.stagingTest, app, true); + tester.jobCompletion(DeploymentJobs.JobType.stagingTest).application(app).submit(); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3); assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty()); } @@ -140,7 +141,7 @@ public class FailureRedeployerTest { tester.updateVersionStatus(version); Application app = tester.createApplication("app1", "tenant1", 1, 11L); - tester.notifyJobCompletion(DeploymentJobs.JobType.component, app, true); + tester.jobCompletion(component).application(app).uploadArtifact(applicationPackage).submit(); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.systemTest); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.stagingTest); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3); @@ -156,7 +157,7 @@ public class FailureRedeployerTest { tester.deployAndNotify(app, applicationPackage, false, DeploymentJobs.JobType.systemTest); tester.buildSystem().takeJobsToRun(); tester.clock().advance(Duration.ofMinutes(10)); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, app, false); + tester.jobCompletion(DeploymentJobs.JobType.systemTest).application(app).unsuccessful().submit(); assertTrue("Retries exhausted", tester.buildSystem().jobs().isEmpty()); // Another version is released @@ -207,12 +208,12 @@ public class FailureRedeployerTest { tester.deploy(DeploymentJobs.JobType.systemTest, application, applicationPackage); tester.buildSystem().takeJobsToRun(); tester.clock().advance(Duration.ofMinutes(10)); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, application, true); + tester.jobCompletion(DeploymentJobs.JobType.systemTest).application(application).submit(); tester.deploy(DeploymentJobs.JobType.stagingTest, application, applicationPackage); tester.buildSystem().takeJobsToRun(); tester.clock().advance(Duration.ofMinutes(10)); - tester.notifyJobCompletion(DeploymentJobs.JobType.stagingTest, application, true); + tester.jobCompletion(DeploymentJobs.JobType.stagingTest).application(application).submit(); // Production job starts, but does not complete assertEquals(1, tester.buildSystem().jobs().size()); @@ -224,12 +225,12 @@ public class FailureRedeployerTest { assertTrue("No jobs retried", tester.buildSystem().jobs().isEmpty()); // Deployment notifies completeness but has not actually made a deployment - tester.notifyJobCompletion(DeploymentJobs.JobType.productionCdUsCentral1, application, true); + tester.jobCompletion(DeploymentJobs.JobType.productionCdUsCentral1).application(application).submit(); assertTrue("Change not really deployed", tester.application(application.id()).change().isPresent()); // Deployment actually deploys and notifies completeness tester.deploy(DeploymentJobs.JobType.productionCdUsCentral1, application, applicationPackage); - tester.notifyJobCompletion(DeploymentJobs.JobType.productionCdUsCentral1, application, true); + tester.jobCompletion(DeploymentJobs.JobType.productionCdUsCentral1).application(application).submit(); assertFalse("Change not really deployed", tester.application(application.id()).change().isPresent()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java index a7458f9f8ed..7b0ca7cb618 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java @@ -85,7 +85,7 @@ public class MetricsReporterTest { assertEquals(0.0, metricsMock.getMetric(MetricsReporter.deploymentFailMetric)); // 1 app fails system-test - tester.notifyJobCompletion(component, app4, true); + tester.jobCompletion(component).application(app4).submit(); tester.deployAndNotify(app4, applicationPackage, false, systemTest); metricsReporter.maintain(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java index 4bed276fcac..f6a2177bab8 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java @@ -2,18 +2,20 @@ package com.yahoo.vespa.hosted.controller.maintenance; import com.yahoo.component.Version; +import com.yahoo.config.provision.Environment; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.api.integration.BuildService; +import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.Change; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; import com.yahoo.vespa.hosted.controller.application.SourceRevision; +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.Test; import java.time.Duration; import java.util.List; -import java.util.Optional; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -30,6 +32,11 @@ public class OutstandingChangeDeployerTest { tester.configServer().setDefaultVersion(new Version(6, 1)); OutstandingChangeDeployer deployer = new OutstandingChangeDeployer(tester.controller(), Duration.ofMinutes(10), new JobControl(new MockCuratorDb())); + ApplicationPackage applicationPackage = new ApplicationPackageBuilder() + .environment(Environment.prod) + .region("us-west-1") + .build(); + tester.createAndDeploy("app1", 11, "default"); tester.createAndDeploy("app2", 22, "default"); @@ -38,14 +45,17 @@ public class OutstandingChangeDeployerTest { assertEquals(Change.of(version), tester.application("app1").change()); assertFalse(tester.application("app1").outstandingChange().isPresent()); - tester.notifyJobCompletion(DeploymentJobs.JobType.component, tester.application("app1"), - Optional.empty(), Optional.of(new SourceRevision("repo", "master", - "cafed00d")), - 42); + + tester.jobCompletion(DeploymentJobs.JobType.component) + .application(tester.application("app1")) + .sourceRevision(new SourceRevision("repository1","master", "cafed00d")) + .buildNumber(43) + .uploadArtifact(applicationPackage) + .submit(); Application app = tester.application("app1"); assertTrue(app.outstandingChange().isPresent()); - assertEquals("1.0.42-cafed00d", app.outstandingChange().application().get().id()); + assertEquals("1.0.43-cafed00d", app.outstandingChange().application().get().id()); assertEquals(1, tester.buildSystem().jobs().size()); deployer.maintain(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java index ccc029a9654..7c4dd58fa33 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java @@ -19,6 +19,10 @@ import org.junit.Test; import java.time.Duration; import java.time.Instant; +import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.component; +import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.productionUsWest1; +import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.stagingTest; +import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.systemTest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -105,11 +109,10 @@ public class UpgraderTest { assertEquals("Version broken, but Canaries should keep trying", 2, tester.buildSystem().jobs().size()); // Exhaust canary retries. - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, canary1, false); + tester.jobCompletion(systemTest).application(canary1).unsuccessful().submit(); tester.clock().advance(Duration.ofHours(1)); tester.deployAndNotify(canary0, DeploymentTester.applicationPackage("canary"), false, DeploymentJobs.JobType.stagingTest); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, canary1, false); - //tester.deployAndNotify(canary1, DeploymentTester.applicationPackage("canary"), false, DeploymentJobs.JobType.stagingTest); + tester.jobCompletion(systemTest).application(canary1).unsuccessful().submit(); // --- A new version is released - which repairs the Canary app and fails a default version = Version.fromString("5.3"); @@ -145,7 +148,7 @@ public class UpgraderTest { // Finish previous run, with exhausted retry. tester.clock().advance(Duration.ofHours(1)); - tester.notifyJobCompletion(DeploymentJobs.JobType.stagingTest, default0, false); + tester.jobCompletion(stagingTest).application(default0).unsuccessful().submit(); // --- Failing application is repaired by changing the application, causing confidence to move above 'high' threshold // Deploy application change @@ -196,7 +199,12 @@ public class UpgraderTest { assertEquals(version54, tester.application(default4.id()).change().platform().get()); tester.completeUpgrade(default1, version54, "default"); tester.completeUpgrade(default2, version54, "default"); + tester.completeUpgradeWithError(default3, version54, "default", DeploymentJobs.JobType.stagingTest); + // Exhaust immediate retries for upgrade + tester.clock().advance(Duration.ofHours(1)); + tester.jobCompletion(stagingTest).application(default3).unsuccessful().submit(); + tester.completeUpgradeWithError(default4, version54, "default", DeploymentJobs.JobType.productionUsWest1); // State: Default applications started upgrading to 5.5 tester.upgrader().maintain(); @@ -209,7 +217,7 @@ public class UpgraderTest { // Finish running job, without retry. tester.clock().advance(Duration.ofHours(1)); - tester.notifyJobCompletion(DeploymentJobs.JobType.productionUsWest1, default3, false); + tester.jobCompletion(DeploymentJobs.JobType.productionUsWest1).application(default3).unsuccessful().submit(); tester.upgrader().maintain(); assertEquals("Upgrade of defaults are scheduled on 5.4 instead, since 5.5 broken: " + @@ -270,10 +278,10 @@ public class UpgraderTest { assertEquals("Canaries done: Should upgrade defaults", 10, tester.buildSystem().jobs().size()); tester.completeUpgrade(default0, version, "default"); - tester.completeUpgradeWithError(default1, version, "default", DeploymentJobs.JobType.systemTest); - tester.completeUpgradeWithError(default2, version, "default", DeploymentJobs.JobType.systemTest); - tester.completeUpgradeWithError(default3, version, "default", DeploymentJobs.JobType.systemTest); - tester.completeUpgradeWithError(default4, version, "default", DeploymentJobs.JobType.systemTest); + tester.completeUpgradeWithError(default1, version, "default", systemTest); + tester.completeUpgradeWithError(default2, version, "default", systemTest); + tester.completeUpgradeWithError(default3, version, "default", systemTest); + tester.completeUpgradeWithError(default4, version, "default", systemTest); // > 40% and at least 4 failed - version is broken tester.updateVersionStatus(version); @@ -294,8 +302,8 @@ public class UpgraderTest { tester.updateVersionStatus(version); Application app = tester.createApplication("app1", "tenant1", 1, 11L); - tester.notifyJobCompletion(DeploymentJobs.JobType.component, app, true); - tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.systemTest); + tester.jobCompletion(component).application(app).uploadArtifact(applicationPackage).submit(); + tester.deployAndNotify(app, applicationPackage, true, systemTest); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.stagingTest); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3); @@ -310,13 +318,13 @@ public class UpgraderTest { tester.upgrader().maintain(); // system-test completes successfully - tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.systemTest); + tester.deployAndNotify(app, applicationPackage, true, systemTest); // staging-test fails multiple times, exhausts retries and failure is recorded tester.deployAndNotify(app, applicationPackage, false, DeploymentJobs.JobType.stagingTest); tester.buildSystem().takeJobsToRun(); tester.clock().advance(Duration.ofMinutes(10)); - tester.notifyJobCompletion(DeploymentJobs.JobType.stagingTest, app, false); + tester.jobCompletion(stagingTest).application(app).unsuccessful().submit(); assertTrue("Retries exhausted", tester.buildSystem().jobs().isEmpty()); assertTrue("Failure is recorded", tester.application(app.id()).deploymentJobs().hasFailures()); assertTrue("Application has pending change", tester.application(app.id()).change().isPresent()); @@ -369,17 +377,17 @@ public class UpgraderTest { assertEquals("Upgrade scheduled for remaining apps", 5, tester.buildSystem().jobs().size()); // 4/5 applications fail and lowers confidence - tester.completeUpgradeWithError(default0, version, "default", DeploymentJobs.JobType.systemTest); - tester.completeUpgradeWithError(default1, version, "default", DeploymentJobs.JobType.systemTest); - tester.completeUpgradeWithError(default2, version, "default", DeploymentJobs.JobType.systemTest); - tester.completeUpgradeWithError(default3, version, "default", DeploymentJobs.JobType.systemTest); + tester.completeUpgradeWithError(default0, version, "default", systemTest); + tester.completeUpgradeWithError(default1, version, "default", systemTest); + tester.completeUpgradeWithError(default2, version, "default", systemTest); + tester.completeUpgradeWithError(default3, version, "default", systemTest); tester.updateVersionStatus(version); assertEquals(VespaVersion.Confidence.broken, tester.controller().versionStatus().systemVersion().get().confidence()); tester.upgrader().maintain(); // 5th app passes system-test, but does not trigger next job as upgrade is cancelled assertFalse("No change present", tester.applications().require(default4.id()).change().isPresent()); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, default4, true); + tester.jobCompletion(systemTest).application(default4).submit(); assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty()); } @@ -457,14 +465,14 @@ public class UpgraderTest { tester.deploymentTrigger().triggerReadyJobs(); assertEquals("Testing of 5.1 for 5 applications is triggered", 5, tester.buildSystem().jobs().size()); - assertEquals(DeploymentJobs.JobType.systemTest.jobName(), tester.buildSystem().jobs().get(0).jobName()); - assertEquals(DeploymentJobs.JobType.systemTest.jobName(), tester.buildSystem().jobs().get(1).jobName()); - assertEquals(DeploymentJobs.JobType.systemTest.jobName(), tester.buildSystem().jobs().get(2).jobName()); - assertEquals(DeploymentJobs.JobType.systemTest.jobName(), tester.buildSystem().jobs().get(3).jobName()); - assertEquals(DeploymentJobs.JobType.systemTest.jobName(), tester.buildSystem().jobs().get(4).jobName()); + assertEquals(systemTest.jobName(), tester.buildSystem().jobs().get(0).jobName()); + assertEquals(systemTest.jobName(), tester.buildSystem().jobs().get(1).jobName()); + assertEquals(systemTest.jobName(), tester.buildSystem().jobs().get(2).jobName()); + assertEquals(systemTest.jobName(), tester.buildSystem().jobs().get(3).jobName()); + assertEquals(systemTest.jobName(), tester.buildSystem().jobs().get(4).jobName()); // The tester code for completing upgrades does not handle this scenario, so we trigger each step manually (for one app) - tester.deployAndNotify(tester.application("default0"), "default", true, DeploymentJobs.JobType.systemTest); + tester.deployAndNotify(tester.application("default0"), "default", true, systemTest); tester.deployAndNotify(tester.application("default0"), "default", true, DeploymentJobs.JobType.stagingTest); // prod zone on 5.2 (usWest1) is skipped, but we still trigger the next zone from triggerReadyJobs: tester.clock().advance(Duration.ofHours(13)); // Currently we don't cancel running jobs, so this is necessary to allow a new triggering below @@ -484,14 +492,17 @@ public class UpgraderTest { Version version = Version.fromString("5.0"); tester.updateVersionStatus(version); + ApplicationPackage canaryPolicy = DeploymentTester.applicationPackage("canary"); + ApplicationPackage defaultPolicy = DeploymentTester.applicationPackage("default"); + // Setup applications - Application canary0 = tester.createAndDeploy("canary0", 1, "canary"); - Application canary1 = tester.createAndDeploy("canary1", 2, "canary"); - Application default0 = tester.createAndDeploy("default0", 3, "default"); - Application default1 = tester.createAndDeploy("default1", 4, "default"); - Application default2 = tester.createAndDeploy("default2", 5, "default"); - Application default3 = tester.createAndDeploy("default3", 6, "default"); - Application default4 = tester.createAndDeploy("default4", 7, "default"); + Application canary0 = tester.createAndDeploy("canary0", 1, canaryPolicy); + Application canary1 = tester.createAndDeploy("canary1", 2, canaryPolicy); + Application default0 = tester.createAndDeploy("default0", 3, defaultPolicy); + Application default1 = tester.createAndDeploy("default1", 4, defaultPolicy); + Application default2 = tester.createAndDeploy("default2", 5, defaultPolicy); + Application default3 = tester.createAndDeploy("default3", 6, defaultPolicy); + Application default4 = tester.createAndDeploy("default4", 7, defaultPolicy); // New version is released version = Version.fromString("5.1"); @@ -517,12 +528,12 @@ public class UpgraderTest { // Multiple application changes are triggered and fail, but does not affect version confidence as upgrade has // completed successfully - tester.notifyJobCompletion(DeploymentJobs.JobType.component, default0, false); - tester.notifyJobCompletion(DeploymentJobs.JobType.component, default1, false); - tester.notifyJobCompletion(DeploymentJobs.JobType.component, default2, true); - tester.notifyJobCompletion(DeploymentJobs.JobType.component, default3, true); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, default2, false); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, default3, false); + tester.jobCompletion(component).application(default0).buildNumber(43).uploadArtifact(canaryPolicy).unsuccessful().submit(); + tester.jobCompletion(component).application(default1).buildNumber(43).uploadArtifact(canaryPolicy).unsuccessful().submit(); + tester.jobCompletion(component).application(default2).buildNumber(43).uploadArtifact(defaultPolicy).submit(); + tester.jobCompletion(component).application(default3).buildNumber(43).uploadArtifact(defaultPolicy).submit(); + tester.jobCompletion(component).application(default2).buildNumber(44).uploadArtifact(canaryPolicy).unsuccessful().submit(); + tester.jobCompletion(component).application(default3).buildNumber(44).uploadArtifact(canaryPolicy).unsuccessful().submit(); tester.updateVersionStatus(version); assertEquals(VespaVersion.Confidence.normal, tester.controller().versionStatus().systemVersion().get().confidence()); } @@ -560,7 +571,7 @@ public class UpgraderTest { tester.clock().advance(Duration.ofHours(1)); tester.upgrader().maintain(); assertFalse("Job is scheduled", tester.buildSystem().jobs().isEmpty()); - tester.completeUpgrade(app, version, "canary"); + tester.completeUpgrade(app, version, applicationPackage); assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty()); } @@ -592,10 +603,10 @@ public class UpgraderTest { // Application upgrade starts tester.upgrader().maintain(); - tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.systemTest); + tester.deployAndNotify(app, applicationPackage, true, systemTest); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.stagingTest); clock.advance(Duration.ofHours(1)); // Entering block window after prod job is triggered - tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsWest1); + tester.deployAndNotify(app, applicationPackage, true, productionUsWest1); assertTrue(tester.buildSystem().jobs().isEmpty()); // Next job not triggered due to being in the block window // One hour passes, time is 19:00, still no upgrade @@ -647,9 +658,9 @@ public class UpgraderTest { // Application upgrade starts tester.upgrader().maintain(); - tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.systemTest); + tester.deployAndNotify(app, applicationPackage, true, systemTest); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.stagingTest); - tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsWest1); + tester.deployAndNotify(app, applicationPackage, true, productionUsWest1); clock.advance(Duration.ofHours(1)); // Entering block window after prod job is triggered tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsCentral1); assertTrue(tester.buildSystem().jobs().isEmpty()); // Next job not triggered due to being in the block window @@ -669,9 +680,9 @@ public class UpgraderTest { readyJobsTrigger.maintain(); // We proceed with the new version in the expected order, not starting with the previously blocked version: // Test jobs are run with the new version, but not production as we are in the block window - tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.systemTest); + tester.deployAndNotify(app, applicationPackage, true, systemTest); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.stagingTest); - tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsWest1); + tester.deployAndNotify(app, applicationPackage, true, productionUsWest1); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsCentral1); tester.deployAndNotify(app, applicationPackage, true, DeploymentJobs.JobType.productionUsEast3); assertTrue("All jobs consumed", tester.buildSystem().jobs().isEmpty()); @@ -727,10 +738,10 @@ public class UpgraderTest { assertEquals("Upgrade scheduled for remaining apps", 5, tester.buildSystem().jobs().size()); // 4/5 applications fail, confidence is lowered and upgrade is cancelled - tester.completeUpgradeWithError(default0, version, defaultApplicationPackage, DeploymentJobs.JobType.systemTest); - tester.completeUpgradeWithError(default1, version, defaultApplicationPackage, DeploymentJobs.JobType.systemTest); - tester.completeUpgradeWithError(default2, version, defaultApplicationPackage, DeploymentJobs.JobType.systemTest); - tester.completeUpgradeWithError(default3, version, defaultApplicationPackage, DeploymentJobs.JobType.systemTest); + tester.completeUpgradeWithError(default0, version, defaultApplicationPackage, systemTest); + tester.completeUpgradeWithError(default1, version, defaultApplicationPackage, systemTest); + tester.completeUpgradeWithError(default2, version, defaultApplicationPackage, systemTest); + tester.completeUpgradeWithError(default3, version, defaultApplicationPackage, systemTest); tester.updateVersionStatus(version); assertEquals(VespaVersion.Confidence.broken, tester.controller().versionStatus().systemVersion().get().confidence()); @@ -738,10 +749,10 @@ public class UpgraderTest { // Exhaust retries and finish runs tester.clock().advance(Duration.ofHours(1)); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, default0, false); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, default1, false); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, default2, false); - tester.notifyJobCompletion(DeploymentJobs.JobType.systemTest, default3, false); + tester.jobCompletion(systemTest).application(default0).unsuccessful().submit(); + tester.jobCompletion(systemTest).application(default1).unsuccessful().submit(); + tester.jobCompletion(systemTest).application(default2).unsuccessful().submit(); + tester.jobCompletion(systemTest).application(default3).unsuccessful().submit(); // 5th app never reports back and has a dead job, but no ongoing change Application deadLocked = tester.applications().require(default4.id()); @@ -755,10 +766,10 @@ public class UpgraderTest { .environment(Environment.prod) .region("us-west-1") .build(); - tester.deployCompletely(default0, defaultApplicationPackageV2); - tester.deployCompletely(default1, defaultApplicationPackageV2); - tester.deployCompletely(default2, defaultApplicationPackageV2); - tester.deployCompletely(default3, defaultApplicationPackageV2); + tester.deployCompletely(default0, defaultApplicationPackageV2, 43); + tester.deployCompletely(default1, defaultApplicationPackageV2, 43); + tester.deployCompletely(default2, defaultApplicationPackageV2, 43); + tester.deployCompletely(default3, defaultApplicationPackageV2, 43); tester.updateVersionStatus(version); assertEquals(VespaVersion.Confidence.normal, tester.controller().versionStatus().systemVersion().get().confidence()); |