aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-01-10 14:02:40 +0100
committerMartin Polden <mpolden@mpolden.no>2022-01-10 14:02:40 +0100
commit82a734fc6bea66959852bcf3471f228a60a68607 (patch)
tree22c0720af5cfa045dcba050303e2c51b9e74eba6 /controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java
parentc0c25b25dc02315e3d5bc09a720db8f02e42e2b2 (diff)
Track latest OS release in CD system
Diffstat (limited to 'controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java69
1 files changed, 39 insertions, 30 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java
index 51bda73025d..300aa86b5ea 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java
@@ -3,9 +3,10 @@ package com.yahoo.vespa.hosted.controller.maintenance;
import com.yahoo.component.Version;
import com.yahoo.config.provision.CloudName;
+import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.vespa.hosted.controller.ControllerTester;
-import com.yahoo.vespa.hosted.controller.api.integration.deployment.StableOsVersion;
+import com.yahoo.vespa.hosted.controller.api.integration.deployment.OsRelease;
import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock;
import com.yahoo.vespa.hosted.controller.versions.OsVersionTarget;
import org.junit.Test;
@@ -68,7 +69,6 @@ public class OsUpgradeSchedulerTest {
@Test
public void schedule_stable_release() {
ControllerTester tester = new ControllerTester();
- OsUpgradeScheduler scheduler = new OsUpgradeScheduler(tester.controller(), Duration.ofDays(1));
Instant t0 = Instant.parse("2021-06-21T07:00:00.00Z"); // Inside trigger period
tester.clock().setInstant(t0);
@@ -77,40 +77,49 @@ public class OsUpgradeSchedulerTest {
Version version0 = Version.fromString("8.0");
tester.controller().upgradeOsIn(cloud, version0, Duration.ZERO, false);
- // New version is promoted to stable
+ // Stable release is scheduled immediately
Version version1 = Version.fromString("8.1");
- tester.serviceRegistry().artifactRepository().promoteOsVersion(new StableOsVersion(version1, tester.clock().instant()));
- scheduler.maintain();
- assertEquals("Target is unchanged as not enough time has passed", version0,
- tester.controller().osVersionTarget(cloud).get().osVersion().version());
-
- // Enough time passes since promotion of stable release
- tester.clock().advance(Duration.ofDays(7).plus(Duration.ofSeconds(1)));
- scheduler.maintain();
- OsVersionTarget target0 = tester.controller().osVersionTarget(cloud).get();
- assertEquals(version1, target0.osVersion().version());
- assertEquals("No budget when upgrading to stable release",
- Duration.ZERO, target0.upgradeBudget());
-
- // Another version is promoted, but target remains unchanged as the release hasn't aged enough
- tester.clock().advance(Duration.ofDays(1));
- Version version2 = Version.fromString("8.2");
- tester.serviceRegistry().artifactRepository().promoteOsVersion(new StableOsVersion(version2, tester.clock().instant()));
- scheduler.maintain();
- OsVersionTarget target1 = tester.controller().osVersionTarget(cloud).get();
- assertEquals("Target is unchanged as not enough time has passed", version1,
- target1.osVersion().version());
- assertEquals("Target is not re-scheduled", target0.scheduledAt(), target1.scheduledAt());
+ tester.serviceRegistry().artifactRepository().addRelease(new OsRelease(version1, OsRelease.Tag.stable,
+ tester.clock().instant()));
+ scheduleUpgradeAfter(Duration.ZERO, version1, tester);
// A newer version is triggered manually
Version version3 = Version.fromString("8.3");
tester.controller().upgradeOsIn(cloud, version3, Duration.ZERO, false);
- // Enough time passes for stable version to be promoted. Nothing happens as stable is now before the manually
- // triggered version
- tester.clock().advance(Duration.ofDays(7).plus(Duration.ofSeconds(1)));
- scheduler.maintain();
- assertEquals(version3, tester.controller().osVersionTarget(cloud).get().osVersion().version());
+ // Nothing happens in next iteration as tagged release is older than manually triggered version
+ scheduleUpgradeAfter(Duration.ofDays(7), version3, tester);
+ }
+
+ @Test
+ public void schedule_latest_release_in_cd() {
+ ControllerTester tester = new ControllerTester(SystemName.cd);
+ Instant t0 = Instant.parse("2021-06-21T07:00:00.00Z"); // Inside trigger period
+ tester.clock().setInstant(t0);
+
+ // Set initial target
+ CloudName cloud = tester.controller().clouds().iterator().next();
+ Version version0 = Version.fromString("8.0");
+ tester.controller().upgradeOsIn(cloud, version0, Duration.ZERO, false);
+
+ // Latest release is not scheduled immediately
+ Version version1 = Version.fromString("8.1");
+ tester.serviceRegistry().artifactRepository().addRelease(new OsRelease(version1, OsRelease.Tag.latest,
+ tester.clock().instant()));
+ scheduleUpgradeAfter(Duration.ZERO, version0, tester);
+
+ // Cooldown period passes and latest release is scheduled
+ scheduleUpgradeAfter(Duration.ofDays(1), version1, tester);
+ }
+
+ private void scheduleUpgradeAfter(Duration duration, Version version, ControllerTester tester) {
+ tester.clock().advance(duration);
+ new OsUpgradeScheduler(tester.controller(), Duration.ofDays(1)).maintain();
+ CloudName cloud = tester.controller().clouds().iterator().next();
+ OsVersionTarget target = tester.controller().osVersionTarget(cloud).get();
+ assertEquals(version, target.osVersion().version());
+ assertEquals("No budget when scheduling a tagged release",
+ Duration.ZERO, target.upgradeBudget());
}
private static ZoneApi zone(String id, CloudName cloud) {