11package io .github .gunkim .ratelimiter .tokenbucket ;
22
3+ import org .junit .jupiter .api .BeforeEach ;
34import org .junit .jupiter .api .DisplayName ;
45import org .junit .jupiter .api .Test ;
56import org .mockito .Mockito ;
1314
1415@ DisplayName ("TokenBucket은" )
1516class TokenBucketTest {
17+ private Runnable request ;
18+
19+ @ BeforeEach
20+ void setUp () {
21+ request = Mockito .mock (Runnable .class );
22+ }
23+
1624 @ Test
17- void 토큰_수가_0이면_요청_메서드가_요청을_삭제한다 () {
25+ void 토큰이_없는_경우_요청이_무시된다 () {
1826 var tokenBucket = new TokenBucket (0 , 20_000 );
19- Runnable request = Mockito .mock (Runnable .class );
2027 tokenBucket .request (request );
2128 Mockito .verify (request , never ()).run ();
2229 }
2330
2431 @ Test
25- void 토큰_수가_최대치일_때_요청_메소드는_요청을_처리한다 () {
32+ void 토큰이_최대치일_때_모든_요청이_처리된다 () {
2633 var tokenBucket = new TokenBucket (10 , 20_000 );
27- Runnable request = Mockito .mock (Runnable .class );
2834 for (int i = 0 ; i < 10 ; i ++) {
2935 tokenBucket .request (request );
3036 }
3137 Mockito .verify (request , times (10 )).run ();
3238 }
3339
3440 @ Test
35- void 토큰_수가_3이고_요청이_6개_들어오면_3개만_처리한다 () {
41+ void 토큰이_모두_사용된_후_나머지_요청이_무시된다 () {
3642 var tokenBucket = new TokenBucket (3 , 20_000 );
37- Runnable request = Mockito .mock (Runnable .class );
3843 for (int i = 0 ; i < 6 ; i ++) {
3944 tokenBucket .request (request );
4045 }
4146 Mockito .verify (request , times (3 )).run ();
4247 }
4348
4449 @ Test
45- void 단일_스레드_환경에서_토큰_버킷이_올바르게_작동한다 () {
50+ void 단일_스레드_환경에서_정상_작동한다 () {
4651 var tokenBucket = new TokenBucket (5 , 1000 );
47- Runnable request = Mockito .mock (Runnable .class );
4852 for (int i = 0 ; i < 7 ; i ++) {
4953 tokenBucket .request (request );
5054 }
5155 Mockito .verify (request , times (5 )).run ();
5256 }
5357
5458 @ Test
55- void 다중_스레드_환경에서_토큰_버킷이_올바르게_작동한다 () throws InterruptedException {
59+ void 다중_스레드_환경에서_정상_작동한다 () throws InterruptedException {
5660 var tokenBucket = new TokenBucket (100 , 5_000 );
57- Runnable request = Mockito .mock (Runnable .class );
5861 ExecutorService taskExecutor = Executors .newFixedThreadPool (10 );
5962 for (int i = 0 ; i < 150 ; i ++) {
6063 taskExecutor .execute (() -> tokenBucket .request (request ));
@@ -63,4 +66,4 @@ class TokenBucketTest {
6366 taskExecutor .awaitTermination (1000 , TimeUnit .MILLISECONDS );
6467 Mockito .verify (request , times (100 )).run ();
6568 }
66- }
69+ }
0 commit comments