Skip to content

Commit

Permalink
Update to Realm Core 13.22.0 (#7837)
Browse files Browse the repository at this point in the history
* Update to Realm Core 13.22.0
* Refactored Sync ErrorCodes to match the refactor in Core. A lot of existing error codes have been deprecated.

---------

Co-authored-by: clementetb <clementetb@users.noreply.github.com>
Co-authored-by: Christian Melchior <christian.melchior@mongodb.com>
  • Loading branch information
3 people authored Oct 11, 2023
1 parent a5a0dd3 commit f866781
Show file tree
Hide file tree
Showing 37 changed files with 384 additions and 281 deletions.
5 changes: 3 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
* None.

### Fixed
* None.
* Rare corruption causing 'Invalid streaming format cookie'-exception. Typically following compact, convert or copying to a new file. (Issue [#7775](https://github.com/realm/realm-java/issues/7775), since v10.13.0 (Core v12.12.0))
* [RealmApp] Crash when opening a Realm with a proxy enabled. (Issue [#7828](https://github.com/realm/realm-java/issues/7828))

### Compatibility
* File format: Generates Realms with format v23. Unsynced Realms will be upgraded from Realm Java 2.0 and later. Synced Realms can only be read and upgraded if created with Realm Java v10.0.0-BETA.1.
Expand All @@ -17,7 +18,7 @@
* Android Gradle Plugin 7.4.0 and above.

### Internal
* None.
* Updated to Realm Core 13.22.0, commit 0b19887b5b25746afaf474fe298e38f450f0486e.


## 10.16.1 (2023-06-26)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import org.bson.types.Decimal128;
import org.bson.types.ObjectId;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

Expand Down Expand Up @@ -401,11 +400,11 @@ public void isEmpty_acrossLink() {
case LINKING_OBJECTS:
// Rows 0 and 1 are not included as they are linked to another row through FIELD_OBJECT
// Row 2 is included (no link)
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT).count());
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT).count());
// Row 0 has link to row 0 which has a backlink (list); not included
// Row 1 has link to row 1 which has a backlink (list); not included
// Row 2 has no link; included
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_LIST).count());
// Row 2 has no link; no included
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_LIST).count());
break;
default:
// tested in RealmQueryTests
Expand All @@ -427,17 +426,17 @@ public void isEmpty_acrossLinkingObjectObjectLink() {
case LIST:
// Row 0: backlink to row 0, linklist is empty; included
// Row 1: backlink to row 1, linklist to row 0; not included
// Row 2: no backlink; included
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LIST).count());
// Row 2: no backlink; not included
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LIST).count());
break;
case LINKING_OBJECTS:
// Both row 0 and 1 have a link/backlink; not included
// row 2 has no link/backlink and an empty list; included
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT).count());
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_LIST).count());
// row 2 has no link/backlink and an empty list; not included
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT).count());
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_LIST).count());
break;
case OBJECT:
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_OBJECT).count());
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_OBJECT).count());
break;
case INTEGER_LIST:
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_INTEGER_LIST).count());
Expand Down Expand Up @@ -542,7 +541,7 @@ public void isEmpty_acrossLinkingObjectObjectLink() {
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_DECIMAL128_SET).count());
break;
case LINK_SET:
assertEquals(3, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LINK_SET).count());
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LINK_SET).count());
break;
default:
fail("Unknown type: " + type);
Expand All @@ -565,24 +564,24 @@ public void isEmpty_acrossLinkingObjectListLink() {
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_BINARY).count());
break;
case LIST:
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_LIST).count());
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_LIST).count());
break;
case LINKING_OBJECTS:
// Row 0: Backlink (list) to row 1, row 1 backlink to row 1; not included
// Row 1: Backlink (list) to row 2, row 2 no backlink; included
// Row 2: No backlink (list); included
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT).count());
// Row 2: No backlink (list); not included
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT).count());

// Step 1:
// Row 0 skipped; FIELD_LO_LIST.count > 0
// Row 1 included; FIELD_LO_LIST.count() == 0
//
// Step 2: now checking Row 2
// Row 0 included: goes to Row 1 where FIELD_LO_LIST.count() == 0
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_LIST).count());
// Row 0 not included: goes to Row 1 where FIELD_LO_LIST.count() == 0
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_LIST).count());
break;
case OBJECT:
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_OBJECT).count());
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_OBJECT).count());
break;
case INTEGER_LIST:
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_LIST + "." + AllJavaTypesUnsupportedTypes.FIELD_INTEGER_LIST).count());
Expand Down Expand Up @@ -862,7 +861,8 @@ public void isNotEmpty_acrossLinkingObjectObjectLink() {
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isNotEmpty(AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_REALM_ANY_SET).count());
break;
default:
fail("Unknown type: " + type);
// Do nothing
fail("Unknown type: " + type);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2665,18 +2665,18 @@ public void isEmpty_acrossLink() {
// Row 0: Backlink list to row 1, list to row 0; included
// Row 1: Backlink list to row 2, list to row 1; included
// Row 2: No backlink list; not included
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LIST).count());
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LIST).count());
break;
case LINKING_OBJECTS:
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_LIST).count());
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_LIST).count());

