From 98633dce67678aa12db0a3f03474a231214856db Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Sat, 8 Jul 2017 06:51:41 +0200 Subject: [PATCH] Beal 1006 rate limmiter (#2224) * BAEL-1006 rate limiter tests * BAEL-1006 simpler example --- .../baeldung/guava/RateLimiterUnitTest.java | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 guava/src/test/java/org/baeldung/guava/RateLimiterUnitTest.java diff --git a/guava/src/test/java/org/baeldung/guava/RateLimiterUnitTest.java b/guava/src/test/java/org/baeldung/guava/RateLimiterUnitTest.java new file mode 100644 index 0000000000..eb848e56fd --- /dev/null +++ b/guava/src/test/java/org/baeldung/guava/RateLimiterUnitTest.java @@ -0,0 +1,81 @@ +package org.baeldung.guava; + + +import com.google.common.util.concurrent.RateLimiter; +import org.junit.Test; + +import java.time.ZonedDateTime; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RateLimiterUnitTest { + + @Test + public void givenLimitedResource_whenUseRateLimiter_thenShouldLimitPermits() { + //given + RateLimiter rateLimiter = RateLimiter.create(100); + + //when + long startTime = ZonedDateTime.now().getSecond(); + IntStream.range(0, 1000).forEach(i -> { + rateLimiter.acquire(); + doSomeLimitedOperation(); + }); + long elapsedTimeSeconds = ZonedDateTime.now().getSecond() - startTime; + + //then + assertThat(elapsedTimeSeconds >= 10); + } + + @Test + public void givenLimitedResource_whenRequestTwice_thenShouldPermitWithoutBlocking() { + //given + RateLimiter rateLimiter = RateLimiter.create(2); + + //when + long startTime = ZonedDateTime.now().getSecond(); + rateLimiter.acquire(1); + doSomeLimitedOperation(); + rateLimiter.acquire(1); + doSomeLimitedOperation(); + long elapsedTimeSeconds = ZonedDateTime.now().getSecond() - startTime; + + //then + assertThat(elapsedTimeSeconds <= 1); + } + + @Test + public void givenLimitedResource_whenRequestOnce_thenShouldPermitWithoutBlocking() { + //given + RateLimiter rateLimiter = RateLimiter.create(100); + + //when + long startTime = ZonedDateTime.now().getSecond(); + rateLimiter.acquire(100); + doSomeLimitedOperation(); + long elapsedTimeSeconds = ZonedDateTime.now().getSecond() - startTime; + + //then + assertThat(elapsedTimeSeconds <= 1); + } + + @Test + public void givenLimitedResource_whenTryAcquire_shouldNotBlockIndefinitely() { + //given + RateLimiter rateLimiter = RateLimiter.create(1); + + //when + boolean result = rateLimiter.tryAcquire(2, 1, TimeUnit.SECONDS); + + //then + assertThat(result).isFalse(); + + } + + private void doSomeLimitedOperation() { + //some computing + } + +}