Skip to content

Commit 580eedd

Browse files
committed
Move tenant-aware integration tests to separate class (#405)
Move tenant-aware integration tests to separate class. This simplifies the setup and teardown required for these tests.
1 parent 9052434 commit 580eedd

File tree

2 files changed

+442
-363
lines changed

2 files changed

+442
-363
lines changed

src/test/java/com/google/firebase/auth/FirebaseAuthIT.java

Lines changed: 0 additions & 363 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@
6666
import org.junit.BeforeClass;
6767
import org.junit.Test;
6868

69-
// TODO(micahstairs): Move tenant-aware tests into a seperate class, so that we only need to
70-
// create and destroy the tenant once.
7169
public class FirebaseAuthIT {
7270

7371
private static final String VERIFY_CUSTOM_TOKEN_URL =
@@ -423,209 +421,6 @@ public void onSuccess(ListUsersPage result) {
423421
}
424422
}
425423

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-
629424
@Test
630425
public void testTenantLifecycle() throws Exception {
631426
TenantManager tenantManager = auth.getTenantManager();
@@ -809,58 +604,6 @@ public void testCustomTokenWithIAM() throws Exception {
809604
}
810605
}
811606

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-
864607
@Test
865608
public void testVerifyIdToken() throws Exception {
866609
String customToken = auth.createCustomTokenAsync("user2").get();
@@ -1110,65 +853,6 @@ public void testOidcProviderConfigLifecycle() throws Exception {
1110853
assertOidcProviderConfigDoesNotExist(auth, providerId);
1111854
}
1112855

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-
1172856
@Test
1173857
public void testListOidcProviderConfigs() throws Exception {
1174858
final List<String> providerIds = new ArrayList<>();
@@ -1245,53 +929,6 @@ public void onSuccess(ListProviderConfigsPage<OidcProviderConfig> result) {
1245929
}
1246930
}
1247931

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-
1295932
private Map<String, String> parseLinkParameters(String link) throws Exception {
1296933
Map<String, String> result = new HashMap<>();
1297934
int queryBegin = link.indexOf('?');

0 commit comments

Comments
 (0)