diff --git a/dialogue-core/src/test/java/com/palantir/dialogue/core/CautiousIncreaseAggressiveDecreaseConcurrencyLimiterTest.java b/dialogue-core/src/test/java/com/palantir/dialogue/core/CautiousIncreaseAggressiveDecreaseConcurrencyLimiterTest.java index 969453e7ad..93369d9b8d 100644 --- a/dialogue-core/src/test/java/com/palantir/dialogue/core/CautiousIncreaseAggressiveDecreaseConcurrencyLimiterTest.java +++ b/dialogue-core/src/test/java/com/palantir/dialogue/core/CautiousIncreaseAggressiveDecreaseConcurrencyLimiterTest.java @@ -209,6 +209,18 @@ public void onSuccess_dropsIfResponseIndicatesQosOrError_endpoint() { assertThat(limiter.getLimit()).as("For status %d", code).isCloseTo(max * 0.9, Percentage.withPercentage(5)); } + @Test + public void onSuccess_releasesSuccessfullyIfResponseIndicatesQosOrError_sticky() { + CautiousIncreaseAggressiveDecreaseConcurrencyLimiter limiter = limiter(Behavior.STICKY); + int code = 429; + Response response = mock(Response.class); + when(response.code()).thenReturn(code); + + double max = limiter.getLimit(); + limiter.acquire(LimitEnforcement.DEFAULT_ENABLED).get().onSuccess(response); + assertThat(limiter.getLimit()).isEqualTo(max); + } + @Test public void onSuccess_ignoresIfResponseIndicatesUnknownServerError_endpoint() { CautiousIncreaseAggressiveDecreaseConcurrencyLimiter limiter = limiter(Behavior.ENDPOINT_LEVEL); @@ -221,6 +233,18 @@ public void onSuccess_ignoresIfResponseIndicatesUnknownServerError_endpoint() { assertThat(limiter.getLimit()).isEqualTo(max); } + @Test + public void onSuccess_ignoresIfResponseIndicatesUnknownServerError_sticky() { + CautiousIncreaseAggressiveDecreaseConcurrencyLimiter limiter = limiter(Behavior.STICKY); + int code = 599; + Response response = mock(Response.class); + when(response.code()).thenReturn(code); + + double max = limiter.getLimit(); + limiter.acquire(LimitEnforcement.DEFAULT_ENABLED).get().onSuccess(response); + assertThat(limiter.getLimit()).isEqualTo(max); + } + @Test public void onSuccess_dropsIfResponseIndicatesUnknownServerError_host() { CautiousIncreaseAggressiveDecreaseConcurrencyLimiter limiter = limiter(Behavior.HOST_LEVEL); @@ -253,6 +277,16 @@ public void onFailure_ignoresIfIoException_endpoint() { assertThat(limiter.getLimit()).isEqualTo(max); } + @Test + public void onFailure_ignoresIfIoException_sticky() { + CautiousIncreaseAggressiveDecreaseConcurrencyLimiter limiter = limiter(Behavior.STICKY); + IOException exception = new IOException(); + + double max = limiter.getLimit(); + limiter.acquire(LimitEnforcement.DEFAULT_ENABLED).get().onFailure(exception); + assertThat(limiter.getLimit()).isEqualTo(max); + } + @ParameterizedTest @EnumSource(Behavior.class) public void onFailure_ignoresForNonIoExceptions(Behavior behavior) {