Add tests for spam-reporting token presence
This commit is contained in:
parent
2278842531
commit
3af2cc5c70
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.grpc;
|
package org.whispersystems.textsecuregcm.grpc;
|
||||||
|
|
||||||
|
import com.google.protobuf.ByteString;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
import io.grpc.StatusException;
|
import io.grpc.StatusException;
|
||||||
import java.time.Clock;
|
import java.time.Clock;
|
||||||
|
@ -159,16 +160,22 @@ public class MessagesAnonymousGrpcService extends SimpleMessagesAnonymousGrpc.Me
|
||||||
.stream()
|
.stream()
|
||||||
.collect(Collectors.toMap(
|
.collect(Collectors.toMap(
|
||||||
entry -> DeviceIdUtil.validate(entry.getKey()),
|
entry -> DeviceIdUtil.validate(entry.getKey()),
|
||||||
entry -> MessageProtos.Envelope.newBuilder()
|
entry -> {
|
||||||
.setType(MessageProtos.Envelope.Type.UNIDENTIFIED_SENDER)
|
final MessageProtos.Envelope.Builder envelopeBuilder = MessageProtos.Envelope.newBuilder()
|
||||||
.setClientTimestamp(messages.getTimestamp())
|
.setType(MessageProtos.Envelope.Type.UNIDENTIFIED_SENDER)
|
||||||
.setServerTimestamp(clock.millis())
|
.setClientTimestamp(messages.getTimestamp())
|
||||||
.setDestinationServiceId(destinationServiceIdentifier.toServiceIdentifierString())
|
.setServerTimestamp(clock.millis())
|
||||||
.setEphemeral(ephemeral)
|
.setDestinationServiceId(destinationServiceIdentifier.toServiceIdentifierString())
|
||||||
.setUrgent(urgent)
|
.setEphemeral(ephemeral)
|
||||||
.setStory(story)
|
.setUrgent(urgent)
|
||||||
.setContent(entry.getValue().getPayload())
|
.setStory(story)
|
||||||
.build()
|
.setContent(entry.getValue().getPayload());
|
||||||
|
|
||||||
|
spamCheckResult.token().ifPresent(reportSpamToken ->
|
||||||
|
envelopeBuilder.setReportSpamToken(ByteString.copyFrom(reportSpamToken)));
|
||||||
|
|
||||||
|
return envelopeBuilder.build();
|
||||||
|
}
|
||||||
));
|
));
|
||||||
|
|
||||||
final Map<Byte, Integer> registrationIdsByDeviceId = messages.getMessagesMap().entrySet().stream()
|
final Map<Byte, Integer> registrationIdsByDeviceId = messages.getMessagesMap().entrySet().stream()
|
||||||
|
|
|
@ -153,7 +153,8 @@ class MessagesAnonymousGrpcServiceTest extends
|
||||||
@CartesianTest
|
@CartesianTest
|
||||||
void sendMessage(@CartesianTest.Values(booleans = {true, false}) final boolean useUak,
|
void sendMessage(@CartesianTest.Values(booleans = {true, false}) final boolean useUak,
|
||||||
@CartesianTest.Values(booleans = {true, false}) final boolean ephemeral,
|
@CartesianTest.Values(booleans = {true, false}) final boolean ephemeral,
|
||||||
@CartesianTest.Values(booleans = {true, false}) final boolean urgent)
|
@CartesianTest.Values(booleans = {true, false}) final boolean urgent,
|
||||||
|
@CartesianTest.Values(booleans = {true, false}) final boolean includeReportSpamToken)
|
||||||
throws MessageTooLargeException, MismatchedDevicesException {
|
throws MessageTooLargeException, MismatchedDevicesException {
|
||||||
|
|
||||||
final byte deviceId = Device.PRIMARY_ID;
|
final byte deviceId = Device.PRIMARY_ID;
|
||||||
|
@ -177,6 +178,13 @@ class MessagesAnonymousGrpcServiceTest extends
|
||||||
.setPayload(ByteString.copyFrom(payload))
|
.setPayload(ByteString.copyFrom(payload))
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
|
final byte[] reportSpamToken = TestRandomUtil.nextBytes(64);
|
||||||
|
|
||||||
|
if (includeReportSpamToken) {
|
||||||
|
when(spamChecker.checkForIndividualRecipientSpamGrpc(any(), any(), any(), any()))
|
||||||
|
.thenReturn(new SpamCheckResult<>(Optional.empty(), Optional.of(reportSpamToken)));
|
||||||
|
}
|
||||||
|
|
||||||
final SendMessageResponse response = unauthenticatedServiceStub().sendSingleRecipientMessage(
|
final SendMessageResponse response = unauthenticatedServiceStub().sendSingleRecipientMessage(
|
||||||
generateRequest(serviceIdentifier, ephemeral, urgent, messages,
|
generateRequest(serviceIdentifier, ephemeral, urgent, messages,
|
||||||
useUak ? UNIDENTIFIED_ACCESS_KEY : null,
|
useUak ? UNIDENTIFIED_ACCESS_KEY : null,
|
||||||
|
@ -184,7 +192,7 @@ class MessagesAnonymousGrpcServiceTest extends
|
||||||
|
|
||||||
assertEquals(SendMessageResponse.newBuilder().build(), response);
|
assertEquals(SendMessageResponse.newBuilder().build(), response);
|
||||||
|
|
||||||
final MessageProtos.Envelope expectedEnvelope = MessageProtos.Envelope.newBuilder()
|
final MessageProtos.Envelope.Builder expectedEnvelopeBuilder = MessageProtos.Envelope.newBuilder()
|
||||||
.setType(MessageProtos.Envelope.Type.UNIDENTIFIED_SENDER)
|
.setType(MessageProtos.Envelope.Type.UNIDENTIFIED_SENDER)
|
||||||
.setDestinationServiceId(serviceIdentifier.toServiceIdentifierString())
|
.setDestinationServiceId(serviceIdentifier.toServiceIdentifierString())
|
||||||
.setClientTimestamp(CLOCK.millis())
|
.setClientTimestamp(CLOCK.millis())
|
||||||
|
@ -192,12 +200,20 @@ class MessagesAnonymousGrpcServiceTest extends
|
||||||
.setEphemeral(ephemeral)
|
.setEphemeral(ephemeral)
|
||||||
.setUrgent(urgent)
|
.setUrgent(urgent)
|
||||||
.setStory(false)
|
.setStory(false)
|
||||||
.setContent(ByteString.copyFrom(payload))
|
.setContent(ByteString.copyFrom(payload));
|
||||||
.build();
|
|
||||||
|
if (includeReportSpamToken) {
|
||||||
|
expectedEnvelopeBuilder.setReportSpamToken(ByteString.copyFrom(reportSpamToken));
|
||||||
|
}
|
||||||
|
|
||||||
|
verify(spamChecker).checkForIndividualRecipientSpamGrpc(MessageType.INDIVIDUAL_SEALED_SENDER,
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.of(destinationAccount),
|
||||||
|
serviceIdentifier);
|
||||||
|
|
||||||
verify(messageSender).sendMessages(destinationAccount,
|
verify(messageSender).sendMessages(destinationAccount,
|
||||||
serviceIdentifier,
|
serviceIdentifier,
|
||||||
Map.of(deviceId, expectedEnvelope),
|
Map.of(deviceId, expectedEnvelopeBuilder.build()),
|
||||||
Map.of(deviceId, registrationId),
|
Map.of(deviceId, registrationId),
|
||||||
null);
|
null);
|
||||||
}
|
}
|
||||||
|
@ -797,9 +813,11 @@ class MessagesAnonymousGrpcServiceTest extends
|
||||||
@Nested
|
@Nested
|
||||||
class SingleRecipientStory {
|
class SingleRecipientStory {
|
||||||
|
|
||||||
@ParameterizedTest
|
@CartesianTest
|
||||||
@ValueSource(booleans = {true, false})
|
void sendStory(@CartesianTest.Values(booleans = {true, false}) final boolean urgent,
|
||||||
void sendStory(final boolean urgent) throws MessageTooLargeException, MismatchedDevicesException {
|
@CartesianTest.Values(booleans = {true, false}) final boolean includeReportSpamToken)
|
||||||
|
throws MessageTooLargeException, MismatchedDevicesException {
|
||||||
|
|
||||||
final byte deviceId = Device.PRIMARY_ID;
|
final byte deviceId = Device.PRIMARY_ID;
|
||||||
final int registrationId = 7;
|
final int registrationId = 7;
|
||||||
|
|
||||||
|
@ -820,12 +838,19 @@ class MessagesAnonymousGrpcServiceTest extends
|
||||||
.setPayload(ByteString.copyFrom(payload))
|
.setPayload(ByteString.copyFrom(payload))
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
|
final byte[] reportSpamToken = TestRandomUtil.nextBytes(64);
|
||||||
|
|
||||||
|
if (includeReportSpamToken) {
|
||||||
|
when(spamChecker.checkForIndividualRecipientSpamGrpc(any(), any(), any(), any()))
|
||||||
|
.thenReturn(new SpamCheckResult<>(Optional.empty(), Optional.of(reportSpamToken)));
|
||||||
|
}
|
||||||
|
|
||||||
final SendMessageResponse response =
|
final SendMessageResponse response =
|
||||||
unauthenticatedServiceStub().sendStory(generateRequest(serviceIdentifier, urgent, messages));
|
unauthenticatedServiceStub().sendStory(generateRequest(serviceIdentifier, urgent, messages));
|
||||||
|
|
||||||
assertEquals(SendMessageResponse.newBuilder().build(), response);
|
assertEquals(SendMessageResponse.newBuilder().build(), response);
|
||||||
|
|
||||||
final MessageProtos.Envelope expectedEnvelope = MessageProtos.Envelope.newBuilder()
|
final MessageProtos.Envelope.Builder expectedEnvelopeBuilder = MessageProtos.Envelope.newBuilder()
|
||||||
.setType(MessageProtos.Envelope.Type.UNIDENTIFIED_SENDER)
|
.setType(MessageProtos.Envelope.Type.UNIDENTIFIED_SENDER)
|
||||||
.setDestinationServiceId(serviceIdentifier.toServiceIdentifierString())
|
.setDestinationServiceId(serviceIdentifier.toServiceIdentifierString())
|
||||||
.setClientTimestamp(CLOCK.millis())
|
.setClientTimestamp(CLOCK.millis())
|
||||||
|
@ -833,12 +858,20 @@ class MessagesAnonymousGrpcServiceTest extends
|
||||||
.setEphemeral(false)
|
.setEphemeral(false)
|
||||||
.setUrgent(urgent)
|
.setUrgent(urgent)
|
||||||
.setStory(true)
|
.setStory(true)
|
||||||
.setContent(ByteString.copyFrom(payload))
|
.setContent(ByteString.copyFrom(payload));
|
||||||
.build();
|
|
||||||
|
if (includeReportSpamToken) {
|
||||||
|
expectedEnvelopeBuilder.setReportSpamToken(ByteString.copyFrom(reportSpamToken));
|
||||||
|
}
|
||||||
|
|
||||||
|
verify(spamChecker).checkForIndividualRecipientSpamGrpc(MessageType.INDIVIDUAL_STORY,
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.of(destinationAccount),
|
||||||
|
serviceIdentifier);
|
||||||
|
|
||||||
verify(messageSender).sendMessages(destinationAccount,
|
verify(messageSender).sendMessages(destinationAccount,
|
||||||
serviceIdentifier,
|
serviceIdentifier,
|
||||||
Map.of(deviceId, expectedEnvelope),
|
Map.of(deviceId, expectedEnvelopeBuilder.build()),
|
||||||
Map.of(deviceId, registrationId),
|
Map.of(deviceId, registrationId),
|
||||||
null);
|
null);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue