diff options
author | jonmv <venstad@gmail.com> | 2023-11-10 16:33:07 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-11-10 16:33:07 +0100 |
commit | 0ea36dae212c715f326e3f625ace817091361b78 (patch) | |
tree | 8306d2ecdbcc78665fe1751708e4d33be106a914 /node-repository/src/test | |
parent | 0683219b08f692a1c1e6648625cf28544215657a (diff) |
Unit test for pre-provisioning of LBs
Diffstat (limited to 'node-repository/src/test')
-rw-r--r-- | node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java index 3aae3122a5c..fb59b3077f8 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java @@ -32,6 +32,7 @@ import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeList; import com.yahoo.vespa.hosted.provision.lb.LoadBalancer; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerList; +import com.yahoo.vespa.hosted.provision.lb.LoadBalancerSpec; import com.yahoo.vespa.hosted.provision.lb.Real; import com.yahoo.vespa.hosted.provision.maintenance.LoadBalancerExpirer; import com.yahoo.vespa.hosted.provision.maintenance.TestMetric; @@ -182,6 +183,43 @@ public class LoadBalancerProvisionerTest { } @Test + public void pre_provision_load_balancers() { + flagSource.withIntFlag(PermanentFlags.PRE_PROVISIONED_LB_COUNT.id(), 2); + LoadBalancerProvisioner provisioner = new LoadBalancerProvisioner(tester.nodeRepository(), tester.loadBalancerService()); + LoadBalancerExpirer expirer = new LoadBalancerExpirer(tester.nodeRepository(), Duration.ofDays(1), tester.loadBalancerService(), new NullMetric()); + provisioner.refreshPool(); + expirer.run(); + assertEquals(2, tester.nodeRepository().loadBalancers().list().size()); + assertEquals(2, tester.nodeRepository().loadBalancers().list(LoadBalancerSpec.preProvisionOwner).size()); + + // Provision a load balancer when the pool has two entries. + ClusterSpec.Id containerCluster = ClusterSpec.Id.from("qrs"); + prepare(app1, clusterRequest(ClusterSpec.Type.container, containerCluster)); + List<LoadBalancer> loadBalancers = tester.nodeRepository().loadBalancers().list(app1).asList(); + assertEquals(1, loadBalancers.size()); + assertEquals(1, tester.nodeRepository().loadBalancers().list(LoadBalancerSpec.preProvisionOwner).asList().size()); + assertEquals(Optional.of("1"), loadBalancers.get(0).instance().get().idSeed()); + + // Shrink pool to 0 entries. + flagSource.withIntFlag(PermanentFlags.PRE_PROVISIONED_LB_COUNT.id(), 0); + provisioner.refreshPool(); + expirer.run(); + assertEquals(loadBalancers.stream().map(LoadBalancer::id).toList(), + tester.nodeRepository().loadBalancers().list().mapToList(LoadBalancer::id)); + + // Increase pool to 1 entry again. Creating an LB fails; the slot and idSeed are reused on retry. + tester.loadBalancerService().throwOnCreate(true); + flagSource.withIntFlag(PermanentFlags.PRE_PROVISIONED_LB_COUNT.id(), 1); + assertEquals("Did not expect a new load balancer to be created", + assertThrows(IllegalStateException.class, provisioner::refreshPool).getMessage()); + tester.loadBalancerService().throwOnCreate(false); + provisioner.refreshPool(); + assertEquals(List.of(Optional.of("3")), + tester.nodeRepository().loadBalancers().list(LoadBalancerSpec.preProvisionOwner) + .mapToList(lb -> lb.instance().get().idSeed())); + } + + @Test public void provision_load_balancers_with_dynamic_node_provisioning() { NodeResources resources = new NodeResources(1, 4, 10, 0.3); tester.makeReadyHosts(2, resources); |