18
18
19
19
import java .lang .management .ManagementFactory ;
20
20
import java .lang .management .OperatingSystemMXBean ;
21
+ import java .security .Principal ;
21
22
import java .util .Arrays ;
23
+ import java .util .Collections ;
22
24
23
25
import com .codahale .metrics .Gauge ;
24
26
import org .apache .solr .SolrTestCase ;
27
+ import org .apache .solr .SolrTestCaseJ4 ;
25
28
import org .apache .solr .common .util .SimpleOrderedMap ;
29
+ import org .apache .solr .core .CoreContainer ;
30
+ import org .apache .solr .request .SolrQueryRequest ;
31
+ import org .apache .solr .request .SolrQueryRequestBase ;
32
+ import org .apache .solr .security .AuthenticationPlugin ;
33
+ import org .apache .solr .security .AuthorizationPlugin ;
34
+ import org .apache .solr .security .JWTPrincipal ;
35
+ import org .apache .solr .security .MockAuthenticationPlugin ;
36
+ import org .apache .solr .security .MockAuthorizationPlugin ;
37
+ import org .apache .solr .security .RuleBasedAuthorizationPlugin ;
38
+ import org .apache .solr .security .RuleBasedAuthorizationPluginBase ;
26
39
import org .apache .solr .util .stats .MetricUtils ;
40
+ import org .mockito .ArgumentMatchers ;
41
+ import org .mockito .Mockito ;
27
42
28
43
29
44
public class SystemInfoHandlerTest extends SolrTestCase {
@@ -50,4 +65,72 @@ public void testMagickGetter() throws Exception {
50
65
}
51
66
}
52
67
68
+ private static final String userName = "foobar" ;
69
+
70
+ public void testGetSecurityInfoAuthorizationPlugin () throws Exception {
71
+ final AuthorizationPlugin authorizationPlugin = new MockAuthorizationPlugin ();
72
+ doTestGetSecurityInfo (authorizationPlugin );
73
+ }
74
+
75
+ public void testGetSecurityInfoRuleBasedAuthorizationPlugin () throws Exception {
76
+ SolrTestCaseJ4 .assumeWorkingMockito ();
77
+ final RuleBasedAuthorizationPluginBase ruleBasedAuthorizationPlugin = Mockito .mock (RuleBasedAuthorizationPlugin .class );
78
+ Mockito .doReturn (Collections .EMPTY_SET ).when (ruleBasedAuthorizationPlugin ).getUserRoles (ArgumentMatchers .any (Principal .class ));
79
+ doTestGetSecurityInfo (ruleBasedAuthorizationPlugin );
80
+ }
81
+
82
+ private static void doTestGetSecurityInfo (AuthorizationPlugin authorizationPlugin ) throws Exception {
83
+ final AuthenticationPlugin authenticationPlugin = new MockAuthenticationPlugin () {
84
+ @ Override
85
+ public String getName () {
86
+ return "mock authentication plugin name" ;
87
+ }
88
+ };
89
+ doTestGetSecurityInfo (null , null );
90
+ doTestGetSecurityInfo (authenticationPlugin , null );
91
+ doTestGetSecurityInfo (null , authorizationPlugin );
92
+ doTestGetSecurityInfo (authenticationPlugin , authorizationPlugin );
93
+ }
94
+
95
+ private static void doTestGetSecurityInfo (AuthenticationPlugin authenticationPlugin , AuthorizationPlugin authorizationPlugin ) throws Exception {
96
+
97
+ SolrTestCaseJ4 .assumeWorkingMockito ();
98
+
99
+ final CoreContainer cc = Mockito .mock (CoreContainer .class );
100
+ {
101
+ Mockito .doReturn (authenticationPlugin ).when (cc ).getAuthenticationPlugin ();
102
+ Mockito .doReturn (authorizationPlugin ).when (cc ).getAuthorizationPlugin ();
103
+ }
104
+
105
+ final SolrQueryRequest req = Mockito .mock (SolrQueryRequestBase .class );
106
+ {
107
+ final Principal principal = Mockito .mock (JWTPrincipal .class );
108
+ Mockito .doReturn (userName ).when (principal ).getName ();
109
+ Mockito .doReturn (principal ).when (req ).getUserPrincipal ();
110
+ }
111
+
112
+ final SimpleOrderedMap <Object > si = SystemInfoHandler .getSecurityInfo (cc , req );
113
+
114
+ if (authenticationPlugin != null ) {
115
+ assertEquals (authenticationPlugin .getName (), si .remove ("authenticationPlugin" ));
116
+ } else {
117
+ assertNull (si .remove ("authenticationPlugin" ));
118
+ }
119
+
120
+ if (authorizationPlugin != null ) {
121
+ assertEquals (authorizationPlugin .getClass ().getName (), si .remove ("authorizationPlugin" ));
122
+ if (authorizationPlugin instanceof RuleBasedAuthorizationPluginBase ) {
123
+ assertNotNull (si .remove ("roles" ));
124
+ } else {
125
+ assertNull (si .remove ("roles" ));
126
+ }
127
+ } else {
128
+ assertNull (si .remove ("authorizationPlugin" ));
129
+ }
130
+
131
+ assertEquals (userName , si .remove ("username" ));
132
+
133
+ assertEquals ("Unexpected additional info: " + si , 0 , si .size ());
134
+ }
135
+
53
136
}
0 commit comments