1
1
package io .github .gunkim .ratelimiter .tokenbucket ;
2
2
3
+ import org .junit .jupiter .api .BeforeEach ;
3
4
import org .junit .jupiter .api .DisplayName ;
4
5
import org .junit .jupiter .api .Test ;
5
6
import org .mockito .Mockito ;
13
14
14
15
@ DisplayName ("TokenBucket은" )
15
16
class TokenBucketTest {
17
+ private Runnable request ;
18
+
19
+ @ BeforeEach
20
+ void setUp () {
21
+ request = Mockito .mock (Runnable .class );
22
+ }
23
+
16
24
@ Test
17
- void 토큰_수가_0이면_요청_메서드가_요청을_삭제한다 () {
25
+ void 토큰이_없는_경우_요청이_무시된다 () {
18
26
var tokenBucket = new TokenBucket (0 , 20_000 );
19
- Runnable request = Mockito .mock (Runnable .class );
20
27
tokenBucket .request (request );
21
28
Mockito .verify (request , never ()).run ();
22
29
}
23
30
24
31
@ Test
25
- void 토큰_수가_최대치일_때_요청_메소드는_요청을_처리한다 () {
32
+ void 토큰이_최대치일_때_모든_요청이_처리된다 () {
26
33
var tokenBucket = new TokenBucket (10 , 20_000 );
27
- Runnable request = Mockito .mock (Runnable .class );
28
34
for (int i = 0 ; i < 10 ; i ++) {
29
35
tokenBucket .request (request );
30
36
}
31
37
Mockito .verify (request , times (10 )).run ();
32
38
}
33
39
34
40
@ Test
35
- void 토큰_수가_3이고_요청이_6개_들어오면_3개만_처리한다 () {
41
+ void 토큰이_모두_사용된_후_나머지_요청이_무시된다 () {
36
42
var tokenBucket = new TokenBucket (3 , 20_000 );
37
- Runnable request = Mockito .mock (Runnable .class );
38
43
for (int i = 0 ; i < 6 ; i ++) {
39
44
tokenBucket .request (request );
40
45
}
41
46
Mockito .verify (request , times (3 )).run ();
42
47
}
43
48
44
49
@ Test
45
- void 단일_스레드_환경에서_토큰_버킷이_올바르게_작동한다 () {
50
+ void 단일_스레드_환경에서_정상_작동한다 () {
46
51
var tokenBucket = new TokenBucket (5 , 1000 );
47
- Runnable request = Mockito .mock (Runnable .class );
48
52
for (int i = 0 ; i < 7 ; i ++) {
49
53
tokenBucket .request (request );
50
54
}
51
55
Mockito .verify (request , times (5 )).run ();
52
56
}
53
57
54
58
@ Test
55
- void 다중_스레드_환경에서_토큰_버킷이_올바르게_작동한다 () throws InterruptedException {
59
+ void 다중_스레드_환경에서_정상_작동한다 () throws InterruptedException {
56
60
var tokenBucket = new TokenBucket (100 , 5_000 );
57
- Runnable request = Mockito .mock (Runnable .class );
58
61
ExecutorService taskExecutor = Executors .newFixedThreadPool (10 );
59
62
for (int i = 0 ; i < 150 ; i ++) {
60
63
taskExecutor .execute (() -> tokenBucket .request (request ));
@@ -63,4 +66,4 @@ class TokenBucketTest {
63
66
taskExecutor .awaitTermination (1000 , TimeUnit .MILLISECONDS );
64
67
Mockito .verify (request , times (100 )).run ();
65
68
}
66
- }
69
+ }
0 commit comments