47
47
import com .google .firebase .FirebaseOptions ;
48
48
import com .google .firebase .ImplFirebaseTrampolines ;
49
49
import com .google .firebase .auth .ProviderConfigTestUtils .TemporaryProviderConfig ;
50
+ import com .google .firebase .auth .UserTestUtils .RandomUser ;
51
+ import com .google .firebase .auth .UserTestUtils .TemporaryUser ;
50
52
import com .google .firebase .auth .hash .Scrypt ;
51
53
import com .google .firebase .internal .Nullable ;
52
54
import com .google .firebase .testing .IntegrationTestUtils ;
56
58
import java .util .HashMap ;
57
59
import java .util .List ;
58
60
import java .util .Map ;
59
- import java .util .Random ;
60
- import java .util .UUID ;
61
61
import java .util .concurrent .ExecutionException ;
62
62
import java .util .concurrent .Semaphore ;
63
63
import java .util .concurrent .TimeUnit ;
@@ -85,7 +85,7 @@ public class FirebaseAuthIT {
85
85
private static final FirebaseAuth auth = FirebaseAuth .getInstance (
86
86
IntegrationTestUtils .ensureDefaultApp ());
87
87
88
- @ Rule public final TemporaryUser temporaryUser = new TemporaryUser ();
88
+ @ Rule public final TemporaryUser temporaryUser = new TemporaryUser (auth );
89
89
@ Rule public final TemporaryProviderConfig temporaryProviderConfig =
90
90
new TemporaryProviderConfig (auth );
91
91
@@ -139,22 +139,21 @@ public void testDeleteNonExistingUser() throws Exception {
139
139
140
140
@ Test
141
141
public void testCreateUserWithParams () throws Exception {
142
- RandomUser randomUser = RandomUser .create ();
143
- String phone = randomPhoneNumber ();
142
+ RandomUser randomUser = UserTestUtils .generateRandomUserInfo ();
144
143
UserRecord .CreateRequest user = new UserRecord .CreateRequest ()
145
- .setUid (randomUser .uid )
146
- .setEmail (randomUser .email )
147
- .setPhoneNumber (phone )
144
+ .setUid (randomUser .getUid () )
145
+ .setEmail (randomUser .getEmail () )
146
+ .setPhoneNumber (randomUser . getPhoneNumber () )
148
147
.setDisplayName ("Random User" )
149
148
.setPhotoUrl ("https://example.com/photo.png" )
150
149
.setEmailVerified (true )
151
150
.setPassword ("password" );
152
151
153
152
UserRecord userRecord = temporaryUser .create (user );
154
- assertEquals (randomUser .uid , userRecord .getUid ());
153
+ assertEquals (randomUser .getUid () , userRecord .getUid ());
155
154
assertEquals ("Random User" , userRecord .getDisplayName ());
156
- assertEquals (randomUser .email , userRecord .getEmail ());
157
- assertEquals (phone , userRecord .getPhoneNumber ());
155
+ assertEquals (randomUser .getEmail () , userRecord .getEmail ());
156
+ assertEquals (randomUser . getPhoneNumber () , userRecord .getPhoneNumber ());
158
157
assertEquals ("https://example.com/photo.png" , userRecord .getPhotoUrl ());
159
158
assertTrue (userRecord .isEmailVerified ());
160
159
assertFalse (userRecord .isDisabled ());
@@ -167,7 +166,7 @@ public void testCreateUserWithParams() throws Exception {
167
166
assertTrue (providers .contains ("password" ));
168
167
assertTrue (providers .contains ("phone" ));
169
168
170
- checkRecreateUser (randomUser .uid );
169
+ checkRecreateUser (randomUser .getUid () );
171
170
}
172
171
173
172
@ Test
@@ -192,21 +191,20 @@ public void testUserLifecycle() throws Exception {
192
191
assertTrue (userRecord .getCustomClaims ().isEmpty ());
193
192
194
193
// Update user
195
- RandomUser randomUser = RandomUser .create ();
196
- String phone = randomPhoneNumber ();
194
+ RandomUser randomUser = UserTestUtils .generateRandomUserInfo ();
197
195
UserRecord .UpdateRequest request = userRecord .updateRequest ()
198
196
.setDisplayName ("Updated Name" )
199
- .setEmail (randomUser .email )
200
- .setPhoneNumber (phone )
197
+ .setEmail (randomUser .getEmail () )
198
+ .setPhoneNumber (randomUser . getPhoneNumber () )
201
199
.setPhotoUrl ("https://example.com/photo.png" )
202
200
.setEmailVerified (true )
203
201
.setPassword ("secret" );
204
202
userRecord = auth .updateUserAsync (request ).get ();
205
203
assertEquals (uid , userRecord .getUid ());
206
204
assertNull (userRecord .getTenantId ());
207
205
assertEquals ("Updated Name" , userRecord .getDisplayName ());
208
- assertEquals (randomUser .email , userRecord .getEmail ());
209
- assertEquals (phone , userRecord .getPhoneNumber ());
206
+ assertEquals (randomUser .getEmail () , userRecord .getEmail ());
207
+ assertEquals (randomUser . getPhoneNumber () , userRecord .getPhoneNumber ());
210
208
assertEquals ("https://example.com/photo.png" , userRecord .getPhotoUrl ());
211
209
assertTrue (userRecord .isEmailVerified ());
212
210
assertFalse (userRecord .isDisabled ());
@@ -227,7 +225,7 @@ public void testUserLifecycle() throws Exception {
227
225
assertEquals (uid , userRecord .getUid ());
228
226
assertNull (userRecord .getTenantId ());
229
227
assertNull (userRecord .getDisplayName ());
230
- assertEquals (randomUser .email , userRecord .getEmail ());
228
+ assertEquals (randomUser .getEmail () , userRecord .getEmail ());
231
229
assertNull (userRecord .getPhoneNumber ());
232
230
assertNull (userRecord .getPhotoUrl ());
233
231
assertTrue (userRecord .isEmailVerified ());
@@ -237,7 +235,7 @@ public void testUserLifecycle() throws Exception {
237
235
238
236
// Delete user
239
237
auth .deleteUserAsync (userRecord .getUid ()).get ();
240
- assertUserDoesNotExist (auth , userRecord .getUid ());
238
+ UserTestUtils . assertUserDoesNotExist (auth , userRecord .getUid ());
241
239
}
242
240
243
241
@ Test
@@ -454,29 +452,29 @@ public void testCustomTokenWithClaims() throws Exception {
454
452
455
453
@ Test
456
454
public void testImportUsers () throws Exception {
457
- RandomUser randomUser = RandomUser . create ();
455
+ RandomUser randomUser = UserTestUtils . generateRandomUserInfo ();
458
456
ImportUserRecord user = ImportUserRecord .builder ()
459
- .setUid (randomUser .uid )
460
- .setEmail (randomUser .email )
457
+ .setUid (randomUser .getUid () )
458
+ .setEmail (randomUser .getEmail () )
461
459
.build ();
462
460
463
461
UserImportResult result = auth .importUsersAsync (ImmutableList .of (user )).get ();
464
- temporaryUser .registerUid (randomUser .uid );
462
+ temporaryUser .registerUid (randomUser .getUid () );
465
463
assertEquals (1 , result .getSuccessCount ());
466
464
assertEquals (0 , result .getFailureCount ());
467
465
468
- UserRecord savedUser = auth .getUserAsync (randomUser .uid ).get ();
469
- assertEquals (randomUser .email , savedUser .getEmail ());
466
+ UserRecord savedUser = auth .getUserAsync (randomUser .getUid () ).get ();
467
+ assertEquals (randomUser .getEmail () , savedUser .getEmail ());
470
468
}
471
469
472
470
@ Test
473
471
public void testImportUsersWithPassword () throws Exception {
474
- RandomUser randomUser = RandomUser . create ();
472
+ RandomUser randomUser = UserTestUtils . generateRandomUserInfo ();
475
473
final byte [] passwordHash = BaseEncoding .base64 ().decode (
476
474
"V358E8LdWJXAO7muq0CufVpEOXaj8aFiC7T/rcaGieN04q/ZPJ08WhJEHGjj9lz/2TT+/86N5VjVoc5DdBhBiw==" );
477
475
ImportUserRecord user = ImportUserRecord .builder ()
478
- .setUid (randomUser .uid )
479
- .setEmail (randomUser .email )
476
+ .setUid (randomUser .getUid () )
477
+ .setEmail (randomUser .getEmail () )
480
478
.setPasswordHash (passwordHash )
481
479
.setPasswordSalt ("NaCl" .getBytes ())
482
480
.build ();
@@ -492,46 +490,46 @@ public void testImportUsersWithPassword() throws Exception {
492
490
.setRounds (8 )
493
491
.setMemoryCost (14 )
494
492
.build ())).get ();
495
- temporaryUser .registerUid (randomUser .uid );
493
+ temporaryUser .registerUid (randomUser .getUid () );
496
494
assertEquals (1 , result .getSuccessCount ());
497
495
assertEquals (0 , result .getFailureCount ());
498
496
499
- UserRecord savedUser = auth .getUserAsync (randomUser .uid ).get ();
500
- assertEquals (randomUser .email , savedUser .getEmail ());
501
- String idToken = signInWithPassword (randomUser .email , "password" );
497
+ UserRecord savedUser = auth .getUserAsync (randomUser .getUid () ).get ();
498
+ assertEquals (randomUser .getEmail () , savedUser .getEmail ());
499
+ String idToken = signInWithPassword (randomUser .getEmail () , "password" );
502
500
assertFalse (Strings .isNullOrEmpty (idToken ));
503
501
}
504
502
505
503
@ Test
506
504
public void testGeneratePasswordResetLink () throws Exception {
507
- RandomUser user = RandomUser . create ();
505
+ RandomUser user = UserTestUtils . generateRandomUserInfo ();
508
506
temporaryUser .create (new UserRecord .CreateRequest ()
509
- .setUid (user .uid )
510
- .setEmail (user .email )
507
+ .setUid (user .getUid () )
508
+ .setEmail (user .getEmail () )
511
509
.setEmailVerified (false )
512
510
.setPassword ("password" ));
513
- String link = auth .generatePasswordResetLink (user .email , ActionCodeSettings .builder ()
511
+ String link = auth .generatePasswordResetLink (user .getEmail () , ActionCodeSettings .builder ()
514
512
.setUrl (ACTION_LINK_CONTINUE_URL )
515
513
.setHandleCodeInApp (false )
516
514
.build ());
517
515
Map <String , String > linkParams = parseLinkParameters (link );
518
516
assertEquals (ACTION_LINK_CONTINUE_URL , linkParams .get ("continueUrl" ));
519
- String email = resetPassword (user .email , "password" , "newpassword" ,
517
+ String email = resetPassword (user .getEmail () , "password" , "newpassword" ,
520
518
linkParams .get ("oobCode" ));
521
- assertEquals (user .email , email );
519
+ assertEquals (user .getEmail () , email );
522
520
// Password reset also verifies the user's email
523
- assertTrue (auth .getUser (user .uid ).isEmailVerified ());
521
+ assertTrue (auth .getUser (user .getUid () ).isEmailVerified ());
524
522
}
525
523
526
524
@ Test
527
525
public void testGenerateEmailVerificationResetLink () throws Exception {
528
- RandomUser user = RandomUser . create ();
526
+ RandomUser user = UserTestUtils . generateRandomUserInfo ();
529
527
temporaryUser .create (new UserRecord .CreateRequest ()
530
- .setUid (user .uid )
531
- .setEmail (user .email )
528
+ .setUid (user .getUid () )
529
+ .setEmail (user .getEmail () )
532
530
.setEmailVerified (false )
533
531
.setPassword ("password" ));
534
- String link = auth .generateEmailVerificationLink (user .email , ActionCodeSettings .builder ()
532
+ String link = auth .generateEmailVerificationLink (user .getEmail () , ActionCodeSettings .builder ()
535
533
.setUrl (ACTION_LINK_CONTINUE_URL )
536
534
.setHandleCodeInApp (false )
537
535
.build ());
@@ -544,21 +542,21 @@ public void testGenerateEmailVerificationResetLink() throws Exception {
544
542
545
543
@ Test
546
544
public void testGenerateSignInWithEmailLink () throws Exception {
547
- RandomUser user = RandomUser . create ();
545
+ RandomUser user = UserTestUtils . generateRandomUserInfo ();
548
546
temporaryUser .create (new UserRecord .CreateRequest ()
549
- .setUid (user .uid )
550
- .setEmail (user .email )
547
+ .setUid (user .getUid () )
548
+ .setEmail (user .getEmail () )
551
549
.setEmailVerified (false )
552
550
.setPassword ("password" ));
553
- String link = auth .generateSignInWithEmailLink (user .email , ActionCodeSettings .builder ()
551
+ String link = auth .generateSignInWithEmailLink (user .getEmail () , ActionCodeSettings .builder ()
554
552
.setUrl (ACTION_LINK_CONTINUE_URL )
555
553
.setHandleCodeInApp (false )
556
554
.build ());
557
555
Map <String , String > linkParams = parseLinkParameters (link );
558
556
assertEquals (ACTION_LINK_CONTINUE_URL , linkParams .get ("continueUrl" ));
559
- String idToken = signInWithEmailLink (user .email , linkParams .get ("oobCode" ));
557
+ String idToken = signInWithEmailLink (user .getEmail () , linkParams .get ("oobCode" ));
560
558
assertFalse (Strings .isNullOrEmpty (idToken ));
561
- assertTrue (auth .getUser (user .uid ).isEmailVerified ());
559
+ assertTrue (auth .getUser (user .getUid () ).isEmailVerified ());
562
560
}
563
561
564
562
@ Test
@@ -812,15 +810,6 @@ private Map<String, String> parseLinkParameters(String link) throws Exception {
812
810
return result ;
813
811
}
814
812
815
- private String randomPhoneNumber () {
816
- Random random = new Random ();
817
- StringBuilder builder = new StringBuilder ("+1" );
818
- for (int i = 0 ; i < 10 ; i ++) {
819
- builder .append (random .nextInt (10 ));
820
- }
821
- return builder .toString ();
822
- }
823
-
824
813
private String signInWithCustomToken (String customToken ) throws IOException {
825
814
return signInWithCustomToken (customToken , null );
826
815
}
@@ -910,23 +899,6 @@ private void checkRecreateUser(String uid) throws Exception {
910
899
}
911
900
}
912
901
913
- private static class RandomUser {
914
- private final String uid ;
915
- private final String email ;
916
-
917
- private RandomUser (String uid , String email ) {
918
- this .uid = uid ;
919
- this .email = email ;
920
- }
921
-
922
- static RandomUser create () {
923
- final String uid = UUID .randomUUID ().toString ().replaceAll ("-" , "" );
924
- final String email = ("test" + uid .substring (0 , 12 ) + "@example."
925
- + uid .substring (12 ) + ".com" ).toLowerCase ();
926
- return new RandomUser (uid , email );
927
- }
928
- }
929
-
930
902
private boolean checkOidcProviderConfig (List <String > providerIds , OidcProviderConfig config ) {
931
903
if (providerIds .contains (config .getProviderId ())) {
932
904
assertEquals ("CLIENT_ID" , config .getClientId ());
@@ -947,48 +919,5 @@ private boolean checkSamlProviderConfig(List<String> providerIds, SamlProviderCo
947
919
}
948
920
return false ;
949
921
}
950
-
951
- private static void assertUserDoesNotExist (AbstractFirebaseAuth firebaseAuth , String uid )
952
- throws Exception {
953
- try {
954
- firebaseAuth .getUserAsync (uid ).get ();
955
- fail ("No error thrown for getting a user which was expected to be absent." );
956
- } catch (ExecutionException e ) {
957
- assertTrue (e .getCause () instanceof FirebaseAuthException );
958
- assertEquals (FirebaseUserManager .USER_NOT_FOUND_ERROR ,
959
- ((FirebaseAuthException ) e .getCause ()).getErrorCode ());
960
- }
961
- }
962
-
963
- /**
964
- * Creates temporary Firebase user accounts for testing, and deletes them at the end of each
965
- * test case.
966
- */
967
- private static final class TemporaryUser extends ExternalResource {
968
-
969
- private final List <String > users = new ArrayList <>();
970
-
971
- public UserRecord create (UserRecord .CreateRequest request ) throws FirebaseAuthException {
972
- UserRecord user = auth .createUser (request );
973
- registerUid (user .getUid ());
974
- return user ;
975
- }
976
-
977
- public synchronized void registerUid (String uid ) {
978
- users .add (uid );
979
- }
980
-
981
- @ Override
982
- protected synchronized void after () {
983
- for (String uid : users ) {
984
- try {
985
- auth .deleteUser (uid );
986
- } catch (Exception ignore ) {
987
- // Ignore
988
- }
989
- }
990
-
991
- users .clear ();
992
- }
993
- }
994
922
}
923
+
0 commit comments