Add `DevicesHelper`
This commit is contained in:
parent
a064b25a14
commit
016141a05d
|
@ -42,7 +42,6 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Random;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
@ -74,11 +73,10 @@ import org.junit.jupiter.params.provider.Arguments;
|
||||||
import org.junit.jupiter.params.provider.MethodSource;
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
import org.junit.jupiter.params.provider.ValueSource;
|
import org.junit.jupiter.params.provider.ValueSource;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.whispersystems.textsecuregcm.entities.SignedPreKey;
|
|
||||||
import org.whispersystems.textsecuregcm.push.ClientPresenceManager;
|
import org.whispersystems.textsecuregcm.push.ClientPresenceManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.Account;
|
import org.whispersystems.textsecuregcm.storage.Account;
|
||||||
import org.whispersystems.textsecuregcm.storage.Device;
|
import org.whispersystems.textsecuregcm.storage.Device;
|
||||||
import org.whispersystems.textsecuregcm.util.Util;
|
import org.whispersystems.textsecuregcm.tests.util.DevicesHelper;
|
||||||
import org.whispersystems.websocket.WebSocketResourceProvider;
|
import org.whispersystems.websocket.WebSocketResourceProvider;
|
||||||
import org.whispersystems.websocket.auth.WebsocketAuthValueFactoryProvider;
|
import org.whispersystems.websocket.auth.WebsocketAuthValueFactoryProvider;
|
||||||
import org.whispersystems.websocket.logging.WebsocketRequestLog;
|
import org.whispersystems.websocket.logging.WebsocketRequestLog;
|
||||||
|
@ -89,12 +87,10 @@ import org.whispersystems.websocket.session.WebSocketSessionContextValueFactoryP
|
||||||
@ExtendWith(DropwizardExtensionsSupport.class)
|
@ExtendWith(DropwizardExtensionsSupport.class)
|
||||||
class AuthEnablementRequestEventListenerTest {
|
class AuthEnablementRequestEventListenerTest {
|
||||||
|
|
||||||
private static final Random RANDOM = new Random();
|
|
||||||
|
|
||||||
private final ApplicationEventListener applicationEventListener = mock(ApplicationEventListener.class);
|
private final ApplicationEventListener applicationEventListener = mock(ApplicationEventListener.class);
|
||||||
|
|
||||||
private Account account = new Account();
|
private Account account = new Account();
|
||||||
private Device authenticatedDevice = createDevice(1L);
|
private Device authenticatedDevice = DevicesHelper.createDevice(1L);
|
||||||
|
|
||||||
private Supplier<Optional<TestPrincipal>> principalSupplier = () -> Optional.of(
|
private Supplier<Optional<TestPrincipal>> principalSupplier = () -> Optional.of(
|
||||||
new TestPrincipal("test", account, authenticatedDevice));
|
new TestPrincipal("test", account, authenticatedDevice));
|
||||||
|
@ -125,7 +121,7 @@ class AuthEnablementRequestEventListenerTest {
|
||||||
account.setUuid(uuid);
|
account.setUuid(uuid);
|
||||||
account.addDevice(authenticatedDevice);
|
account.addDevice(authenticatedDevice);
|
||||||
LongStream.range(2, 4).forEach(deviceId -> {
|
LongStream.range(2, 4).forEach(deviceId -> {
|
||||||
account.addDevice(createDevice(deviceId));
|
account.addDevice(DevicesHelper.createDevice(deviceId));
|
||||||
});
|
});
|
||||||
|
|
||||||
account.getDevices()
|
account.getDevices()
|
||||||
|
@ -169,7 +165,7 @@ class AuthEnablementRequestEventListenerTest {
|
||||||
void testAccountEnabledChanged(final long authenticatedDeviceId, final boolean initialEnabled,
|
void testAccountEnabledChanged(final long authenticatedDeviceId, final boolean initialEnabled,
|
||||||
final boolean finalEnabled) {
|
final boolean finalEnabled) {
|
||||||
|
|
||||||
setDeviceEnabled(account.getMasterDevice().orElseThrow(), initialEnabled);
|
DevicesHelper.setEnabled(account.getMasterDevice().orElseThrow(), initialEnabled);
|
||||||
|
|
||||||
authenticatedDevice = account.getDevice(authenticatedDeviceId).orElseThrow();
|
authenticatedDevice = account.getDevice(authenticatedDeviceId).orElseThrow();
|
||||||
|
|
||||||
|
@ -211,7 +207,7 @@ class AuthEnablementRequestEventListenerTest {
|
||||||
assert account.getMasterDevice().orElseThrow().isEnabled();
|
assert account.getMasterDevice().orElseThrow().isEnabled();
|
||||||
|
|
||||||
initialEnabled.forEach((deviceId, enabled) ->
|
initialEnabled.forEach((deviceId, enabled) ->
|
||||||
setDeviceEnabled(account.getDevice(deviceId).orElseThrow(), enabled));
|
DevicesHelper.setEnabled(account.getDevice(deviceId).orElseThrow(), enabled));
|
||||||
|
|
||||||
final Response response = resources.getJerseyTest()
|
final Response response = resources.getJerseyTest()
|
||||||
.target("/v1/test/account/devices/enabled")
|
.target("/v1/test/account/devices/enabled")
|
||||||
|
@ -380,7 +376,7 @@ class AuthEnablementRequestEventListenerTest {
|
||||||
void testAccountEnabledChangedWebSocket(final long authenticatedDeviceId, final boolean initialEnabled,
|
void testAccountEnabledChangedWebSocket(final long authenticatedDeviceId, final boolean initialEnabled,
|
||||||
final boolean finalEnabled) throws Exception {
|
final boolean finalEnabled) throws Exception {
|
||||||
|
|
||||||
setDeviceEnabled(account.getMasterDevice().orElseThrow(), initialEnabled);
|
DevicesHelper.setEnabled(account.getMasterDevice().orElseThrow(), initialEnabled);
|
||||||
|
|
||||||
authenticatedDevice = account.getDevice(authenticatedDeviceId).orElseThrow();
|
authenticatedDevice = account.getDevice(authenticatedDeviceId).orElseThrow();
|
||||||
|
|
||||||
|
@ -423,28 +419,6 @@ class AuthEnablementRequestEventListenerTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Device createDevice(final long deviceId) {
|
|
||||||
final Device device = new Device(deviceId, null, null, null, null, null, null, false, 0, null, 0, 0, "OWT", 0,
|
|
||||||
null);
|
|
||||||
|
|
||||||
setDeviceEnabled(device, true);
|
|
||||||
|
|
||||||
return device;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setDeviceEnabled(Device device, boolean enabled) {
|
|
||||||
if (enabled) {
|
|
||||||
device.setSignedPreKey(new SignedPreKey(RANDOM.nextLong(), "testPublicKey-" + RANDOM.nextLong(),
|
|
||||||
"testSignature-" + RANDOM.nextLong()));
|
|
||||||
device.setGcmId("testGcmId" + RANDOM.nextLong());
|
|
||||||
device.setLastSeen(Util.todayInMillis());
|
|
||||||
} else {
|
|
||||||
device.setSignedPreKey(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
assert enabled == device.isEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class TestPrincipal implements Principal, AccountAndAuthenticatedDeviceHolder {
|
public static class TestPrincipal implements Principal, AccountAndAuthenticatedDeviceHolder {
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
@ -494,7 +468,7 @@ class AuthEnablementRequestEventListenerTest {
|
||||||
|
|
||||||
final Device device = principal.getAccount().getMasterDevice().orElseThrow();
|
final Device device = principal.getAccount().getMasterDevice().orElseThrow();
|
||||||
|
|
||||||
AuthEnablementRequestEventListenerTest.setDeviceEnabled(device, enabled);
|
DevicesHelper.setEnabled(device, enabled);
|
||||||
|
|
||||||
assert device.isEnabled() == enabled;
|
assert device.isEnabled() == enabled;
|
||||||
|
|
||||||
|
@ -503,13 +477,13 @@ class AuthEnablementRequestEventListenerTest {
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("/account/devices/enabled")
|
@Path("/account/devices/enabled")
|
||||||
public String setDeviceEnabled(@Auth TestPrincipal principal, Map<Long, Boolean> deviceIdsEnabled) {
|
public String setEnabled(@Auth TestPrincipal principal, Map<Long, Boolean> deviceIdsEnabled) {
|
||||||
|
|
||||||
final StringBuilder response = new StringBuilder();
|
final StringBuilder response = new StringBuilder();
|
||||||
|
|
||||||
for (Entry<Long, Boolean> deviceIdEnabled : deviceIdsEnabled.entrySet()) {
|
for (Entry<Long, Boolean> deviceIdEnabled : deviceIdsEnabled.entrySet()) {
|
||||||
final Device device = principal.getAccount().getDevice(deviceIdEnabled.getKey()).orElseThrow();
|
final Device device = principal.getAccount().getDevice(deviceIdEnabled.getKey()).orElseThrow();
|
||||||
AuthEnablementRequestEventListenerTest.setDeviceEnabled(device, deviceIdEnabled.getValue());
|
DevicesHelper.setEnabled(device, deviceIdEnabled.getValue());
|
||||||
|
|
||||||
response.append(String.format("Set device enabled %s", deviceIdEnabled));
|
response.append(String.format("Set device enabled %s", deviceIdEnabled));
|
||||||
}
|
}
|
||||||
|
@ -522,7 +496,7 @@ class AuthEnablementRequestEventListenerTest {
|
||||||
public String addDevices(@Auth TestPrincipal auth, List<String> deviceNames) {
|
public String addDevices(@Auth TestPrincipal auth, List<String> deviceNames) {
|
||||||
|
|
||||||
deviceNames.forEach(name -> {
|
deviceNames.forEach(name -> {
|
||||||
final Device device = createDevice(auth.getAccount().getNextDeviceId());
|
final Device device = DevicesHelper.createDevice(auth.getAccount().getNextDeviceId());
|
||||||
auth.getAccount().addDevice(device);
|
auth.getAccount().addDevice(device);
|
||||||
|
|
||||||
device.setName(name);
|
device.setName(name);
|
||||||
|
@ -546,7 +520,7 @@ class AuthEnablementRequestEventListenerTest {
|
||||||
@Path("/account/disableMasterDeviceAndDeleteDevice/{deviceId}")
|
@Path("/account/disableMasterDeviceAndDeleteDevice/{deviceId}")
|
||||||
public String disableMasterDeviceAndRemoveDevice(@Auth TestPrincipal auth, @PathParam("deviceId") long deviceId) {
|
public String disableMasterDeviceAndRemoveDevice(@Auth TestPrincipal auth, @PathParam("deviceId") long deviceId) {
|
||||||
|
|
||||||
AuthEnablementRequestEventListenerTest.setDeviceEnabled(auth.getAccount().getMasterDevice().orElseThrow(), false);
|
DevicesHelper.setEnabled(auth.getAccount().getMasterDevice().orElseThrow(), false);
|
||||||
|
|
||||||
auth.getAccount().removeDevice(deviceId);
|
auth.getAccount().removeDevice(deviceId);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2021 Signal Messenger, LLC
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.whispersystems.textsecuregcm.tests.util;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
import org.whispersystems.textsecuregcm.entities.SignedPreKey;
|
||||||
|
import org.whispersystems.textsecuregcm.storage.Device;
|
||||||
|
import org.whispersystems.textsecuregcm.util.Util;
|
||||||
|
|
||||||
|
public class DevicesHelper {
|
||||||
|
|
||||||
|
private static final Random RANDOM = new Random();
|
||||||
|
|
||||||
|
public static Device createDevice(final long deviceId) {
|
||||||
|
final Device device = new Device(deviceId, null, null, null, null, null, null, false, 0, null, 0, 0, "OWT", 0,
|
||||||
|
null);
|
||||||
|
|
||||||
|
setEnabled(device, true);
|
||||||
|
|
||||||
|
return device;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setEnabled(Device device, boolean enabled) {
|
||||||
|
if (enabled) {
|
||||||
|
device.setSignedPreKey(new SignedPreKey(RANDOM.nextLong(), "testPublicKey-" + RANDOM.nextLong(),
|
||||||
|
"testSignature-" + RANDOM.nextLong()));
|
||||||
|
device.setGcmId("testGcmId" + RANDOM.nextLong());
|
||||||
|
device.setLastSeen(Util.todayInMillis());
|
||||||
|
} else {
|
||||||
|
device.setSignedPreKey(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// fail fast, to guard against a change to the isEnabled() implementation causing unexpected test behavior
|
||||||
|
assert enabled == device.isEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue