|
66 | 66 | import org.junit.BeforeClass;
|
67 | 67 | import org.junit.Test;
|
68 | 68 |
|
69 |
| -// TODO(micahstairs): Move tenant-aware tests into a seperate class, so that we only need to |
70 |
| -// create and destroy the tenant once. |
71 | 69 | public class FirebaseAuthIT {
|
72 | 70 |
|
73 | 71 | private static final String VERIFY_CUSTOM_TOKEN_URL =
|
@@ -322,209 +320,6 @@ public void onSuccess(ListUsersPage result) {
|
322 | 320 | }
|
323 | 321 | }
|
324 | 322 |
|
325 |
| - @Test |
326 |
| - public void testTenantAwareUserLifecycle() throws Exception { |
327 |
| - // Create tenant to use. |
328 |
| - TenantManager tenantManager = auth.getTenantManager(); |
329 |
| - Tenant.CreateRequest tenantCreateRequest = |
330 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
331 |
| - final String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
332 |
| - |
333 |
| - TenantAwareFirebaseAuth tenantAwareAuth = auth.getTenantManager().getAuthForTenant(tenantId); |
334 |
| - |
335 |
| - // Create user |
336 |
| - UserRecord userRecord = tenantAwareAuth.createUserAsync(new UserRecord.CreateRequest()).get(); |
337 |
| - String uid = userRecord.getUid(); |
338 |
| - |
339 |
| - // Get user |
340 |
| - userRecord = tenantAwareAuth.getUserAsync(userRecord.getUid()).get(); |
341 |
| - assertEquals(uid, userRecord.getUid()); |
342 |
| - assertEquals(tenantId, userRecord.getTenantId()); |
343 |
| - assertNull(userRecord.getDisplayName()); |
344 |
| - assertNull(userRecord.getEmail()); |
345 |
| - assertNull(userRecord.getPhoneNumber()); |
346 |
| - assertNull(userRecord.getPhotoUrl()); |
347 |
| - assertFalse(userRecord.isEmailVerified()); |
348 |
| - assertFalse(userRecord.isDisabled()); |
349 |
| - assertTrue(userRecord.getUserMetadata().getCreationTimestamp() > 0); |
350 |
| - assertEquals(0, userRecord.getUserMetadata().getLastSignInTimestamp()); |
351 |
| - assertEquals(0, userRecord.getProviderData().length); |
352 |
| - assertTrue(userRecord.getCustomClaims().isEmpty()); |
353 |
| - |
354 |
| - // Update user |
355 |
| - RandomUser randomUser = RandomUser.create(); |
356 |
| - String phone = randomPhoneNumber(); |
357 |
| - UserRecord.UpdateRequest request = userRecord.updateRequest() |
358 |
| - .setDisplayName("Updated Name") |
359 |
| - .setEmail(randomUser.email) |
360 |
| - .setPhoneNumber(phone) |
361 |
| - .setPhotoUrl("https://example.com/photo.png") |
362 |
| - .setEmailVerified(true) |
363 |
| - .setPassword("secret"); |
364 |
| - userRecord = tenantAwareAuth.updateUserAsync(request).get(); |
365 |
| - assertEquals(uid, userRecord.getUid()); |
366 |
| - assertEquals(tenantId, userRecord.getTenantId()); |
367 |
| - assertEquals("Updated Name", userRecord.getDisplayName()); |
368 |
| - assertEquals(randomUser.email, userRecord.getEmail()); |
369 |
| - assertEquals(phone, userRecord.getPhoneNumber()); |
370 |
| - assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl()); |
371 |
| - assertTrue(userRecord.isEmailVerified()); |
372 |
| - assertFalse(userRecord.isDisabled()); |
373 |
| - assertEquals(2, userRecord.getProviderData().length); |
374 |
| - assertTrue(userRecord.getCustomClaims().isEmpty()); |
375 |
| - |
376 |
| - // Get user by email |
377 |
| - userRecord = tenantAwareAuth.getUserByEmailAsync(userRecord.getEmail()).get(); |
378 |
| - assertEquals(uid, userRecord.getUid()); |
379 |
| - |
380 |
| - // Disable user and remove properties |
381 |
| - request = userRecord.updateRequest() |
382 |
| - .setPhotoUrl(null) |
383 |
| - .setDisplayName(null) |
384 |
| - .setPhoneNumber(null) |
385 |
| - .setDisabled(true); |
386 |
| - userRecord = tenantAwareAuth.updateUserAsync(request).get(); |
387 |
| - assertEquals(uid, userRecord.getUid()); |
388 |
| - assertEquals(tenantId, userRecord.getTenantId()); |
389 |
| - assertNull(userRecord.getDisplayName()); |
390 |
| - assertEquals(randomUser.email, userRecord.getEmail()); |
391 |
| - assertNull(userRecord.getPhoneNumber()); |
392 |
| - assertNull(userRecord.getPhotoUrl()); |
393 |
| - assertTrue(userRecord.isEmailVerified()); |
394 |
| - assertTrue(userRecord.isDisabled()); |
395 |
| - assertEquals(1, userRecord.getProviderData().length); |
396 |
| - assertTrue(userRecord.getCustomClaims().isEmpty()); |
397 |
| - |
398 |
| - // Delete user and tenant |
399 |
| - tenantAwareAuth.deleteUserAsync(userRecord.getUid()).get(); |
400 |
| - assertUserDoesNotExist(tenantAwareAuth, userRecord.getUid()); |
401 |
| - tenantManager.deleteTenant(tenantId); |
402 |
| - } |
403 |
| - |
404 |
| - @Test |
405 |
| - public void testTenantAwareListUsers() throws Exception { |
406 |
| - // Create tenant to use. |
407 |
| - TenantManager tenantManager = auth.getTenantManager(); |
408 |
| - Tenant.CreateRequest tenantCreateRequest = |
409 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
410 |
| - final String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
411 |
| - |
412 |
| - TenantAwareFirebaseAuth tenantAwareAuth = tenantManager.getAuthForTenant(tenantId); |
413 |
| - final List<String> uids = new ArrayList<>(); |
414 |
| - |
415 |
| - try { |
416 |
| - for (int i = 0; i < 3; i++) { |
417 |
| - UserRecord.CreateRequest createRequest = |
418 |
| - new UserRecord.CreateRequest().setPassword("password"); |
419 |
| - uids.add(tenantAwareAuth.createUserAsync(createRequest).get().getUid()); |
420 |
| - } |
421 |
| - |
422 |
| - // Test list by batches |
423 |
| - final AtomicInteger collected = new AtomicInteger(0); |
424 |
| - ListUsersPage page = tenantAwareAuth.listUsersAsync(null).get(); |
425 |
| - while (page != null) { |
426 |
| - for (ExportedUserRecord user : page.getValues()) { |
427 |
| - if (uids.contains(user.getUid())) { |
428 |
| - collected.incrementAndGet(); |
429 |
| - assertNotNull("Missing passwordHash field. A common cause would be " |
430 |
| - + "forgetting to add the \"Firebase Authentication Admin\" permission. See " |
431 |
| - + "instructions in CONTRIBUTING.md", user.getPasswordHash()); |
432 |
| - assertNotNull(user.getPasswordSalt()); |
433 |
| - assertEquals(tenantId, user.getTenantId()); |
434 |
| - } |
435 |
| - } |
436 |
| - page = page.getNextPage(); |
437 |
| - } |
438 |
| - assertEquals(uids.size(), collected.get()); |
439 |
| - |
440 |
| - // Test iterate all |
441 |
| - collected.set(0); |
442 |
| - page = tenantAwareAuth.listUsersAsync(null).get(); |
443 |
| - for (ExportedUserRecord user : page.iterateAll()) { |
444 |
| - if (uids.contains(user.getUid())) { |
445 |
| - collected.incrementAndGet(); |
446 |
| - assertNotNull(user.getPasswordHash()); |
447 |
| - assertNotNull(user.getPasswordSalt()); |
448 |
| - assertEquals(tenantId, user.getTenantId()); |
449 |
| - } |
450 |
| - } |
451 |
| - assertEquals(uids.size(), collected.get()); |
452 |
| - |
453 |
| - // Test iterate async |
454 |
| - collected.set(0); |
455 |
| - final Semaphore semaphore = new Semaphore(0); |
456 |
| - final AtomicReference<Throwable> error = new AtomicReference<>(); |
457 |
| - ApiFuture<ListUsersPage> pageFuture = tenantAwareAuth.listUsersAsync(null); |
458 |
| - ApiFutures.addCallback(pageFuture, new ApiFutureCallback<ListUsersPage>() { |
459 |
| - @Override |
460 |
| - public void onFailure(Throwable t) { |
461 |
| - error.set(t); |
462 |
| - semaphore.release(); |
463 |
| - } |
464 |
| - |
465 |
| - @Override |
466 |
| - public void onSuccess(ListUsersPage result) { |
467 |
| - for (ExportedUserRecord user : result.iterateAll()) { |
468 |
| - if (uids.contains(user.getUid())) { |
469 |
| - collected.incrementAndGet(); |
470 |
| - assertNotNull(user.getPasswordHash()); |
471 |
| - assertNotNull(user.getPasswordSalt()); |
472 |
| - assertEquals(tenantId, user.getTenantId()); |
473 |
| - } |
474 |
| - } |
475 |
| - semaphore.release(); |
476 |
| - } |
477 |
| - }, MoreExecutors.directExecutor()); |
478 |
| - semaphore.acquire(); |
479 |
| - assertEquals(uids.size(), collected.get()); |
480 |
| - assertNull(error.get()); |
481 |
| - } finally { |
482 |
| - for (String uid : uids) { |
483 |
| - tenantAwareAuth.deleteUserAsync(uid).get(); |
484 |
| - } |
485 |
| - tenantManager.deleteTenant(tenantId); |
486 |
| - } |
487 |
| - } |
488 |
| - |
489 |
| - @Test |
490 |
| - public void testTenantAwareGetUserWithMultipleTenantIds() throws Exception { |
491 |
| - // Create tenants to use. |
492 |
| - TenantManager tenantManager = auth.getTenantManager(); |
493 |
| - Tenant.CreateRequest tenantCreateRequest1 = |
494 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName1"); |
495 |
| - String tenantId1 = tenantManager.createTenant(tenantCreateRequest1).getTenantId(); |
496 |
| - Tenant.CreateRequest tenantCreateRequest2 = |
497 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName2"); |
498 |
| - String tenantId2 = tenantManager.createTenant(tenantCreateRequest2).getTenantId(); |
499 |
| - |
500 |
| - // Create three users (one without a tenant ID, and two with different tenant IDs). |
501 |
| - UserRecord.CreateRequest createRequest = new UserRecord.CreateRequest(); |
502 |
| - UserRecord nonTenantUserRecord = auth.createUser(createRequest); |
503 |
| - TenantAwareFirebaseAuth tenantAwareAuth1 = auth.getTenantManager().getAuthForTenant(tenantId1); |
504 |
| - UserRecord tenantUserRecord1 = tenantAwareAuth1.createUser(createRequest); |
505 |
| - TenantAwareFirebaseAuth tenantAwareAuth2 = auth.getTenantManager().getAuthForTenant(tenantId2); |
506 |
| - UserRecord tenantUserRecord2 = tenantAwareAuth2.createUser(createRequest); |
507 |
| - |
508 |
| - // Make sure only non-tenant users can be fetched using the standard client. |
509 |
| - assertNotNull(auth.getUser(nonTenantUserRecord.getUid())); |
510 |
| - assertUserDoesNotExist(auth, tenantUserRecord1.getUid()); |
511 |
| - assertUserDoesNotExist(auth, tenantUserRecord2.getUid()); |
512 |
| - |
513 |
| - // Make sure tenant-aware client cannot fetch users outside that tenant. |
514 |
| - assertUserDoesNotExist(tenantAwareAuth1, nonTenantUserRecord.getUid()); |
515 |
| - assertUserDoesNotExist(tenantAwareAuth1, tenantUserRecord2.getUid()); |
516 |
| - assertUserDoesNotExist(tenantAwareAuth2, nonTenantUserRecord.getUid()); |
517 |
| - assertUserDoesNotExist(tenantAwareAuth2, tenantUserRecord1.getUid()); |
518 |
| - |
519 |
| - // Make sure tenant-aware client can fetch users under that tenant. |
520 |
| - assertNotNull(tenantAwareAuth1.getUser(tenantUserRecord1.getUid())); |
521 |
| - assertNotNull(tenantAwareAuth2.getUser(tenantUserRecord2.getUid())); |
522 |
| - |
523 |
| - // Delete tenants. |
524 |
| - tenantManager.deleteTenant(tenantId1); |
525 |
| - tenantManager.deleteTenant(tenantId2); |
526 |
| - } |
527 |
| - |
528 | 323 | @Test
|
529 | 324 | public void testTenantLifecycle() throws Exception {
|
530 | 325 | TenantManager tenantManager = auth.getTenantManager();
|
@@ -708,58 +503,6 @@ public void testCustomTokenWithIAM() throws Exception {
|
708 | 503 | }
|
709 | 504 | }
|
710 | 505 |
|
711 |
| - @Test |
712 |
| - public void testTenantAwareCustomToken() throws Exception { |
713 |
| - // Create tenant to use. |
714 |
| - TenantManager tenantManager = auth.getTenantManager(); |
715 |
| - Tenant.CreateRequest tenantCreateRequest = |
716 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
717 |
| - String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
718 |
| - |
719 |
| - try { |
720 |
| - // Create and decode a token with a tenant-aware client. |
721 |
| - TenantAwareFirebaseAuth tenantAwareAuth = auth.getTenantManager().getAuthForTenant(tenantId); |
722 |
| - String customToken = tenantAwareAuth.createCustomTokenAsync("user1").get(); |
723 |
| - String idToken = signInWithCustomToken(customToken, tenantId); |
724 |
| - FirebaseToken decoded = tenantAwareAuth.verifyIdTokenAsync(idToken).get(); |
725 |
| - assertEquals("user1", decoded.getUid()); |
726 |
| - assertEquals(tenantId, decoded.getTenantId()); |
727 |
| - } finally { |
728 |
| - // Delete tenant. |
729 |
| - tenantManager.deleteTenantAsync(tenantId).get(); |
730 |
| - } |
731 |
| - } |
732 |
| - |
733 |
| - @Test |
734 |
| - public void testVerifyTokenWithWrongTenantAwareClient() throws Exception { |
735 |
| - // Create tenant to use. |
736 |
| - TenantManager tenantManager = auth.getTenantManager(); |
737 |
| - Tenant.CreateRequest tenantCreateRequest = |
738 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
739 |
| - String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
740 |
| - |
741 |
| - // Create tenant-aware clients. |
742 |
| - TenantAwareFirebaseAuth tenantAwareAuth1 = auth.getTenantManager().getAuthForTenant(tenantId); |
743 |
| - TenantAwareFirebaseAuth tenantAwareAuth2 = auth.getTenantManager().getAuthForTenant("OTHER"); |
744 |
| - |
745 |
| - try { |
746 |
| - // Create a token with one client and decode with the other. |
747 |
| - String customToken = tenantAwareAuth1.createCustomTokenAsync("user").get(); |
748 |
| - String idToken = signInWithCustomToken(customToken, tenantId); |
749 |
| - try { |
750 |
| - tenantAwareAuth2.verifyIdTokenAsync(idToken).get(); |
751 |
| - fail("No error thrown for verifying a token with the wrong tenant-aware client"); |
752 |
| - } catch (ExecutionException e) { |
753 |
| - assertTrue(e.getCause() instanceof FirebaseAuthException); |
754 |
| - assertEquals(FirebaseUserManager.TENANT_ID_MISMATCH_ERROR, |
755 |
| - ((FirebaseAuthException) e.getCause()).getErrorCode()); |
756 |
| - } |
757 |
| - } finally { |
758 |
| - // Delete tenant. |
759 |
| - tenantManager.deleteTenantAsync(tenantId).get(); |
760 |
| - } |
761 |
| - } |
762 |
| - |
763 | 506 | @Test
|
764 | 507 | public void testVerifyIdToken() throws Exception {
|
765 | 508 | String customToken = auth.createCustomTokenAsync("user2").get();
|
@@ -1009,65 +752,6 @@ public void testOidcProviderConfigLifecycle() throws Exception {
|
1009 | 752 | assertOidcProviderConfigDoesNotExist(auth, providerId);
|
1010 | 753 | }
|
1011 | 754 |
|
1012 |
| - @Test |
1013 |
| - public void testTenantAwareOidcProviderConfigLifecycle() throws Exception { |
1014 |
| - // Create tenant to use |
1015 |
| - TenantManager tenantManager = auth.getTenantManager(); |
1016 |
| - Tenant.CreateRequest tenantCreateRequest = |
1017 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
1018 |
| - String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
1019 |
| - |
1020 |
| - try { |
1021 |
| - // Create config provider |
1022 |
| - TenantAwareFirebaseAuth tenantAwareAuth = auth.getTenantManager().getAuthForTenant(tenantId); |
1023 |
| - String providerId = "oidc.provider-id"; |
1024 |
| - OidcProviderConfig.CreateRequest createRequest = |
1025 |
| - new OidcProviderConfig.CreateRequest() |
1026 |
| - .setProviderId(providerId) |
1027 |
| - .setDisplayName("DisplayName") |
1028 |
| - .setEnabled(true) |
1029 |
| - .setClientId("ClientId") |
1030 |
| - .setIssuer("https://oidc.com/issuer"); |
1031 |
| - OidcProviderConfig config = |
1032 |
| - tenantAwareAuth.createOidcProviderConfigAsync(createRequest).get(); |
1033 |
| - assertEquals(providerId, config.getProviderId()); |
1034 |
| - assertEquals("DisplayName", config.getDisplayName()); |
1035 |
| - assertEquals("ClientId", config.getClientId()); |
1036 |
| - assertEquals("https://oidc.com/issuer", config.getIssuer()); |
1037 |
| - |
1038 |
| - try { |
1039 |
| - // Get config provider |
1040 |
| - config = tenantAwareAuth.getOidcProviderConfigAsync(providerId).get(); |
1041 |
| - assertEquals(providerId, config.getProviderId()); |
1042 |
| - assertEquals("DisplayName", config.getDisplayName()); |
1043 |
| - assertEquals("ClientId", config.getClientId()); |
1044 |
| - assertEquals("https://oidc.com/issuer", config.getIssuer()); |
1045 |
| - |
1046 |
| - // Update config provider |
1047 |
| - OidcProviderConfig.UpdateRequest updateRequest = |
1048 |
| - new OidcProviderConfig.UpdateRequest(providerId) |
1049 |
| - .setDisplayName("NewDisplayName") |
1050 |
| - .setEnabled(false) |
1051 |
| - .setClientId("NewClientId") |
1052 |
| - .setIssuer("https://oidc.com/new-issuer"); |
1053 |
| - config = tenantAwareAuth.updateOidcProviderConfigAsync(updateRequest).get(); |
1054 |
| - assertEquals(providerId, config.getProviderId()); |
1055 |
| - assertEquals("NewDisplayName", config.getDisplayName()); |
1056 |
| - assertFalse(config.isEnabled()); |
1057 |
| - assertEquals("NewClientId", config.getClientId()); |
1058 |
| - assertEquals("https://oidc.com/new-issuer", config.getIssuer()); |
1059 |
| - } finally { |
1060 |
| - // Delete config provider |
1061 |
| - tenantAwareAuth.deleteProviderConfigAsync(providerId).get(); |
1062 |
| - } |
1063 |
| - |
1064 |
| - assertOidcProviderConfigDoesNotExist(tenantAwareAuth, providerId); |
1065 |
| - } finally { |
1066 |
| - // Delete tenant. |
1067 |
| - tenantManager.deleteTenantAsync(tenantId).get(); |
1068 |
| - } |
1069 |
| - } |
1070 |
| - |
1071 | 755 | @Test
|
1072 | 756 | public void testListOidcProviderConfigs() throws Exception {
|
1073 | 757 | final List<String> providerIds = new ArrayList<>();
|
@@ -1144,53 +828,6 @@ public void onSuccess(ListProviderConfigsPage<OidcProviderConfig> result) {
|
1144 | 828 | }
|
1145 | 829 | }
|
1146 | 830 |
|
1147 |
| - @Test |
1148 |
| - public void testTenantAwareListOidcProviderConfigs() throws Exception { |
1149 |
| - // Create tenant to use |
1150 |
| - TenantManager tenantManager = auth.getTenantManager(); |
1151 |
| - Tenant.CreateRequest tenantCreateRequest = |
1152 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
1153 |
| - String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
1154 |
| - TenantAwareFirebaseAuth tenantAwareAuth = auth.getTenantManager().getAuthForTenant(tenantId); |
1155 |
| - |
1156 |
| - try { |
1157 |
| - final List<String> providerIds = new ArrayList<>(); |
1158 |
| - try { |
1159 |
| - |
1160 |
| - // Create provider configs |
1161 |
| - for (int i = 0; i < 3; i++) { |
1162 |
| - String providerId = "oidc.provider-id" + i; |
1163 |
| - providerIds.add(providerId); |
1164 |
| - OidcProviderConfig.CreateRequest createRequest = new OidcProviderConfig.CreateRequest() |
1165 |
| - .setProviderId(providerId) |
1166 |
| - .setClientId("CLIENT_ID") |
1167 |
| - .setIssuer("https://oidc.com/issuer"); |
1168 |
| - tenantAwareAuth.createOidcProviderConfig(createRequest); |
1169 |
| - } |
1170 |
| - |
1171 |
| - // List provider configs |
1172 |
| - final AtomicInteger collected = new AtomicInteger(0); |
1173 |
| - ListProviderConfigsPage<OidcProviderConfig> page = |
1174 |
| - tenantAwareAuth.listOidcProviderConfigsAsync(null).get(); |
1175 |
| - for (OidcProviderConfig providerConfig : page.iterateAll()) { |
1176 |
| - if (checkProviderConfig(providerIds, providerConfig)) { |
1177 |
| - collected.incrementAndGet(); |
1178 |
| - } |
1179 |
| - } |
1180 |
| - assertEquals(providerIds.size(), collected.get()); |
1181 |
| - |
1182 |
| - } finally { |
1183 |
| - // Delete provider configs |
1184 |
| - for (String providerId : providerIds) { |
1185 |
| - tenantAwareAuth.deleteProviderConfigAsync(providerId).get(); |
1186 |
| - } |
1187 |
| - } |
1188 |
| - } finally { |
1189 |
| - // Delete tenant |
1190 |
| - tenantManager.deleteTenantAsync(tenantId).get(); |
1191 |
| - } |
1192 |
| - } |
1193 |
| - |
1194 | 831 | private Map<String, String> parseLinkParameters(String link) throws Exception {
|
1195 | 832 | Map<String, String> result = new HashMap<>();
|
1196 | 833 | int queryBegin = link.indexOf('?');
|
|
0 commit comments