summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2018-10-31 16:01:29 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2018-10-31 16:01:29 +0100
commit62b5a975ba24347723c8d7e70f1ca34b6a7fc165 (patch)
treea949222d9932ed552eef75a7b118ef27a1ac942d /controller-server
parent792680b72dd63de4619e13abe70935c1bb695e69 (diff)
Update tests
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java39
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java7
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java22
3 files changed, 50 insertions, 18 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java
index 70a47934262..9dd4c25050f 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java
@@ -447,17 +447,22 @@ public class DeploymentTriggerTest {
.sourceRevision(new SourceRevision("repository1", "master", "cafed00d"))
.uploadArtifact(changedApplication)
.submit();
- assertTrue(tester.applications().require(app.id()).change().isPresent());
+ assertTrue(tester.applications().require(app.id()).outstandingChange().isPresent());
tester.deployAndNotify(app, changedApplication, true, systemTest);
tester.deployAndNotify(app, changedApplication, true, stagingTest);
+ tester.outstandingChangeDeployer().run();
+ assertTrue(tester.applications().require(app.id()).outstandingChange().isPresent());
+
readyJobsTrigger.run();
assertEquals(emptyList(), tester.buildService().jobs());
tester.clock().advance(Duration.ofHours(2)); // ---------------- Exit block window: 20:30
+
+ tester.outstandingChangeDeployer().run();
+ assertFalse(tester.applications().require(app.id()).outstandingChange().isPresent());
+
tester.deploymentTrigger().triggerReadyJobs(); // Schedules staging test for the blocked production job(s)
- // TODO jvenstad: Required now because changes during block window used empty source -- improvement to use first untested production job with change to test :)
- tester.deployAndNotify(app, changedApplication, true, stagingTest);
assertEquals(singletonList(buildJob(app, productionUsWest1)), tester.buildService().jobs());
}
@@ -466,7 +471,7 @@ public class DeploymentTriggerTest {
ManualClock clock = new ManualClock(Instant.parse("2017-09-26T17:30:00.00Z")); // Tuesday, 17:30
DeploymentTester tester = new DeploymentTester(new ControllerTester(clock));
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
- .blockChange(false, true, "tue", "18", "UTC")
+ .blockChange(true, true, "tue", "18", "UTC")
.region("us-west-1")
.region("us-east-3")
.build();
@@ -483,25 +488,33 @@ public class DeploymentTriggerTest {
tester.deployAndNotify(application, applicationPackage, true, stagingTest);
tester.deployAndNotify(application, applicationPackage, true, systemTest);
- // Entering block window will keep the outstanding change in place, but a new component run triggers a new change.
- // This component completion should remove the older outstanding change, to avoid a later downgrade.
+ // Entering block window will keep the outstanding change in place.
clock.advance(Duration.ofHours(1));
+ tester.outstandingChangeDeployer().run();
tester.deployAndNotify(application, applicationPackage, true, productionUsWest1);
assertEquals(BuildJob.defaultBuildNumber, tester.application(application.id()).deploymentJobs().jobStatus()
.get(productionUsWest1).lastSuccess().get().application().buildNumber().getAsLong());
assertEquals((BuildJob.defaultBuildNumber + 1), tester.application(application.id()).outstandingChange().application().get().buildNumber().getAsLong());
tester.readyJobTrigger().maintain();
- // Platform upgrade keeps rolling, since it has already deployed in a production zone.
- assertEquals(1, tester.buildService().jobs().size());
+ // Platform upgrade keeps rolling, since it has already deployed in a production zone, and tests for the new revision have also started.
+ assertEquals(3, tester.buildService().jobs().size());
tester.deployAndNotify(application, applicationPackage, true, productionUsEast3);
- assertEquals(emptyList(), tester.buildService().jobs());
+ assertEquals(2, tester.buildService().jobs().size());
+ // Upgrade is done, and oustanding change rolls out when block window ends.
+ assertEquals(Change.empty(), tester.application(application.id()).change());
+ assertFalse(tester.application(application.id()).change().isPresent());
+ assertTrue(tester.application(application.id()).outstandingChange().isPresent());
- // New component triggers a full deployment of new application version, but only after the upgrade is done.
- tester.jobCompletion(component).application(application).nextBuildNumber().nextBuildNumber().uploadArtifact(applicationPackage).submit();
tester.deployAndNotify(application, applicationPackage, true, stagingTest);
tester.deployAndNotify(application, applicationPackage, true, systemTest);
+ clock.advance(Duration.ofHours(1));
+ tester.outstandingChangeDeployer().run();
+ assertTrue(tester.application(application.id()).change().isPresent());
+ assertFalse(tester.application(application.id()).outstandingChange().isPresent());
+
+ tester.readyJobTrigger().run();
tester.deployAndNotify(application, applicationPackage, true, productionUsWest1);
tester.deployAndNotify(application, applicationPackage, true, productionUsEast3);
@@ -622,6 +635,10 @@ public class DeploymentTriggerTest {
assertEquals(triggered, app1.get().deploymentJobs().jobStatus().get(productionUsCentral1).lastTriggered().get().at());
tester.deployAndNotify(application1, applicationPackage, false, productionEuWest1);
+ //Eagerly triggered system and staging tests complete.
+ tester.deployAndNotify(application1, applicationPackage, true, systemTest);
+ tester.deployAndNotify(application1, applicationPackage, true, stagingTest);
+
// Roll out a new application version, which gives a dual change -- this should trigger us-central-1, but only as long as it hasn't yet deployed there.
tester.jobCompletion(component).application(application1).nextBuildNumber().uploadArtifact(applicationPackage).submit();
tester.deployAndNotify(application1, applicationPackage, false, productionEuWest1);
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 4483122d554..bc22df7bf46 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
@@ -66,6 +66,8 @@ public class OutstandingChangeDeployerTest {
tester.deployAndNotify(app, applicationPackage, true, JobType.systemTest);
tester.deployAndNotify(app, applicationPackage, true, JobType.stagingTest);
tester.deployAndNotify(app, applicationPackage, true, JobType.productionUsWest1);
+ tester.deployAndNotify(app, applicationPackage, true, JobType.systemTest);
+ tester.deployAndNotify(app, applicationPackage, true, JobType.stagingTest);
assertEquals("Upgrade done", 0, tester.buildService().jobs().size());
deployer.maintain();
@@ -73,10 +75,9 @@ public class OutstandingChangeDeployerTest {
app = tester.application("app1");
assertEquals("1.0.43-cafed00d", app.change().application().get().id());
List<BuildService.BuildJob> jobs = tester.buildService().jobs();
- assertEquals(2, jobs.size());
+ assertEquals(1, jobs.size());
+ assertEquals(JobType.productionUsWest1.jobName(), jobs.get(0).jobName());
assertEquals(11, jobs.get(0).projectId());
- tester.assertRunning(JobType.systemTest, app.id());
- tester.assertRunning(JobType.stagingTest, app.id());
assertFalse(tester.application("app1").outstandingChange().isPresent());
}
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 04c0e7e9a6f..6d4f58531ae 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
@@ -1042,23 +1042,37 @@ public class UpgraderTest {
tester.jobCompletion(component).application(app).nextBuildNumber().uploadArtifact(applicationPackage).submit();
- // Application upgrade starts.
+ // Application revision starts rolling out.
tester.upgrader().maintain();
tester.triggerUntilQuiescence();
tester.deployAndNotify(app, applicationPackage, true, systemTest);
tester.deployAndNotify(app, applicationPackage, true, stagingTest);
clock.advance(Duration.ofHours(1)); // Entering block window after prod job is triggered.
tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
- assertEquals(1, tester.buildService().jobs().size()); // Next job triggered in spite of block, because it is already rolling out.
+ assertEquals(1, tester.buildService().jobs().size());
- // New revision is submitted, but is stored as outstanding, since the previous revision is proceeding in good fashion.
+ // New revision is submitted, but is stored as outstanding, since the upgrade is proceeding in good fashion.
tester.jobCompletion(component).application(app).nextBuildNumber().nextBuildNumber().uploadArtifact(applicationPackage).submit();
tester.triggerUntilQuiescence();
- assertEquals(1, tester.buildService().jobs().size()); // Still just the running revision upgrade.
+ assertEquals(3, tester.buildService().jobs().size()); // Just the running upgrade, and tests for the new revision.
+ tester.deployAndNotify(app, applicationPackage, true, systemTest);
+ tester.deployAndNotify(app, applicationPackage, true, stagingTest);
tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1);
tester.deployAndNotify(app, applicationPackage, true, productionUsEast3);
assertEquals(Collections.emptyList(), tester.buildService().jobs()); // No jobs left.
+
+ tester.outstandingChangeDeployer().run();
+ assertFalse(tester.application(app.id()).change().isPresent());
+ clock.advance(Duration.ofHours(2));
+
+ tester.outstandingChangeDeployer().run();
+ assertTrue(tester.application(app.id()).change().isPresent());
+ tester.readyJobTrigger().run();
+ tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
+ tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1);
+ tester.deployAndNotify(app, applicationPackage, true, productionUsEast3);
+ assertFalse(tester.application(app.id()).change().isPresent());
}
}