Skip to content

Commit 628dde9

Browse files
committed
added more tests
1 parent 1c68e5c commit 628dde9

File tree

2 files changed

+96
-5
lines changed

2 files changed

+96
-5
lines changed

concurrency-limits-core/src/test/java/com/netflix/concurrency/limits/limiter/AbstractPartitionedLimiterTest.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -176,17 +176,23 @@ public void testBypassPartitionedLimiter() {
176176
.bypassLimitResolver(new ShouldBypassPredicate())
177177
.build();
178178

179-
for (int i = 0; i < 1; i++) {
180-
Assert.assertTrue(limiter.acquire("batch").isPresent());
181-
Assert.assertEquals(i+1, limiter.getPartition("batch").getInflight());
182-
Assert.assertTrue(limiter.acquire("admin").isPresent());
183-
}
179+
Assert.assertTrue(limiter.acquire("batch").isPresent());
180+
Assert.assertEquals(1, limiter.getPartition("batch").getInflight());
181+
Assert.assertTrue(limiter.acquire("admin").isPresent());
184182

185183
for (int i = 0; i < 9; i++) {
186184
Assert.assertTrue(limiter.acquire("live").isPresent());
187185
Assert.assertEquals(i+1, limiter.getPartition("live").getInflight());
188186
Assert.assertTrue(limiter.acquire("admin").isPresent());
189187
}
188+
189+
// Verify that bypassed requests are able to proceed even when the limiter is full
190+
Assert.assertFalse(limiter.acquire("batch").isPresent());
191+
Assert.assertEquals(1, limiter.getPartition("batch").getInflight());
192+
Assert.assertFalse(limiter.acquire("live").isPresent());
193+
Assert.assertEquals(9, limiter.getPartition("live").getInflight());
194+
Assert.assertEquals(10, limiter.getInflight());
195+
Assert.assertTrue(limiter.acquire("admin").isPresent());
190196
}
191197

192198
@Test
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.netflix.concurrency.limits.limiter;
2+
3+
import com.netflix.concurrency.limits.Limiter;
4+
import com.netflix.concurrency.limits.limit.FixedLimit;
5+
import org.junit.Assert;
6+
import org.junit.Test;
7+
8+
import java.util.Optional;
9+
10+
public class SimpleLimiterTest {
11+
12+
@Test
13+
public void useLimiterCapacityUntilTotalLimit() {
14+
SimpleLimiter<String> limiter = SimpleLimiter.newBuilder()
15+
.limit(FixedLimit.of(10))
16+
.build();
17+
18+
for (int i = 0; i < 10; i++) {
19+
Assert.assertTrue(limiter.acquire("live").isPresent());
20+
}
21+
22+
// Rejected call after total limit is utilized
23+
Assert.assertFalse(limiter.acquire("live").isPresent());
24+
Assert.assertEquals(10, limiter.getInflight());
25+
}
26+
27+
@Test
28+
public void testReleaseLimit() {
29+
SimpleLimiter<String> limiter = SimpleLimiter.newBuilder()
30+
.limit(FixedLimit.of(10))
31+
.build();
32+
33+
Optional<Limiter.Listener> completion = limiter.acquire("live");
34+
for (int i = 1; i < 10; i++) {
35+
Assert.assertTrue(limiter.acquire("live").isPresent());
36+
}
37+
38+
Assert.assertEquals(10, limiter.getInflight());
39+
Assert.assertFalse(limiter.acquire("live").isPresent());
40+
41+
// Release token
42+
completion.get().onSuccess();
43+
Assert.assertEquals(9, limiter.getInflight());
44+
45+
Assert.assertTrue(limiter.acquire("live").isPresent());
46+
Assert.assertEquals(10, limiter.getInflight());
47+
}
48+
49+
@Test
50+
public void testSimpleBypassLimiter() {
51+
SimpleLimiter<String> limiter = SimpleLimiter.<String>newBypassLimiterBuilder()
52+
.limit(FixedLimit.of(10))
53+
.bypassLimitResolver((context) -> context.equals("admin"))
54+
.build();
55+
56+
for (int i = 0; i < 10; i++) {
57+
Assert.assertTrue(limiter.acquire("live").isPresent());
58+
Assert.assertEquals(i+1, limiter.getInflight());
59+
}
60+
61+
// Verify calls with passing bypass condition will return a token
62+
// whereas remaining calls will be throttled since inflight count is greater than the limit
63+
for (int i = 0; i < 10; i++) {
64+
Assert.assertFalse(limiter.acquire("live").isPresent());
65+
Assert.assertTrue(limiter.acquire("admin").isPresent());
66+
}
67+
}
68+
69+
@Test
70+
public void testSimpleBypassLimiterDefault() {
71+
SimpleLimiter<String> limiter = SimpleLimiter.<String>newBypassLimiterBuilder()
72+
.limit(FixedLimit.of(10))
73+
.build();
74+
75+
for (int i = 0; i < 10; i++) {
76+
Assert.assertTrue(limiter.acquire("live").isPresent());
77+
Assert.assertEquals(i+1, limiter.getInflight());
78+
}
79+
80+
// Verify that no calls are bypassed by default
81+
Assert.assertFalse(limiter.acquire("live").isPresent());
82+
Assert.assertFalse(limiter.acquire("admin").isPresent());
83+
}
84+
85+
}

0 commit comments

Comments
 (0)