From 536a2b2e2090f05de6bed7bc667330d273b10849 Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Thu, 17 Feb 2022 14:38:30 +0100 Subject: Add test for multiple revisions through multi-instance deployment spec --- .../deployment/DeploymentTriggerTest.java | 100 ++++++++++++++++++++- 1 file changed, 99 insertions(+), 1 deletion(-) 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 = + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " us-east-3\n" + + " us-east-3\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " us-east-3\n" + + " us-east-3\n" + + " \n" + + " \n" + + " \n" + + " \n" + // TODO: change to new, even stricter policy. + " \n" + + " us-east-3\n" + + " us-east-3\n" + + " \n" + + " \n" + + "\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 = "\n" + " \n" + -- cgit v1.2.3