aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java147
1 files changed, 75 insertions, 72 deletions
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 7b045e508a9..18776be2dce 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
@@ -22,7 +22,7 @@ import com.yahoo.vespa.hosted.controller.deployment.Run;
import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
import com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.time.Duration;
import java.time.Instant;
@@ -37,11 +37,11 @@ import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.pro
import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.stagingTest;
import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.systemTest;
import static java.util.stream.Collectors.toSet;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Test computing of version status
@@ -100,8 +100,8 @@ public class VersionStatusTest {
writeControllerVersion(controller3, Version.fromString("6.2"), db);
VersionStatus versionStatus = VersionStatus.compute(tester.controller());
- assertEquals("Controller version is oldest version", Version.fromString("6.1"),
- versionStatus.controllerVersion().get().versionNumber());
+ assertEquals(Version.fromString("6.1"),
+ versionStatus.controllerVersion().get().versionNumber(), "Controller version is oldest version");
// Last controller upgrades
writeControllerVersion(controller2, Version.fromString("6.2"), db);
@@ -162,7 +162,7 @@ public class VersionStatusTest {
tester.triggerJobs();
tester.controllerTester().computeVersionStatus();
List<VespaVersion> versions = tester.controller().readVersionStatus().versions();
- assertEquals("The two versions above exist", 2, versions.size());
+ assertEquals(2, versions.size(), "The two versions above exist");
VespaVersion v1 = versions.get(0);
assertEquals(version1, v1.versionNumber());
@@ -178,9 +178,9 @@ public class VersionStatusTest {
context2.instanceId(), List.of(productionUsEast3),
context3.instanceId(), List.of(productionUsWest1, productionUsEast3)),
statistics1.productionSuccesses());
- assertEquals("No applications have active deployment jobs on version1.",
+ assertEquals(
List.of(),
- statistics1.runningUpgrade());
+ statistics1.runningUpgrade(), "No applications have active deployment jobs on version1.");
VespaVersion v2 = versions.get(1);
assertEquals(version2, v2.versionNumber());
@@ -203,13 +203,13 @@ public class VersionStatusTest {
}
private static void assertJobsRun(String assertion, Map<ApplicationId, List<JobType>> jobs, List<Run> runs) {
- assertEquals(assertion,
- jobs.entrySet().stream()
+ assertEquals(jobs.entrySet().stream()
.flatMap(entry -> entry.getValue().stream().map(type -> new JobId(entry.getKey(), type)))
.collect(toSet()),
runs.stream()
.map(run -> run.id().job())
- .collect(toSet()));
+ .collect(toSet()),
+ assertion);
}
@Test
@@ -273,8 +273,8 @@ public class VersionStatusTest {
// Application without deployment
var ignored0 = tester.newDeploymentContext("tenant1", "ignored0", "default");
- assertEquals("All applications running on this version: High",
- Confidence.high, confidence(tester.controller(), version0));
+ assertEquals(
+ Confidence.high, confidence(tester.controller(), version0), "All applications running on this version: High");
// New version is released
Version version1 = new Version("6.3");
@@ -288,25 +288,25 @@ public class VersionStatusTest {
.runJob(stagingTest)
.failDeployment(productionUsWest1);
tester.controllerTester().computeVersionStatus();
- assertEquals("One canary failed: Broken",
- Confidence.broken, confidence(tester.controller(), version1));
+ assertEquals(
+ Confidence.broken, confidence(tester.controller(), version1), "One canary failed: Broken");
// New version is released
Version version2 = new Version("6.4");
tester.controllerTester().upgradeSystem(version2);
tester.upgrader().maintain();
tester.triggerJobs();
- assertEquals("Confidence defaults to low for version with no applications",
- Confidence.low, confidence(tester.controller(), version2));
+ assertEquals(
+ Confidence.low, confidence(tester.controller(), version2), "Confidence defaults to low for version with no applications");
// All canaries upgrade successfully
canary0.deployPlatform(version2);
canary1.deployPlatform(version2);
- assertEquals("Confidence for remains unchanged for version1: Broken",
- Confidence.broken, confidence(tester.controller(), version1));
- assertEquals("Nothing has failed but not all canaries have upgraded: Low",
- Confidence.low, confidence(tester.controller(), version2));
+ assertEquals(
+ Confidence.broken, confidence(tester.controller(), version1), "Confidence for remains unchanged for version1: Broken");
+ assertEquals(
+ Confidence.low, confidence(tester.controller(), version2), "Nothing has failed but not all canaries have upgraded: Low");
// Remaining canary upgrades to version2 which raises confidence to normal and more apps upgrade
canary2.triggerJobs().jobAborted(systemTest).jobAborted(stagingTest);
@@ -315,8 +315,8 @@ public class VersionStatusTest {
tester.controllerTester().computeVersionStatus();
tester.upgrader().maintain();
tester.triggerJobs();
- assertEquals("Canaries have upgraded: Normal",
- Confidence.normal, confidence(tester.controller(), version2));
+ assertEquals(
+ Confidence.normal, confidence(tester.controller(), version2), "Canaries have upgraded: Normal");
default0.deployPlatform(version2);
default1.deployPlatform(version2);
default2.deployPlatform(version2);
@@ -330,23 +330,23 @@ public class VersionStatusTest {
// Remember confidence across restart
tester.controllerTester().createNewController();
- assertEquals("Confidence remains unchanged for version0: High",
- Confidence.high, confidence(tester.controller(), version0));
- assertEquals("All canaries deployed + < 90% of defaults: Normal",
- Confidence.normal, confidence(tester.controller(), version2));
- assertTrue("Status for version without applications is removed",
- tester.controller().readVersionStatus().versions().stream()
- .noneMatch(vespaVersion -> vespaVersion.versionNumber().equals(version1)));
+ assertEquals(
+ Confidence.high, confidence(tester.controller(), version0), "Confidence remains unchanged for version0: High");
+ assertEquals(
+ Confidence.normal, confidence(tester.controller(), version2), "All canaries deployed + < 90% of defaults: Normal");
+ assertTrue(tester.controller().readVersionStatus().versions().stream()
+ .noneMatch(vespaVersion -> vespaVersion.versionNumber().equals(version1)),
+ "Status for version without applications is removed");
// Another default application upgrades, raising confidence to high
default8.deployPlatform(version2);
default9.deployPlatform(version2);
tester.controllerTester().computeVersionStatus();
- assertEquals("Confidence remains unchanged for version0: High",
- Confidence.high, confidence(tester.controller(), version0));
- assertEquals("90% of defaults deployed successfully: High",
- VespaVersion.Confidence.high, confidence(tester.controller(), version2));
+ assertEquals(
+ Confidence.high, confidence(tester.controller(), version0), "Confidence remains unchanged for version0: High");
+ assertEquals(
+ VespaVersion.Confidence.high, confidence(tester.controller(), version2), "90% of defaults deployed successfully: High");
// A new version is released, all canaries upgrade successfully, but enough "default" apps fail to mark version
// as broken
@@ -366,12 +366,12 @@ public class VersionStatusTest {
default3.failDeployment(stagingTest);
tester.controllerTester().computeVersionStatus();
- assertEquals("Confidence remains unchanged for version0: High",
- Confidence.high, confidence(tester.controller(), version0));
- assertEquals("Confidence remains unchanged for version2: High",
- Confidence.high, confidence(tester.controller(), version2));
- assertEquals("40% of defaults failed: Broken",
- VespaVersion.Confidence.broken, confidence(tester.controller(), version3));
+ assertEquals(
+ Confidence.high, confidence(tester.controller(), version0), "Confidence remains unchanged for version0: High");
+ assertEquals(
+ Confidence.high, confidence(tester.controller(), version2), "Confidence remains unchanged for version2: High");
+ assertEquals(
+ VespaVersion.Confidence.broken, confidence(tester.controller(), version3), "40% of defaults failed: Broken");
// Test version order
List<VespaVersion> versions = tester.controller().readVersionStatus().versions();
@@ -417,8 +417,8 @@ public class VersionStatusTest {
.submit(appPackage)
.deploy();
- assertEquals("All applications running on this version: High",
- Confidence.high, confidence(tester.controller(), version0));
+ assertEquals(
+ Confidence.high, confidence(tester.controller(), version0), "All applications running on this version: High");
// New version is released
Version version1 = new Version("6.3");
@@ -430,59 +430,61 @@ public class VersionStatusTest {
canary0.failDeployment(systemTest);
canary0.abortJob(stagingTest);
tester.controllerTester().computeVersionStatus();
- assertEquals("One canary failed: Broken",
- Confidence.broken, confidence(tester.controller(), version1));
+ assertEquals(
+ Confidence.broken, confidence(tester.controller(), version1), "One canary failed: Broken");
// New version is released
Version version2 = new Version("6.4");
tester.controllerTester().upgradeSystem(version2);
tester.upgrader().maintain();
- assertEquals("Confidence remains unchanged for version1 until app overrides old tests: Broken",
- Confidence.broken, confidence(tester.controller(), version1));
- assertEquals("Confidence defaults to low for version with no applications",
- Confidence.low, confidence(tester.controller(), version2));
+ assertEquals(
+ Confidence.broken, confidence(tester.controller(), version1), "Confidence remains unchanged for version1 until app overrides old tests: Broken");
+ assertEquals(
+ Confidence.low, confidence(tester.controller(), version2), "Confidence defaults to low for version with no applications");
assertEquals(version2, canary0.instance().change().platform().orElseThrow());
canary0.failDeployment(systemTest);
canary0.abortJob(stagingTest);
tester.controllerTester().computeVersionStatus();
- assertFalse("Previous version should be forgotten, as canary only had test jobs run on it",
- tester.controller().readVersionStatus().versions().stream().anyMatch(version -> version.versionNumber().equals(version1)));
+ assertFalse(
+ tester.controller().readVersionStatus().versions().stream().anyMatch(version -> version.versionNumber().equals(version1)),
+ "Previous version should be forgotten, as canary only had test jobs run on it");
// App succeeds with tests, but fails production deployment
canary0.runJob(systemTest)
.runJob(stagingTest)
.failDeployment(productionUsWest1);
- assertEquals("One canary failed: Broken",
- Confidence.broken, confidence(tester.controller(), version2));
+ assertEquals(
+ Confidence.broken, confidence(tester.controller(), version2), "One canary failed: Broken");
// A new version is released, and the app again fails production deployment.
Version version3 = new Version("6.5");
tester.controllerTester().upgradeSystem(version3);
tester.upgrader().maintain();
- assertEquals("Confidence remains unchanged for version2: Broken",
- Confidence.broken, confidence(tester.controller(), version2));
- assertEquals("Confidence defaults to low for version with no applications",
- Confidence.low, confidence(tester.controller(), version3));
+ assertEquals(
+ Confidence.broken, confidence(tester.controller(), version2), "Confidence remains unchanged for version2: Broken");
+ assertEquals(
+ Confidence.low, confidence(tester.controller(), version3), "Confidence defaults to low for version with no applications");
assertEquals(version3, canary0.instance().change().platform().orElseThrow());
canary0.runJob(systemTest)
.runJob(stagingTest)
.failDeployment(productionUsWest1);
tester.controllerTester().computeVersionStatus();
- assertEquals("Confidence remains unchanged for version2: Broken",
- Confidence.broken, confidence(tester.controller(), version2));
- assertEquals("Canary broken, so confidence for version3: Broken",
- Confidence.broken, confidence(tester.controller(), version3));
+ assertEquals(
+ Confidence.broken, confidence(tester.controller(), version2), "Confidence remains unchanged for version2: Broken");
+ assertEquals(
+ Confidence.broken, confidence(tester.controller(), version3), "Canary broken, so confidence for version3: Broken");
// App succeeds production deployment, clearing failure on version2
canary0.runJob(productionUsWest1);
tester.controllerTester().computeVersionStatus();
- assertFalse("Previous version should be forgotten, as canary only had test jobs run on it",
- tester.controller().readVersionStatus().versions().stream().anyMatch(version -> version.versionNumber().equals(version2)));
- assertEquals("Canary OK, but not done upgrading, so confidence for version3: Low",
- Confidence.low, confidence(tester.controller(), version3));
+ assertFalse(
+ tester.controller().readVersionStatus().versions().stream().anyMatch(version -> version.versionNumber().equals(version2)),
+ "Previous version should be forgotten, as canary only had test jobs run on it");
+ assertEquals(
+ Confidence.low, confidence(tester.controller(), version3), "Canary OK, but not done upgrading, so confidence for version3: Low");
}
@Test
@@ -512,8 +514,9 @@ public class VersionStatusTest {
assertEquals(Confidence.high, confidence(tester.controller(), version1));
// Stale override was removed
- assertFalse("Stale override removed", tester.controller().curator().readConfidenceOverrides()
- .containsKey(version0));
+ assertFalse( tester.controller().curator().readConfidenceOverrides()
+ .containsKey(version0),
+ "Stale override removed");
}
@Test
@@ -692,11 +695,11 @@ public class VersionStatusTest {
private void assertOnVersion(Version version, ApplicationId instance, DeploymentTester tester) {
var vespaVersion = tester.controller().readVersionStatus().version(version);
- assertNotNull("Statistics for version " + version + " exist", vespaVersion);
+ assertNotNull(vespaVersion, "Statistics for version " + version + " exist");
var statistics = DeploymentStatistics.compute(List.of(version), tester.deploymentStatuses()).get(0);
- assertTrue("Application is on version " + version,
+ assertTrue(
Stream.of(statistics.productionSuccesses(), statistics.failingUpgrades(), statistics.runningUpgrade())
- .anyMatch(runs -> runs.stream().anyMatch(run -> run.id().application().equals(instance))));
+ .anyMatch(runs -> runs.stream().anyMatch(run -> run.id().application().equals(instance))), "Application is on version " + version);
}
private static void writeControllerVersion(HostName hostname, Version version, CuratorDb db) {