@Test public void testSuspendState() { AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .buildSpec()); policy.suspend(); assertFalse(policy.isRunning()); assertFalse(policy.isDestroyed()); policy.resume(); assertTrue(policy.isRunning()); assertFalse(policy.isDestroyed()); }
@Test public void testHasId() throws Exception { resizable.policies().remove(policy); policy = resizable.policies().add(AutoScalerPolicy.builder() .minPoolSize(2) .buildSpec()); Assert.assertTrue(policy.getId()!=null); }
@Test public void testDeprecatedSetGroupWorks() throws Exception { RecordingMembershipTrackingPolicy policy2 = group.policies().add(PolicySpec.create(RecordingMembershipTrackingPolicy.class) .configure(RecordingMembershipTrackingPolicy.GROUP, group) .configure("sensorsToTrack", ImmutableSet.of(TestEntity.NAME))); TestEntity e1 = createAndManageChildOf(group); e1.sensors().set(TestEntity.NAME, "myname"); assertRecordsEventually(policy2, Record.newAdded(e1), Record.newChanged(e1)); }
@Test public void testReconfigureResizeDownStabilizationDelay() { tc.resize(2); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .resizeDownStabilizationDelay(Duration.TWO_MINUTES) .buildSpec()); policy.config().set(AutoScalerPolicy.RESIZE_DOWN_STABILIZATION_DELAY, Duration.ZERO); tc.sensors().set(MY_ATTRIBUTE, 1); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1)); } }
@Test public void testIncreaseMaxPoolSizeAllowsSubsequentGrowth() { tc.resize(3); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50).metricUpperBound(100) .maxPoolSize(6) .buildSpec()); // 200*3 = 600 -> 6 nodes at 100 each tc.sensors().set(MY_ATTRIBUTE, 200); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 6)); policy.config().set(AutoScalerPolicy.MAX_POOL_SIZE, 8); // Increases to max-size only tc.sensors().set(MY_ATTRIBUTE, 100000); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 8)); }
@Test(groups="Integration") public void testObeysMinAndMaxSize() { tc.resize(4); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .minPoolSize(2).maxPoolSize(6) .buildSpec()); // Decreases to min-size only tc.sensors().set(MY_ATTRIBUTE, 0); Asserts.succeedsEventually(currentSizeAsserter(tc, 2)); // Increases to max-size only tc.sensors().set(MY_ATTRIBUTE, 100000); Asserts.succeedsEventually(currentSizeAsserter(tc, 6)); }
@Test public void testDecreaseMinPoolSizeAllowsSubsequentShrink() { tc.resize(4); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder().metric(MY_ATTRIBUTE) .metricLowerBound(50).metricUpperBound(100) .minPoolSize(2) .buildSpec()); // 25*4 = 100 -> 2 nodes at 50 each tc.sensors().set(MY_ATTRIBUTE, 25); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2)); // Decreases to new min-size policy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 1); tc.sensors().set(MY_ATTRIBUTE, 0); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1)); }
@Test public void testReconfigureResizeUpStabilizationDelay() { tc.resize(1); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .resizeUpStabilizationDelay(Duration.TWO_MINUTES) .buildSpec()); policy.config().set(AutoScalerPolicy.RESIZE_UP_STABILIZATION_DELAY, Duration.ZERO); tc.sensors().set(MY_ATTRIBUTE, 101); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2)); }
@Test public void testIncrementsSizeIffUpperBoundExceeded() { tc.resize(1); tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .buildSpec()); tc.sensors().set(MY_ATTRIBUTE, 100); Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 1)); tc.sensors().set(MY_ATTRIBUTE, 101); Asserts.succeedsEventually(currentSizeAsserter(tc, 2)); }
@Test public void testReconfigureMetricLowerBound() { tc.resize(2); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .buildSpec()); policy.config().set(AutoScalerPolicy.METRIC_LOWER_BOUND, 51); tc.sensors().set(MY_ATTRIBUTE, 50); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1)); }
@Test public void testPostSuspendActions() { tc.resize(1); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .buildSpec()); policy.suspend(); tc.sensors().set(MY_ATTRIBUTE, 100000); Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 1)); }
@Test public void testDeletesOrphanedPolicies() throws Exception { Entity entity = origApp.addChild(EntitySpec.create(TestEntity.class).impl(MyEntity.class)); MyPolicy policy = entity.policies().add(PolicySpec.create(MyPolicy.class)); MementoTweaker tweaker = new MementoTweaker(new Deletions().entities(entity.getId())); assertTransformDeletes(new Deletions().policies(policy.getId()), tweaker); }
@BeforeMethod(alwaysRun = true) @Override public void setUp() throws Exception { super.setUp(); group = app.createAndManageChild(EntitySpec.create(BasicGroup.class)); group.policies().add(PolicySpec.create(FindUpServicesWithNameBob.class)); }
@Test public void testDecrementsSizeIffLowerBoundExceeded() { tc.resize(2); tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .buildSpec()); tc.sensors().set(MY_ATTRIBUTE, 50); Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 2)); tc.sensors().set(MY_ATTRIBUTE, 49); Asserts.succeedsEventually(currentSizeAsserter(tc, 1)); }
@Test public void testPostResumeActions() { tc.resize(1); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .buildSpec()); policy.suspend(); policy.resume(); tc.sensors().set(MY_ATTRIBUTE, 101); Asserts.succeedsEventually(currentSizeAsserter(tc, 2)); }
@Test public void testReconfigureMetricUpperBound() { tc.resize(1); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .buildSpec()); policy.config().set(AutoScalerPolicy.METRIC_UPPER_BOUND, 99); tc.sensors().set(MY_ATTRIBUTE, 100); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2)); }
@Test public void testIncreaseMinPoolSizeCausesImmediateGrowth() { tc.resize(2); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder() .metric(MY_ATTRIBUTE) .metricLowerBound(50) .metricUpperBound(100) .minPoolSize(2) .buildSpec()); policy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 3); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 3)); }
@Test public void testDecreaseMaxPoolSizeCausesImmediateShrink() { tc.resize(6); AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder().metric(MY_ATTRIBUTE) .metricLowerBound(50).metricUpperBound(100) .maxPoolSize(6) .buildSpec()); policy.config().set(AutoScalerPolicy.MAX_POOL_SIZE, 4); Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 4)); }
@Test public void testNeverGrowAboveMaximmum() throws Exception { resizable.policies().remove(policy); policy = resizable.policies().add(AutoScalerPolicy.builder() .maxPoolSize(5) .buildSpec()); resizable.resize(4); resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(4, 1000000L, 4*10L, 4*20L)); // expect pool to grow only to the maximum Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 5)); }
@Test public void testNeverShrinkBelowMinimum() throws Exception { resizable.policies().remove(policy); policy = resizable.policies().add(AutoScalerPolicy.builder() .minPoolSize(2) .buildSpec()); resizable.resize(4); resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 0L, 4*10L, 4*20L)); // expect pool to shrink only to the minimum Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 2)); }