|
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 =
|
@@ -423,209 +421,6 @@ public void onSuccess(ListUsersPage result) {
|
423 | 421 | }
|
424 | 422 | }
|
425 | 423 |
|
426 |
| - @Test |
427 |
| - public void testTenantAwareUserLifecycle() throws Exception { |
428 |
| - // Create tenant to use. |
429 |
| - TenantManager tenantManager = auth.getTenantManager(); |
430 |
| - Tenant.CreateRequest tenantCreateRequest = |
431 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
432 |
| - final String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
433 |
| - |
434 |
| - TenantAwareFirebaseAuth tenantAwareAuth = auth.getTenantManager().getAuthForTenant(tenantId); |
435 |
| - |
436 |
| - // Create user |
437 |
| - UserRecord userRecord = tenantAwareAuth.createUserAsync(new UserRecord.CreateRequest()).get(); |
438 |
| - String uid = userRecord.getUid(); |
439 |
| - |
440 |
| - // Get user |
441 |
| - userRecord = tenantAwareAuth.getUserAsync(userRecord.getUid()).get(); |
442 |
| - assertEquals(uid, userRecord.getUid()); |
443 |
| - assertEquals(tenantId, userRecord.getTenantId()); |
444 |
| - assertNull(userRecord.getDisplayName()); |
445 |
| - assertNull(userRecord.getEmail()); |
446 |
| - assertNull(userRecord.getPhoneNumber()); |
447 |
| - assertNull(userRecord.getPhotoUrl()); |
448 |
| - assertFalse(userRecord.isEmailVerified()); |
449 |
| - assertFalse(userRecord.isDisabled()); |
450 |
| - assertTrue(userRecord.getUserMetadata().getCreationTimestamp() > 0); |
451 |
| - assertEquals(0, userRecord.getUserMetadata().getLastSignInTimestamp()); |
452 |
| - assertEquals(0, userRecord.getProviderData().length); |
453 |
| - assertTrue(userRecord.getCustomClaims().isEmpty()); |
454 |
| - |
455 |
| - // Update user |
456 |
| - RandomUser randomUser = RandomUser.create(); |
457 |
| - String phone = randomPhoneNumber(); |
458 |
| - UserRecord.UpdateRequest request = userRecord.updateRequest() |
459 |
| - .setDisplayName("Updated Name") |
460 |
| - .setEmail(randomUser.email) |
461 |
| - .setPhoneNumber(phone) |
462 |
| - .setPhotoUrl("https://example.com/photo.png") |
463 |
| - .setEmailVerified(true) |
464 |
| - .setPassword("secret"); |
465 |
| - userRecord = tenantAwareAuth.updateUserAsync(request).get(); |
466 |
| - assertEquals(uid, userRecord.getUid()); |
467 |
| - assertEquals(tenantId, userRecord.getTenantId()); |
468 |
| - assertEquals("Updated Name", userRecord.getDisplayName()); |
469 |
| - assertEquals(randomUser.email, userRecord.getEmail()); |
470 |
| - assertEquals(phone, userRecord.getPhoneNumber()); |
471 |
| - assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl()); |
472 |
| - assertTrue(userRecord.isEmailVerified()); |
473 |
| - assertFalse(userRecord.isDisabled()); |
474 |
| - assertEquals(2, userRecord.getProviderData().length); |
475 |
| - assertTrue(userRecord.getCustomClaims().isEmpty()); |
476 |
| - |
477 |
| - // Get user by email |
478 |
| - userRecord = tenantAwareAuth.getUserByEmailAsync(userRecord.getEmail()).get(); |
479 |
| - assertEquals(uid, userRecord.getUid()); |
480 |
| - |
481 |
| - // Disable user and remove properties |
482 |
| - request = userRecord.updateRequest() |
483 |
| - .setPhotoUrl(null) |
484 |
| - .setDisplayName(null) |
485 |
| - .setPhoneNumber(null) |
486 |
| - .setDisabled(true); |
487 |
| - userRecord = tenantAwareAuth.updateUserAsync(request).get(); |
488 |
| - assertEquals(uid, userRecord.getUid()); |
489 |
| - assertEquals(tenantId, userRecord.getTenantId()); |
490 |
| - assertNull(userRecord.getDisplayName()); |
491 |
| - assertEquals(randomUser.email, userRecord.getEmail()); |
492 |
| - assertNull(userRecord.getPhoneNumber()); |
493 |
| - assertNull(userRecord.getPhotoUrl()); |
494 |
| - assertTrue(userRecord.isEmailVerified()); |
495 |
| - assertTrue(userRecord.isDisabled()); |
496 |
| - assertEquals(1, userRecord.getProviderData().length); |
497 |
| - assertTrue(userRecord.getCustomClaims().isEmpty()); |
498 |
| - |
499 |
| - // Delete user and tenant |
500 |
| - tenantAwareAuth.deleteUserAsync(userRecord.getUid()).get(); |
501 |
| - assertUserDoesNotExist(tenantAwareAuth, userRecord.getUid()); |
502 |
| - tenantManager.deleteTenant(tenantId); |
503 |
| - } |
504 |
| - |
505 |
| - @Test |
506 |
| - public void testTenantAwareListUsers() throws Exception { |
507 |
| - // Create tenant to use. |
508 |
| - TenantManager tenantManager = auth.getTenantManager(); |
509 |
| - Tenant.CreateRequest tenantCreateRequest = |
510 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
511 |
| - final String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
512 |
| - |
513 |
| - TenantAwareFirebaseAuth tenantAwareAuth = tenantManager.getAuthForTenant(tenantId); |
514 |
| - final List<String> uids = new ArrayList<>(); |
515 |
| - |
516 |
| - try { |
517 |
| - for (int i = 0; i < 3; i++) { |
518 |
| - UserRecord.CreateRequest createRequest = |
519 |
| - new UserRecord.CreateRequest().setPassword("password"); |
520 |
| - uids.add(tenantAwareAuth.createUserAsync(createRequest).get().getUid()); |
521 |
| - } |
522 |
| - |
523 |
| - // Test list by batches |
524 |
| - final AtomicInteger collected = new AtomicInteger(0); |
525 |
| - ListUsersPage page = tenantAwareAuth.listUsersAsync(null).get(); |
526 |
| - while (page != null) { |
527 |
| - for (ExportedUserRecord user : page.getValues()) { |
528 |
| - if (uids.contains(user.getUid())) { |
529 |
| - collected.incrementAndGet(); |
530 |
| - assertNotNull("Missing passwordHash field. A common cause would be " |
531 |
| - + "forgetting to add the \"Firebase Authentication Admin\" permission. See " |
532 |
| - + "instructions in CONTRIBUTING.md", user.getPasswordHash()); |
533 |
| - assertNotNull(user.getPasswordSalt()); |
534 |
| - assertEquals(tenantId, user.getTenantId()); |
535 |
| - } |
536 |
| - } |
537 |
| - page = page.getNextPage(); |
538 |
| - } |
539 |
| - assertEquals(uids.size(), collected.get()); |
540 |
| - |
541 |
| - // Test iterate all |
542 |
| - collected.set(0); |
543 |
| - page = tenantAwareAuth.listUsersAsync(null).get(); |
544 |
| - for (ExportedUserRecord user : page.iterateAll()) { |
545 |
| - if (uids.contains(user.getUid())) { |
546 |
| - collected.incrementAndGet(); |
547 |
| - assertNotNull(user.getPasswordHash()); |
548 |
| - assertNotNull(user.getPasswordSalt()); |
549 |
| - assertEquals(tenantId, user.getTenantId()); |
550 |
| - } |
551 |
| - } |
552 |
| - assertEquals(uids.size(), collected.get()); |
553 |
| - |
554 |
| - // Test iterate async |
555 |
| - collected.set(0); |
556 |
| - final Semaphore semaphore = new Semaphore(0); |
557 |
| - final AtomicReference<Throwable> error = new AtomicReference<>(); |
558 |
| - ApiFuture<ListUsersPage> pageFuture = tenantAwareAuth.listUsersAsync(null); |
559 |
| - ApiFutures.addCallback(pageFuture, new ApiFutureCallback<ListUsersPage>() { |
560 |
| - @Override |
561 |
| - public void onFailure(Throwable t) { |
562 |
| - error.set(t); |
563 |
| - semaphore.release(); |
564 |
| - } |
565 |
| - |
566 |
| - @Override |
567 |
| - public void onSuccess(ListUsersPage result) { |
568 |
| - for (ExportedUserRecord user : result.iterateAll()) { |
569 |
| - if (uids.contains(user.getUid())) { |
570 |
| - collected.incrementAndGet(); |
571 |
| - assertNotNull(user.getPasswordHash()); |
572 |
| - assertNotNull(user.getPasswordSalt()); |
573 |
| - assertEquals(tenantId, user.getTenantId()); |
574 |
| - } |
575 |
| - } |
576 |
| - semaphore.release(); |
577 |
| - } |
578 |
| - }, MoreExecutors.directExecutor()); |
579 |
| - semaphore.acquire(); |
580 |
| - assertEquals(uids.size(), collected.get()); |
581 |
| - assertNull(error.get()); |
582 |
| - } finally { |
583 |
| - for (String uid : uids) { |
584 |
| - tenantAwareAuth.deleteUserAsync(uid).get(); |
585 |
| - } |
586 |
| - tenantManager.deleteTenant(tenantId); |
587 |
| - } |
588 |
| - } |
589 |
| - |
590 |
| - @Test |
591 |
| - public void testTenantAwareGetUserWithMultipleTenantIds() throws Exception { |
592 |
| - // Create tenants to use. |
593 |
| - TenantManager tenantManager = auth.getTenantManager(); |
594 |
| - Tenant.CreateRequest tenantCreateRequest1 = |
595 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName1"); |
596 |
| - String tenantId1 = tenantManager.createTenant(tenantCreateRequest1).getTenantId(); |
597 |
| - Tenant.CreateRequest tenantCreateRequest2 = |
598 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName2"); |
599 |
| - String tenantId2 = tenantManager.createTenant(tenantCreateRequest2).getTenantId(); |
600 |
| - |
601 |
| - // Create three users (one without a tenant ID, and two with different tenant IDs). |
602 |
| - UserRecord.CreateRequest createRequest = new UserRecord.CreateRequest(); |
603 |
| - UserRecord nonTenantUserRecord = auth.createUser(createRequest); |
604 |
| - TenantAwareFirebaseAuth tenantAwareAuth1 = auth.getTenantManager().getAuthForTenant(tenantId1); |
605 |
| - UserRecord tenantUserRecord1 = tenantAwareAuth1.createUser(createRequest); |
606 |
| - TenantAwareFirebaseAuth tenantAwareAuth2 = auth.getTenantManager().getAuthForTenant(tenantId2); |
607 |
| - UserRecord tenantUserRecord2 = tenantAwareAuth2.createUser(createRequest); |
608 |
| - |
609 |
| - // Make sure only non-tenant users can be fetched using the standard client. |
610 |
| - assertNotNull(auth.getUser(nonTenantUserRecord.getUid())); |
611 |
| - assertUserDoesNotExist(auth, tenantUserRecord1.getUid()); |
612 |
| - assertUserDoesNotExist(auth, tenantUserRecord2.getUid()); |
613 |
| - |
614 |
| - // Make sure tenant-aware client cannot fetch users outside that tenant. |
615 |
| - assertUserDoesNotExist(tenantAwareAuth1, nonTenantUserRecord.getUid()); |
616 |
| - assertUserDoesNotExist(tenantAwareAuth1, tenantUserRecord2.getUid()); |
617 |
| - assertUserDoesNotExist(tenantAwareAuth2, nonTenantUserRecord.getUid()); |
618 |
| - assertUserDoesNotExist(tenantAwareAuth2, tenantUserRecord1.getUid()); |
619 |
| - |
620 |
| - // Make sure tenant-aware client can fetch users under that tenant. |
621 |
| - assertNotNull(tenantAwareAuth1.getUser(tenantUserRecord1.getUid())); |
622 |
| - assertNotNull(tenantAwareAuth2.getUser(tenantUserRecord2.getUid())); |
623 |
| - |
624 |
| - // Delete tenants. |
625 |
| - tenantManager.deleteTenant(tenantId1); |
626 |
| - tenantManager.deleteTenant(tenantId2); |
627 |
| - } |
628 |
| - |
629 | 424 | @Test
|
630 | 425 | public void testTenantLifecycle() throws Exception {
|
631 | 426 | TenantManager tenantManager = auth.getTenantManager();
|
@@ -809,58 +604,6 @@ public void testCustomTokenWithIAM() throws Exception {
|
809 | 604 | }
|
810 | 605 | }
|
811 | 606 |
|
812 |
| - @Test |
813 |
| - public void testTenantAwareCustomToken() throws Exception { |
814 |
| - // Create tenant to use. |
815 |
| - TenantManager tenantManager = auth.getTenantManager(); |
816 |
| - Tenant.CreateRequest tenantCreateRequest = |
817 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
818 |
| - String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
819 |
| - |
820 |
| - try { |
821 |
| - // Create and decode a token with a tenant-aware client. |
822 |
| - TenantAwareFirebaseAuth tenantAwareAuth = auth.getTenantManager().getAuthForTenant(tenantId); |
823 |
| - String customToken = tenantAwareAuth.createCustomTokenAsync("user1").get(); |
824 |
| - String idToken = signInWithCustomToken(customToken, tenantId); |
825 |
| - FirebaseToken decoded = tenantAwareAuth.verifyIdTokenAsync(idToken).get(); |
826 |
| - assertEquals("user1", decoded.getUid()); |
827 |
| - assertEquals(tenantId, decoded.getTenantId()); |
828 |
| - } finally { |
829 |
| - // Delete tenant. |
830 |
| - tenantManager.deleteTenantAsync(tenantId).get(); |
831 |
| - } |
832 |
| - } |
833 |
| - |
834 |
| - @Test |
835 |
| - public void testVerifyTokenWithWrongTenantAwareClient() throws Exception { |
836 |
| - // Create tenant to use. |
837 |
| - TenantManager tenantManager = auth.getTenantManager(); |
838 |
| - Tenant.CreateRequest tenantCreateRequest = |
839 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
840 |
| - String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
841 |
| - |
842 |
| - // Create tenant-aware clients. |
843 |
| - TenantAwareFirebaseAuth tenantAwareAuth1 = auth.getTenantManager().getAuthForTenant(tenantId); |
844 |
| - TenantAwareFirebaseAuth tenantAwareAuth2 = auth.getTenantManager().getAuthForTenant("OTHER"); |
845 |
| - |
846 |
| - try { |
847 |
| - // Create a token with one client and decode with the other. |
848 |
| - String customToken = tenantAwareAuth1.createCustomTokenAsync("user").get(); |
849 |
| - String idToken = signInWithCustomToken(customToken, tenantId); |
850 |
| - try { |
851 |
| - tenantAwareAuth2.verifyIdTokenAsync(idToken).get(); |
852 |
| - fail("No error thrown for verifying a token with the wrong tenant-aware client"); |
853 |
| - } catch (ExecutionException e) { |
854 |
| - assertTrue(e.getCause() instanceof FirebaseAuthException); |
855 |
| - assertEquals(FirebaseUserManager.TENANT_ID_MISMATCH_ERROR, |
856 |
| - ((FirebaseAuthException) e.getCause()).getErrorCode()); |
857 |
| - } |
858 |
| - } finally { |
859 |
| - // Delete tenant. |
860 |
| - tenantManager.deleteTenantAsync(tenantId).get(); |
861 |
| - } |
862 |
| - } |
863 |
| - |
864 | 607 | @Test
|
865 | 608 | public void testVerifyIdToken() throws Exception {
|
866 | 609 | String customToken = auth.createCustomTokenAsync("user2").get();
|
@@ -1110,65 +853,6 @@ public void testOidcProviderConfigLifecycle() throws Exception {
|
1110 | 853 | assertOidcProviderConfigDoesNotExist(auth, providerId);
|
1111 | 854 | }
|
1112 | 855 |
|
1113 |
| - @Test |
1114 |
| - public void testTenantAwareOidcProviderConfigLifecycle() throws Exception { |
1115 |
| - // Create tenant to use |
1116 |
| - TenantManager tenantManager = auth.getTenantManager(); |
1117 |
| - Tenant.CreateRequest tenantCreateRequest = |
1118 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
1119 |
| - String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
1120 |
| - |
1121 |
| - try { |
1122 |
| - // Create config provider |
1123 |
| - TenantAwareFirebaseAuth tenantAwareAuth = auth.getTenantManager().getAuthForTenant(tenantId); |
1124 |
| - String providerId = "oidc.provider-id"; |
1125 |
| - OidcProviderConfig.CreateRequest createRequest = |
1126 |
| - new OidcProviderConfig.CreateRequest() |
1127 |
| - .setProviderId(providerId) |
1128 |
| - .setDisplayName("DisplayName") |
1129 |
| - .setEnabled(true) |
1130 |
| - .setClientId("ClientId") |
1131 |
| - .setIssuer("https://oidc.com/issuer"); |
1132 |
| - OidcProviderConfig config = |
1133 |
| - tenantAwareAuth.createOidcProviderConfigAsync(createRequest).get(); |
1134 |
| - assertEquals(providerId, config.getProviderId()); |
1135 |
| - assertEquals("DisplayName", config.getDisplayName()); |
1136 |
| - assertEquals("ClientId", config.getClientId()); |
1137 |
| - assertEquals("https://oidc.com/issuer", config.getIssuer()); |
1138 |
| - |
1139 |
| - try { |
1140 |
| - // Get config provider |
1141 |
| - config = tenantAwareAuth.getOidcProviderConfigAsync(providerId).get(); |
1142 |
| - assertEquals(providerId, config.getProviderId()); |
1143 |
| - assertEquals("DisplayName", config.getDisplayName()); |
1144 |
| - assertEquals("ClientId", config.getClientId()); |
1145 |
| - assertEquals("https://oidc.com/issuer", config.getIssuer()); |
1146 |
| - |
1147 |
| - // Update config provider |
1148 |
| - OidcProviderConfig.UpdateRequest updateRequest = |
1149 |
| - new OidcProviderConfig.UpdateRequest(providerId) |
1150 |
| - .setDisplayName("NewDisplayName") |
1151 |
| - .setEnabled(false) |
1152 |
| - .setClientId("NewClientId") |
1153 |
| - .setIssuer("https://oidc.com/new-issuer"); |
1154 |
| - config = tenantAwareAuth.updateOidcProviderConfigAsync(updateRequest).get(); |
1155 |
| - assertEquals(providerId, config.getProviderId()); |
1156 |
| - assertEquals("NewDisplayName", config.getDisplayName()); |
1157 |
| - assertFalse(config.isEnabled()); |
1158 |
| - assertEquals("NewClientId", config.getClientId()); |
1159 |
| - assertEquals("https://oidc.com/new-issuer", config.getIssuer()); |
1160 |
| - } finally { |
1161 |
| - // Delete config provider |
1162 |
| - tenantAwareAuth.deleteProviderConfigAsync(providerId).get(); |
1163 |
| - } |
1164 |
| - |
1165 |
| - assertOidcProviderConfigDoesNotExist(tenantAwareAuth, providerId); |
1166 |
| - } finally { |
1167 |
| - // Delete tenant. |
1168 |
| - tenantManager.deleteTenantAsync(tenantId).get(); |
1169 |
| - } |
1170 |
| - } |
1171 |
| - |
1172 | 856 | @Test
|
1173 | 857 | public void testListOidcProviderConfigs() throws Exception {
|
1174 | 858 | final List<String> providerIds = new ArrayList<>();
|
@@ -1245,53 +929,6 @@ public void onSuccess(ListProviderConfigsPage<OidcProviderConfig> result) {
|
1245 | 929 | }
|
1246 | 930 | }
|
1247 | 931 |
|
1248 |
| - @Test |
1249 |
| - public void testTenantAwareListOidcProviderConfigs() throws Exception { |
1250 |
| - // Create tenant to use |
1251 |
| - TenantManager tenantManager = auth.getTenantManager(); |
1252 |
| - Tenant.CreateRequest tenantCreateRequest = |
1253 |
| - new Tenant.CreateRequest().setDisplayName("DisplayName"); |
1254 |
| - String tenantId = tenantManager.createTenant(tenantCreateRequest).getTenantId(); |
1255 |
| - TenantAwareFirebaseAuth tenantAwareAuth = auth.getTenantManager().getAuthForTenant(tenantId); |
1256 |
| - |
1257 |
| - try { |
1258 |
| - final List<String> providerIds = new ArrayList<>(); |
1259 |
| - try { |
1260 |
| - |
1261 |
| - // Create provider configs |
1262 |
| - for (int i = 0; i < 3; i++) { |
1263 |
| - String providerId = "oidc.provider-id" + i; |
1264 |
| - providerIds.add(providerId); |
1265 |
| - OidcProviderConfig.CreateRequest createRequest = new OidcProviderConfig.CreateRequest() |
1266 |
| - .setProviderId(providerId) |
1267 |
| - .setClientId("CLIENT_ID") |
1268 |
| - .setIssuer("https://oidc.com/issuer"); |
1269 |
| - tenantAwareAuth.createOidcProviderConfig(createRequest); |
1270 |
| - } |
1271 |
| - |
1272 |
| - // List provider configs |
1273 |
| - final AtomicInteger collected = new AtomicInteger(0); |
1274 |
| - ListProviderConfigsPage<OidcProviderConfig> page = |
1275 |
| - tenantAwareAuth.listOidcProviderConfigsAsync(null).get(); |
1276 |
| - for (OidcProviderConfig providerConfig : page.iterateAll()) { |
1277 |
| - if (checkProviderConfig(providerIds, providerConfig)) { |
1278 |
| - collected.incrementAndGet(); |
1279 |
| - } |
1280 |
| - } |
1281 |
| - assertEquals(providerIds.size(), collected.get()); |
1282 |
| - |
1283 |
| - } finally { |
1284 |
| - // Delete provider configs |
1285 |
| - for (String providerId : providerIds) { |
1286 |
| - tenantAwareAuth.deleteProviderConfigAsync(providerId).get(); |
1287 |
| - } |
1288 |
| - } |
1289 |
| - } finally { |
1290 |
| - // Delete tenant |
1291 |
| - tenantManager.deleteTenantAsync(tenantId).get(); |
1292 |
| - } |
1293 |
| - } |
1294 |
| - |
1295 | 932 | private Map<String, String> parseLinkParameters(String link) throws Exception {
|
1296 | 933 | Map<String, String> result = new HashMap<>();
|
1297 | 934 | int queryBegin = link.indexOf('?');
|
|
0 commit comments