1313
1414import org .junit .Assert ;
1515import org .junit .Test ;
16+ import org .junit .runner .RunWith ;
17+ import org .mockito .Matchers ;
1618import org .mockito .Mockito ;
19+ import org .mockito .runners .MockitoJUnitRunner ;
1720
21+ @ RunWith (MockitoJUnitRunner .class )
1822public class GroupServletLimiterTest {
19- private static final Map <String , String > principalToGroup = Mockito .spy (new HashMap <>());
20-
21- static {
22- principalToGroup .put ("bob" , "live" );
23- }
24-
25- HttpServletRequest createMockRequestWithPrincipal (String name ) {
26- HttpServletRequest request = Mockito .mock (HttpServletRequest .class );
27- Principal principal = Mockito .mock (Principal .class );
28-
29- Mockito .when (request .getUserPrincipal ()).thenReturn (principal );
30- Mockito .when (principal .getName ()).thenReturn (name );
31- return request ;
32- }
33-
23+
3424 @ Test
3525 public void userPrincipalMatchesGroup () {
26+ Map <String , String > principalToGroup = Mockito .spy (new HashMap <>());
27+ principalToGroup .put ("bob" , "live" );
28+
3629 Limiter <HttpServletRequest > limiter = new ServletLimiterBuilder ()
3730 .limit (VegasLimit .newDefault ())
3831 .partitionByUserPrincipal (p -> principalToGroup .get (p .getName ()), builder -> builder
@@ -49,6 +42,9 @@ public void userPrincipalMatchesGroup() {
4942
5043 @ Test
5144 public void userPrincipalDoesNotMatchGroup () {
45+ Map <String , String > principalToGroup = Mockito .spy (new HashMap <>());
46+ principalToGroup .put ("bob" , "live" );
47+
5248 Limiter <HttpServletRequest > limiter = new ServletLimiterBuilder ()
5349 .limit (VegasLimit .newDefault ())
5450 .partitionByUserPrincipal (p -> principalToGroup .get (p .getName ()), builder -> builder
@@ -64,7 +60,31 @@ public void userPrincipalDoesNotMatchGroup() {
6460 }
6561
6662 @ Test
67- public void nullUserPrincipal () {
63+ public void nullUserPrincipalDoesNotMatchGroup () {
64+ Map <String , String > principalToGroup = Mockito .spy (new HashMap <>());
65+ principalToGroup .put ("bob" , "live" );
66+
67+ Limiter <HttpServletRequest > limiter = new ServletLimiterBuilder ()
68+ .limit (VegasLimit .newDefault ())
69+ .partitionByUserPrincipal (p -> principalToGroup .get (p .getName ()), builder -> builder
70+ .assign ("live" , 0.8 )
71+ .assign ("batch" , 0.2 ))
72+ .build ();
73+
74+ HttpServletRequest request = Mockito .mock (HttpServletRequest .class );
75+ Mockito .when (request .getUserPrincipal ()).thenReturn (null );
76+
77+ Optional <Listener > listener = limiter .acquire (request );
78+
79+ Assert .assertTrue (listener .isPresent ());
80+ Mockito .verify (principalToGroup , Mockito .times (0 )).get (Mockito .<String > any ());
81+ }
82+
83+ @ Test
84+ public void nullUserPrincipalNameDoesNotMatchGroup () {
85+ Map <String , String > principalToGroup = Mockito .spy (new HashMap <>());
86+ principalToGroup .put ("bob" , "live" );
87+
6888 Limiter <HttpServletRequest > limiter = new ServletLimiterBuilder ()
6989 .limit (VegasLimit .newDefault ())
7090 .partitionByUserPrincipal (p -> principalToGroup .get (p .getName ()), builder -> builder
@@ -76,6 +96,79 @@ public void nullUserPrincipal() {
7696 Optional <Listener > listener = limiter .acquire (request );
7797
7898 Assert .assertTrue (listener .isPresent ());
79- Mockito .verify (principalToGroup , Mockito .never ());
99+ Mockito .verify (principalToGroup , Mockito .times (1 )).get (Matchers .isNull (String .class ));
100+ }
101+
102+ @ Test
103+ public void pathMatchesGroup () {
104+ Map <String , String > pathToGroup = Mockito .spy (new HashMap <>());
105+ pathToGroup .put ("/live/path" , "live" );
106+
107+ Limiter <HttpServletRequest > limiter = new ServletLimiterBuilder ()
108+ .limit (VegasLimit .newDefault ())
109+ .partitionByPathInfo (pathToGroup ::get , builder -> builder
110+ .assign ("live" , 0.8 )
111+ .assign ("batch" , 0.2 ))
112+ .build ();
113+
114+ HttpServletRequest request = createMockRequestWithPathInfo ("/live/path" );
115+ Optional <Listener > listener = limiter .acquire (request );
116+
117+ Assert .assertTrue (listener .isPresent ());
118+ Mockito .verify (pathToGroup , Mockito .times (1 )).get ("/live/path" );
119+ }
120+
121+ @ Test
122+ public void pathDoesNotMatchesGroup () {
123+ Map <String , String > pathToGroup = Mockito .spy (new HashMap <>());
124+ pathToGroup .put ("/live/path" , "live" );
125+
126+ Limiter <HttpServletRequest > limiter = new ServletLimiterBuilder ()
127+ .limit (VegasLimit .newDefault ())
128+ .partitionByPathInfo (pathToGroup ::get , builder -> builder
129+ .assign ("live" , 0.8 )
130+ .assign ("batch" , 0.2 ))
131+ .build ();
132+
133+ HttpServletRequest request = createMockRequestWithPathInfo ("/other/path" );
134+ Optional <Listener > listener = limiter .acquire (request );
135+
136+ Assert .assertTrue (listener .isPresent ());
137+ Mockito .verify (pathToGroup , Mockito .times (1 )).get ("/other/path" );
138+ }
139+
140+ @ Test
141+ public void nullPathDoesNotMatchesGroup () {
142+ Map <String , String > pathToGroup = Mockito .spy (new HashMap <>());
143+ pathToGroup .put ("/live/path" , "live" );
144+
145+ Limiter <HttpServletRequest > limiter = new ServletLimiterBuilder ()
146+ .limit (VegasLimit .newDefault ())
147+ .partitionByPathInfo (pathToGroup ::get , builder -> builder
148+ .assign ("live" , 0.8 )
149+ .assign ("batch" , 0.2 ))
150+ .build ();
151+
152+ HttpServletRequest request = createMockRequestWithPathInfo (null );
153+ Optional <Listener > listener = limiter .acquire (request );
154+
155+ Assert .assertTrue (listener .isPresent ());
156+ Mockito .verify (pathToGroup , Mockito .times (0 )).get (Mockito .<String > any ());
157+ }
158+
159+ private HttpServletRequest createMockRequestWithPrincipal (String name ) {
160+ HttpServletRequest request = Mockito .mock (HttpServletRequest .class );
161+ Principal principal = Mockito .mock (Principal .class );
162+
163+ Mockito .when (request .getUserPrincipal ()).thenReturn (principal );
164+ Mockito .when (principal .getName ()).thenReturn (name );
165+ return request ;
166+ }
167+
168+ private HttpServletRequest createMockRequestWithPathInfo (String name ) {
169+ HttpServletRequest request = Mockito .mock (HttpServletRequest .class );
170+
171+ Mockito .when (request .getPathInfo ()).thenReturn (name );
172+ return request ;
80173 }
81174}
0 commit comments