Skip to content

Commit 6753504

Browse files
committed
backport tests from web
1 parent 1667daa commit 6753504

File tree

4 files changed

+132
-8
lines changed

4 files changed

+132
-8
lines changed

firebase-firestore/src/androidTest/java/com/google/firebase/firestore/FirestoreTest.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1419,4 +1419,77 @@ public void testCannotGetDocumentWithMemoryEagerGcEnabled() {
14191419
assertTrue(e instanceof FirebaseFirestoreException);
14201420
assertEquals(((FirebaseFirestoreException) e).getCode(), Code.UNAVAILABLE);
14211421
}
1422+
1423+
@Test
1424+
public void testGetPersistentCacheIndexManager() {
1425+
// Use persistent disk cache (explicit)
1426+
FirebaseFirestore db1 = testFirestore();
1427+
FirebaseFirestoreSettings settings1 =
1428+
new FirebaseFirestoreSettings.Builder(db1.getFirestoreSettings())
1429+
.setLocalCacheSettings(PersistentCacheSettings.newBuilder().build())
1430+
.build();
1431+
db1.setFirestoreSettings(settings1);
1432+
assertNotNull(db1.getPersistentCacheIndexManager());
1433+
1434+
// Use persistent disk cache (default)
1435+
FirebaseFirestore db2 = testFirestore();
1436+
assertNotNull(db2.getPersistentCacheIndexManager());
1437+
1438+
// Disable persistent disk cache
1439+
FirebaseFirestore db3 = testFirestore();
1440+
FirebaseFirestoreSettings settings3 =
1441+
new FirebaseFirestoreSettings.Builder(db1.getFirestoreSettings())
1442+
.setLocalCacheSettings(MemoryCacheSettings.newBuilder().build())
1443+
.build();
1444+
db3.setFirestoreSettings(settings3);
1445+
assertNull(db3.getPersistentCacheIndexManager());
1446+
1447+
// Disable persistent disk cache (deprecated)
1448+
FirebaseFirestore db4 = testFirestore();
1449+
FirebaseFirestoreSettings settings4 =
1450+
new FirebaseFirestoreSettings.Builder(db4.getFirestoreSettings())
1451+
.setPersistenceEnabled(false)
1452+
.build();
1453+
db4.setFirestoreSettings(settings4);
1454+
assertNull(db4.getPersistentCacheIndexManager());
1455+
}
1456+
1457+
@Test
1458+
public void testCanGetSameOrDifferentPersistentCacheIndexManager() {
1459+
// Use persistent disk cache (explicit)
1460+
FirebaseFirestore db1 = testFirestore();
1461+
FirebaseFirestoreSettings settings1 =
1462+
new FirebaseFirestoreSettings.Builder(db1.getFirestoreSettings())
1463+
.setLocalCacheSettings(PersistentCacheSettings.newBuilder().build())
1464+
.build();
1465+
db1.setFirestoreSettings(settings1);
1466+
PersistentCacheIndexManager indexManager1 = db1.getPersistentCacheIndexManager();
1467+
PersistentCacheIndexManager indexManager2 = db1.getPersistentCacheIndexManager();
1468+
assertEquals(indexManager1, indexManager2);
1469+
1470+
// Use persistent disk cache (default)
1471+
FirebaseFirestore db2 = testFirestore();
1472+
PersistentCacheIndexManager indexManager3 = db2.getPersistentCacheIndexManager();
1473+
PersistentCacheIndexManager indexManager4 = db2.getPersistentCacheIndexManager();
1474+
assertEquals(indexManager3, indexManager4);
1475+
1476+
assertNotEquals(indexManager1, indexManager3);
1477+
1478+
FirebaseFirestore db3 = testFirestore();
1479+
FirebaseFirestoreSettings settings3 =
1480+
new FirebaseFirestoreSettings.Builder(db3.getFirestoreSettings())
1481+
.setLocalCacheSettings(PersistentCacheSettings.newBuilder().build())
1482+
.build();
1483+
db3.setFirestoreSettings(settings3);
1484+
PersistentCacheIndexManager indexManager5 = db3.getPersistentCacheIndexManager();
1485+
assertNotEquals(indexManager1, indexManager5);
1486+
assertNotEquals(indexManager3, indexManager5);
1487+
1488+
// Use persistent disk cache (default)
1489+
FirebaseFirestore db4 = testFirestore();
1490+
PersistentCacheIndexManager indexManager6 = db4.getPersistentCacheIndexManager();
1491+
assertNotEquals(indexManager1, indexManager6);
1492+
assertNotEquals(indexManager3, indexManager6);
1493+
assertNotEquals(indexManager5, indexManager6);
1494+
}
14221495
}

