summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2022-02-17 14:38:30 +0100
committerJon Marius Venstad <venstad@gmail.com>2022-02-17 14:38:30 +0100
commit536a2b2e2090f05de6bed7bc667330d273b10849 (patch)
tree62fa932845a1149d2d69de948895409f26940b7f
parent1453f482bcc7702f501d89dc88cd5f0a2266ea2c (diff)
Add test for multiple revisions through multi-instance deployment spec
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java100
1 files changed, 99 insertions, 1 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 9f108be9650..33ca4ddd8a8 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
@@ -1419,7 +1419,105 @@ public class DeploymentTriggerTest {
}
@Test
- public void testsVeryLengthyPipeline() {
+ public void testsVeryLengthyPipelineRevisions() {
+ String lengthyDeploymentSpec =
+ "<deployment version='1.0'>\n" +
+ " <instance id='alpha'>\n" +
+ " <test />\n" +
+ " <staging />\n" +
+ " <upgrade revision='latest' />\n" +
+ " <prod>\n" +
+ " <region>us-east-3</region>\n" +
+ " <test>us-east-3</test>\n" +
+ " </prod>\n" +
+ " </instance>\n" +
+ " <instance id='beta'>\n" +
+ " <upgrade revision='separate' />\n" +
+ " <prod>\n" +
+ " <region>us-east-3</region>\n" +
+ " <test>us-east-3</test>\n" +
+ " </prod>\n" +
+ " </instance>\n" +
+ " <instance id='gamma'>\n" +
+ " <upgrade revision='separate' />\n" + // TODO: change to new, even stricter policy.
+ " <prod>\n" +
+ " <region>us-east-3</region>\n" +
+ " <test>us-east-3</test>\n" +
+ " </prod>\n" +
+ " </instance>\n" +
+ "</deployment>\n";
+ var appPackage = ApplicationPackageBuilder.fromDeploymentXml(lengthyDeploymentSpec);
+ var alpha = tester.newDeploymentContext("t", "a", "alpha");
+ var beta = tester.newDeploymentContext("t", "a", "beta");
+ var gamma = tester.newDeploymentContext("t", "a", "gamma");
+ alpha.submit(appPackage).deploy();
+
+ // revision2 is submitted, and rolls through alpha.
+ var revision1 = alpha.lastSubmission();
+ alpha.submit(appPackage);
+ var revision2 = alpha.lastSubmission();
+
+ alpha.runJob(systemTest).runJob(stagingTest)
+ .runJob(productionUsEast3).runJob(testUsEast3);
+ assertEquals(Optional.empty(), alpha.instance().change().application());
+
+ // revision3 is submitted when revision2 is half-way.
+ tester.outstandingChangeDeployer().run();
+ beta.runJob(productionUsEast3);
+ alpha.submit(appPackage);
+ var revision3 = alpha.lastSubmission();
+ beta.runJob(testUsEast3);
+ assertEquals(Optional.empty(), beta.instance().change().application());
+
+ // revision3 is the target for alpha, beta is done, version1 is the target for gamma.
+ tester.outstandingChangeDeployer().run();
+ assertEquals(revision3, alpha.instance().change().application());
+ assertEquals(Optional.empty(), beta.instance().change().application());
+ assertEquals(revision2, gamma.instance().change().application());
+
+ // revision3 rolls to beta, then a couple of new revisions are submitted to alpha, and the latter is the new target.
+ alpha.runJob(systemTest).runJob(stagingTest)
+ .runJob(productionUsEast3).runJob(testUsEast3);
+ tester.outstandingChangeDeployer().run();
+ assertEquals(Optional.empty(), alpha.instance().change().application());
+ assertEquals(revision3, beta.instance().change().application());
+
+ // revision5 supersedes revision4
+ alpha.submit(appPackage);
+ var revision4 = alpha.lastSubmission();
+ alpha.runJob(systemTest).runJob(stagingTest)
+ .runJob(productionUsEast3);
+ alpha.submit(appPackage);
+ var revision5 = alpha.lastSubmission();
+ alpha.runJob(systemTest).runJob(stagingTest)
+ .runJob(productionUsEast3).runJob(testUsEast3);
+ tester.outstandingChangeDeployer().run();
+ assertEquals(Optional.empty(), alpha.instance().change().application());
+ assertEquals(revision3, beta.instance().change().application());
+
+ // revision6 rolls through alpha, and becomes the next target for beta
+ alpha.submit(appPackage);
+ var revision6 = alpha.lastSubmission();
+ alpha.runJob(systemTest).runJob(stagingTest)
+ .runJob(productionUsEast3)
+ .runJob(testUsEast3);
+ beta.runJob(productionUsEast3).runJob(testUsEast3);
+ tester.outstandingChangeDeployer().run();
+ assertEquals(Optional.empty(), alpha.instance().change().application());
+ assertEquals(revision6, beta.instance().change().application());
+
+ // revision6 rolls through beta, but revision3 is the next target for the strictest revision policy, in gamma
+ alpha.jobAborted(stagingTest).runJob(stagingTest);
+ beta.runJob(productionUsEast3).runJob(testUsEast3);
+ gamma.runJob(productionUsEast3).runJob(testUsEast3);
+ tester.outstandingChangeDeployer().run();
+ assertEquals(Optional.empty(), alpha.instance().change().application());
+ assertEquals(Optional.empty(), beta.instance().change().application());
+ // TODO: assertEquals(revision3, gamma.instance().change().application());
+ }
+
+ @Test
+ public void testsVeryLengthyPipelineUpgrade() {
String lengthyDeploymentSpec =
"<deployment version='1.0'>\n" +
" <instance id='alpha'>\n" +