aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/test/java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-05-28 11:11:58 +0200
committerMartin Polden <mpolden@mpolden.no>2021-05-28 13:32:29 +0200
commitfee4e16c50bb4ee5e79c487a6c976448509d6c4b (patch)
tree0e8bfda3ead1bef6845fe9a44f30997d9d5c793f /node-repository/src/test/java
parent81e4940fbf17a05471810e3959cb77e03db3bdbe (diff)
Trigger host restart when encrypting
Diffstat (limited to 'node-repository/src/test/java')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostEncrypterTest.java37
1 files changed, 28 insertions, 9 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostEncrypterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostEncrypterTest.java
index b3c78aa4627..be0a7a84025 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostEncrypterTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/HostEncrypterTest.java
@@ -22,22 +22,26 @@ import java.time.Instant;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
+import java.util.function.Consumer;
import java.util.function.Supplier;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
/**
* @author mpolden
*/
public class HostEncrypterTest {
+ private final ApplicationId infraApplication = ApplicationId.from("hosted-vespa", "infra", "default");
private final ProvisioningTester tester = new ProvisioningTester.Builder().build();
+ private final HostEncrypter encrypter = new HostEncrypter(tester.nodeRepository(), Duration.ofDays(1), new MockMetric());
@Test
public void no_hosts_encrypted_with_default_flag_value() {
provisionHosts(1);
- HostEncrypter encrypter = new HostEncrypter(tester.nodeRepository(), Duration.ofDays(1), new MockMetric());
encrypter.maintain();
assertEquals(0, tester.nodeRepository().nodes().list().encrypting().size());
}
@@ -46,7 +50,6 @@ public class HostEncrypterTest {
public void encrypt_hosts() {
tester.flagSource().withIntFlag(Flags.MAX_ENCRYPTING_HOSTS.id(), 3);
Supplier<NodeList> hosts = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host);
- HostEncrypter encrypter = new HostEncrypter(tester.nodeRepository(), Duration.ofDays(1), new MockMetric());
// Provision hosts and deploy applications
int hostCount = 5;
@@ -116,19 +119,31 @@ public class HostEncrypterTest {
List<Node> provisionedHosts = tester.makeReadyNodes(hostCount, new NodeResources(48, 128, 2000, 10), NodeType.host, 10);
// Set OS version supporting encryption
tester.patchNodes(provisionedHosts, (host) -> host.with(host.status().withOsVersion(host.status().osVersion().withCurrent(Optional.of(Version.fromString("8.0"))))));
- tester.activateTenantHosts();
+ tester.prepareAndActivateInfraApplication(infraApplication, NodeType.host);
+ }
+
+ private void parkRetiredHosts() {
+ // Redeploy to park retired hosts
+ replaceNodes(infraApplication, (application) -> tester.prepareAndActivateInfraApplication(application, NodeType.host));
+ // Trigger restart of parked nodes
+ encrypter.maintain();
}
private void completeEncryptionOf(List<Node> nodes) {
Instant now = tester.clock().instant();
- tester.patchNodes(nodes, (node) -> {
- if (node.reports().getReport(Report.WANT_TO_ENCRYPT_ID).isEmpty()) throw new IllegalArgumentException(node + " is not requested to encrypt");
+ parkRetiredHosts();
+ List<Node> patchedNodes = tester.patchNodes(nodes, (node) -> {
+ assertSame(Node.State.parked, node.state());
+ assertTrue(node + " has restart pending", node.allocation().get().restartGeneration().pending());
+ assertTrue(node + " wants to encrypt", node.reports().getReport(Report.WANT_TO_ENCRYPT_ID).isPresent());
return node.with(node.reports().withReport(Report.basicReport(Report.DISK_ENCRYPTED_ID,
Report.Type.UNSPECIFIED,
now,
- "Host is encrypted")))
- .withWantToRetire(false, Agent.system, now);
+ "Host is encrypted")));
});
+ patchedNodes = tester.nodeRepository().nodes().deallocate(patchedNodes, Agent.system, getClass().getSimpleName());
+ tester.nodeRepository().nodes().setReady(patchedNodes, Agent.system, getClass().getSimpleName());
+ tester.activateTenantHosts();
}
private void deployApplication(ApplicationId application) {
@@ -138,14 +153,18 @@ public class HostEncrypterTest {
}
private void replaceNodes(ApplicationId application) {
+ replaceNodes(application, this::deployApplication);
+ }
+
+ private void replaceNodes(ApplicationId application, Consumer<ApplicationId> deployer) {
// Deploy to retire nodes
- deployApplication(application);
+ deployer.accept(application);
List<Node> retired = tester.nodeRepository().nodes().list().owner(application).retired().asList();
assertFalse("At least one node is retired", retired.isEmpty());
tester.nodeRepository().nodes().setRemovable(application, retired);
// Redeploy to deactivate removable nodes and allocate new ones
- deployApplication(application);
+ deployer.accept(application);
tester.nodeRepository().nodes().list(Node.State.inactive).owner(application)
.forEach(node -> tester.nodeRepository().nodes().removeRecursively(node, true));
}