diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-07-17 20:21:06 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-07-17 20:21:06 +0200 |
commit | a98be9842d56af0667b9eabcbcce5d5e9d390378 (patch) | |
tree | d9c40b0a5aa897857b73fd5818333b52e6d4428b | |
parent | 525841eb27695bdf859ab8817b380eb9cf972479 (diff) |
Use fixture
3 files changed, 23 insertions, 19 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java index 1b7f297a3ed..e7d092ec37d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java @@ -307,25 +307,18 @@ public class AutoscalingTest { @Test public void test_autoscaling_groupsize_by_cpu_read_dominated() { - NodeResources resources = new NodeResources(3, 100, 100, 1); ClusterResources min = new ClusterResources( 3, 1, new NodeResources(1, 1, 1, 1)); ClusterResources max = new ClusterResources(21, 7, new NodeResources(100, 1000, 1000, 1)); - var capacity = Capacity.from(min, max); - AutoscalingTester tester = new AutoscalingTester(resources.withVcpu(resources.vcpu() * 2)); - - ApplicationId application1 = AutoscalingTester.applicationId("application1"); - ClusterSpec cluster1 = AutoscalingTester.clusterSpec(ClusterSpec.Type.container, "cluster1"); - - // deploy - tester.deploy(application1, cluster1, 6, 2, resources); - tester.addCpuMeasurements(0.25f, 1f, 120, application1); - tester.clock().advance(Duration.ofMinutes(-10 * 5)); - tester.addLoadMeasurements(application1, cluster1.id(), 10, - t -> t == 0 ? 20.0 : 10.0, - t -> 1.0); - tester.assertResources("Scaling up since resource usage is too high, changing to 1 group is cheaper", - 8, 1, 2.6, 83.3, 52.6, - tester.autoscale(application1, cluster1, capacity)); + var fixture = AutoscalingTester.fixture() + .capacity(Capacity.from(min, max)) + .build(); + fixture.tester().clock().advance(Duration.ofDays(2)); + Duration timePassed = fixture.addCpuMeasurements(0.25, 120); + fixture.tester().clock().advance(timePassed.negated()); + fixture.addLoadMeasurements(10, t -> t == 0 ? 20.0 : 10.0, t -> 1.0); + fixture.tester().assertResources("Scaling up since resource usage is too high, changing to 1 group is cheaper", + 9, 1, 1.8, 5.0, 50.0, + fixture.autoscale()); } /** Same as above but mostly write traffic, which favors smaller groups */ diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java index e08444c6edb..748b8656358 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java @@ -163,10 +163,11 @@ class AutoscalingTester { * @param count the number of measurements * @param applicationId the application we're adding measurements for all nodes of */ - public void addCpuMeasurements(float value, float otherResourcesLoad, - int count, ApplicationId applicationId) { + public Duration addCpuMeasurements(float value, float otherResourcesLoad, + int count, ApplicationId applicationId) { NodeList nodes = nodeRepository().nodes().list(Node.State.active).owner(applicationId); float oneExtraNodeFactor = (float)(nodes.size() - 1.0) / (nodes.size()); + Instant initialTime = clock().instant(); for (int i = 0; i < count; i++) { clock().advance(Duration.ofSeconds(150)); for (Node node : nodes) { @@ -182,6 +183,7 @@ class AutoscalingTester { 0.0)))); } } + return Duration.between(initialTime, clock().instant()); } /** 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 429e0ce7030..c99beed5170 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 @@ -10,6 +10,7 @@ import com.yahoo.vespa.hosted.provision.NodeList; import java.time.Duration; import java.util.Optional; +import java.util.function.IntFunction; /** * Fixture for autoscaling tests. @@ -63,6 +64,14 @@ public class Fixture { tester.deactivateRetired(application, cluster, capacity); } + public Duration addCpuMeasurements(double cpuLoad, int measurements) { + return tester().addCpuMeasurements((float)cpuLoad, 1.0f, measurements, application); + } + + public void addLoadMeasurements(int measurements, IntFunction<Double> queryRate, IntFunction<Double> writeRate) { + tester().addLoadMeasurements(application, cluster.id(), measurements, queryRate, writeRate); + } + public void applyCpuLoad(double cpuLoad, int measurements) { Duration samplingInterval = Duration.ofSeconds(150L); // in addCpuMeasurements tester().addCpuMeasurements((float)cpuLoad, 1.0f, measurements, application); |