diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Keys.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Keys.java index ca391b65f..19d142bc9 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Keys.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Keys.java @@ -106,6 +106,16 @@ public class Keys { })); } + public void delete(final String number) { + database.use(jdbi -> jdbi.useHandle(handle -> { + try (Timer.Context ignored = getCountTimer.time()) { + handle.createUpdate("DELETE FROM keys WHERE number = :number") + .bind("number", number) + .execute(); + } + })); + } + public void vacuum() { database.use(jdbi -> jdbi.useHandle(handle -> { try (Timer.Context ignored = vacuumTimer.time()) { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/KeysTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/KeysTest.java index 882c7388a..096577f3a 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/KeysTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/KeysTest.java @@ -271,6 +271,48 @@ public class KeysTest { assertThat(keys.getCount("+14152222222",2)).isEqualTo(80); } + @Test + public void testDelete() { + List deviceOnePreKeys = new LinkedList<>(); + List deviceTwoPreKeys = new LinkedList<>(); + + List anotherDeviceOnePreKeys = new LinkedList<>(); + List anotherDeviceTwoPreKeys = new LinkedList<>(); + List anotherDeviceThreePreKeys = new LinkedList<>(); + + for (int i=1;i<=100;i++) { + deviceOnePreKeys.add(new PreKey(i, "+14152222222Device1PublicKey" + i)); + deviceTwoPreKeys.add(new PreKey(i, "+14152222222Device2PublicKey" + i)); + } + + for (int i=1;i<=100;i++) { + anotherDeviceOnePreKeys.add(new PreKey(i, "+14151111111Device1PublicKey" + i)); + anotherDeviceTwoPreKeys.add(new PreKey(i, "+14151111111Device2PublicKey" + i)); + anotherDeviceThreePreKeys.add(new PreKey(i, "+14151111111Device3PublicKey" + i)); + } + + keys.store("+14152222222", 1, deviceOnePreKeys); + keys.store("+14152222222", 2, deviceTwoPreKeys); + + keys.store("+14151111111", 1, anotherDeviceOnePreKeys); + keys.store("+14151111111", 2, anotherDeviceTwoPreKeys); + keys.store("+14151111111", 3, anotherDeviceThreePreKeys); + + + assertThat(keys.getCount("+14152222222", 1)).isEqualTo(100); + assertThat(keys.getCount("+14152222222", 2)).isEqualTo(100); + assertThat(keys.getCount("+14151111111", 1)).isEqualTo(100); + assertThat(keys.getCount("+14151111111", 2)).isEqualTo(100); + assertThat(keys.getCount("+14151111111", 3)).isEqualTo(100); + + keys.delete("+14152222222"); + + assertThat(keys.getCount("+14152222222", 1)).isEqualTo(0); + assertThat(keys.getCount("+14152222222", 2)).isEqualTo(0); + assertThat(keys.getCount("+14151111111", 1)).isEqualTo(100); + assertThat(keys.getCount("+14151111111", 2)).isEqualTo(100); + assertThat(keys.getCount("+14151111111", 3)).isEqualTo(100); + } @Test public void testEmptyKeyGet() {