summaryrefslogtreecommitdiffstats
path: root/config-model/src/test/java/com/yahoo/config/model/provision
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/test/java/com/yahoo/config/model/provision')
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/HostSpecTest.java46
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/HostsXmlProvisionerTest.java23
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java286
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/SingleNodeProvisionerTest.java26
4 files changed, 220 insertions, 161 deletions
diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/HostSpecTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/HostSpecTest.java
index 810e2c643f3..e678aaa673a 100644
--- a/config-model/src/test/java/com/yahoo/config/model/provision/HostSpecTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/provision/HostSpecTest.java
@@ -2,15 +2,15 @@
package com.yahoo.config.model.provision;
import com.yahoo.config.provision.HostSpec;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
/**
* @author Ulf Lilleengen
@@ -18,31 +18,31 @@ import static org.junit.Assert.assertTrue;
public class HostSpecTest {
@Test
- public void testEquals() {
+ void testEquals() {
HostSpec h1 = new HostSpec("foo", List.of(), Optional.empty());
HostSpec h2 = new HostSpec("foo", List.of(), Optional.empty());
HostSpec h3 = new HostSpec("foo", List.of("my", "alias"), Optional.empty());
HostSpec h4 = new HostSpec("bar", List.of(), Optional.empty());
- assertTrue(h1.equals(h1));
- assertTrue(h1.equals(h2));
- assertTrue(h1.equals(h3));
- assertFalse(h1.equals(h4));
-
- assertTrue(h2.equals(h1));
- assertTrue(h2.equals(h2));
- assertTrue(h2.equals(h3));
- assertFalse(h2.equals(h4));
-
- assertTrue(h3.equals(h1));
- assertTrue(h3.equals(h2));
- assertTrue(h3.equals(h3));
- assertFalse(h3.equals(h4));
-
- assertFalse(h4.equals(h1));
- assertFalse(h4.equals(h2));
- assertFalse(h4.equals(h3));
- assertTrue(h4.equals(h4));
+ assertEquals(h1, h1);
+ assertEquals(h1, h2);
+ assertEquals(h1, h3);
+ assertNotEquals(h1, h4);
+
+ assertEquals(h2, h1);
+ assertEquals(h2, h2);
+ assertEquals(h2, h3);
+ assertNotEquals(h2, h4);
+
+ assertEquals(h3, h1);
+ assertEquals(h3, h2);
+ assertEquals(h3, h3);
+ assertNotEquals(h3, h4);
+
+ assertNotEquals(h4, h1);
+ assertNotEquals(h4, h2);
+ assertNotEquals(h4, h3);
+ assertEquals(h4, h4);
}
}
diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/HostsXmlProvisionerTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/HostsXmlProvisionerTest.java
index 558e61fc1c2..05b8681b5fa 100644
--- a/config-model/src/test/java/com/yahoo/config/model/provision/HostsXmlProvisionerTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/provision/HostsXmlProvisionerTest.java
@@ -3,7 +3,7 @@ package com.yahoo.config.model.provision;
import com.yahoo.config.provision.HostSpec;
import com.yahoo.vespa.model.container.Container;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.io.StringReader;
import java.util.ArrayList;
@@ -15,8 +15,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.*;
/**
* @author hmusum
@@ -46,7 +45,7 @@ public class HostsXmlProvisionerTest {
"</hosts>";
@Test
- public void require_basic_works() {
+ void require_basic_works() {
HostsXmlProvisioner hostProvisioner = createProvisioner(threeHosts);
// 4 services, 2 host aliases, mapping to 2 host.
@@ -71,14 +70,16 @@ public class HostsXmlProvisionerTest {
assertEquals(3, map.size());
assertCorrectNumberOfHosts(map, 3);
assertTrue(map.keySet().containsAll(aliases));
-
+
assertEquals("", System.getProperty("zookeeper.vespa.clients"));
}
- @Test(expected = IllegalArgumentException.class)
- public void require_exception_when_unknown_hosts_alias() {
- HostsXmlProvisioner hostProvisioner = createProvisioner(oneHost);
- hostProvisioner.allocateHost("unknown");
+ @Test
+ void require_exception_when_unknown_hosts_alias() {
+ assertThrows(IllegalArgumentException.class, () -> {
+ HostsXmlProvisioner hostProvisioner = createProvisioner(oneHost);
+ hostProvisioner.allocateHost("unknown");
+ });
}
private void assertCorrectNumberOfHosts(Map<String, HostSpec> hostToServiceMap, int expectedHostCount) {
@@ -97,7 +98,7 @@ public class HostsXmlProvisionerTest {
return createAliases(new ArrayList<>());
}
- // Admin services on node1, qrserver on node2 + additional specs
+ // Admin services on node1, container on node2 + additional specs
private List<String> createAliases(Collection<String> additionalAliases) {
ArrayList<String> aliases = new ArrayList<>();
aliases.add("node1");
@@ -117,7 +118,7 @@ public class HostsXmlProvisionerTest {
}
@Test
- public void require_singlenode_HostAlias_is_used_if_hosts_xml() {
+ void require_singlenode_HostAlias_is_used_if_hosts_xml() {
HostsXmlProvisioner hostProvisioner = createProvisioner(oneHost);
HostSpec hostSpec = hostProvisioner.allocateHost(Container.SINGLENODE_CONTAINER_SERVICESPEC);
assertEquals("test1.yahoo.com", hostSpec.hostname());
diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
index 5e56efc4460..30b848da7f1 100644
--- a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
@@ -4,6 +4,7 @@ package com.yahoo.config.model.provision;
import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.cloud.config.log.LogdConfig;
import com.yahoo.config.application.api.ApplicationPackage;
+import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.api.container.ContainerServiceType;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.deploy.TestProperties;
@@ -37,14 +38,16 @@ import com.yahoo.vespa.model.search.SearchNode;
import com.yahoo.vespa.model.test.VespaModelTester;
import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg;
import com.yahoo.yolean.Exceptions;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.io.StringReader;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
+import java.util.logging.Level;
import java.util.stream.Collectors;
import static com.yahoo.config.model.test.TestUtil.joinLines;
@@ -55,12 +58,13 @@ import static com.yahoo.vespa.defaults.Defaults.getDefaults;
import static com.yahoo.vespa.model.search.NodeResourcesTuning.GB;
import static com.yahoo.vespa.model.search.NodeResourcesTuning.reservedMemoryGb;
import static com.yahoo.vespa.model.test.utils.ApplicationPackageUtils.generateSchemas;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+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.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
/**
* Test cases for provisioning nodes to entire Vespa models.
@@ -217,10 +221,10 @@ public class ModelProvisioningTest {
tester.addHosts(8);
VespaModel model = tester.createModel(xmlWithNodes, true);
- assertEquals("Nodes in content1", 2, model.getContentClusters().get("content1").getRootGroup().getNodes().size());
- assertEquals("Nodes in container1", 1, model.getContainerClusters().get("container1").getContainers().size());
- assertEquals("Nodes in cluster without ID", 2, model.getContentClusters().get("content").getRootGroup().getNodes().size());
- assertEquals("Heap size for container", 70, physicalMemoryPercentage(model.getContainerClusters().get("container1")));
+ assertEquals(2, model.getContentClusters().get("content1").getRootGroup().getNodes().size(), "Nodes in content1");
+ assertEquals(1, model.getContainerClusters().get("container1").getContainers().size(), "Nodes in container1");
+ assertEquals(2, model.getContentClusters().get("content").getRootGroup().getNodes().size(), "Nodes in cluster without ID");
+ assertEquals(70, physicalMemoryPercentage(model.getContainerClusters().get("container1")), "Heap size for container");
assertProvisioned(2, ClusterSpec.Id.from("content1"), ClusterSpec.Type.content, model);
assertProvisioned(1, ClusterSpec.Id.from("container1"), ClusterSpec.Type.container, model);
assertProvisioned(2, ClusterSpec.Id.from("content"), ClusterSpec.Type.content, model);
@@ -268,16 +272,19 @@ public class ModelProvisioningTest {
"</services>";
VespaModelTester tester = new VespaModelTester();
tester.addHosts(5);
- VespaModel model = tester.createModel(xmlWithNodes, true);
- assertEquals("Nodes in content1", 2, model.getContentClusters().get("content1").getRootGroup().getNodes().size());
- assertEquals("Nodes in container1", 2, model.getContainerClusters().get("container1").getContainers().size());
- assertEquals("Heap size is lowered with combined clusters",
- 18, physicalMemoryPercentage(model.getContainerClusters().get("container1")));
- assertEquals("Memory for proton is lowered to account for the jvm heap",
- (long) ((3 - reservedMemoryGb) * (Math.pow(1024, 3)) * (1 - 0.18)), protonMemorySize(model.getContentClusters()
- .get("content1")));
+ TestLogger logger = new TestLogger();
+ VespaModel model = tester.createModel(xmlWithNodes, true, new DeployState.Builder().deployLogger(logger));
+ assertEquals(2, model.getContentClusters().get("content1").getRootGroup().getNodes().size(), "Nodes in content1");
+ assertEquals(2, model.getContainerClusters().get("container1").getContainers().size(), "Nodes in container1");
+ assertEquals(18, physicalMemoryPercentage(model.getContainerClusters().get("container1")), "Heap size is lowered with combined clusters");
+ assertEquals((long) ((3 - reservedMemoryGb) * (Math.pow(1024, 3)) * (1 - 0.18)), protonMemorySize(model.getContentClusters()
+ .get("content1")), "Memory for proton is lowered to account for the jvm heap");
assertProvisioned(0, ClusterSpec.Id.from("container1"), ClusterSpec.Type.container, model);
assertProvisioned(2, ClusterSpec.Id.from("content1"), ClusterSpec.Id.from("container1"), ClusterSpec.Type.combined, model);
+ assertEquals(1, logger.msgs().size());
+ assertEquals("Declaring combined cluster with <nodes of=\"...\"> is deprecated without replacement, " +
+ "and the feature will be removed in Vespa 9. Use separate container and content clusters instead",
+ logger.msgs().get(0).message);
}
@Test
@@ -304,13 +311,11 @@ public class ModelProvisioningTest {
VespaModelTester tester = new VespaModelTester();
tester.addHosts(5);
VespaModel model = tester.createModel(xmlWithNodes, true);
- assertEquals("Nodes in content1", 2, model.getContentClusters().get("content1").getRootGroup().getNodes().size());
- assertEquals("Nodes in container1", 2, model.getContainerClusters().get("container1").getContainers().size());
- assertEquals("Heap size is lowered with combined clusters",
- 30, physicalMemoryPercentage(model.getContainerClusters().get("container1")));
- assertEquals("Memory for proton is lowered to account for the jvm heap",
- (long) ((3 - reservedMemoryGb) * (Math.pow(1024, 3)) * (1 - 0.30)), protonMemorySize(model.getContentClusters()
- .get("content1")));
+ assertEquals(2, model.getContentClusters().get("content1").getRootGroup().getNodes().size(), "Nodes in content1");
+ assertEquals(2, model.getContainerClusters().get("container1").getContainers().size(), "Nodes in container1");
+ assertEquals(30, physicalMemoryPercentage(model.getContainerClusters().get("container1")), "Heap size is lowered with combined clusters");
+ assertEquals((long) ((3 - reservedMemoryGb) * (Math.pow(1024, 3)) * (1 - 0.30)), protonMemorySize(model.getContentClusters()
+ .get("content1")), "Memory for proton is lowered to account for the jvm heap");
assertProvisioned(0, ClusterSpec.Id.from("container1"), ClusterSpec.Type.container, model);
assertProvisioned(2, ClusterSpec.Id.from("content1"), ClusterSpec.Id.from("container1"), ClusterSpec.Type.combined, model);
}
@@ -338,12 +343,10 @@ public class ModelProvisioningTest {
VespaModelTester tester = new VespaModelTester();
tester.addHosts(7);
VespaModel model = tester.createModel(xmlWithNodes, true);
- assertEquals("Nodes in content1", 2, model.getContentClusters().get("content1").getRootGroup().getNodes().size());
- assertEquals("Nodes in container1", 2, model.getContainerClusters().get("container1").getContainers().size());
- assertEquals("Heap size is normal",
- 70, physicalMemoryPercentage(model.getContainerClusters().get("container1")));
- assertEquals("Memory for proton is normal",
- (long) ((3 - reservedMemoryGb) * (Math.pow(1024, 3))), protonMemorySize(model.getContentClusters().get("content1")));
+ assertEquals(2, model.getContentClusters().get("content1").getRootGroup().getNodes().size(), "Nodes in content1");
+ assertEquals(2, model.getContainerClusters().get("container1").getContainers().size(), "Nodes in container1");
+ assertEquals(70, physicalMemoryPercentage(model.getContainerClusters().get("container1")), "Heap size is normal");
+ assertEquals((long) ((3 - reservedMemoryGb) * (Math.pow(1024, 3))), protonMemorySize(model.getContentClusters().get("content1")), "Memory for proton is normal");
}
@Test
@@ -369,8 +372,8 @@ public class ModelProvisioningTest {
tester.addHosts(5);
VespaModel model = tester.createModel(xmlWithNodes, true);
- assertEquals("Nodes in content1", 2, model.getContentClusters().get("content1").getRootGroup().getNodes().size());
- assertEquals("Nodes in container1", 2, model.getContainerClusters().get("container1").getContainers().size());
+ assertEquals(2, model.getContentClusters().get("content1").getRootGroup().getNodes().size(), "Nodes in content1");
+ assertEquals(2, model.getContainerClusters().get("container1").getContainers().size(), "Nodes in container1");
for (Container container : model.getContainerClusters().get("container1").getContainers())
assertTrue(container.getJvmOptions().contains("testoption"));
}
@@ -405,10 +408,10 @@ public class ModelProvisioningTest {
tester.addHosts(8);
VespaModel model = tester.createModel(xmlWithNodes, true);
- assertEquals("Nodes in content1", 2, model.getContentClusters().get("content1").getRootGroup().getNodes().size());
- assertEquals("Nodes in container1", 2, model.getContainerClusters().get("container1").getContainers().size());
- assertEquals("Nodes in content2", 3, model.getContentClusters().get("content2").getRootGroup().getNodes().size());
- assertEquals("Nodes in container2", 3, model.getContainerClusters().get("container2").getContainers().size());
+ assertEquals(2, model.getContentClusters().get("content1").getRootGroup().getNodes().size(), "Nodes in content1");
+ assertEquals(2, model.getContainerClusters().get("container1").getContainers().size(), "Nodes in container1");
+ assertEquals(3, model.getContentClusters().get("content2").getRootGroup().getNodes().size(), "Nodes in content2");
+ assertEquals(3, model.getContainerClusters().get("container2").getContainers().size(), "Nodes in container2");
}
@Test
@@ -528,10 +531,10 @@ public class ModelProvisioningTest {
.stream().map(cc -> cc.getHostResource()).collect(Collectors.toSet());
Set<HostResource> slobrokHosts = admin.getSlobroks().stream().map(Slobrok::getHost).collect(Collectors.toSet());
assertEquals(3, slobrokHosts.size());
- assertTrue("Slobroks are assigned on cluster controller nodes", clusterControllerHosts.containsAll(slobrokHosts));
- assertTrue("Logserver is assigned from container nodes", containerHosts.contains(admin.getLogserver().getHost()));
- assertEquals("No in-cluster config servers in a hosted environment", 0, admin.getConfigservers().size());
- assertEquals("Dedicated admin cluster controllers when hosted", 3, admin.getClusterControllers().getContainers().size());
+ assertTrue(clusterControllerHosts.containsAll(slobrokHosts), "Slobroks are assigned on cluster controller nodes");
+ assertTrue(containerHosts.contains(admin.getLogserver().getHost()), "Logserver is assigned from container nodes");
+ assertEquals(0, admin.getConfigservers().size(), "No in-cluster config servers in a hosted environment");
+ assertEquals(3, admin.getClusterControllers().getContainers().size(), "Dedicated admin cluster controllers when hosted");
// Check content clusters
ContentCluster cluster = model.getContentClusters().get("bar");
@@ -619,10 +622,10 @@ public class ModelProvisioningTest {
Admin admin = model.getAdmin();
Set<HostResource> slobrokHosts = admin.getSlobroks().stream().map(Slobrok::getHost).collect(Collectors.toSet());
assertEquals(3, slobrokHosts.size());
- assertTrue("Slobroks are assigned from container nodes",
- containerHosts.containsAll(slobrokHosts));
- assertTrue("Logserver is assigned from container nodes", containerHosts.contains(admin.getLogserver().getHost()));
- assertEquals("No in-cluster config servers in a hosted environment", 0, admin.getConfigservers().size());
+ assertTrue(containerHosts.containsAll(slobrokHosts),
+ "Slobroks are assigned from container nodes");
+ assertTrue(containerHosts.contains(admin.getLogserver().getHost()), "Logserver is assigned from container nodes");
+ assertEquals(0, admin.getConfigservers().size(), "No in-cluster config servers in a hosted environment");
}
@Test
@@ -669,9 +672,9 @@ public class ModelProvisioningTest {
.stream().map(cc -> cc.getHostResource()).collect(Collectors.toSet());
Set<HostResource> slobrokHosts = admin.getSlobroks().stream().map(Slobrok::getHost).collect(Collectors.toSet());
assertEquals(3, slobrokHosts.size());
- assertTrue("Slobroks are assigned on cluster controller nodes", clusterControllerHosts.containsAll(slobrokHosts));
- assertTrue("Logserver is assigned from container nodes", containerHosts.contains(admin.getLogserver().getHost()));
- assertEquals("No in-cluster config servers in a hosted environment", 0, admin.getConfigservers().size());
+ assertTrue(clusterControllerHosts.containsAll(slobrokHosts), "Slobroks are assigned on cluster controller nodes");
+ assertTrue(containerHosts.contains(admin.getLogserver().getHost()), "Logserver is assigned from container nodes");
+ assertEquals(0, admin.getConfigservers().size(), "No in-cluster config servers in a hosted environment");
assertEquals(3, admin.getClusterControllers().getContainers().size());
// Check content clusters
@@ -807,11 +810,11 @@ public class ModelProvisioningTest {
assertEquals(numberOfHosts, model.getRoot().hostSystem().getHosts().size());
// Check slobroks clusters
- assertEquals("Includes retired node", 1+3, model.getAdmin().getSlobroks().size());
+ assertEquals(1+3, model.getAdmin().getSlobroks().size(), "Includes retired node");
assertEquals("node-1-3-50-11", model.getAdmin().getSlobroks().get(0).getHostName());
assertEquals("node-1-3-50-10", model.getAdmin().getSlobroks().get(1).getHostName());
assertEquals("node-1-3-50-08", model.getAdmin().getSlobroks().get(2).getHostName());
- assertEquals("Included in addition because it is retired", "node-1-3-50-09", model.getAdmin().getSlobroks().get(3).getHostName());
+ assertEquals("node-1-3-50-09", model.getAdmin().getSlobroks().get(3).getHostName(), "Included in addition because it is retired");
}
@Test
@@ -832,12 +835,12 @@ public class ModelProvisioningTest {
assertEquals(10+2, model.getRoot().hostSystem().getHosts().size());
// Check slobroks clusters
- assertEquals("Includes retired node", 3+2, model.getAdmin().getSlobroks().size());
+ assertEquals(3+2, model.getAdmin().getSlobroks().size(), "Includes retired node");
assertEquals("node-1-3-50-12", model.getAdmin().getSlobroks().get(0).getHostName());
assertEquals("node-1-3-50-11", model.getAdmin().getSlobroks().get(1).getHostName());
assertEquals("node-1-3-50-10", model.getAdmin().getSlobroks().get(2).getHostName());
- assertEquals("Included in addition because it is retired", "node-1-3-50-04", model.getAdmin().getSlobroks().get(3).getHostName());
- assertEquals("Included in addition because it is retired", "node-1-3-50-03", model.getAdmin().getSlobroks().get(4).getHostName());
+ assertEquals("node-1-3-50-04", model.getAdmin().getSlobroks().get(3).getHostName(), "Included in addition because it is retired");
+ assertEquals("node-1-3-50-03", model.getAdmin().getSlobroks().get(4).getHostName(), "Included in addition because it is retired");
}
@Test
@@ -862,14 +865,14 @@ public class ModelProvisioningTest {
// Check slobroks clusters
// ... from cluster default
- assertEquals("Includes retired node", 7, model.getAdmin().getSlobroks().size());
+ assertEquals(7, model.getAdmin().getSlobroks().size(), "Includes retired node");
assertEquals("node-1-3-50-16", model.getAdmin().getSlobroks().get(0).getHostName());
assertEquals("node-1-3-50-14", model.getAdmin().getSlobroks().get(1).getHostName());
- assertEquals("Included in addition because it is retired", "node-1-3-50-15", model.getAdmin().getSlobroks().get(2).getHostName());
+ assertEquals("node-1-3-50-15", model.getAdmin().getSlobroks().get(2).getHostName(), "Included in addition because it is retired");
// ... from cluster bar
assertEquals("node-1-3-50-03", model.getAdmin().getSlobroks().get(3).getHostName());
- assertEquals("Included in addition because it is retired", "node-1-3-50-05", model.getAdmin().getSlobroks().get(5).getHostName());
- assertEquals("Included in addition because it is retired", "node-1-3-50-04", model.getAdmin().getSlobroks().get(6).getHostName());
+ assertEquals("node-1-3-50-05", model.getAdmin().getSlobroks().get(5).getHostName(), "Included in addition because it is retired");
+ assertEquals("node-1-3-50-04", model.getAdmin().getSlobroks().get(6).getHostName(), "Included in addition because it is retired");
}
@Test
@@ -1248,44 +1251,48 @@ public class ModelProvisioningTest {
assertEquals("bar/storage/0", cluster.getRootGroup().getNodes().get(0).getConfigId());
}
- @Test(expected = IllegalArgumentException.class)
+ @Test
public void testRequiringMoreNodesThanAreAvailable() {
- String services =
- "<?xml version='1.0' encoding='utf-8' ?>\n" +
- "<services>" +
- " <content version='1.0' id='bar'>" +
- " <redundancy>1</redundancy>" +
- " <documents>" +
- " <document type='type1' mode='index'/>" +
- " </documents>" +
- " <nodes count='3' required='true'/>" +
- " </content>" +
- "</services>";
-
- int numberOfHosts = 2;
- VespaModelTester tester = new VespaModelTester();
- tester.addHosts(numberOfHosts);
- tester.createModel(services, false);
+ assertThrows(IllegalArgumentException.class, () -> {
+ String services =
+ "<?xml version='1.0' encoding='utf-8' ?>\n" +
+ "<services>" +
+ " <content version='1.0' id='bar'>" +
+ " <redundancy>1</redundancy>" +
+ " <documents>" +
+ " <document type='type1' mode='index'/>" +
+ " </documents>" +
+ " <nodes count='3' required='true'/>" +
+ " </content>" +
+ "</services>";
+
+ int numberOfHosts = 2;
+ VespaModelTester tester = new VespaModelTester();
+ tester.addHosts(numberOfHosts);
+ tester.createModel(services, false);
+ });
}
- @Test(expected = IllegalArgumentException.class)
+ @Test
public void testRequiredNodesAndDedicatedClusterControllers() {
- String services =
- "<?xml version='1.0' encoding='utf-8' ?>\n" +
- "<services>" +
- " <content version='1.0' id='foo'>" +
- " <redundancy>1</redundancy>" +
- " <documents>" +
- " <document type='type1' mode='index'/>" +
- " </documents>" +
- " <nodes count='2' required='true'/>" +
- " </content>" +
- "</services>";
-
- int numberOfHosts = 4; // needs 2 for foo and 3 for cluster controllers.
- VespaModelTester tester = new VespaModelTester();
- tester.addHosts(numberOfHosts);
- tester.createModel(services, false);
+ assertThrows(IllegalArgumentException.class, () -> {
+ String services =
+ "<?xml version='1.0' encoding='utf-8' ?>\n" +
+ "<services>" +
+ " <content version='1.0' id='foo'>" +
+ " <redundancy>1</redundancy>" +
+ " <documents>" +
+ " <document type='type1' mode='index'/>" +
+ " </documents>" +
+ " <nodes count='2' required='true'/>" +
+ " </content>" +
+ "</services>";
+
+ int numberOfHosts = 4; // needs 2 for foo and 3 for cluster controllers.
+ VespaModelTester tester = new VespaModelTester();
+ tester.addHosts(numberOfHosts);
+ tester.createModel(services, false);
+ });
}
@Test
@@ -1647,13 +1654,44 @@ public class ModelProvisioningTest {
tester.setHosted(true);
tester.addHosts(4);
VespaModel model = tester.createModel(new Zone(Environment.dev, RegionName.from("us-central-1")), services, true);
- assertEquals("We get 1 node per cluster and no admin node apart from the dedicated cluster controller", 3, model.getHosts().size());
+ assertEquals(3, model.getHosts().size(), "We get 1 node per cluster and no admin node apart from the dedicated cluster controller");
assertEquals(1, model.getContainerClusters().size());
assertEquals(1, model.getContainerClusters().get("foo").getContainers().size());
assertEquals(1, model.getContentClusters().get("bar").getRootGroup().countNodes(true));
assertEquals(1, model.getAdmin().getClusterControllers().getContainers().size());
}
+ @Test
+ public void testThatStandaloneSyntaxWithClusterControllerWorksOnHostedManuallyDeployed() {
+ String services =
+ "<?xml version='1.0' encoding='utf-8' ?>" +
+ "<services>" +
+ " <container id='foo' version='1.0'>" +
+ " <nodes count=\"2\" />" +
+ " </container>" +
+ " <content id='bar' version='1.0'>" +
+ " <documents>" +
+ " <document type='type1' mode='index'/>" +
+ " </documents>" +
+ " <redundancy>1</redundancy>" +
+ " <nodes>" +
+ " <group>" +
+ " <node distribution-key='0' hostalias='node3'/>" +
+ " </group>" +
+ " </nodes>" +
+ " </content>" +
+ "</services>";
+ VespaModelTester tester = new VespaModelTester();
+ tester.setHosted(true);
+ tester.addHosts(4);
+ try {
+ VespaModel model = tester.createModel(new Zone(Environment.staging, RegionName.from("us-central-1")), services, true);
+ fail("expected failure");
+ } catch (IllegalArgumentException e) {
+ assertTrue(e.getMessage().startsWith("Clusters in hosted environments must have a <nodes count='N'> tag"));
+ }
+ }
+
/** Deploying an application with "nodes count" standalone should give a single-node deployment */
@Test
public void testThatHostedSyntaxWorksOnStandalone() {
@@ -1677,10 +1715,12 @@ public class ModelProvisioningTest {
tester.addHosts(3);
VespaModel model = tester.createModel(services, true);
- assertEquals("Nodes in container cluster", 1,
- model.getContainerClusters().get("container1").getContainers().size());
- assertEquals("Nodes in content cluster (downscaled)", 1,
- model.getContentClusters().get("content").getRootGroup().getNodes().size());
+ assertEquals(1,
+ model.getContainerClusters().get("container1").getContainers().size(),
+ "Nodes in container cluster");
+ assertEquals(1,
+ model.getContentClusters().get("content").getRootGroup().getNodes().size(),
+ "Nodes in content cluster (downscaled)");
assertEquals(1, model.getAdmin().getSlobroks().size());
@@ -1733,10 +1773,12 @@ public class ModelProvisioningTest {
tester.addHosts(3);
VespaModel model = tester.createModel(services, hosts, true);
- assertEquals("Nodes in container cluster", 1,
- model.getContainerClusters().get("container1").getContainers().size());
- assertEquals("Nodes in content cluster (downscaled)", 1,
- model.getContentClusters().get("content").getRootGroup().getNodes().size());
+ assertEquals(1,
+ model.getContainerClusters().get("container1").getContainers().size(),
+ "Nodes in container cluster");
+ assertEquals(1,
+ model.getContentClusters().get("content").getRootGroup().getNodes().size(),
+ "Nodes in content cluster (downscaled)");
assertEquals(1, model.getAdmin().getSlobroks().size());
@@ -2073,10 +2115,10 @@ public class ModelProvisioningTest {
.collect(Collectors.groupingBy(h -> h.spec().membership().get().cluster().id().value()));
tests.forEach((clusterId, stateful) -> {
List<HostResource> hosts = hostsByCluster.getOrDefault(clusterId, List.of());
- assertFalse("Hosts are provisioned for '" + clusterId + "'", hosts.isEmpty());
- assertEquals("Hosts in cluster '" + clusterId + "' are " + (stateful ? "" : "not ") + "stateful",
- stateful,
- hosts.stream().allMatch(h -> h.spec().membership().get().cluster().isStateful()));
+ assertFalse(hosts.isEmpty(), "Hosts are provisioned for '" + clusterId + "'");
+ assertEquals(stateful,
+ hosts.stream().allMatch(h -> h.spec().membership().get().cluster().isStateful()),
+ "Hosts in cluster '" + clusterId + "' are " + (stateful ? "" : "not ") + "stateful");
});
}
@@ -2118,7 +2160,7 @@ public class ModelProvisioningTest {
ZookeeperServerConfig.Builder config = new ZookeeperServerConfig.Builder();
cluster.getContainers().forEach(c -> c.getConfig(config));
cluster.getConfig(config);
- assertTrue("Initial servers are not joining", config.build().server().stream().noneMatch(ZookeeperServerConfig.Server::joining));
+ assertTrue(config.build().server().stream().noneMatch(ZookeeperServerConfig.Server::joining), "Initial servers are not joining");
}
{
VespaModel nextModel = tester.createModel(Zone.defaultZone(), servicesXml.apply(3), true, false, false, 0, Optional.of(model), new DeployState.Builder(), "node-1-3-50-04", "node-1-3-50-03");
@@ -2126,22 +2168,22 @@ public class ModelProvisioningTest {
ZookeeperServerConfig.Builder config = new ZookeeperServerConfig.Builder();
cluster.getContainers().forEach(c -> c.getConfig(config));
cluster.getConfig(config);
- assertEquals("New nodes are joining",
- Map.of(0, false,
+ assertEquals(Map.of(0, false,
1, false,
2, false,
3, true,
4, true),
config.build().server().stream().collect(Collectors.toMap(ZookeeperServerConfig.Server::id,
- ZookeeperServerConfig.Server::joining)));
- assertEquals("Retired nodes are retired",
- Map.of(0, false,
+ ZookeeperServerConfig.Server::joining)),
+ "New nodes are joining");
+ assertEquals(Map.of(0, false,
1, true,
2, true,
3, false,
4, false),
config.build().server().stream().collect(Collectors.toMap(ZookeeperServerConfig.Server::id,
- ZookeeperServerConfig.Server::retired)));
+ ZookeeperServerConfig.Server::retired)),
+ "Retired nodes are retired");
}
}
@@ -2284,15 +2326,31 @@ public class ModelProvisioningTest {
private static void assertProvisioned(int nodeCount, ClusterSpec.Id id, ClusterSpec.Id combinedId,
ClusterSpec.Type type, VespaModel model) {
- assertEquals("Nodes in cluster " + id + " with type " + type + (combinedId != null ? ", combinedId " + combinedId : ""), nodeCount,
+ assertEquals(nodeCount,
model.hostSystem().getHosts().stream()
.map(h -> h.spec().membership().get().cluster())
.filter(spec -> spec.id().equals(id) && spec.type().equals(type) && spec.combinedId().equals(Optional.ofNullable(combinedId)))
- .count());
+ .count(),
+ "Nodes in cluster " + id + " with type " + type + (combinedId != null ? ", combinedId " + combinedId : ""));
}
private static void assertProvisioned(int nodeCount, ClusterSpec.Id id, ClusterSpec.Type type, VespaModel model) {
assertProvisioned(nodeCount, id, null, type, model);
}
+ record TestLogger(List<LogMessage> msgs) implements DeployLogger {
+
+ public TestLogger() {
+ this(new ArrayList<>());
+ }
+
+ @Override
+ public void log(Level level, String message) {
+ msgs.add(new LogMessage(level, message));
+ }
+
+ record LogMessage(Level level, String message) {}
+
+ }
+
}
diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/SingleNodeProvisionerTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/SingleNodeProvisionerTest.java
index 446350a734f..e5f6235552f 100644
--- a/config-model/src/test/java/com/yahoo/config/model/provision/SingleNodeProvisionerTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/provision/SingleNodeProvisionerTest.java
@@ -6,7 +6,7 @@ import com.yahoo.config.model.api.HostProvisioner;
import com.yahoo.config.model.test.MockApplicationPackage;
import com.yahoo.config.provision.HostSpec;
import com.yahoo.vespa.model.VespaModel;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import org.xml.sax.SAXException;
import java.io.IOException;
@@ -21,7 +21,7 @@ import java.util.Set;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author hmusum
@@ -29,7 +29,7 @@ import static org.junit.Assert.assertTrue;
public class SingleNodeProvisionerTest {
@Test
- public void require_basic_works() {
+ void require_basic_works() {
SingleNodeProvisioner hostProvisioner = new SingleNodeProvisioner();
// 4 services, 2 host aliases, mapping to 2 host.
@@ -56,16 +56,16 @@ public class SingleNodeProvisionerTest {
}
@Test
- public void require_allocate_clustermembership_works() throws IOException, SAXException {
+ void require_allocate_clustermembership_works() throws IOException, SAXException {
String servicesXml = "<services version='1.0'>"
- + " <admin version='3.0'>"
- + " <nodes count='1' />"
- + " </admin>"
- + " <container version='1.0'>"
- + " <search />"
- + " <nodes count='1' />"
- + " </container>"
- + "</services>";
+ + " <admin version='3.0'>"
+ + " <nodes count='1' />"
+ + " </admin>"
+ + " <container version='1.0'>"
+ + " <search />"
+ + " <nodes count='1' />"
+ + " </container>"
+ + "</services>";
ApplicationPackage app = new MockApplicationPackage.Builder().withServices(servicesXml).build();
VespaModel model = new VespaModel(app);
assertThat(model.getHosts().size(), is(1));
@@ -93,7 +93,7 @@ public class SingleNodeProvisionerTest {
return createAliases(new ArrayList<String>());
}
- // Admin services on node1, qrserver on node2 + additional specs
+ // Admin services on node1, container on node2 + additional specs
private List<String> createAliases(Collection<String> additionalAliases) {
List<String> aliases = new ArrayList<>();
aliases.add("node1");