Add missing token field to OutgoingMessageEntity
This commit is contained in:
parent
e1fcd3e3f6
commit
378b32d44d
|
@ -13,7 +13,7 @@ import javax.annotation.Nullable;
|
||||||
|
|
||||||
public record OutgoingMessageEntity(UUID guid, int type, long timestamp, @Nullable UUID sourceUuid, int sourceDevice,
|
public record OutgoingMessageEntity(UUID guid, int type, long timestamp, @Nullable UUID sourceUuid, int sourceDevice,
|
||||||
UUID destinationUuid, @Nullable UUID updatedPni, byte[] content,
|
UUID destinationUuid, @Nullable UUID updatedPni, byte[] content,
|
||||||
long serverTimestamp, boolean urgent, boolean story) {
|
long serverTimestamp, boolean urgent, boolean story, @Nullable byte[] reportSpamToken) {
|
||||||
|
|
||||||
public MessageProtos.Envelope toEnvelope() {
|
public MessageProtos.Envelope toEnvelope() {
|
||||||
final MessageProtos.Envelope.Builder builder = MessageProtos.Envelope.newBuilder()
|
final MessageProtos.Envelope.Builder builder = MessageProtos.Envelope.newBuilder()
|
||||||
|
@ -38,10 +38,15 @@ public record OutgoingMessageEntity(UUID guid, int type, long timestamp, @Nullab
|
||||||
builder.setUpdatedPni(updatedPni().toString());
|
builder.setUpdatedPni(updatedPni().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (reportSpamToken != null) {
|
||||||
|
builder.setReportSpamToken(ByteString.copyFrom(reportSpamToken));
|
||||||
|
}
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static OutgoingMessageEntity fromEnvelope(final MessageProtos.Envelope envelope) {
|
public static OutgoingMessageEntity fromEnvelope(final MessageProtos.Envelope envelope) {
|
||||||
|
ByteString token = envelope.getReportSpamToken();
|
||||||
return new OutgoingMessageEntity(
|
return new OutgoingMessageEntity(
|
||||||
UUID.fromString(envelope.getServerGuid()),
|
UUID.fromString(envelope.getServerGuid()),
|
||||||
envelope.getType().getNumber(),
|
envelope.getType().getNumber(),
|
||||||
|
@ -53,7 +58,8 @@ public record OutgoingMessageEntity(UUID guid, int type, long timestamp, @Nullab
|
||||||
envelope.getContent().toByteArray(),
|
envelope.getContent().toByteArray(),
|
||||||
envelope.getServerTimestamp(),
|
envelope.getServerTimestamp(),
|
||||||
envelope.getUrgent(),
|
envelope.getUrgent(),
|
||||||
envelope.getStory());
|
envelope.getStory(),
|
||||||
|
token.isEmpty() ? null : token.toByteArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -75,14 +81,16 @@ public record OutgoingMessageEntity(UUID guid, int type, long timestamp, @Nullab
|
||||||
Arrays.equals(content, that.content) &&
|
Arrays.equals(content, that.content) &&
|
||||||
serverTimestamp == that.serverTimestamp &&
|
serverTimestamp == that.serverTimestamp &&
|
||||||
urgent == that.urgent &&
|
urgent == that.urgent &&
|
||||||
story == that.story;
|
story == that.story &&
|
||||||
|
Arrays.equals(reportSpamToken, that.reportSpamToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
int result = Objects.hash(guid, type, timestamp, sourceUuid, sourceDevice, destinationUuid, updatedPni,
|
int result = Objects.hash(
|
||||||
serverTimestamp, urgent, story);
|
guid, type, timestamp, sourceUuid, sourceDevice, destinationUuid, updatedPni, serverTimestamp, urgent, story);
|
||||||
result = 31 * result + Arrays.hashCode(content);
|
result = 31 * result + Arrays.hashCode(content);
|
||||||
|
result = 71 * result + Arrays.hashCode(reportSpamToken);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,23 +11,28 @@ import java.util.Random;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.params.ParameterizedTest;
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
import org.junit.jupiter.params.provider.Arguments;
|
import org.junit.jupiter.params.provider.Arguments;
|
||||||
import org.junit.jupiter.params.provider.MethodSource;
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
|
import org.whispersystems.textsecuregcm.storage.Account;
|
||||||
import org.whispersystems.textsecuregcm.storage.Device;
|
import org.whispersystems.textsecuregcm.storage.Device;
|
||||||
|
|
||||||
class OutgoingMessageEntityTest {
|
class OutgoingMessageEntityTest {
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@MethodSource
|
@MethodSource
|
||||||
void toFromEnvelope(@Nullable final UUID sourceUuid, @Nullable final UUID updatedPni) {
|
void roundTripThroughEnvelope(@Nullable final UUID sourceUuid, @Nullable final UUID updatedPni) {
|
||||||
final byte[] messageContent = new byte[16];
|
final byte[] messageContent = new byte[16];
|
||||||
new Random().nextBytes(messageContent);
|
new Random().nextBytes(messageContent);
|
||||||
|
|
||||||
final long messageTimestamp = System.currentTimeMillis();
|
final long messageTimestamp = System.currentTimeMillis();
|
||||||
final long serverTimestamp = messageTimestamp + 17;
|
final long serverTimestamp = messageTimestamp + 17;
|
||||||
|
|
||||||
final OutgoingMessageEntity outgoingMessageEntity = new OutgoingMessageEntity(UUID.randomUUID(),
|
byte[] reportSpamToken = {1, 2, 3, 4, 5};
|
||||||
|
|
||||||
|
final OutgoingMessageEntity outgoingMessageEntity = new OutgoingMessageEntity(
|
||||||
|
UUID.randomUUID(),
|
||||||
MessageProtos.Envelope.Type.CIPHERTEXT_VALUE,
|
MessageProtos.Envelope.Type.CIPHERTEXT_VALUE,
|
||||||
messageTimestamp,
|
messageTimestamp,
|
||||||
UUID.randomUUID(),
|
UUID.randomUUID(),
|
||||||
|
@ -37,15 +42,45 @@ class OutgoingMessageEntityTest {
|
||||||
messageContent,
|
messageContent,
|
||||||
serverTimestamp,
|
serverTimestamp,
|
||||||
true,
|
true,
|
||||||
false);
|
false,
|
||||||
|
reportSpamToken);
|
||||||
|
|
||||||
assertEquals(outgoingMessageEntity, OutgoingMessageEntity.fromEnvelope(outgoingMessageEntity.toEnvelope()));
|
assertEquals(outgoingMessageEntity, OutgoingMessageEntity.fromEnvelope(outgoingMessageEntity.toEnvelope()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Stream<Arguments> toFromEnvelope() {
|
private static Stream<Arguments> roundTripThroughEnvelope() {
|
||||||
return Stream.of(
|
return Stream.of(
|
||||||
Arguments.of(UUID.randomUUID(), UUID.randomUUID()),
|
Arguments.of(UUID.randomUUID(), UUID.randomUUID()),
|
||||||
Arguments.of(UUID.randomUUID(), null),
|
Arguments.of(UUID.randomUUID(), null),
|
||||||
Arguments.of(null, UUID.randomUUID()));
|
Arguments.of(null, UUID.randomUUID()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void entityPreservesEnvelope() {
|
||||||
|
final Random random = new Random();
|
||||||
|
|
||||||
|
final byte[] messageContent = new byte[16];
|
||||||
|
random.nextBytes(messageContent);
|
||||||
|
|
||||||
|
final byte[] reportSpamToken = new byte[8];
|
||||||
|
random.nextBytes(reportSpamToken);
|
||||||
|
|
||||||
|
final Account account = new Account();
|
||||||
|
account.setUuid(UUID.randomUUID());
|
||||||
|
|
||||||
|
IncomingMessage message = new IncomingMessage(1, 4444L, 55, "AAAAAA");
|
||||||
|
|
||||||
|
MessageProtos.Envelope baseEnvelope = message.toEnvelope(
|
||||||
|
UUID.randomUUID(),
|
||||||
|
account,
|
||||||
|
123L,
|
||||||
|
System.currentTimeMillis(),
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
reportSpamToken);
|
||||||
|
|
||||||
|
MessageProtos.Envelope envelope = baseEnvelope.toBuilder().setServerGuid(UUID.randomUUID().toString()).build();
|
||||||
|
|
||||||
|
assertEquals(envelope, OutgoingMessageEntity.fromEnvelope(envelope).toEnvelope());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ class MessageMetricsTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OutgoingMessageEntity createOutgoingMessageEntity(UUID destinationUuid) {
|
private OutgoingMessageEntity createOutgoingMessageEntity(UUID destinationUuid) {
|
||||||
return new OutgoingMessageEntity(UUID.randomUUID(), 1, 1L, null, 1, destinationUuid, null, new byte[]{}, 1, true, false);
|
return new OutgoingMessageEntity(UUID.randomUUID(), 1, 1L, null, 1, destinationUuid, null, new byte[]{}, 1, true, false, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue