From 3bb080297cfb21fea5d17f3e0079ff5d4179ec00 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Mon, 1 Aug 2022 17:52:33 +0200 Subject: Use fixture --- .../autoscale/AutoscalingIntegrationTest.java | 51 +++++++--------------- .../vespa/hosted/provision/autoscale/Fixture.java | 27 +++++++++--- 2 files changed, 36 insertions(+), 42 deletions(-) diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingIntegrationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingIntegrationTest.java index bb441c6621c..d8becdf7c80 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingIntegrationTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingIntegrationTest.java @@ -1,22 +1,16 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.autoscale; -import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; -import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.config.provision.HostSpec; import com.yahoo.config.provision.NodeResources; import com.yahoo.test.ManualClock; -import com.yahoo.transaction.Mutex; -import com.yahoo.vespa.hosted.provision.applications.Application; import com.yahoo.vespa.hosted.provision.testutils.OrchestratorMock; import org.junit.Test; import java.time.Duration; +import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -28,40 +22,27 @@ public class AutoscalingIntegrationTest { @Test public void testComponentIntegration() { - NodeResources nodes = new NodeResources(1, 10, 100, 1); - NodeResources hosts = new NodeResources(3, 20, 200, 1); - - AutoscalingTester tester = new AutoscalingTester(hosts); - MetricsV2MetricsFetcher fetcher = new MetricsV2MetricsFetcher(tester.nodeRepository(), + var fixture = AutoscalingTester.fixture() + .hostResources(new NodeResources(3, 20, 200, 1)) + .initialResources(Optional.of(new ClusterResources(2, 1, + new NodeResources(1, 10, 100, 1)))) + .build(); + MetricsV2MetricsFetcher fetcher = new MetricsV2MetricsFetcher(fixture.tester().nodeRepository(), new OrchestratorMock(), - new MockHttpClient(tester.clock())); - Autoscaler autoscaler = new Autoscaler(tester.nodeRepository()); - - ApplicationId application1 = AutoscalingTester.applicationId("test1"); - ClusterSpec cluster1 = AutoscalingTester.clusterSpec(ClusterSpec.Type.container, "test"); - Set hostnames = tester.deploy(application1, cluster1, 2, 1, nodes) - .stream().map(HostSpec::hostname) - .collect(Collectors.toSet()); + new MockHttpClient(fixture.tester().clock())); + Autoscaler autoscaler = new Autoscaler(fixture.tester().nodeRepository()); + // The metrics response (below) hardcodes these hostnames: - assertEquals(Set.of("node-1-of-host-1.yahoo.com", "node-1-of-host-10.yahoo.com"), hostnames); + assertEquals(Set.of("node-1-of-host-1.yahoo.com", "node-1-of-host-10.yahoo.com"), fixture.nodes().hostnames()); for (int i = 0; i < 1000; i++) { - tester.clock().advance(Duration.ofSeconds(10)); - fetcher.fetchMetrics(application1).whenComplete((r, e) -> tester.nodeMetricsDb().addNodeMetrics(r.nodeMetrics())); - tester.clock().advance(Duration.ofSeconds(10)); - tester.nodeMetricsDb().gc(); + fixture.tester().clock().advance(Duration.ofSeconds(10)); + fetcher.fetchMetrics(fixture.applicationId()).whenComplete((r, e) -> fixture.tester().nodeMetricsDb().addNodeMetrics(r.nodeMetrics())); + fixture.tester().clock().advance(Duration.ofSeconds(10)); + fixture.tester().nodeMetricsDb().gc(); } - ClusterResources min = new ClusterResources(2, 1, nodes); - ClusterResources max = new ClusterResources(2, 1, nodes); - - Application application = tester.nodeRepository().applications().get(application1).orElse(Application.empty(application1)) - .withCluster(cluster1.id(), false, Capacity.from(min, max)); - try (Mutex lock = tester.nodeRepository().nodes().lock(application1)) { - tester.nodeRepository().applications().put(application, lock); - } - var scaledResources = autoscaler.suggest(application, application.clusters().get(cluster1.id()), - tester.nodeRepository().nodes().list().owner(application1)); + var scaledResources = autoscaler.suggest(fixture.application(), fixture.cluster(), fixture.nodes()); assertTrue(scaledResources.isPresent()); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java index 3e4dec3c248..56ffc4ef993 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Fixture.java @@ -9,9 +9,10 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.RegionName; -import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.hosted.provision.NodeList; +import com.yahoo.vespa.hosted.provision.applications.Application; +import com.yahoo.vespa.hosted.provision.applications.Cluster; import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator; import java.time.Duration; @@ -42,7 +43,24 @@ public class Fixture { tester.deploy(builder.application, builder.cluster, deployCapacity); } - public AutoscalingTester tester() { return tester; } + public AutoscalingTester tester() { return tester; } + + public ApplicationId applicationId() { return application; } + + public ClusterSpec.Id clusterId() { return cluster.id(); } + + public Application application() { + return tester().nodeRepository().applications().get(application).orElse(Application.empty(application)); + } + + public Cluster cluster() { + return application().cluster(clusterId()).get(); + } + + /** Returns the nodes allocated to the fixture application cluster */ + public NodeList nodes() { + return tester().nodeRepository().nodes().list().owner(application).cluster(cluster.id()); + } /** Autoscale within the deployed capacity of this. */ public Autoscaler.Advice autoscale() { @@ -69,11 +87,6 @@ public class Fixture { tester().deploy(application, cluster, capacity); } - /** Returns the nodes allocated to the fixture application cluster */ - public NodeList nodes() { - return tester().nodeRepository().nodes().list().owner(application).cluster(cluster.id()); - } - public void deactivateRetired(Capacity capacity) { tester().deactivateRetired(application, cluster, capacity); } -- cgit v1.2.3