// Row 0: Link to row 0, backlink to row 0; not included
// Row 1: Link to row 1m backlink to row 1; not included
// Row 2: Empty link; included
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT).count());
// Row 2: Empty link; not included
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LO_OBJECT).count());
break;
case OBJECT:
assertEquals(1, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_OBJECT).count());
assertEquals(0, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_OBJECT).count());
break;
case INTEGER_LIST:
assertEquals(3, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_INTEGER_LIST).count());
Expand Down Expand Up @@ -2745,7 +2745,7 @@ public void isEmpty_acrossLink() {
assertEquals(3, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_DECIMAL128_DICTIONARY).count());
break;
case STRING_TO_LINK_MAP:
assertEquals(3, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LINK_DICTIONARY).count());
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LINK_DICTIONARY).count());
break;
case MIXED_SET:
assertEquals(3, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_REALM_ANY_SET).count());
Expand Down Expand Up @@ -2781,7 +2781,7 @@ public void isEmpty_acrossLink() {
assertEquals(3, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_DECIMAL128_SET).count());
break;
case LINK_SET:
assertEquals(3, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LINK_SET).count());
assertEquals(2, realm.where(AllJavaTypesUnsupportedTypes.class).isEmpty(AllJavaTypesUnsupportedTypes.FIELD_OBJECT + "." + AllJavaTypesUnsupportedTypes.FIELD_LINK_SET).count());
break;
default:
fail("Unknown type: " + type);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
Expand Down Expand Up @@ -1939,7 +1940,7 @@ public void setValue_specificType_internalNameOnDynamicRealms() {

@Test
public void asJSON() throws JSONException {
Date date = Calendar.getInstance().getTime();
Date date = Date.from(Calendar.getInstance().getTime().toInstant().truncatedTo(ChronoUnit.SECONDS));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT")); // Core return dates in UTC time
String now = sdf.format(date);
Expand Down Expand Up @@ -2144,7 +2145,7 @@ public void asJSON_withEscaping() throws JSONException {

@Test
public void asJSON_cycles() throws JSONException {
Date date = Calendar.getInstance().getTime();
Date date = Date.from(Calendar.getInstance().getTime().toInstant().truncatedTo(ChronoUnit.SECONDS));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT")); // Core return dates in UTC time
String now = sdf.format(date);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1193,6 +1193,7 @@ public void compactRealm_populatedRealm() throws IOException {
assertTrue(before >= after);
}

// This is only supported on API level 30 and below
@Test
public void compactRealm_onExternalStorage() {
final File externalFilesDir = context.getExternalFilesDir(null);
Expand Down Expand Up @@ -4431,6 +4432,7 @@ public void getLocalInstanceCount() {
assertEquals(0, Realm.getLocalInstanceCount(config));
}

// This is only supported on API 30 and below
@Test
public void namedPipeDirForExternalStorage() {

Expand Down Expand Up @@ -4851,14 +4853,14 @@ public void getNumberOfActiveVersions() throws InterruptedException {
for (int i = 0; i < 5; i++) {
bgRealm.executeTransaction(r -> { /* empty */ });
}
assertEquals(6, bgRealm.getNumberOfActiveVersions());
assertEquals(3, bgRealm.getNumberOfActiveVersions());
bgWritesCompleted.countDown();
TestHelper.awaitOrFail(closeBgRealm);
bgRealm.close();
});
t.start();
TestHelper.awaitOrFail(bgWritesCompleted);
assertEquals(6, realm.getNumberOfActiveVersions());
assertEquals(3, realm.getNumberOfActiveVersions());
closeBgRealm.countDown();
t.join();
realm.refresh(); // Release old versions for GC
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import io.realm.TEST_APP_1
import io.realm.TEST_APP_2
import io.realm.TEST_APP_3
import kotlin.random.Random
import kotlin.test.assertContains

abstract class EmailPasswordAuthTests {

Expand Down Expand Up @@ -569,7 +570,7 @@ class EmailPasswordAuthWithCustomFunctionConfirmTests: EmailPasswordAuthTests()
val exception = assertFailsWith<AppException> {
provider.retryCustomConfirmation(email)
}
assertEquals("""failed to confirm user "$email"""", exception.errorMessage)
assertContains(exception.errorMessage!!, "failed to confirm user \"$email\"")
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import io.realm.entities.SyncStringOnly
import io.realm.mongodb.SyncTestUtils.Companion.createTestUser
import io.realm.mongodb.close
import io.realm.mongodb.registerUserAndLogin
import io.realm.mongodb.sync.SyncConfiguration
import io.realm.mongodb.sync.testSchema
import io.realm.util.assertFailsWith
Expand Down Expand Up @@ -47,7 +48,7 @@ class SchemaTests {
@Before
fun setUp() {
app = TestApp()
val user = createTestUser(app)
val user = app.registerUserAndLogin(TestHelper.getRandomEmail(), "123456")
config = configFactory
.createSyncConfigurationBuilder(user)
.testSchema(SyncStringOnly::class.java)
Expand Down
Loading

0 comments on commit f866781

Please sign in to comment.