1111
1212import com .microsoft .graph .models .DirectoryObjectCollectionResponse ;
1313import com .microsoft .graph .models .Group ;
14- import com .microsoft .graph .models .GroupCollectionResponse ;
1514import com .microsoft .graph .models .odataerrors .MainError ;
1615import com .microsoft .graph .models .odataerrors .ODataError ;
1716import com .microsoft .graph .serviceclient .GraphServiceClient ;
1817import com .microsoft .graph .users .UsersRequestBuilder ;
1918import com .microsoft .graph .users .item .UserItemRequestBuilder ;
20- import com .microsoft .graph .users .item .memberof .MemberOfRequestBuilder ;
21- import com .microsoft .graph .users .item .memberof .graphgroup .GraphGroupRequestBuilder ;
2219import com .microsoft .graph .users .item .transitivememberof .TransitiveMemberOfRequestBuilder ;
2320import com .microsoft .kiota .RequestAdapter ;
24-
2521import org .elasticsearch .ElasticsearchSecurityException ;
2622import org .elasticsearch .action .ActionListener ;
2723import org .elasticsearch .action .support .PlainActionFuture ;
3228import org .elasticsearch .env .TestEnvironment ;
3329import org .elasticsearch .license .MockLicenseState ;
3430import org .elasticsearch .test .ESTestCase ;
31+ import org .elasticsearch .threadpool .TestThreadPool ;
32+ import org .elasticsearch .threadpool .ThreadPool ;
3533import org .elasticsearch .xpack .core .security .authc .RealmConfig ;
3634import org .elasticsearch .xpack .core .security .authc .RealmSettings ;
3735import org .elasticsearch .xpack .core .security .authc .support .UserRoleMapper ;
3836import org .elasticsearch .xpack .core .security .user .User ;
37+ import org .junit .After ;
3938
4039import java .util .List ;
4140import java .util .Set ;
4645import static org .hamcrest .Matchers .equalTo ;
4746import static org .mockito .ArgumentMatchers .any ;
4847import static org .mockito .ArgumentMatchers .eq ;
49- import static org .mockito .Mockito .doAnswer ;
50- import static org .mockito .Mockito .mock ;
51- import static org .mockito .Mockito .when ;
48+ import static org .mockito .Mockito .*;
5249
5350public class MicrosoftGraphAuthzRealmTests extends ESTestCase {
5451
5552 private final Settings globalSettings = Settings .builder ().put ("path.home" , createTempDir ()).build ();
5653 private final Environment env = TestEnvironment .newEnvironment (globalSettings );
5754 private final ThreadContext threadContext = new ThreadContext (globalSettings );
55+ private final ThreadPool threadPool = new TestThreadPool (getClass ().getName ());
5856
5957 private final String realmName = randomAlphaOfLengthBetween (4 , 10 );
6058 private final String roleName = randomAlphaOfLengthBetween (4 , 10 );
@@ -67,6 +65,12 @@ public class MicrosoftGraphAuthzRealmTests extends ESTestCase {
6765 realmName
6866 );
6967
68+ @ After
69+ public void tearDown () throws Exception {
70+ super .tearDown ();
71+ terminate (threadPool );
72+ }
73+
7074 public void testLookupUser () {
7175 final var roleMapper = mockRoleMapper (Set .of (groupId ), Set .of (roleName ));
7276
@@ -102,7 +106,7 @@ public void testLookupUser() {
102106 final var licenseState = MockLicenseState .createMock ();
103107 when (licenseState .isAllowed (eq (MICROSOFT_GRAPH_FEATURE ))).thenReturn (true );
104108
105- final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState );
109+ final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState , threadPool );
106110 final var future = new PlainActionFuture <User >();
107111 realm .lookupUser (username , future );
108112 final var user = future .actionGet ();
@@ -140,7 +144,7 @@ public void testHandleGetUserPropertiesError() {
140144 final var licenseState = MockLicenseState .createMock ();
141145 when (licenseState .isAllowed (eq (MICROSOFT_GRAPH_FEATURE ))).thenReturn (true );
142146
143- final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState );
147+ final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState , threadPool );
144148 final var future = new PlainActionFuture <User >();
145149 realm .lookupUser (username , future );
146150 final var thrown = assertThrows (ODataError .class , future ::actionGet );
@@ -170,22 +174,20 @@ public void testHandleGetGroupMembershipError() {
170174 when (userRequestBuilder .byUserId (eq (username ))).thenReturn (userItemRequestBuilder );
171175 when (userItemRequestBuilder .get (any ())).thenReturn (msUser );
172176
173- final var memberOfRequestBuilder = mock (MemberOfRequestBuilder .class );
174- final var graphGroupRequestBuilder = mock (GraphGroupRequestBuilder .class );
177+ final var memberOfRequestBuilder = mock (TransitiveMemberOfRequestBuilder .class );
175178 final var graphError = new ODataError ();
176179 final var error = new MainError ();
177180 error .setCode ("badRequest" );
178181 error .setMessage ("bad stuff happened" );
179182 graphError .setError (error );
180183
181- when (userItemRequestBuilder .memberOf ()).thenReturn (memberOfRequestBuilder );
182- when (memberOfRequestBuilder .graphGroup ()).thenReturn (graphGroupRequestBuilder );
183- when (graphGroupRequestBuilder .get (any ())).thenThrow (graphError );
184+ when (userItemRequestBuilder .transitiveMemberOf ()).thenReturn (memberOfRequestBuilder );
185+ when (memberOfRequestBuilder .get (any ())).thenThrow (graphError );
184186
185187 final var licenseState = MockLicenseState .createMock ();
186188 when (licenseState .isAllowed (eq (MICROSOFT_GRAPH_FEATURE ))).thenReturn (true );
187189
188- final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState );
190+ final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState , threadPool );
189191 final var future = new PlainActionFuture <User >();
190192 realm .lookupUser (username , future );
191193 final var thrown = assertThrows (ODataError .class , future ::actionGet );
@@ -218,34 +220,32 @@ public void testGroupMembershipPagination() {
218220 when (userRequestBuilder .byUserId (eq (username ))).thenReturn (userItemRequestBuilder );
219221 when (userItemRequestBuilder .get (any ())).thenReturn (msUser );
220222
221- final var memberOfRequestBuilder = mock (MemberOfRequestBuilder .class );
222- final var graphGroupRequestBuilder = mock (GraphGroupRequestBuilder .class );
223+ final var memberOfRequestBuilder = mock (TransitiveMemberOfRequestBuilder .class );
223224 final var group1 = new Group ();
224225 group1 .setId (groupId );
225- final var groupMembership1 = new GroupCollectionResponse ();
226+ final var groupMembership1 = new DirectoryObjectCollectionResponse ();
226227 groupMembership1 .setValue (List .of (group1 ));
227228 groupMembership1 .setOdataNextLink ("http://localhost:12345/page2" );
228229
229230 final var group2 = new Group ();
230231 group2 .setId (groupId2 );
231- final var groupMembership2 = new GroupCollectionResponse ();
232+ final var groupMembership2 = new DirectoryObjectCollectionResponse ();
232233 groupMembership2 .setValue (List .of (group2 ));
233234 groupMembership2 .setOdataNextLink ("http://localhost:12345/page3" );
234235
235236 final var group3 = new Group ();
236237 group3 .setId (groupId3 );
237- final var groupMembership3 = new GroupCollectionResponse ();
238+ final var groupMembership3 = new DirectoryObjectCollectionResponse ();
238239 groupMembership3 .setValue (List .of (group3 ));
239240
240- when (userItemRequestBuilder .memberOf ()).thenReturn (memberOfRequestBuilder );
241- when (memberOfRequestBuilder .graphGroup ()).thenReturn (graphGroupRequestBuilder );
242- when (graphGroupRequestBuilder .get (any ())).thenReturn (groupMembership1 );
241+ when (userItemRequestBuilder .transitiveMemberOf ()).thenReturn (memberOfRequestBuilder );
242+ when (memberOfRequestBuilder .get (any ())).thenReturn (groupMembership1 );
243243 when (requestAdapter .send (any (), any (), any ())).thenReturn (groupMembership2 , groupMembership3 );
244244
245245 final var licenseState = MockLicenseState .createMock ();
246246 when (licenseState .isAllowed (eq (MICROSOFT_GRAPH_FEATURE ))).thenReturn (true );
247247
248- final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState );
248+ final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState , threadPool );
249249 final var future = new PlainActionFuture <User >();
250250 realm .lookupUser (username , future );
251251 final var user = future .actionGet ();
@@ -268,7 +268,7 @@ public void testLicenseCheck() {
268268 final var licenseState = MockLicenseState .createMock ();
269269 when (licenseState .isAllowed (eq (MICROSOFT_GRAPH_FEATURE ))).thenReturn (false );
270270
271- final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState );
271+ final var realm = new MicrosoftGraphAuthzRealm (roleMapper , config , client , licenseState , threadPool );
272272 final var future = new PlainActionFuture <User >();
273273 realm .lookupUser (username , future );
274274 final var thrown = assertThrows (ElasticsearchSecurityException .class , future ::actionGet );
0 commit comments