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.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
@ -421,13 +422,52 @@ public class AccountsManager {
return Optional.of("number"); 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 { try {
final byte[] databaseSerialized = migrationComparisonMapper.writeValueAsBytes(databaseAccount); if (!serializedEquals(databaseAccount.getRegistrationLock(), dynamoAccount.getRegistrationLock())) {
final byte[] dynamoSerialized = migrationComparisonMapper.writeValueAsBytes(dynamoAccount); 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"); return Optional.of("serialization");
} }
@ -485,4 +525,12 @@ public class AccountsManager {
private int dynamoDbMigrationVersion; 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"); 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)));
} }
} }