36
36
import java .util .Arrays ;
37
37
import java .util .List ;
38
38
import java .util .Map ;
39
- import java .util .Objects ;
40
39
import java .util .UUID ;
41
40
import java .util .concurrent .ExecutionException ;
42
41
import java .util .concurrent .Semaphore ;
@@ -3422,50 +3421,48 @@ private static FirebaseApp appForDatabaseUrl(String url, String name) {
3422
3421
@ Test
3423
3422
public void emptyQueryGet () throws DatabaseException , InterruptedException {
3424
3423
FirebaseApp app =
3425
- appForDatabaseUrl (IntegrationTestValues .getAltNamespace (), UUID .randomUUID ().toString ());
3424
+ appForDatabaseUrl (IntegrationTestValues .getNamespace (), UUID .randomUUID ().toString ());
3426
3425
FirebaseDatabase db = FirebaseDatabase .getInstance (app );
3427
- db .useEmulator ("10.0.2.2" , 9000 );
3428
- DatabaseReference node = db .getReference ();
3429
3426
try {
3430
- Tasks .await (node .get ());
3427
+ Tasks .await (db .getReference ("dummy/" ).setValue (42L ));
3428
+ assertNull (Tasks .await (db .getReference ("null/" ).get ()).getValue ());
3431
3429
} catch (ExecutionException e ) {
3432
- assertEquals (e .getCause ().getMessage (), "Client is offline" );
3433
- return ;
3430
+ fail (e .getMessage ());
3434
3431
}
3435
- fail ();
3436
3432
}
3437
3433
3438
3434
@ Test
3439
3435
public void offlineQueryGet () throws DatabaseException , InterruptedException {
3440
3436
FirebaseApp app =
3441
- appForDatabaseUrl (IntegrationTestValues .getAltNamespace (), UUID .randomUUID ().toString ());
3437
+ appForDatabaseUrl (IntegrationTestValues .getNamespace (), UUID .randomUUID ().toString ());
3442
3438
FirebaseDatabase db = FirebaseDatabase .getInstance (app );
3443
- db .useEmulator ("10.0.2.2" , 9000 );
3444
3439
DatabaseReference node = db .getReference ();
3445
- DatabaseConfig cfg = IntegrationTestHelpers .newTestConfig ();
3446
- IntegrationTestHelpers .goOffline (cfg );
3440
+ try {
3441
+ Tasks .await (node .setValue (42L ));
3442
+ } catch (ExecutionException e ) {
3443
+ fail ();
3444
+ }
3445
+ db .goOffline ();
3447
3446
try {
3448
3447
Tasks .await (node .get ());
3449
3448
} catch (ExecutionException e ) {
3450
3449
assertEquals (e .getCause ().getMessage (), "Client is offline" );
3451
3450
return ;
3452
3451
}
3453
- fail ();
3452
+ fail ("Client get succeeded even though offline." );
3454
3453
}
3455
3454
3456
3455
@ Test
3457
3456
public void getQueryBasic () throws DatabaseException , InterruptedException {
3458
3457
FirebaseApp app =
3459
- appForDatabaseUrl (IntegrationTestValues .getAltNamespace (), UUID .randomUUID ().toString ());
3458
+ appForDatabaseUrl (IntegrationTestValues .getNamespace (), UUID .randomUUID ().toString ());
3460
3459
FirebaseDatabase db = FirebaseDatabase .getInstance (app );
3461
- db .useEmulator ("10.0.2.2" , 9000 );
3462
3460
DatabaseReference node = db .getReference ();
3463
- final Semaphore semaphore = new Semaphore (0 );
3464
3461
try {
3465
3462
Tasks .await (node .setValue (42 ));
3466
3463
assertEquals (42L , Tasks .await (node .get ()).getValue ());
3467
3464
} catch (ExecutionException e ) {
3468
- fail ();
3465
+ fail (e . getMessage () );
3469
3466
}
3470
3467
}
3471
3468
@@ -3475,57 +3472,31 @@ public void getQueryCached()
3475
3472
FirebaseApp app =
3476
3473
appForDatabaseUrl (IntegrationTestValues .getAltNamespace (), UUID .randomUUID ().toString ());
3477
3474
FirebaseDatabase db = FirebaseDatabase .getInstance (app );
3478
- db .useEmulator ("10.0.2.2" , 9000 );
3479
3475
DatabaseReference ref = db .getReference ();
3480
- DatabaseConfig cfg = IntegrationTestHelpers .newTestConfig ();
3481
- ReadFuture future = ReadFuture .untilNonNull (ref );
3482
- ref .setValue (42 );
3483
- assertEquals (42L , future .waitForLastValue ());
3484
- IntegrationTestHelpers .goOffline (cfg );
3485
- try {
3486
- assertEquals (42L , Tasks .await (ref .get ()).getValue ());
3487
- } catch (ExecutionException e ) {
3488
- fail ();
3489
- }
3490
- }
3491
-
3492
- @ Test
3493
- public void getQueryHitsCacheWhenOffline ()
3494
- throws InterruptedException , ExecutionException , TimeoutException , TestFailure {
3495
- FirebaseApp readerApp =
3496
- appForDatabaseUrl (IntegrationTestValues .getNamespace (), UUID .randomUUID ().toString ());
3497
- FirebaseApp writerApp =
3498
- appForDatabaseUrl (IntegrationTestValues .getNamespace (), UUID .randomUUID ().toString ());
3499
- FirebaseDatabase readerDb = FirebaseDatabase .getInstance (readerApp );
3500
- FirebaseDatabase writerDb = FirebaseDatabase .getInstance (writerApp );
3501
- readerDb .useEmulator ("10.0.2.2" , 9000 );
3502
- writerDb .useEmulator ("10.0.2.2" , 9000 );
3503
- DatabaseReference reader = readerDb .getReference ("/foo" );
3504
- DatabaseReference writer = writerDb .getReference ("/foo" );
3505
-
3506
- WriteFuture write = new WriteFuture (writer , 42L );
3507
- assertNull (write .timedGet ());
3508
-
3509
3476
final Semaphore semaphore = new Semaphore (0 );
3510
- reader . addValueEventListener (
3477
+ ValueEventListener listener =
3511
3478
new ValueEventListener () {
3512
3479
@ Override
3513
3480
public void onDataChange (@ NonNull DataSnapshot snapshot ) {
3514
- if (Objects . requireNonNull ( snapshot .getValue () ).equals (42L )) {
3481
+ if (snapshot . getValue () != null && snapshot .getValue ().equals (42L )) {
3515
3482
semaphore .release ();
3516
3483
}
3517
3484
}
3518
3485
3519
3486
@ Override
3520
3487
public void onCancelled (@ NonNull DatabaseError error ) {}
3521
- });
3488
+ };
3489
+ ref .addValueEventListener (listener );
3490
+ ref .setValue (42L );
3522
3491
IntegrationTestHelpers .waitFor (semaphore );
3523
- reader . getDatabase () .goOffline ();
3492
+ db .goOffline ();
3524
3493
try {
3525
- DataSnapshot snapshot = Tasks . await ( reader . get ());
3526
- assertEquals (42L , snapshot .getValue ());
3494
+ // Since we still have a listener on `ref`, the 42L should be cached here.
3495
+ assertEquals (42L , Tasks . await ( ref . get ()) .getValue ());
3527
3496
} catch (ExecutionException e ) {
3528
- fail ();
3497
+ fail (e .getMessage ());
3498
+ } finally {
3499
+ ref .removeEventListener (listener );
3529
3500
}
3530
3501
}
3531
3502
@@ -3539,38 +3510,34 @@ public void getQuerySkipsCacheWhenOnline()
3539
3510
appForDatabaseUrl (IntegrationTestValues .getNamespace (), UUID .randomUUID ().toString ());
3540
3511
FirebaseDatabase readerDb = FirebaseDatabase .getInstance (readerApp );
3541
3512
FirebaseDatabase writerDb = FirebaseDatabase .getInstance (writerApp );
3542
- readerDb .useEmulator ("10.0.2.2" , 9000 );
3543
- writerDb .useEmulator ("10.0.2.2" , 9000 );
3544
3513
DatabaseReference reader = readerDb .getReference ();
3545
3514
DatabaseReference writer = writerDb .getReference ();
3546
3515
3516
+ final Semaphore semaphore = new Semaphore (0 );
3547
3517
reader .addValueEventListener (
3548
3518
new ValueEventListener () {
3549
3519
@ Override
3550
- public void onDataChange (@ NonNull DataSnapshot snapshot ) {}
3520
+ public void onDataChange (@ NonNull DataSnapshot snapshot ) {
3521
+ if (snapshot .getValue () != null && snapshot .getValue ().equals (42L )) {
3522
+ semaphore .release ();
3523
+ }
3524
+ }
3551
3525
3552
3526
@ Override
3553
3527
public void onCancelled (@ NonNull DatabaseError error ) {}
3554
3528
});
3555
3529
3556
3530
WriteFuture write = new WriteFuture (writer , 42L );
3557
3531
assertNull (write .timedGet ());
3558
-
3559
- final Semaphore semaphore = new Semaphore (0 );
3560
-
3561
- try {
3562
- assertEquals (42L , Tasks .await (reader .get ()).getValue ());
3563
- } catch (ExecutionException e ) {
3564
- fail ();
3565
- }
3532
+ IntegrationTestHelpers .waitFor (semaphore );
3566
3533
3567
3534
write = new WriteFuture (writer , 43L );
3568
3535
assertNull (write .timedGet ());
3569
3536
3570
3537
try {
3571
3538
assertEquals (43L , Tasks .await (reader .get ()).getValue ());
3572
3539
} catch (ExecutionException e ) {
3573
- fail ();
3540
+ fail (e . getMessage () );
3574
3541
}
3575
3542
}
3576
3543
0 commit comments