aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/test
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-11-28 09:41:55 +0100
committerMartin Polden <mpolden@mpolden.no>2018-11-28 13:41:08 +0100
commit7dd85f15fd33590253bdcecb1941813eeb243d8a (patch)
tree952dfcc39762cf416ae109fca663984adf677262 /node-repository/src/test
parent125dc30240e2ac6a00d2a4d3f503d2511ea592e2 (diff)
Provision load balancers when feature flag is set
Diffstat (limited to 'node-repository/src/test')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java56
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java2
9 files changed, 35 insertions, 45 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java
index a5f1dbb03cb..c98d53da874 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java
@@ -26,6 +26,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
+import com.yahoo.vespa.hosted.provision.testutils.LoadBalancerServiceMock;
import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
import org.junit.Test;
@@ -34,7 +35,6 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
-import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -238,7 +238,7 @@ public class FailedExpirerTest {
new MockNameResolver().mockAnyLookup(),
new DockerImage("docker-image"),
true);
- this.provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, Zone.defaultZone());
+ this.provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, Zone.defaultZone(), new LoadBalancerServiceMock());
this.expirer = new FailedExpirer(nodeRepository, zone, clock, Duration.ofMinutes(30),
new JobControl(nodeRepository.database()));
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
index c29f26ef1f6..3c7d634b495 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
@@ -29,6 +29,7 @@ import com.yahoo.vespa.hosted.provision.monitoring.MetricsReporterTest;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
+import com.yahoo.vespa.hosted.provision.testutils.LoadBalancerServiceMock;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
import com.yahoo.vespa.hosted.provision.testutils.OrchestratorMock;
@@ -84,7 +85,7 @@ public class NodeFailTester {
curator = new MockCurator();
nodeRepository = new NodeRepository(nodeFlavors, curator, clock, zone, new MockNameResolver().mockAnyLookup(),
new DockerImage("docker-registry.domain.tld:8080/dist/vespa"), true);
- provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, zone);
+ provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, zone, new LoadBalancerServiceMock());
hostLivenessTracker = new TestHostLivenessTracker(clock);
orchestrator = new OrchestratorMock();
this.configserverConfig = configserverConfig;
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java
index 2bf4f831072..5cb0adc8718 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java
@@ -22,6 +22,7 @@ import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorSpareChecker;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
+import com.yahoo.vespa.hosted.provision.testutils.LoadBalancerServiceMock;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
import com.yahoo.vespa.orchestrator.OrchestrationException;
@@ -74,7 +75,7 @@ public class NodeRetirerTester {
nodeRepository = new NodeRepository(nodeFlavors, curator, clock, zone, new MockNameResolver().mockAnyLookup(),
new DockerImage("docker-registry.domain.tld:8080/dist/vespa"), true);
jobControl = new JobControl(nodeRepository.database());
- NodeRepositoryProvisioner provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, zone);
+ NodeRepositoryProvisioner provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, zone, new LoadBalancerServiceMock());
deployer = new MockDeployer(provisioner, clock, apps);
flavors = nodeFlavors.getFlavors().stream().sorted(Comparator.comparing(Flavor::name)).collect(Collectors.toList());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java
index 961e9991d71..55fdd1dadb4 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java
@@ -26,6 +26,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
+import com.yahoo.vespa.hosted.provision.testutils.LoadBalancerServiceMock;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
import org.junit.Test;
@@ -122,7 +123,7 @@ public class OperatorChangeApplicationMaintainerTest {
Fixture(Zone zone, NodeRepository nodeRepository, NodeFlavors flavors, Curator curator) {
this.nodeRepository = nodeRepository;
this.curator = curator;
- this.provisioner = new NodeRepositoryProvisioner(nodeRepository, flavors, zone);
+ this.provisioner = new NodeRepositoryProvisioner(nodeRepository, flavors, zone, new LoadBalancerServiceMock());
}
void activate() {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java
index 7e48edfc805..87b98f7c002 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java
@@ -27,6 +27,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
+import com.yahoo.vespa.hosted.provision.testutils.LoadBalancerServiceMock;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
import org.junit.After;
@@ -247,7 +248,7 @@ public class PeriodicApplicationMaintainerTest {
Fixture(Zone zone, NodeRepository nodeRepository, NodeFlavors flavors, Curator curator) {
this.nodeRepository = nodeRepository;
this.curator = curator;
- this.provisioner = new NodeRepositoryProvisioner(nodeRepository, flavors, zone);
+ this.provisioner = new NodeRepositoryProvisioner(nodeRepository, flavors, zone, new LoadBalancerServiceMock());
Map<ApplicationId, MockDeployer.ApplicationContext> apps = new HashMap<>();
apps.put(app1, new MockDeployer.ApplicationContext(app1, clusterApp1,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java
index 0301c570ad1..fba1bead42f 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java
@@ -17,6 +17,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
+import com.yahoo.vespa.hosted.provision.testutils.LoadBalancerServiceMock;
import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
import org.junit.Test;
@@ -44,7 +45,7 @@ public class ReservationExpirerTest {
new MockNameResolver().mockAnyLookup(),
new DockerImage("docker-registry.domain.tld:8080/dist/vespa"),
true);
- NodeRepositoryProvisioner provisioner = new NodeRepositoryProvisioner(nodeRepository, flavors, Zone.defaultZone());
+ NodeRepositoryProvisioner provisioner = new NodeRepositoryProvisioner(nodeRepository, flavors, Zone.defaultZone(), new LoadBalancerServiceMock());
List<Node> nodes = new ArrayList<>(2);
nodes.add(nodeRepository.createNode(UUID.randomUUID().toString(), UUID.randomUUID().toString(), Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant));
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java
index 03f82e5c3d7..3f21e6b74ae 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java
@@ -26,6 +26,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
+import com.yahoo.vespa.hosted.provision.testutils.LoadBalancerServiceMock;
import com.yahoo.vespa.hosted.provision.testutils.MockDeployer;
import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
import com.yahoo.vespa.orchestrator.OrchestrationException;
@@ -60,7 +61,7 @@ public class RetiredExpirerTest {
private final NodeRepository nodeRepository = new NodeRepository(nodeFlavors, curator, clock, zone,
new MockNameResolver().mockAnyLookup(),
new DockerImage("docker-registry.domain.tld:8080/dist/vespa"), true);
- private final NodeRepositoryProvisioner provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, zone);
+ private final NodeRepositoryProvisioner provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, zone, new LoadBalancerServiceMock());
private final Orchestrator orchestrator = mock(Orchestrator.class);
private static final Duration RETIRED_EXPIRATION = Duration.ofHours(12);
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 ab7fda20889..ba8fad1f3c5 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
@@ -9,8 +9,8 @@ import com.yahoo.config.provision.HostSpec;
import com.yahoo.config.provision.Zone;
import com.yahoo.transaction.NestedTransaction;
import com.yahoo.vespa.hosted.provision.Node;
+import com.yahoo.vespa.hosted.provision.flag.FlagId;
import com.yahoo.vespa.hosted.provision.lb.LoadBalancer;
-import com.yahoo.vespa.hosted.provision.lb.LoadBalancerId;
import com.yahoo.vespa.hosted.provision.lb.LoadBalancerService;
import com.yahoo.vespa.hosted.provision.lb.Real;
import com.yahoo.vespa.hosted.provision.node.Agent;
@@ -20,13 +20,11 @@ import org.junit.Test;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
/**
* @author mpolden
@@ -51,6 +49,7 @@ public class LoadBalancerProvisionerTest {
public void provision_load_balancer() {
ClusterSpec.Id containerCluster1 = ClusterSpec.Id.from("qrs1");
ClusterSpec.Id contentCluster = ClusterSpec.Id.from("content");
+ tester.nodeRepository().flags().setEnabled(FlagId.exclusiveLoadBalancer, true);
tester.activate(app1, prepare(app1,
clusterRequest(ClusterSpec.Type.container, containerCluster1),
clusterRequest(ClusterSpec.Type.content, contentCluster)));
@@ -58,40 +57,32 @@ public class LoadBalancerProvisionerTest {
clusterRequest(ClusterSpec.Type.container, ClusterSpec.Id.from("qrs"))));
// Provision a load balancer for each application
- Map<LoadBalancerId, LoadBalancer> loadBalancers = loadBalancerProvisioner.provision(app1);
- loadBalancerProvisioner.provision(app2);
+ List<LoadBalancer> loadBalancers = loadBalancerProvisioner.get(app1);
assertEquals(1, loadBalancers.size());
- LoadBalancer loadBalancer = loadBalancers.values().iterator().next();
- assertEquals(loadBalancer.id().application(), app1);
- assertEquals(loadBalancer.id().cluster(), containerCluster1);
- assertEquals(loadBalancer.ports(), Collections.singletonList(4443));
- assertEquals(loadBalancer.reals().get(0).ipAddress(), "127.0.0.1");
- assertEquals(loadBalancer.reals().get(0).port(), 4443);
- assertEquals(loadBalancer.reals().get(1).ipAddress(), "127.0.0.2");
- assertEquals(loadBalancer.reals().get(1).port(), 4443);
+ assertEquals(loadBalancers.get(0).id().application(), app1);
+ assertEquals(loadBalancers.get(0).id().cluster(), containerCluster1);
+ assertEquals(loadBalancers.get(0).ports(), Collections.singletonList(4443));
+ assertEquals(loadBalancers.get(0).reals().get(0).ipAddress(), "127.0.0.1");
+ assertEquals(loadBalancers.get(0).reals().get(0).port(), 4443);
+ assertEquals(loadBalancers.get(0).reals().get(1).ipAddress(), "127.0.0.2");
+ assertEquals(loadBalancers.get(0).reals().get(1).port(), 4443);
// A container is failed
List<Node> containers = tester.getNodes(app1).type(ClusterSpec.Type.container).asList();
- Node container1 = containers.get(0);
- Node container2 = containers.get(1);
- tester.nodeRepository().fail(container1.hostname(), Agent.system, "Failed by unit test");
-
- // Reprovisioning load balancer removes failed container
- loadBalancer = loadBalancerProvisioner.provision(app1).values().iterator().next();
- assertEquals(1, loadBalancer.reals().size());
- assertEquals(container2.hostname(), loadBalancer.reals().get(0).hostname().value());
+ tester.nodeRepository().fail(containers.get(0).hostname(), Agent.system, "Failed by unit test");
// Redeploying replaces failed node
tester.activate(app1, prepare(app1,
clusterRequest(ClusterSpec.Type.container, containerCluster1),
clusterRequest(ClusterSpec.Type.content, contentCluster)));
- // Reprovisioning load balancer adds the new node
- Node container3 = tester.getNodes(app1).type(ClusterSpec.Type.container).asList().get(1);
- loadBalancer = loadBalancerProvisioner.provision(app1).values().iterator().next();
+ // Redeploy removed replaced failed node in load balancer
+ containers = tester.getNodes(app1).type(ClusterSpec.Type.container).asList();
+ LoadBalancer loadBalancer = loadBalancerProvisioner.get(app1).get(0);
assertEquals(2, loadBalancer.reals().size());
- assertEquals(container3.hostname(), loadBalancer.reals().get(1).hostname().value());
+ assertEquals(containers.get(0).hostname(), loadBalancer.reals().get(0).hostname().value());
+ assertEquals(containers.get(1).hostname(), loadBalancer.reals().get(1).hostname().value());
// Add another container cluster
ClusterSpec.Id containerCluster2 = ClusterSpec.Id.from("qrs2");
@@ -101,7 +92,7 @@ public class LoadBalancerProvisionerTest {
clusterRequest(ClusterSpec.Type.content, contentCluster)));
// Load balancer is provisioned for second container cluster
- loadBalancers = loadBalancerProvisioner.provision(app1);
+ loadBalancers = loadBalancerProvisioner.get(app1);
assertEquals(2, loadBalancers.size());
List<HostName> activeContainers = tester.getNodes(app1, Node.State.active)
.type(ClusterSpec.Type.container).asList()
@@ -110,28 +101,21 @@ public class LoadBalancerProvisionerTest {
.map(HostName::from)
.sorted()
.collect(Collectors.toList());
- List<HostName> reals = loadBalancers.values().stream()
+ List<HostName> reals = loadBalancers.stream()
.flatMap(lb -> lb.reals().stream())
.map(Real::hostname)
.sorted()
.collect(Collectors.toList());
assertEquals(activeContainers, reals);
- // Removing load balancer with active containers fails
- try {
- loadBalancerProvisioner.deactivate(app1);
- fail("Expected exception");
- } catch (IllegalArgumentException ignored) {}
-
- // Application and load balancer is removed
+ // Application is removed and load balancer is deactivated
NestedTransaction removeTransaction = new NestedTransaction();
tester.provisioner().remove(removeTransaction, app1);
removeTransaction.commit();
- loadBalancerProvisioner.deactivate(app1);
List<LoadBalancer> assignedLoadBalancer = tester.nodeRepository().database().readLoadBalancers(app1);
assertEquals(2, loadBalancers.size());
- assertTrue("Load balancers marked for deletion", assignedLoadBalancer.stream().allMatch(LoadBalancer::inactive));
+ assertTrue("Deactivated load balancers", assignedLoadBalancer.stream().allMatch(LoadBalancer::inactive));
}
private ClusterSpec clusterRequest(ClusterSpec.Type type, ClusterSpec.Id id) {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java
index 8c0937d34b8..27b592b0d55 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java
@@ -91,8 +91,8 @@ public class ProvisioningTester {
new DockerImage("docker-registry.domain.tld:8080/dist/vespa"), true);
this.orchestrator = mock(Orchestrator.class);
doThrow(new RuntimeException()).when(orchestrator).acquirePermissionToRemove(any());
- this.provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, zone);
this.loadBalancerService = new LoadBalancerServiceMock();
+ this.provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, zone, loadBalancerService);
this.capacityPolicies = new CapacityPolicies(zone, nodeFlavors);
this.provisionLogger = new NullProvisionLogger();
}