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>2021-02-09 13:58:24 +0100
committerMartin Polden <mpolden@mpolden.no>2021-02-09 15:13:19 +0100
commit9b80111064a0b44c5dc6ca24d26748e430609646 (patch)
tree415fdb80ec40a398b52980ce456464df64af25af /controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java
parente11470603647ac5d41a19ad4b8a753a53e640df9 (diff)
Schedule OS upgrades automatically in supported clouds
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.java66
1 files changed, 66 insertions, 0 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
new file mode 100644
index 00000000000..e8cdb6ec940
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java
@@ -0,0 +1,66 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.maintenance;
+
+import com.yahoo.component.Version;
+import com.yahoo.config.provision.CloudName;
+import com.yahoo.config.provision.zone.ZoneApi;
+import com.yahoo.vespa.hosted.controller.ControllerTester;
+import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock;
+import org.junit.Test;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.util.List;
+import java.util.Optional;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author mpolden
+ */
+public class OsUpgradeSchedulerTest {
+
+ @Test
+ public void maintain() {
+ ControllerTester tester = new ControllerTester();
+ OsUpgradeScheduler scheduler = new OsUpgradeScheduler(tester.controller(), Duration.ofDays(1));
+ Instant initialTime = Instant.parse("2021-01-23T00:00:00.00Z");
+ tester.clock().setInstant(initialTime);
+
+ CloudName cloud = CloudName.from("cloud");
+ ZoneApi zone = zone("prod.us-west-1", cloud);
+ tester.zoneRegistry().setZones(zone).reprovisionToUpgradeOsIn(zone);
+
+ // Initial run does nothing as the cloud does not have a target
+ scheduler.maintain();
+ assertTrue("No target set", tester.controller().osVersionTarget(cloud).isEmpty());
+
+ // Target is set
+ Version version0 = Version.fromString("7.0.0.20210123190005");
+ tester.controller().upgradeOsIn(cloud, version0, Optional.of(Duration.ofDays(1)), false);
+
+ // Target remains unchanged as it hasn't expired yet
+ for (var interval : List.of(Duration.ZERO, Duration.ofDays(15))) {
+ tester.clock().advance(interval);
+ scheduler.maintain();
+ assertEquals(version0, tester.controller().osVersionTarget(cloud).get().osVersion().version());
+ }
+
+ // Just over 30 days pass, and a new target replaces the expired one
+ Version version1 = Version.fromString("7.0.0.20210222");
+ tester.clock().advance(Duration.ofDays(15).plus(Duration.ofSeconds(1)));
+ scheduler.maintain();
+ assertEquals("New target set", version1, tester.controller().osVersionTarget(cloud).get().osVersion().version());
+
+ // A few days pass and target remains unchanged
+ tester.clock().advance(Duration.ofDays(2));
+ scheduler.maintain();
+ assertEquals(version1, tester.controller().osVersionTarget(cloud).get().osVersion().version());
+ }
+
+ private static ZoneApi zone(String id, CloudName cloud) {
+ return ZoneApiMock.newBuilder().withId(id).with(cloud).build();
+ }
+
+}