111 lines
4.6 KiB
Java
111 lines
4.6 KiB
Java
package org.whispersystems.signalservice.api.groupsv2;
|
|
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.signal.storageservice.protos.groups.AccessControl;
|
|
import org.signal.storageservice.protos.groups.GroupJoinInfo;
|
|
import org.signal.storageservice.protos.groups.local.DecryptedGroupJoinInfo;
|
|
import org.signal.zkgroup.InvalidInputException;
|
|
import org.signal.zkgroup.groups.GroupMasterKey;
|
|
import org.signal.zkgroup.groups.GroupSecretParams;
|
|
import org.whispersystems.signalservice.internal.util.Util;
|
|
import org.whispersystems.signalservice.testutil.ZkGroupLibraryUtil;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.whispersystems.signalservice.api.groupsv2.ProtobufTestUtils.getMaxDeclaredFieldNumber;
|
|
|
|
public final class GroupsV2Operations_decrypt_groupJoinInfo_Test {
|
|
|
|
private GroupsV2Operations.GroupOperations groupOperations;
|
|
|
|
@Before
|
|
public void setup() throws InvalidInputException {
|
|
ZkGroupLibraryUtil.assumeZkGroupSupportedOnOS();
|
|
|
|
TestZkGroupServer server = new TestZkGroupServer();
|
|
ClientZkOperations clientZkOperations = new ClientZkOperations(server.getServerPublicParams());
|
|
GroupSecretParams groupSecretParams = GroupSecretParams.deriveFromMasterKey(new GroupMasterKey(Util.getSecretBytes(32)));
|
|
|
|
groupOperations = new GroupsV2Operations(clientZkOperations).forGroup(groupSecretParams);
|
|
}
|
|
|
|
/**
|
|
* Reflects over the generated protobuf class and ensures that no new fields have been added since we wrote this.
|
|
* <p>
|
|
* If we didn't, newly added fields would not be decrypted by {@link GroupsV2Operations.GroupOperations#decryptGroupJoinInfo}.
|
|
*/
|
|
@Test
|
|
public void ensure_GroupOperations_knows_about_all_fields_of_Group() {
|
|
int maxFieldFound = getMaxDeclaredFieldNumber(GroupJoinInfo.class);
|
|
|
|
assertEquals("GroupOperations and its tests need updating to account for new fields on " + GroupJoinInfo.class.getName(),
|
|
6, maxFieldFound);
|
|
}
|
|
|
|
@Test
|
|
public void decrypt_title_field_2() {
|
|
GroupJoinInfo groupJoinInfo = GroupJoinInfo.newBuilder()
|
|
.setTitle(groupOperations.encryptTitle("Title!"))
|
|
.build();
|
|
|
|
DecryptedGroupJoinInfo decryptedGroupJoinInfo = groupOperations.decryptGroupJoinInfo(groupJoinInfo);
|
|
|
|
assertEquals("Title!", decryptedGroupJoinInfo.getTitle());
|
|
}
|
|
|
|
@Test
|
|
public void avatar_field_passed_through_3() {
|
|
GroupJoinInfo groupJoinInfo = GroupJoinInfo.newBuilder()
|
|
.setAvatar("AvatarCdnKey")
|
|
.build();
|
|
|
|
DecryptedGroupJoinInfo decryptedGroupJoinInfo = groupOperations.decryptGroupJoinInfo(groupJoinInfo);
|
|
|
|
assertEquals("AvatarCdnKey", decryptedGroupJoinInfo.getAvatar());
|
|
}
|
|
|
|
@Test
|
|
public void member_count_passed_through_4() {
|
|
GroupJoinInfo groupJoinInfo = GroupJoinInfo.newBuilder()
|
|
.setMemberCount(97)
|
|
.build();
|
|
|
|
DecryptedGroupJoinInfo decryptedGroupJoinInfo = groupOperations.decryptGroupJoinInfo(groupJoinInfo);
|
|
|
|
assertEquals(97, decryptedGroupJoinInfo.getMemberCount());
|
|
}
|
|
|
|
@Test
|
|
public void add_from_invite_link_access_control_passed_though_5_administrator() {
|
|
GroupJoinInfo groupJoinInfo = GroupJoinInfo.newBuilder()
|
|
.setAddFromInviteLink(AccessControl.AccessRequired.ADMINISTRATOR)
|
|
.build();
|
|
|
|
DecryptedGroupJoinInfo decryptedGroupJoinInfo = groupOperations.decryptGroupJoinInfo(groupJoinInfo);
|
|
|
|
assertEquals(AccessControl.AccessRequired.ADMINISTRATOR, decryptedGroupJoinInfo.getAddFromInviteLink());
|
|
}
|
|
|
|
@Test
|
|
public void add_from_invite_link_access_control_passed_though_5_any() {
|
|
GroupJoinInfo groupJoinInfo = GroupJoinInfo.newBuilder()
|
|
.setAddFromInviteLink(AccessControl.AccessRequired.ANY)
|
|
.build();
|
|
|
|
DecryptedGroupJoinInfo decryptedGroupJoinInfo = groupOperations.decryptGroupJoinInfo(groupJoinInfo);
|
|
|
|
assertEquals(AccessControl.AccessRequired.ANY, decryptedGroupJoinInfo.getAddFromInviteLink());
|
|
}
|
|
|
|
@Test
|
|
public void revision_passed_though_6() {
|
|
GroupJoinInfo groupJoinInfo = GroupJoinInfo.newBuilder()
|
|
.setRevision(11)
|
|
.build();
|
|
|
|
DecryptedGroupJoinInfo decryptedGroupJoinInfo = groupOperations.decryptGroupJoinInfo(groupJoinInfo);
|
|
|
|
assertEquals(11, decryptedGroupJoinInfo.getRevision());
|
|
}
|
|
}
|