diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-05-28 11:11:58 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-05-28 13:32:29 +0200 |
commit | fee4e16c50bb4ee5e79c487a6c976448509d6c4b (patch) | |
tree | 0e8bfda3ead1bef6845fe9a44f30997d9d5c793f /node-repository/src/test/java | |
parent | 81e4940fbf17a05471810e3959cb77e03db3bdbe (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.java | 37 |
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)); } |