summaryrefslogtreecommitdiffstats
path: root/node-repository/src/test/java/com
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2022-11-02 14:24:49 +0100
committerValerij Fredriksen <valerijf@yahooinc.com>2022-11-02 15:58:06 +0100
commit2a348d61213778f11c762de5f3570d8174f9f294 (patch)
treea4c6927aece141e2d7d5f86596b32b795c59cf97 /node-repository/src/test/java/com
parent6688797036b4239ba58c8774f4c0893ed660bbc9 (diff)
Move resume provisioning to separate maintainer
Diffstat (limited to 'node-repository/src/test/java/com')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java51
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostResumeProvisionerTest.java107
2 files changed, 107 insertions, 51 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
index f9c7d7cd88d..e882de3aa62 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
@@ -66,39 +66,6 @@ import static org.junit.Assert.fail;
public class DynamicProvisioningMaintainerTest {
@Test
- public void delegates_to_host_provisioner_and_writes_back_result() {
- var tester = new DynamicProvisioningTester().addInitialNodes();
- tester.hostProvisioner.with(Behaviour.failDeprovisioning); // To avoid deleting excess nodes
-
- Node host3 = tester.nodeRepository.nodes().node("host3").orElseThrow();
- Node host4 = tester.nodeRepository.nodes().node("host4").orElseThrow();
- Node host41 = tester.nodeRepository.nodes().node("host4-1").orElseThrow();
- assertTrue("No IP addresses assigned",
- Stream.of(host3, host4, host41).map(node -> node.ipConfig().primary()).allMatch(Set::isEmpty));
-
- Node host3new = host3.with(host3.ipConfig().withPrimary(Set.of("::3:0")));
- Node host4new = host4.with(host4.ipConfig().withPrimary(Set.of("::4:0")));
- Node host41new = host41.with(host41.ipConfig().withPrimary(Set.of("::4:1", "::4:2")));
-
- tester.maintainer.maintain();
- assertEquals(host3new, tester.nodeRepository.nodes().node("host3").get());
- assertEquals(host4new, tester.nodeRepository.nodes().node("host4").get());
- assertEquals(host41new, tester.nodeRepository.nodes().node("host4-1").get());
- }
-
- @Test
- public void correctly_fails_if_irrecoverable_failure() {
- var tester = new DynamicProvisioningTester();
- tester.hostProvisioner.with(Behaviour.failProvisioning);
- Node host4 = tester.addNode("host4", Optional.empty(), NodeType.host, Node.State.provisioned);
- Node host41 = tester.addNode("host4-1", Optional.of("host4"), NodeType.tenant, Node.State.reserved, DynamicProvisioningTester.tenantApp);
- assertTrue("No IP addresses assigned", Stream.of(host4, host41).map(node -> node.ipConfig().primary()).allMatch(Set::isEmpty));
-
- tester.maintainer.maintain();
- assertEquals(Set.of("host4", "host4-1"), tester.nodeRepository.nodes().list(Node.State.failed).hostnames());
- }
-
- @Test
public void finds_nodes_that_need_deprovisioning_without_pre_provisioning() {
var tester = new DynamicProvisioningTester().addInitialNodes();
assertTrue(tester.nodeRepository.nodes().node("host2").isPresent());
@@ -384,24 +351,6 @@ public class DynamicProvisioningMaintainerTest {
}
@Test
- public void defer_writing_ip_addresses_until_dns_resolves() {
- var tester = new DynamicProvisioningTester().addInitialNodes();
- tester.hostProvisioner.with(Behaviour.failDnsUpdate);
-
- Supplier<NodeList> provisioning = () -> tester.nodeRepository.nodes().list(Node.State.provisioned).nodeType(NodeType.host);
- assertEquals(2, provisioning.get().size());
- tester.maintainer.maintain();
-
- assertTrue("No IP addresses written as DNS updates are failing",
- provisioning.get().stream().allMatch(host -> host.ipConfig().pool().ipSet().isEmpty()));
-
- tester.hostProvisioner.without(Behaviour.failDnsUpdate);
- tester.maintainer.maintain();
- assertTrue("IP addresses written as DNS updates are succeeding",
- provisioning.get().stream().noneMatch(host -> host.ipConfig().pool().ipSet().isEmpty()));
- }
-
- @Test
public void deprovision_empty_confighost() {
// cfghost1, cfg1, cfghost2, cfg2, cfghost3, and NOT cfg3.
var tester = new DynamicProvisioningTester();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostResumeProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostResumeProvisionerTest.java
new file mode 100644
index 00000000000..715aa82afb0
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostResumeProvisionerTest.java
@@ -0,0 +1,107 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.provision.maintenance;
+
+import com.yahoo.component.Version;
+import com.yahoo.config.provision.Capacity;
+import com.yahoo.config.provision.Cloud;
+import com.yahoo.config.provision.ClusterResources;
+import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.Flavor;
+import com.yahoo.config.provision.NodeResources;
+import com.yahoo.config.provision.NodeType;
+import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.SystemName;
+import com.yahoo.config.provision.Zone;
+import com.yahoo.vespa.hosted.provision.Node;
+import com.yahoo.vespa.hosted.provision.NodeList;
+import com.yahoo.vespa.hosted.provision.node.IP;
+import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
+import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester;
+import com.yahoo.vespa.hosted.provision.testutils.MockHostProvisioner;
+import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
+import org.junit.Test;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.Set;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author freva
+ */
+public class HostResumeProvisionerTest {
+
+ private final List<Flavor> flavors = FlavorConfigBuilder.createDummies("default").getFlavors();
+ private final MockNameResolver nameResolver = new MockNameResolver();
+ private final MockHostProvisioner hostProvisioner = new MockHostProvisioner(flavors, nameResolver, 0);
+ private final ProvisioningTester tester = new ProvisioningTester.Builder()
+ .zone(new Zone(Cloud.builder().dynamicProvisioning(true).build(), SystemName.defaultSystem(), Environment.dev, RegionName.defaultName()))
+ .hostProvisioner(hostProvisioner)
+ .nameResolver(nameResolver)
+ .flavors(flavors)
+ .build();
+ private final HostResumeProvisioner hostResumeProvisioner = new HostResumeProvisioner(tester.nodeRepository(), Duration.ofDays(1), new TestMetric(), hostProvisioner);
+
+ @Test
+ public void delegates_to_host_provisioner_and_writes_back_result() {
+ deployApplication();
+
+ Node host = tester.nodeRepository().nodes().node("host100").orElseThrow();
+ Node node = tester.nodeRepository().nodes().node("host100-1").orElseThrow();
+ assertTrue("No IP addresses assigned",
+ Stream.of(host, node).map(n -> n.ipConfig().primary()).allMatch(Set::isEmpty));
+
+ Node hostNew = host.with(host.ipConfig().withPrimary(Set.of("::100:0")).withPool(host.ipConfig().pool().withIpAddresses(Set.of("::100:1", "::100:2"))));
+ Node nodeNew = node.with(IP.Config.ofEmptyPool(Set.of("::100:1")));
+
+ hostResumeProvisioner.maintain();
+ assertEquals(hostNew.ipConfig(), tester.nodeRepository().nodes().node("host100").get().ipConfig());
+ assertEquals(nodeNew.ipConfig(), tester.nodeRepository().nodes().node("host100-1").get().ipConfig());
+ }
+
+ @Test
+ public void defer_writing_ip_addresses_until_dns_resolves() {
+ deployApplication();
+ hostProvisioner.with(MockHostProvisioner.Behaviour.failDnsUpdate);
+
+ Supplier<NodeList> provisioning = () -> tester.nodeRepository().nodes().list(Node.State.provisioned).nodeType(NodeType.host);
+ assertEquals(1, provisioning.get().size());
+ provisioning.get().forEach(h -> System.out.println(h.hostname() + " " + h.ipConfig()));
+ hostResumeProvisioner.maintain();
+
+ assertTrue("No IP addresses written as DNS updates are failing",
+ provisioning.get().stream().allMatch(host -> host.ipConfig().pool().ipSet().isEmpty()));
+
+ hostProvisioner.without(MockHostProvisioner.Behaviour.failDnsUpdate);
+ hostResumeProvisioner.maintain();
+ provisioning.get().forEach(h -> System.out.println(h.hostname() + " " + h.ipConfig()));
+ assertTrue("IP addresses written as DNS updates are succeeding",
+ provisioning.get().stream().noneMatch(host -> host.ipConfig().pool().ipSet().isEmpty()));
+ }
+
+ @Test
+ public void correctly_fails_if_irrecoverable_failure() {
+ deployApplication();
+ hostProvisioner.with(MockHostProvisioner.Behaviour.failProvisioning);
+
+ Node host = tester.nodeRepository().nodes().node("host100").orElseThrow();
+ Node node = tester.nodeRepository().nodes().node("host100-1").orElseThrow();
+ assertTrue("No IP addresses assigned",
+ Stream.of(host, node).map(n -> n.ipConfig().primary()).allMatch(Set::isEmpty));
+
+ hostResumeProvisioner.maintain();
+ assertEquals(Set.of("host100", "host100-1"), tester.nodeRepository().nodes().list(Node.State.failed).hostnames());
+ }
+
+ private void deployApplication() {
+ ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("cluster1")).vespaVersion(Version.fromString("7")).build();
+ Capacity capacity = Capacity.from(new ClusterResources(1, 1, new NodeResources(1, 30, 20, 3)));
+ tester.prepare(ProvisioningTester.applicationId(), cluster, capacity);
+ assertEquals(2, tester.nodeRepository().nodes().list().size());
+ }
+}