77import org .junit .jupiter .api .extension .ExtendWith ;
88import org .mockito .Mock ;
99import org .mockito .junit .jupiter .MockitoExtension ;
10-
11- import java .net .http .HttpResponse ;
1210import java .util .HashMap ;
1311
1412import static org .example .http .HttpResponseBuilder .SC_OK ;
@@ -32,11 +30,11 @@ void setUp(){
3230 request = new HttpRequest ("GET" , "/" , "HTTP/1.1" , new HashMap <>(), "" );
3331 request .setAttribute ("clientIp" , "127.0.0.1" );
3432 response = new HttpResponseBuilder ();
35- filter .clearBuckets ();
33+ filter .destroy ();
3634 }
3735
3836 @ Test
39- void shouldAllowRequestWhenTokensAreAvailable (){
37+ void shouldAllowRequest_WhenTokensAreAvailable (){
4038
4139 filter .doFilter (request , response , filterChain );
4240
@@ -45,7 +43,7 @@ void shouldAllowRequestWhenTokensAreAvailable(){
4543 }
4644
4745 @ Test
48- void shouldNotAllowRequestWhenTokensAreNotAvailable (){
46+ void shouldNotAllowRequest_WhenTokensAreNotAvailable (){
4947
5048 //capacity of the bucket is 10
5149 for (int i = 0 ; i < 11 ; i ++ )
@@ -75,5 +73,66 @@ void shouldHaveSeparateBucketsPerIp(){
7573 assertEquals (SC_OK , response2 .getStatusCode ());
7674 }
7775
76+ @ Test
77+ void shouldDeleteOldBuckets_WhenSizeIsMoreThanThreshold (){
78+
79+ filter .init ();
80+
81+ for (int i = 0 ; i < 1001 ; i ++ ){
82+ String fakeIp = "192.168.1." + i ;
83+ request .setAttribute ("clientIp" , fakeIp );
84+ filter .doFilter (request , response , filterChain );
85+ }
86+
87+ assertEquals (1001 , filter .getBucketsCount ());
88+
89+ filter .ageBucketsForTesting (3600000 );
90+ filter .cleanupIdleBuckets ();
91+
92+ assertEquals (0 , filter .getBucketsCount ());
93+ }
94+
95+ @ Test
96+ void shouldNotDeleteOldBuckets_WhenSizeIsLessThanThreshold (){
97+ filter .init ();
98+
99+ for (int i = 0 ; i < 1000 ; i ++ ){
100+ String fakeIp = "192.168.1." + i ;
101+ request .setAttribute ("clientIp" , fakeIp );
102+ filter .doFilter (request , response , filterChain );
103+ }
104+
105+ assertEquals (1000 , filter .getBucketsCount ());
106+
107+ filter .ageBucketsForTesting (3600000 );
108+ filter .cleanupIdleBuckets ();
109+
110+ assertEquals (1000 , filter .getBucketsCount ());
111+
112+ }
113+
114+ @ Test
115+ void shouldDeleteOnlyExpiredBuckets_WhenAreOld (){
116+ filter .init ();
117+
118+ for (int i = 0 ; i < 1001 ; i ++ ){
119+ String fakeIp = "192.168.1." + i ;
120+ request .setAttribute ("clientIp" , fakeIp );
121+ filter .doFilter (request , response , filterChain );
122+ }
123+
124+ assertEquals (1001 , filter .getBucketsCount ());
78125
126+ filter .ageBucketsForTesting (3600000 );
127+
128+ for (int i = 0 ; i < 500 ; i ++ ){
129+ String fakeIp = "192.168.1." + i ;
130+ request .setAttribute ("clientIp" , fakeIp );
131+ filter .doFilter (request , response , filterChain );
132+ }
133+
134+ filter .cleanupIdleBuckets ();
135+
136+ assertEquals (500 , filter .getBucketsCount ());
137+ }
79138}
0 commit comments