firebase-firestore/src/androidTest/java/com/google/firebase/firestore/IndexingTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,12 @@ public void testBadIndexDoesNotCrashClient() {
109109
}
110110

111111
/**
112-
* After Auto Index Creation is enabled, through public API there is no way to state of indexes sitting inside SDK. So this test only checks the API of auto index creation.
112+
* After Auto Index Creation is enabled, through public API there is no way to state of indexes
113+
* sitting inside SDK. So this test only checks the API of auto index creation.
113114
*/
114115
@Test
115116
public void testAutoIndexCreationSetSuccessfully() {
116-
// Use persistent disk cache (default)
117+
// Use persistent disk cache (explicit)
117118
FirebaseFirestore db = testFirestore();
118119
FirebaseFirestoreSettings settings =
119120
new FirebaseFirestoreSettings.Builder(db.getFirestoreSettings())
@@ -144,7 +145,8 @@ public void testAutoIndexCreationSetSuccessfully() {
144145
}
145146

146147
/**
147-
* After Auto Index Creation is enabled, through public API there is no way to state of indexes sitting inside SDK. So this test only checks the API of auto index creation.
148+
* After Auto Index Creation is enabled, through public API there is no way to state of indexes
149+
* sitting inside SDK. So this test only checks the API of auto index creation.
148150
*/
149151
@Test
150152
public void testAutoIndexCreationSetSuccessfullyUsingDefault() {

firebase-firestore/src/test/java/com/google/firebase/firestore/local/SQLiteIndexManagerTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import static com.google.common.truth.Truth.assertWithMessage;
1818
import static com.google.firebase.firestore.model.FieldIndex.IndexState;
1919
import static com.google.firebase.firestore.model.FieldIndex.Segment.Kind;
20+
import static com.google.firebase.firestore.testutil.TestUtil.andFilters;
2021
import static com.google.firebase.firestore.testutil.TestUtil.bound;
2122
import static com.google.firebase.firestore.testutil.TestUtil.deletedDoc;
2223
import static com.google.firebase.firestore.testutil.TestUtil.doc;
@@ -1189,6 +1190,49 @@ public void testIndexTypeForOrQueries() throws Exception {
11891190
validateIndexType(query11, IndexManager.IndexType.PARTIAL);
11901191
}
11911192

1193+
@Test
1194+
public void TestCreateTargetIndexesCreatesFullIndexesForEachSubTargets() {
1195+
Query query =
1196+
query("coll")
1197+
.filter(orFilters(filter("a", "==", 1), filter("b", "==", 2), filter("c", "==", 3)));
1198+
1199+
Query subQuery1 = query("coll").filter(filter("a", "==", 1));
1200+
Query subQuery2 = query("coll").filter(filter("b", "==", 2));
1201+
Query subQuery3 = query("coll").filter(filter("c", "==", 3));
1202+
1203+
validateIndexType(query, IndexManager.IndexType.NONE);
1204+
validateIndexType(subQuery1, IndexManager.IndexType.NONE);
1205+
validateIndexType(subQuery2, IndexManager.IndexType.NONE);
1206+
validateIndexType(subQuery3, IndexManager.IndexType.NONE);
1207+
1208+
indexManager.createTargetIndexes(query.toTarget());
1209+
1210+
validateIndexType(query, IndexManager.IndexType.FULL);
1211+
validateIndexType(subQuery1, IndexManager.IndexType.FULL);
1212+
validateIndexType(subQuery2, IndexManager.IndexType.FULL);
1213+
validateIndexType(subQuery3, IndexManager.IndexType.FULL);
1214+
}
1215+
1216+
@Test
1217+
public void TestCreateTargetIndexesUpgradesPartialIndexToFullIndex() {
1218+
Query query = query("coll").filter(andFilters(filter("a", "==", 1), filter("b", "==", 2)));
1219+
1220+
Query subQuery1 = query("coll").filter(filter("a", "==", 1));
1221+
Query subQuery2 = query("coll").filter(filter("b", "==", 2));
1222+
1223+
indexManager.createTargetIndexes(subQuery1.toTarget());
1224+
1225+
validateIndexType(query, IndexManager.IndexType.PARTIAL);
1226+
validateIndexType(subQuery1, IndexManager.IndexType.FULL);
1227+
validateIndexType(subQuery2, IndexManager.IndexType.NONE);
1228+
1229+
indexManager.createTargetIndexes(query.toTarget());
1230+
1231+
validateIndexType(query, IndexManager.IndexType.FULL);
1232+
validateIndexType(subQuery1, IndexManager.IndexType.FULL);
1233+
validateIndexType(subQuery2, IndexManager.IndexType.NONE);
1234+
}
1235+
11921236
private void validateIndexType(Query query, IndexManager.IndexType expected) {
11931237
IndexManager.IndexType indexType = indexManager.getIndexType(query.toTarget());
11941238
assertEquals(indexType, expected);

firebase-firestore/src/test/java/com/google/firebase/firestore/local/SQLiteLocalStoreTest.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -492,18 +492,22 @@ public void testDoesNotAutoCreateIndexesWhenIndexLookUpIsExpensive() {
492492

493493
@Test
494494
public void testIndexAutoCreationWorksWhenBackfillerRunsHalfway() {
495-
Query query = query("coll").filter(filter("matches", "==", "foo")).filter(filter("count", ">", 10));
495+
Query query =
496+
query("coll").filter(filter("matches", "==", "foo")).filter(filter("count", ">", 10));
496497
int targetId = allocateQuery(query);
497498

498499
setIndexAutoCreationEnabled(true);
499500
setMinCollectionSizeToAutoCreateIndex(0);
500501
setRelativeIndexReadCostPerDocument(2);
501502

502-
applyRemoteEvent(addedRemoteEvent(doc("coll/a", 10, map("matches", "foo", "count", 11)), targetId));
503-
applyRemoteEvent(addedRemoteEvent(doc("coll/b", 10, map("matches", "foo", "count", 9)), targetId));
503+
applyRemoteEvent(
504+
addedRemoteEvent(doc("coll/a", 10, map("matches", "foo", "count", 11)), targetId));
505+
applyRemoteEvent(
506+
addedRemoteEvent(doc("coll/b", 10, map("matches", "foo", "count", 9)), targetId));
504507
applyRemoteEvent(addedRemoteEvent(doc("coll/c", 10, map("matches", "foo")), targetId));
505508
applyRemoteEvent(addedRemoteEvent(doc("coll/d", 10, map("matches", 7, "count", 11)), targetId));
506-
applyRemoteEvent(addedRemoteEvent(doc("coll/e", 10, map("matches", "foo", "count", 21)), targetId));
509+
applyRemoteEvent(
510+
addedRemoteEvent(doc("coll/e", 10, map("matches", "foo", "count", 21)), targetId));
507511

508512
// First time query is running without indexes.
509513
// Based on current heuristic, collection document counts (5) > 2 * resultSize (2).
@@ -515,7 +519,8 @@ public void testIndexAutoCreationWorksWhenBackfillerRunsHalfway() {
515519
setBackfillerMaxDocumentsToProcess(2);
516520
backfillIndexes();
517521

518-
applyRemoteEvent(addedRemoteEvent(doc("coll/f", 20, map("matches", "foo" , "count", 15)), targetId));
522+
applyRemoteEvent(
523+
addedRemoteEvent(doc("coll/f", 20, map("matches", "foo", "count", 15)), targetId));
519524

520525
executeQuery(query);
521526
assertRemoteDocumentsRead(/* byKey= */ 1, /* byCollection= */ 2);

0 commit comments

Comments
 (0)