Skip to content

Commit 5805fca

Browse files
authored
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 c396d6a commit 5805fca

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 =
@@ -322,209 +320,6 @@ public void onSuccess(ListUsersPage result) {
322320
}
323321
}
324322

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-
528323
@Test
529324
public void testTenantLifecycle() throws Exception {
530325
TenantManager tenantManager = auth.getTenantManager();
@@ -708,58 +503,6 @@ public void testCustomTokenWithIAM() throws Exception {
708503
}
709504
}
710505

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-
763506
@Test
764507
public void testVerifyIdToken() throws Exception {
765508
String customToken = auth.createCustomTokenAsync("user2").get();
@@ -1009,65 +752,6 @@ public void testOidcProviderConfigLifecycle() throws Exception {
1009752
assertOidcProviderConfigDoesNotExist(auth, providerId);
1010753
}
1011754

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-
1071755
@Test
1072756
public void testListOidcProviderConfigs() throws Exception {
1073757
final List<String> providerIds = new ArrayList<>();
@@ -1144,53 +828,6 @@ public void onSuccess(ListProviderConfigsPage<OidcProviderConfig> result) {
1144828
}
1145829
}
1146830

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

0 commit comments

Comments
 (0)