From 67067f1d2d66eae73b2e8b52d70abc1eceeab56f Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Mon, 24 May 2021 17:42:12 -0500 Subject: [PATCH] Remove last-seen and registration lock comparisons --- .../storage/AccountsManager.java | 12 ++++--- .../tests/storage/AccountsManagerTest.java | 32 +++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java index 2e41b4b83..446ab5787 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -112,6 +112,7 @@ public class AccountsManager { this.migrationComparisonMapper = mapper.copy(); migrationComparisonMapper.addMixIn(Account.class, AccountComparisonMixin.class); + migrationComparisonMapper.addMixIn(Device.class, DeviceComparisonMixin.class); this.dynamicConfigurationManager = dynamicConfigurationManager; this.experimentEnrollmentManager = experimentEnrollmentManager; @@ -459,10 +460,6 @@ public class AccountsManager { } try { - if (!serializedEquals(databaseAccount.getRegistrationLock(), dynamoAccount.getRegistrationLock())) { - return Optional.of("registrationLock"); - } - if (!serializedEquals(databaseAccount.getDevices(), dynamoAccount.getDevices())) { return Optional.of("devices"); } @@ -533,6 +530,13 @@ public class AccountsManager { } + private static abstract class DeviceComparisonMixin extends Device { + + @JsonIgnore + private long lastSeen; + + } + private boolean serializedEquals(final Object database, final Object dynamo) throws JsonProcessingException { final byte[] databaseSerialized = migrationComparisonMapper.writeValueAsBytes(database); final byte[] dynamoSerialized = migrationComparisonMapper.writeValueAsBytes(dynamo); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java index 7bb8140cb..d860da5a3 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java @@ -41,6 +41,7 @@ import org.whispersystems.textsecuregcm.storage.Account; import org.whispersystems.textsecuregcm.storage.Accounts; import org.whispersystems.textsecuregcm.storage.AccountsDynamoDb; import org.whispersystems.textsecuregcm.storage.AccountsManager; +import org.whispersystems.textsecuregcm.storage.Device; import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager; import org.whispersystems.textsecuregcm.storage.KeysDynamoDb; import org.whispersystems.textsecuregcm.storage.MessagesManager; @@ -409,6 +410,37 @@ class AccountsManagerTest { assertEquals(Optional.empty(), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2))); + { + Device device1 = new Device(); + device1.setId(1L); + + a1.addDevice(device1); + + assertEquals(Optional.of("devices"), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2))); + + Device device2 = new Device(); + device2.setId(1L); + + a2.addDevice(device2); + + assertEquals(Optional.empty(), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2))); + + device1.setLastSeen(1L); + + assertEquals(Optional.empty(), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2))); + + device1.setName("name"); + + assertEquals(Optional.of("devices"), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2))); + + a1.removeDevice(1L); + a2.removeDevice(1L); + + assertEquals(Optional.empty(), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2))); + } + + assertEquals(Optional.empty(), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2))); + a1.setDynamoDbMigrationVersion(1); assertEquals(Optional.of("migrationVersion"), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2)));