diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java index 89f23ccca..2780f6129 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -392,7 +392,7 @@ public class AccountController { return new AccountCreationResult(account.getUuid(), account.getNumber(), - account.getPhoneNumberIdentifier().orElse(null), + account.getPhoneNumberIdentifier(), existingAccount.map(Account::isStorageSupported).orElse(false)); } @@ -606,7 +606,7 @@ public class AccountController { public AccountCreationResult whoAmI(@Auth AuthenticatedAccount auth) { return new AccountCreationResult(auth.getAccount().getUuid(), auth.getAccount().getNumber(), - auth.getAccount().getPhoneNumberIdentifier().orElse(null), + auth.getAccount().getPhoneNumberIdentifier(), auth.getAccount().isStorageSupported()); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java index 051f5a612..8c2fdeeda 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java @@ -16,7 +16,6 @@ import java.util.List; import java.util.Optional; import java.util.UUID; import javax.ws.rs.GET; -import javax.ws.rs.NotFoundException; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @@ -87,7 +86,7 @@ public class CertificateController { List credentials = new LinkedList<>(); final UUID identifier = identityType.map(String::toLowerCase).orElse("aci").equals("pni") ? - auth.getAccount().getPhoneNumberIdentifier().orElseThrow(NotFoundException::new) : + auth.getAccount().getPhoneNumberIdentifier() : auth.getAccount().getUuid(); for (int i = startRedemptionTime; i <= endRedemptionTime; i++) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java index c9f57a49d..22e33cbfc 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java @@ -21,7 +21,6 @@ import javax.validation.Valid; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; -import javax.ws.rs.NotFoundException; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -192,8 +191,7 @@ public class KeysController { } } - final boolean usePhoneNumberIdentity = - target.getPhoneNumberIdentifier().map(pni -> pni.equals(targetUuid)).orElse(false); + final boolean usePhoneNumberIdentity = target.getPhoneNumberIdentifier().equals(targetUuid); Map preKeysByDeviceId = getLocalKeys(target, deviceId, usePhoneNumberIdentity); List responseItems = new LinkedList<>(); @@ -254,7 +252,7 @@ public class KeysController { private static UUID getIdentifier(final Account account, final Optional identityType) { return usePhoneNumberIdentity(identityType) ? - account.getPhoneNumberIdentifier().orElseThrow(NotFoundException::new) : + account.getPhoneNumberIdentifier() : account.getUuid(); } @@ -262,7 +260,7 @@ public class KeysController { final Map preKeys; final UUID identifier = usePhoneNumberIdentity ? - destination.getPhoneNumberIdentifier().orElseThrow(NotFoundException::new) : + destination.getPhoneNumberIdentifier() : destination.getUuid(); if (deviceIdSelector.equals("*")) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java index 35f444b82..b4612ba39 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java @@ -23,7 +23,6 @@ import org.whispersystems.textsecuregcm.auth.AuthenticationCredentials; import org.whispersystems.textsecuregcm.auth.StoredRegistrationLock; import org.whispersystems.textsecuregcm.entities.AccountAttributes; import org.whispersystems.textsecuregcm.util.Util; -import javax.annotation.Nullable; public class Account { @@ -33,9 +32,7 @@ public class Account { @JsonIgnore private UUID uuid; - // Nullable only until initial migration is complete @JsonProperty("pni") - @Nullable private UUID phoneNumberIdentifier; @JsonProperty @@ -108,11 +105,10 @@ public class Account { this.uuid = uuid; } - // Optional only until initial migration is complete - public Optional getPhoneNumberIdentifier() { + public UUID getPhoneNumberIdentifier() { requireNotStale(); - return Optional.ofNullable(phoneNumberIdentifier); + return phoneNumberIdentifier; } /** diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java index f07021966..5f211eebd 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java @@ -108,18 +108,12 @@ public class Accounts extends AbstractDynamoDbStore { .build()) .build(); - assert account.getPhoneNumberIdentifier().isPresent(); - - if (account.getPhoneNumberIdentifier().isEmpty()) { - log.error("Account {} is missing a phone number identifier", account.getUuid()); - } - TransactWriteItem phoneNumberIdentifierConstraintPut = TransactWriteItem.builder() .put( Put.builder() .tableName(phoneNumberIdentifierConstraintTableName) .item(Map.of( - ATTR_PNI_UUID, AttributeValues.fromUUID(account.getPhoneNumberIdentifier().get()), + ATTR_PNI_UUID, AttributeValues.fromUUID(account.getPhoneNumberIdentifier()), KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()))) .conditionExpression( "attribute_not_exists(#pni) OR (attribute_exists(#pni) AND #uuid = :uuid)") @@ -135,12 +129,11 @@ public class Accounts extends AbstractDynamoDbStore { final Map item = new HashMap<>(Map.of( KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()), ATTR_ACCOUNT_E164, AttributeValues.fromString(account.getNumber()), + ATTR_PNI_UUID, AttributeValues.fromUUID(account.getPhoneNumberIdentifier()), ATTR_ACCOUNT_DATA, AttributeValues.fromByteArray(SystemMapper.getMapper().writeValueAsBytes(account)), ATTR_VERSION, AttributeValues.fromInt(account.getVersion()), ATTR_CANONICALLY_DISCOVERABLE, AttributeValues.fromBool(account.shouldBeVisibleInDirectory()))); - account.getPhoneNumberIdentifier().ifPresent(pni -> item.put(ATTR_PNI_UUID, AttributeValues.fromUUID(pni))); - TransactWriteItem accountPut = TransactWriteItem.builder() .put(Put.builder() .conditionExpression("attribute_not_exists(#number) OR #number = :number") @@ -180,7 +173,7 @@ public class Accounts extends AbstractDynamoDbStore { account.setUuid(UUIDUtil.fromByteBuffer(actualAccountUuid)); final Account existingAccount = getByAccountIdentifier(account.getUuid()).orElseThrow(); - account.setNumber(existingAccount.getNumber(), existingAccount.getPhoneNumberIdentifier().orElse(account.getPhoneNumberIdentifier().orElseThrow())); + account.setNumber(existingAccount.getNumber(), existingAccount.getPhoneNumberIdentifier()); account.setVersion(existingAccount.getVersion()); update(account); @@ -220,7 +213,7 @@ public class Accounts extends AbstractDynamoDbStore { public void changeNumber(final Account account, final String number, final UUID phoneNumberIdentifier) { CHANGE_NUMBER_TIMER.record(() -> { final String originalNumber = account.getNumber(); - final Optional originalPni = account.getPhoneNumberIdentifier(); + final UUID originalPni = account.getPhoneNumberIdentifier(); boolean succeeded = false; @@ -248,12 +241,12 @@ public class Accounts extends AbstractDynamoDbStore { .build()) .build()); - originalPni.ifPresent(pni -> writeItems.add(TransactWriteItem.builder() + writeItems.add(TransactWriteItem.builder() .delete(Delete.builder() .tableName(phoneNumberIdentifierConstraintTableName) - .key(Map.of(ATTR_PNI_UUID, AttributeValues.fromUUID(pni))) + .key(Map.of(ATTR_PNI_UUID, AttributeValues.fromUUID(originalPni))) .build()) - .build())); + .build()); writeItems.add(TransactWriteItem.builder() .put(Put.builder() @@ -301,7 +294,7 @@ public class Accounts extends AbstractDynamoDbStore { throw new IllegalArgumentException(e); } finally { if (!succeeded) { - account.setNumber(originalNumber, originalPni.orElse(null)); + account.setNumber(originalNumber, originalPni); } } }); @@ -312,65 +305,27 @@ public class Accounts extends AbstractDynamoDbStore { final List transactWriteItems = new ArrayList<>(2); try { - final TransactWriteItem updateAccountWriteItem; - - if (account.getPhoneNumberIdentifier().isPresent()) { - updateAccountWriteItem = TransactWriteItem.builder() - .update(Update.builder() - .tableName(accountsTableName) - .key(Map.of(KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()))) - .updateExpression("SET #data = :data, #cds = :cds, #pni = :pni ADD #version :version_increment") - .conditionExpression("attribute_exists(#number) AND #version = :version") - .expressionAttributeNames(Map.of("#number", ATTR_ACCOUNT_E164, - "#data", ATTR_ACCOUNT_DATA, - "#cds", ATTR_CANONICALLY_DISCOVERABLE, - "#version", ATTR_VERSION, - "#pni", ATTR_PNI_UUID)) - .expressionAttributeValues(Map.of( - ":data", AttributeValues.fromByteArray(SystemMapper.getMapper().writeValueAsBytes(account)), - ":cds", AttributeValues.fromBool(account.shouldBeVisibleInDirectory()), - ":version", AttributeValues.fromInt(account.getVersion()), - ":version_increment", AttributeValues.fromInt(1), - ":pni", AttributeValues.fromUUID(account.getPhoneNumberIdentifier().get()))) - .build()) - .build(); - } else { - updateAccountWriteItem = TransactWriteItem.builder() - .update(Update.builder() - .tableName(accountsTableName) - .key(Map.of(KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()))) - .updateExpression("SET #data = :data, #cds = :cds ADD #version :version_increment") - .conditionExpression("attribute_exists(#number) AND #version = :version") - .expressionAttributeNames(Map.of("#number", ATTR_ACCOUNT_E164, - "#data", ATTR_ACCOUNT_DATA, - "#cds", ATTR_CANONICALLY_DISCOVERABLE, - "#version", ATTR_VERSION)) - .expressionAttributeValues(Map.of( - ":data", AttributeValues.fromByteArray(SystemMapper.getMapper().writeValueAsBytes(account)), - ":cds", AttributeValues.fromBool(account.shouldBeVisibleInDirectory()), - ":version", AttributeValues.fromInt(account.getVersion()), - ":version_increment", AttributeValues.fromInt(1))) - .build()) - .build(); - } + final TransactWriteItem updateAccountWriteItem = TransactWriteItem.builder() + .update(Update.builder() + .tableName(accountsTableName) + .key(Map.of(KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()))) + .updateExpression("SET #data = :data, #cds = :cds, #pni = :pni ADD #version :version_increment") + .conditionExpression("attribute_exists(#number) AND #version = :version") + .expressionAttributeNames(Map.of("#number", ATTR_ACCOUNT_E164, + "#data", ATTR_ACCOUNT_DATA, + "#cds", ATTR_CANONICALLY_DISCOVERABLE, + "#version", ATTR_VERSION, + "#pni", ATTR_PNI_UUID)) + .expressionAttributeValues(Map.of( + ":data", AttributeValues.fromByteArray(SystemMapper.getMapper().writeValueAsBytes(account)), + ":cds", AttributeValues.fromBool(account.shouldBeVisibleInDirectory()), + ":version", AttributeValues.fromInt(account.getVersion()), + ":version_increment", AttributeValues.fromInt(1), + ":pni", AttributeValues.fromUUID(account.getPhoneNumberIdentifier()))) + .build()) + .build();; transactWriteItems.add(updateAccountWriteItem); - - // TODO Remove after initial migration to phone number identifiers - account.getPhoneNumberIdentifier().ifPresent(phoneNumberIdentifier -> transactWriteItems.add( - TransactWriteItem.builder() - .put(Put.builder() - .tableName(phoneNumberIdentifierConstraintTableName) - .item(Map.of( - ATTR_PNI_UUID, AttributeValues.fromUUID(account.getPhoneNumberIdentifier().get()), - KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()))) - .conditionExpression("attribute_not_exists(#pni) OR (attribute_exists(#pni) AND #uuid = :uuid)") - .expressionAttributeNames(Map.of("#uuid", KEY_ACCOUNT_UUID, "#pni", ATTR_PNI_UUID)) - .expressionAttributeValues( - Map.of(":uuid", AttributeValues.fromUUID(account.getUuid()))) - .returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD) - .build()) - .build())); } catch (JsonProcessingException e) { throw new IllegalArgumentException(e); } @@ -464,12 +419,12 @@ public class Accounts extends AbstractDynamoDbStore { final List transactWriteItems = new ArrayList<>(List.of(phoneNumberDelete, accountDelete)); - account.getPhoneNumberIdentifier().ifPresent(pni -> transactWriteItems.add(TransactWriteItem.builder() + transactWriteItems.add(TransactWriteItem.builder() .delete(Delete.builder() .tableName(phoneNumberIdentifierConstraintTableName) - .key(Map.of(ATTR_PNI_UUID, AttributeValues.fromUUID(pni))) + .key(Map.of(ATTR_PNI_UUID, AttributeValues.fromUUID(account.getPhoneNumberIdentifier()))) .build()) - .build())); + .build()); TransactWriteItemsRequest request = TransactWriteItemsRequest.builder() .transactItems(transactWriteItems).build(); 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 d6c17de3a..9208d9a82 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -438,12 +438,9 @@ public class AccountsManager { usernamesManager.delete(account.getUuid()); profilesManager.deleteAll(account.getUuid()); keys.delete(account.getUuid()); + keys.delete(account.getPhoneNumberIdentifier()); messagesManager.clear(account.getUuid()); - - account.getPhoneNumberIdentifier().ifPresent(pni -> { - keys.delete(pni); - messagesManager.clear(pni); - }); + messagesManager.clear(account.getPhoneNumberIdentifier()); deleteStorageServiceDataFuture.join(); deleteBackupServiceDataFuture.join(); @@ -471,9 +468,8 @@ public class AccountsManager { cacheCluster.useCluster(connection -> { final RedisAdvancedClusterCommands commands = connection.sync(); - account.getPhoneNumberIdentifier().ifPresent(pni -> - commands.set(getAccountMapKey(pni.toString()), account.getUuid().toString())); + commands.set(getAccountMapKey(account.getPhoneNumberIdentifier().toString()), account.getUuid().toString()); commands.set(getAccountMapKey(account.getNumber()), account.getUuid().toString()); commands.set(getAccountEntityKey(account.getUuid()), accountJson); }); @@ -528,11 +524,10 @@ public class AccountsManager { private void redisDelete(final Account account) { try (final Timer.Context ignored = redisDeleteTimer.time()) { - cacheCluster.useCluster(connection -> { - connection.sync().del(getAccountMapKey(account.getNumber()), getAccountEntityKey(account.getUuid())); - - account.getPhoneNumberIdentifier().ifPresent(pni -> connection.sync().del(getAccountMapKey(pni.toString()))); - }); + cacheCluster.useCluster(connection -> connection.sync().del( + getAccountMapKey(account.getNumber()), + getAccountMapKey(account.getPhoneNumberIdentifier().toString()), + getAccountEntityKey(account.getUuid()))); } } } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerChangeNumberIntegrationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerChangeNumberIntegrationTest.java index fdfaf9129..a2a7d977a 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerChangeNumberIntegrationTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerChangeNumberIntegrationTest.java @@ -208,7 +208,7 @@ class AccountsManagerChangeNumberIntegrationTest { final Account account = accountsManager.create(originalNumber, "password", null, new AccountAttributes(), new ArrayList<>()); final UUID originalUuid = account.getUuid(); - final UUID originalPni = account.getPhoneNumberIdentifier().orElseThrow(); + final UUID originalPni = account.getPhoneNumberIdentifier(); accountsManager.changeNumber(account, secondNumber); @@ -216,7 +216,7 @@ class AccountsManagerChangeNumberIntegrationTest { assertTrue(accountsManager.getByE164(secondNumber).isPresent()); assertEquals(originalUuid, accountsManager.getByE164(secondNumber).map(Account::getUuid).orElseThrow()); - assertNotEquals(originalPni, accountsManager.getByE164(secondNumber).flatMap(Account::getPhoneNumberIdentifier).orElseThrow()); + assertNotEquals(originalPni, accountsManager.getByE164(secondNumber).map(Account::getPhoneNumberIdentifier).orElseThrow()); assertEquals(secondNumber, accountsManager.getByAccountIdentifier(originalUuid).map(Account::getNumber).orElseThrow()); @@ -231,14 +231,14 @@ class AccountsManagerChangeNumberIntegrationTest { Account account = accountsManager.create(originalNumber, "password", null, new AccountAttributes(), new ArrayList<>()); final UUID originalUuid = account.getUuid(); - final UUID originalPni = account.getPhoneNumberIdentifier().orElseThrow(); + final UUID originalPni = account.getPhoneNumberIdentifier(); account = accountsManager.changeNumber(account, secondNumber); accountsManager.changeNumber(account, originalNumber); assertTrue(accountsManager.getByE164(originalNumber).isPresent()); assertEquals(originalUuid, accountsManager.getByE164(originalNumber).map(Account::getUuid).orElseThrow()); - assertEquals(originalPni, accountsManager.getByE164(originalNumber).flatMap(Account::getPhoneNumberIdentifier).orElseThrow()); + assertEquals(originalPni, accountsManager.getByE164(originalNumber).map(Account::getPhoneNumberIdentifier).orElseThrow()); assertTrue(accountsManager.getByE164(secondNumber).isEmpty()); @@ -283,18 +283,18 @@ class AccountsManagerChangeNumberIntegrationTest { final Account account = accountsManager.create(originalNumber, "password", null, new AccountAttributes(), new ArrayList<>()); final UUID originalUuid = account.getUuid(); - final UUID originalPni = account.getPhoneNumberIdentifier().orElseThrow(); + final UUID originalPni = account.getPhoneNumberIdentifier(); final Account existingAccount = accountsManager.create(secondNumber, "password", null, new AccountAttributes(), new ArrayList<>()); final UUID existingAccountUuid = existingAccount.getUuid(); final Account changedNumberAccount = accountsManager.changeNumber(account, secondNumber); - final UUID secondPni = changedNumberAccount.getPhoneNumberIdentifier().orElseThrow(); + final UUID secondPni = changedNumberAccount.getPhoneNumberIdentifier(); final Account reRegisteredAccount = accountsManager.create(originalNumber, "password", null, new AccountAttributes(), new ArrayList<>()); assertEquals(existingAccountUuid, reRegisteredAccount.getUuid()); - assertEquals(originalPni, reRegisteredAccount.getPhoneNumberIdentifier().orElseThrow()); + assertEquals(originalPni, reRegisteredAccount.getPhoneNumberIdentifier()); assertEquals(Optional.empty(), deletedAccounts.findUuid(originalNumber)); assertEquals(Optional.empty(), deletedAccounts.findUuid(secondNumber)); @@ -303,6 +303,6 @@ class AccountsManagerChangeNumberIntegrationTest { assertEquals(Optional.of(originalUuid), deletedAccounts.findUuid(originalNumber)); assertEquals(Optional.empty(), deletedAccounts.findUuid(secondNumber)); - assertEquals(secondPni, changedNumberReRegisteredAccount.getPhoneNumberIdentifier().orElseThrow()); + assertEquals(secondPni, changedNumberReRegisteredAccount.getPhoneNumberIdentifier()); } } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsTest.java index 394f7fa09..217f658cf 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsTest.java @@ -123,17 +123,17 @@ class AccountsTest { boolean freshUser = accounts.create(account); assertThat(freshUser).isTrue(); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, true); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, true); assertPhoneNumberConstraintExists("+14151112222", account.getUuid()); - assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier().orElseThrow(), account.getUuid()); + assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier(), account.getUuid()); freshUser = accounts.create(account); assertThat(freshUser).isTrue(); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, true); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, true); assertPhoneNumberConstraintExists("+14151112222", account.getUuid()); - assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier().orElseThrow(), account.getUuid()); + assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier(), account.getUuid()); } @Test @@ -146,10 +146,10 @@ class AccountsTest { accounts.create(account); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, true); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, true); assertPhoneNumberConstraintExists("+14151112222", account.getUuid()); - assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier().orElseThrow(), account.getUuid()); + assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier(), account.getUuid()); } @Test @@ -272,7 +272,7 @@ class AccountsTest { accounts.create(account); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, true); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, true); assertPhoneNumberConstraintExists("+14151112222", firstUuid); assertPhoneNumberIdentifierConstraintExists(firstPni, firstUuid); @@ -307,24 +307,24 @@ class AccountsTest { accounts.create(account); assertPhoneNumberConstraintExists("+14151112222", account.getUuid()); - assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier().orElseThrow(), account.getUuid()); + assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier(), account.getUuid()); device.setName("foobar"); accounts.update(account); assertPhoneNumberConstraintExists("+14151112222", account.getUuid()); - assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier().orElseThrow(), account.getUuid()); + assertPhoneNumberIdentifierConstraintExists(account.getPhoneNumberIdentifier(), account.getUuid()); Optional retrieved = accounts.getByE164("+14151112222"); assertThat(retrieved.isPresent()).isTrue(); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), retrieved.get(), account); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), retrieved.get(), account); retrieved = accounts.getByAccountIdentifier(account.getUuid()); assertThat(retrieved.isPresent()).isTrue(); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, true); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, true); device = generateDevice(1); Account unknownAccount = generateAccount("+14151113333", UUID.randomUUID(), UUID.randomUUID(), Collections.singleton(device)); @@ -337,7 +337,7 @@ class AccountsTest { assertThat(account.getVersion()).isEqualTo(2); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, true); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, true); account.setVersion(1); @@ -348,7 +348,7 @@ class AccountsTest { accounts.update(account); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, true); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, true); } @Test @@ -413,7 +413,7 @@ class AccountsTest { .findAny() .orElseThrow(); - verifyStoredState(expectedAccount.getNumber(), expectedAccount.getUuid(), expectedAccount.getPhoneNumberIdentifier().orElseThrow(), retrievedAccount, expectedAccount); + verifyStoredState(expectedAccount.getNumber(), expectedAccount.getUuid(), expectedAccount.getPhoneNumberIdentifier(), retrievedAccount, expectedAccount); users.remove(expectedAccount); } @@ -430,7 +430,7 @@ class AccountsTest { .findAny() .orElseThrow(); - verifyStoredState(expectedAccount.getNumber(), expectedAccount.getUuid(), expectedAccount.getPhoneNumberIdentifier().orElseThrow(), retrievedAccount, expectedAccount); + verifyStoredState(expectedAccount.getNumber(), expectedAccount.getUuid(), expectedAccount.getPhoneNumberIdentifier(), retrievedAccount, expectedAccount); users.remove(expectedAccount); } @@ -452,9 +452,9 @@ class AccountsTest { accounts.create(retainedAccount); assertPhoneNumberConstraintExists("+14151112222", deletedAccount.getUuid()); - assertPhoneNumberIdentifierConstraintExists(deletedAccount.getPhoneNumberIdentifier().orElseThrow(), deletedAccount.getUuid()); + assertPhoneNumberIdentifierConstraintExists(deletedAccount.getPhoneNumberIdentifier(), deletedAccount.getUuid()); assertPhoneNumberConstraintExists("+14151112345", retainedAccount.getUuid()); - assertPhoneNumberIdentifierConstraintExists(retainedAccount.getPhoneNumberIdentifier().orElseThrow(), retainedAccount.getUuid()); + assertPhoneNumberIdentifierConstraintExists(retainedAccount.getPhoneNumberIdentifier(), retainedAccount.getUuid()); assertThat(accounts.getByAccountIdentifier(deletedAccount.getUuid())).isPresent(); assertThat(accounts.getByAccountIdentifier(retainedAccount.getUuid())).isPresent(); @@ -464,9 +464,9 @@ class AccountsTest { assertThat(accounts.getByAccountIdentifier(deletedAccount.getUuid())).isNotPresent(); assertPhoneNumberConstraintDoesNotExist(deletedAccount.getNumber()); - assertPhoneNumberIdentifierConstraintDoesNotExist(deletedAccount.getPhoneNumberIdentifier().orElseThrow()); + assertPhoneNumberIdentifierConstraintDoesNotExist(deletedAccount.getPhoneNumberIdentifier()); - verifyStoredState(retainedAccount.getNumber(), retainedAccount.getUuid(), retainedAccount.getPhoneNumberIdentifier().orElseThrow(), + verifyStoredState(retainedAccount.getNumber(), retainedAccount.getUuid(), retainedAccount.getPhoneNumberIdentifier(), accounts.getByAccountIdentifier(retainedAccount.getUuid()).get(), retainedAccount); { @@ -477,11 +477,11 @@ class AccountsTest { assertThat(freshUser).isTrue(); assertThat(accounts.getByAccountIdentifier(recreatedAccount.getUuid())).isPresent(); - verifyStoredState(recreatedAccount.getNumber(), recreatedAccount.getUuid(), recreatedAccount.getPhoneNumberIdentifier().orElseThrow(), + verifyStoredState(recreatedAccount.getNumber(), recreatedAccount.getUuid(), recreatedAccount.getPhoneNumberIdentifier(), accounts.getByAccountIdentifier(recreatedAccount.getUuid()).get(), recreatedAccount); assertPhoneNumberConstraintExists(recreatedAccount.getNumber(), recreatedAccount.getUuid()); - assertPhoneNumberIdentifierConstraintExists(recreatedAccount.getPhoneNumberIdentifier().orElseThrow(), recreatedAccount.getUuid()); + assertPhoneNumberIdentifierConstraintExists(recreatedAccount.getPhoneNumberIdentifier(), recreatedAccount.getUuid()); } } @@ -558,13 +558,13 @@ class AccountsTest { Account account = generateAccount("+14151112222", UUID.randomUUID(), UUID.randomUUID(), Collections.singleton(device)); account.setDiscoverableByPhoneNumber(false); accounts.create(account); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, false); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, false); account.setDiscoverableByPhoneNumber(true); accounts.update(account); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, true); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, true); account.setDiscoverableByPhoneNumber(false); accounts.update(account); - verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), account, false); + verifyStoredState("+14151112222", account.getUuid(), account.getPhoneNumberIdentifier(), account, false); } @Test @@ -589,7 +589,7 @@ class AccountsTest { final Optional retrieved = accounts.getByE164(originalNumber); assertThat(retrieved).isPresent(); - verifyStoredState(originalNumber, account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), retrieved.get(), account); + verifyStoredState(originalNumber, account.getUuid(), account.getPhoneNumberIdentifier(), retrieved.get(), account); } accounts.changeNumber(account, targetNumber, targetPni); @@ -606,10 +606,9 @@ class AccountsTest { final Optional retrieved = accounts.getByE164(targetNumber); assertThat(retrieved).isPresent(); - verifyStoredState(targetNumber, account.getUuid(), account.getPhoneNumberIdentifier().orElseThrow(), retrieved.get(), account); + verifyStoredState(targetNumber, account.getUuid(), account.getPhoneNumberIdentifier(), retrieved.get(), account); - assertThat(retrieved.get().getPhoneNumberIdentifier()).isPresent(); - assertThat(retrieved.get().getPhoneNumberIdentifier().get()).isEqualTo(targetPni); + assertThat(retrieved.get().getPhoneNumberIdentifier()).isEqualTo(targetPni); assertThat(accounts.getByPhoneNumberIdentifier(targetPni)).isPresent(); } } @@ -670,218 +669,6 @@ class AccountsTest { assertThrows(TransactionCanceledException.class, () -> accounts.changeNumber(account, targetNumber, existingPhoneNumberIdentifier)); } - @Test - // TODO Remove or adapt after initial PNI migration - void testReregistrationFromAccountWithoutPhoneNumberIdentifier() throws JsonProcessingException { - final String number = "+18005551234"; - final UUID originalUuid = UUID.randomUUID(); - - // Artificially inject Dynamo items for a legacy account without an assigned PNI - { - final Account account = generateAccount(number, originalUuid, null); - - final TransactWriteItem phoneNumberConstraintPut = TransactWriteItem.builder() - .put( - Put.builder() - .tableName(NUMBER_CONSTRAINT_TABLE_NAME) - .item(Map.of( - Accounts.ATTR_ACCOUNT_E164, AttributeValues.fromString(account.getNumber()), - Accounts.KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()))) - .conditionExpression( - "attribute_not_exists(#number) OR (attribute_exists(#number) AND #uuid = :uuid)") - .expressionAttributeNames( - Map.of("#uuid", Accounts.KEY_ACCOUNT_UUID, - "#number", Accounts.ATTR_ACCOUNT_E164)) - .expressionAttributeValues( - Map.of(":uuid", AttributeValues.fromUUID(account.getUuid()))) - .returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD) - .build()) - .build(); - - final Map item = new HashMap<>(Map.of( - Accounts.KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()), - Accounts.ATTR_ACCOUNT_E164, AttributeValues.fromString(account.getNumber()), - Accounts.ATTR_ACCOUNT_DATA, - AttributeValues.fromByteArray(SystemMapper.getMapper().writeValueAsBytes(account)), - Accounts.ATTR_VERSION, AttributeValues.fromInt(account.getVersion()), - Accounts.ATTR_CANONICALLY_DISCOVERABLE, AttributeValues.fromBool(account.shouldBeVisibleInDirectory()))); - - final TransactWriteItem accountPut = TransactWriteItem.builder() - .put(Put.builder() - .conditionExpression("attribute_not_exists(#number) OR #number = :number") - .expressionAttributeNames(Map.of("#number", Accounts.ATTR_ACCOUNT_E164)) - .expressionAttributeValues(Map.of(":number", AttributeValues.fromString(account.getNumber()))) - .tableName(ACCOUNTS_TABLE_NAME) - .item(item) - .build()) - .build(); - - dynamoDbExtension.getDynamoDbClient().transactWriteItems(TransactWriteItemsRequest.builder() - .transactItems(phoneNumberConstraintPut, accountPut) - .build()); - } - - final Account reregisteredAccount = generateAccount(number, UUID.randomUUID(), UUID.randomUUID()); - accounts.create(reregisteredAccount); - - assertPhoneNumberConstraintExists(number, originalUuid); - assertPhoneNumberIdentifierConstraintExists(reregisteredAccount.getPhoneNumberIdentifier().orElseThrow(), originalUuid); - } - - @Test - // TODO Remove or adapt after initial PNI migration - void testUpdateAccountAddingPniWithoutPhoneNumberIdentifier() throws JsonProcessingException { - final String number = "+18005551234"; - final UUID uuid = UUID.randomUUID(); - - // Artificially inject Dynamo items for a legacy account without an assigned PNI - { - final Account account = generateAccount(number, uuid, null); - - final TransactWriteItem phoneNumberConstraintPut = TransactWriteItem.builder() - .put( - Put.builder() - .tableName(NUMBER_CONSTRAINT_TABLE_NAME) - .item(Map.of( - Accounts.ATTR_ACCOUNT_E164, AttributeValues.fromString(account.getNumber()), - Accounts.KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()))) - .conditionExpression( - "attribute_not_exists(#number) OR (attribute_exists(#number) AND #uuid = :uuid)") - .expressionAttributeNames( - Map.of("#uuid", Accounts.KEY_ACCOUNT_UUID, - "#number", Accounts.ATTR_ACCOUNT_E164)) - .expressionAttributeValues( - Map.of(":uuid", AttributeValues.fromUUID(account.getUuid()))) - .returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD) - .build()) - .build(); - - final Map item = new HashMap<>(Map.of( - Accounts.KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()), - Accounts.ATTR_ACCOUNT_E164, AttributeValues.fromString(account.getNumber()), - Accounts.ATTR_ACCOUNT_DATA, - AttributeValues.fromByteArray(SystemMapper.getMapper().writeValueAsBytes(account)), - Accounts.ATTR_VERSION, AttributeValues.fromInt(account.getVersion()), - Accounts.ATTR_CANONICALLY_DISCOVERABLE, AttributeValues.fromBool(account.shouldBeVisibleInDirectory()))); - - final TransactWriteItem accountPut = TransactWriteItem.builder() - .put(Put.builder() - .conditionExpression("attribute_not_exists(#number) OR #number = :number") - .expressionAttributeNames(Map.of("#number", Accounts.ATTR_ACCOUNT_E164)) - .expressionAttributeValues(Map.of(":number", AttributeValues.fromString(account.getNumber()))) - .tableName(ACCOUNTS_TABLE_NAME) - .item(item) - .build()) - .build(); - - dynamoDbExtension.getDynamoDbClient().transactWriteItems(TransactWriteItemsRequest.builder() - .transactItems(phoneNumberConstraintPut, accountPut) - .build()); - } - - assertThat(accounts.getByAccountIdentifier(uuid)).hasValueSatisfying(account -> { - assertThat(account.getUuid()).isEqualTo(uuid); - assertThat(account.getNumber()).isEqualTo(number); - assertThat(account.getPhoneNumberIdentifier()).isEmpty(); - }); - - final UUID phoneNumberIdentifier = UUID.randomUUID(); - - { - final Account accountToUpdate = accounts.getByAccountIdentifier(uuid).orElseThrow(); - accountToUpdate.setNumber(number, phoneNumberIdentifier); - - assertThat(accountToUpdate.getPhoneNumberIdentifier()).hasValueSatisfying(pni -> - assertThat(pni).isEqualTo(phoneNumberIdentifier)); - - accounts.update(accountToUpdate); - - assertThat(accountToUpdate.getPhoneNumberIdentifier()).hasValueSatisfying(pni -> - assertThat(pni).isEqualTo(phoneNumberIdentifier)); - } - - assertThat(accounts.getByAccountIdentifier(uuid)).hasValueSatisfying(account -> { - assertThat(account.getUuid()).isEqualTo(uuid); - assertThat(account.getNumber()).isEqualTo(number); - assertThat(account.getPhoneNumberIdentifier()).hasValueSatisfying(pni -> - assertThat(pni).isEqualTo(phoneNumberIdentifier)); - }); - } - - @Test - // TODO Remove or adapt after initial PNI migration - void testUpdateAccountWithoutPhoneNumberIdentifier() throws JsonProcessingException { - final String number = "+18005551234"; - final UUID uuid = UUID.randomUUID(); - - // Artificially inject Dynamo items for a legacy account without an assigned PNI - { - final Account account = generateAccount(number, uuid, null); - - final TransactWriteItem phoneNumberConstraintPut = TransactWriteItem.builder() - .put( - Put.builder() - .tableName(NUMBER_CONSTRAINT_TABLE_NAME) - .item(Map.of( - Accounts.ATTR_ACCOUNT_E164, AttributeValues.fromString(account.getNumber()), - Accounts.KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()))) - .conditionExpression( - "attribute_not_exists(#number) OR (attribute_exists(#number) AND #uuid = :uuid)") - .expressionAttributeNames( - Map.of("#uuid", Accounts.KEY_ACCOUNT_UUID, - "#number", Accounts.ATTR_ACCOUNT_E164)) - .expressionAttributeValues( - Map.of(":uuid", AttributeValues.fromUUID(account.getUuid()))) - .returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD) - .build()) - .build(); - - final Map item = new HashMap<>(Map.of( - Accounts.KEY_ACCOUNT_UUID, AttributeValues.fromUUID(account.getUuid()), - Accounts.ATTR_ACCOUNT_E164, AttributeValues.fromString(account.getNumber()), - Accounts.ATTR_ACCOUNT_DATA, - AttributeValues.fromByteArray(SystemMapper.getMapper().writeValueAsBytes(account)), - Accounts.ATTR_VERSION, AttributeValues.fromInt(account.getVersion()), - Accounts.ATTR_CANONICALLY_DISCOVERABLE, AttributeValues.fromBool(account.shouldBeVisibleInDirectory()))); - - final TransactWriteItem accountPut = TransactWriteItem.builder() - .put(Put.builder() - .conditionExpression("attribute_not_exists(#number) OR #number = :number") - .expressionAttributeNames(Map.of("#number", Accounts.ATTR_ACCOUNT_E164)) - .expressionAttributeValues(Map.of(":number", AttributeValues.fromString(account.getNumber()))) - .tableName(ACCOUNTS_TABLE_NAME) - .item(item) - .build()) - .build(); - - dynamoDbExtension.getDynamoDbClient().transactWriteItems(TransactWriteItemsRequest.builder() - .transactItems(phoneNumberConstraintPut, accountPut) - .build()); - } - - assertThat(accounts.getByAccountIdentifier(uuid)).hasValueSatisfying(account -> { - assertThat(account.getUuid()).isEqualTo(uuid); - assertThat(account.getNumber()).isEqualTo(number); - assertThat(account.getPhoneNumberIdentifier()).isEmpty(); - }); - - final String updatedName = "An updated name!"; - - { - final Account accountToUpdate = accounts.getByAccountIdentifier(uuid).orElseThrow(); - accountToUpdate.setProfileName(updatedName); - - accounts.update(accountToUpdate); - } - - assertThat(accounts.getByAccountIdentifier(uuid)).hasValueSatisfying(account -> { - assertThat(account.getUuid()).isEqualTo(uuid); - assertThat(account.getNumber()).isEqualTo(number); - assertThat(account.getPhoneNumberIdentifier()).isEmpty(); - assertThat(account.getProfileName()).isEqualTo(updatedName); - }); - } - private Device generateDevice(long id) { Random random = new Random(System.currentTimeMillis()); SignedPreKey signedPreKey = new SignedPreKey(random.nextInt(), "testPublicKey-" + random.nextInt(), "testSignature-" + random.nextInt()); @@ -973,7 +760,7 @@ class AccountsTest { private void verifyStoredState(String number, UUID uuid, UUID pni, Account result, Account expecting) { assertThat(result.getNumber()).isEqualTo(number); - assertThat(result.getPhoneNumberIdentifier()).isEqualTo(Optional.ofNullable(pni)); + assertThat(result.getPhoneNumberIdentifier()).isEqualTo(pni); assertThat(result.getLastSeen()).isEqualTo(expecting.getLastSeen()); assertThat(result.getUuid()).isEqualTo(uuid); assertThat(result.getVersion()).isEqualTo(expecting.getVersion()); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/CertificateControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/CertificateControllerTest.java index 206fd9faf..1bef8ea66 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/CertificateControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/CertificateControllerTest.java @@ -220,7 +220,7 @@ class CertificateControllerTest { @Test void testGetSingleAuthCredentialByPni() { - when(AuthHelper.VALID_ACCOUNT.getPhoneNumberIdentifier()).thenReturn(Optional.of(UUID.randomUUID())); + when(AuthHelper.VALID_ACCOUNT.getPhoneNumberIdentifier()).thenReturn(UUID.randomUUID()); GroupCredentials credentials = resources.getJerseyTest() .target("/v1/certificate/group/" + Util.currentDaysSinceEpoch() + "/" + Util.currentDaysSinceEpoch()) @@ -239,20 +239,6 @@ class CertificateControllerTest { clientZkAuthOperations.receiveAuthCredential(AuthHelper.VALID_UUID, Util.currentDaysSinceEpoch(), new AuthCredentialResponse(credentials.getCredentials().get(0).getCredential()))); } - @Test - void testGetSingleAuthCredentialByPniNotSet() { - when(AuthHelper.VALID_ACCOUNT.getPhoneNumberIdentifier()).thenReturn(Optional.empty()); - - Response response = resources.getJerseyTest() - .target("/v1/certificate/group/" + Util.currentDaysSinceEpoch() + "/" + Util.currentDaysSinceEpoch()) - .queryParam("identity", "pni") - .request() - .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID, AuthHelper.VALID_PASSWORD)) - .get(); - - assertThat(response.getStatus()).isEqualTo(404); - } - @Test void testGetWeekLongAuthCredentials() { GroupCredentials credentials = resources.getJerseyTest() diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeysControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeysControllerTest.java index 1cfe6eb2f..8b64039d0 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeysControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeysControllerTest.java @@ -153,7 +153,7 @@ class KeysControllerTest { when(sampleDevice4.getId()).thenReturn(4L); when(existsAccount.getUuid()).thenReturn(EXISTS_UUID); - when(existsAccount.getPhoneNumberIdentifier()).thenReturn(Optional.of(EXISTS_PNI)); + when(existsAccount.getPhoneNumberIdentifier()).thenReturn(EXISTS_PNI); when(existsAccount.getDevice(1L)).thenReturn(Optional.of(sampleDevice)); when(existsAccount.getDevice(2L)).thenReturn(Optional.of(sampleDevice2)); when(existsAccount.getDevice(3L)).thenReturn(Optional.of(sampleDevice3)); 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 e7d1a373e..c37c3971e 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 @@ -155,7 +155,7 @@ class AccountsManagerTest { assertTrue(account.isPresent()); assertEquals(account.get().getNumber(), "+14152222222"); assertEquals(account.get().getProfileName(), "test"); - assertEquals(Optional.of(UUID.fromString("de24dc73-fbd8-41be-a7d5-764c70d9da7e")), account.get().getPhoneNumberIdentifier()); + assertEquals(UUID.fromString("de24dc73-fbd8-41be-a7d5-764c70d9da7e"), account.get().getPhoneNumberIdentifier()); verify(commands, times(1)).get(eq("AccountMap::+14152222222")); verify(commands, times(1)).get(eq("Account3::" + uuid)); @@ -176,7 +176,7 @@ class AccountsManagerTest { assertEquals(account.get().getNumber(), "+14152222222"); assertEquals(account.get().getUuid(), uuid); assertEquals(account.get().getProfileName(), "test"); - assertEquals(Optional.of(UUID.fromString("de24dc73-fbd8-41be-a7d5-764c70d9da7e")), account.get().getPhoneNumberIdentifier()); + assertEquals(UUID.fromString("de24dc73-fbd8-41be-a7d5-764c70d9da7e"), account.get().getPhoneNumberIdentifier()); verify(commands, times(1)).get(eq("Account3::" + uuid)); verifyNoMoreInteractions(commands); @@ -197,7 +197,7 @@ class AccountsManagerTest { assertTrue(account.isPresent()); assertEquals(account.get().getNumber(), "+14152222222"); assertEquals(account.get().getProfileName(), "test"); - assertEquals(Optional.of(UUID.fromString("de24dc73-fbd8-41be-a7d5-764c70d9da7e")), account.get().getPhoneNumberIdentifier()); + assertEquals(UUID.fromString("de24dc73-fbd8-41be-a7d5-764c70d9da7e"), account.get().getPhoneNumberIdentifier()); verify(commands).get(eq("AccountMap::" + pni)); verify(commands).get(eq("Account3::" + uuid)); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AccountsHelper.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AccountsHelper.java index 997f17c9d..2f659acc7 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AccountsHelper.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AccountsHelper.java @@ -180,7 +180,7 @@ public class AccountsHelper { } else { final ObjectMapper mapper = SystemMapper.getMapper(); updatedAccount = mapper.readValue(mapper.writeValueAsBytes(account), Account.class); - updatedAccount.setNumber(account.getNumber(), account.getPhoneNumberIdentifier().orElse(null)); + updatedAccount.setNumber(account.getNumber(), account.getPhoneNumberIdentifier()); account.markStale(); } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AuthHelper.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AuthHelper.java index 51523c891..d4dbadd1b 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AuthHelper.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AuthHelper.java @@ -113,7 +113,7 @@ public class AuthHelper { when(VALID_ACCOUNT.getNumber()).thenReturn(VALID_NUMBER); when(VALID_ACCOUNT.getUuid()).thenReturn(VALID_UUID); - when(VALID_ACCOUNT.getPhoneNumberIdentifier()).thenReturn(Optional.of(VALID_PNI)); + when(VALID_ACCOUNT.getPhoneNumberIdentifier()).thenReturn(VALID_PNI); when(VALID_ACCOUNT_TWO.getNumber()).thenReturn(VALID_NUMBER_TWO); when(VALID_ACCOUNT_TWO.getUuid()).thenReturn(VALID_UUID_TWO); when(DISABLED_ACCOUNT.getNumber()).thenReturn(DISABLED_NUMBER);