Get more detailzed serialization mismatches

This commit is contained in:
Chris Eager 2021-05-17 12:26:05 -05:00 committed by Chris Eager
parent 30b2c2b5ad
commit d252e579f4
2 changed files with 53 additions and 5 deletions

View File

@ -21,6 +21,7 @@ import io.micrometer.core.instrument.Metrics;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.Callable;
@ -421,13 +422,52 @@ public class AccountsManager {
return Optional.of("number");
}
if (!Objects.equals(databaseAccount.getIdentityKey(), dynamoAccount.getIdentityKey())) {
return Optional.of("identityKey");
}
if (!Objects.equals(databaseAccount.getCurrentProfileVersion(), dynamoAccount.getCurrentProfileVersion())) {
return Optional.of("currentProfileVersion");
}
if (!Objects.equals(databaseAccount.getProfileName(), dynamoAccount.getProfileName())) {
return Optional.of("profileName");
}
if (!Objects.equals(databaseAccount.getAvatar(), dynamoAccount.getAvatar())) {
return Optional.of("avatar");
}
if (!Objects.equals(databaseAccount.getUnidentifiedAccessKey(), dynamoAccount.getUnidentifiedAccessKey())) {
if (databaseAccount.getUnidentifiedAccessKey().isPresent() && dynamoAccount.getUnidentifiedAccessKey().isPresent()) {
if (Arrays.compare(databaseAccount.getUnidentifiedAccessKey().get(), dynamoAccount.getUnidentifiedAccessKey().get()) != 0) {
return Optional.of("unidentifiedAccessKey");
}
} else {
return Optional.of("unidentifiedAccessKey");
}
}
if (!Objects.equals(databaseAccount.isUnrestrictedUnidentifiedAccess(), dynamoAccount.isUnrestrictedUnidentifiedAccess())) {
return Optional.of("unrestrictedUnidentifiedAccess");
}
if (!Objects.equals(databaseAccount.isDiscoverableByPhoneNumber(), dynamoAccount.isDiscoverableByPhoneNumber())) {
return Optional.of("discoverableByPhoneNumber");
}
try {
final byte[] databaseSerialized = migrationComparisonMapper.writeValueAsBytes(databaseAccount);
final byte[] dynamoSerialized = migrationComparisonMapper.writeValueAsBytes(dynamoAccount);
if (!serializedEquals(databaseAccount.getRegistrationLock(), dynamoAccount.getRegistrationLock())) {
return Optional.of("registrationLock");
}
final int serializeCompare = Arrays.compare(databaseSerialized, dynamoSerialized);
if (!serializedEquals(databaseAccount.getDevices(), dynamoAccount.getDevices())) {
return Optional.of("devices");
}
if (serializeCompare != 0) {
if (!serializedEquals(databaseAccount, dynamoAccount)) {
return Optional.of("serialization");
}
@ -485,4 +525,12 @@ public class AccountsManager {
private int dynamoDbMigrationVersion;
}
private boolean serializedEquals(final Object database, final Object dynamo) throws JsonProcessingException {
final byte[] databaseSerialized = migrationComparisonMapper.writeValueAsBytes(database);
final byte[] dynamoSerialized = migrationComparisonMapper.writeValueAsBytes(dynamo);
final int serializeCompare = Arrays.compare(databaseSerialized, dynamoSerialized);
return serializeCompare == 0;
}
}

View File

@ -415,6 +415,6 @@ class AccountsManagerTest {
a2.setProfileName("name");
assertEquals(Optional.of("serialization"), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2)));
assertEquals(Optional.of("profileName"), accountsManager.compareAccounts(Optional.of(a1), Optional.of(a2)));
}
}