mirror of
https://github.com/signalapp/Signal-Server
synced 2026-09-01 02:10:22 +01:00
committed by
ravi-signal
parent
bb94975d74
commit
faa74469ea
+27
-7
@@ -19,15 +19,17 @@ import java.io.IOException;
|
||||
import java.security.Principal;
|
||||
import java.util.Optional;
|
||||
import javax.security.auth.Subject;
|
||||
import org.eclipse.jetty.ee10.websocket.server.JettyServerUpgradeRequest;
|
||||
import org.eclipse.jetty.ee10.websocket.server.JettyServerUpgradeResponse;
|
||||
import org.eclipse.jetty.websocket.api.Session;
|
||||
import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
|
||||
import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse;
|
||||
import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory;
|
||||
import org.glassfish.jersey.server.ResourceConfig;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.whispersystems.websocket.auth.AuthenticatedWebSocketUpgradeFilter;
|
||||
import org.whispersystems.websocket.auth.InvalidCredentialsException;
|
||||
import org.whispersystems.websocket.auth.AuthenticatedWebSocketUpgradeFilter;
|
||||
import org.whispersystems.websocket.auth.WebSocketAuthenticator;
|
||||
import org.whispersystems.websocket.configuration.WebSocketConfiguration;
|
||||
import org.whispersystems.websocket.setup.WebSocketEnvironment;
|
||||
|
||||
public class WebSocketResourceProviderFactoryTest {
|
||||
@@ -58,7 +60,8 @@ public class WebSocketResourceProviderFactoryTest {
|
||||
when(authenticator.authenticate(eq(request))).thenThrow(new InvalidCredentialsException());
|
||||
when(environment.jersey()).thenReturn(jerseyEnvironment);
|
||||
|
||||
WebSocketResourceProviderFactory<?> factory = new WebSocketResourceProviderFactory<>(environment, Account.class, REMOTE_ADDRESS_PROPERTY_NAME);
|
||||
WebSocketResourceProviderFactory<?> factory = new WebSocketResourceProviderFactory<>(environment, Account.class,
|
||||
mock(WebSocketConfiguration.class), REMOTE_ADDRESS_PROPERTY_NAME);
|
||||
Object connection = factory.createWebSocket(request, response);
|
||||
|
||||
assertNull(connection);
|
||||
@@ -77,15 +80,16 @@ public class WebSocketResourceProviderFactoryTest {
|
||||
final HttpServletRequest httpServletRequest = mock(HttpServletRequest.class);
|
||||
when(httpServletRequest.getAttribute(REMOTE_ADDRESS_PROPERTY_NAME)).thenReturn("127.0.0.1");
|
||||
when(request.getHttpServletRequest()).thenReturn(httpServletRequest);
|
||||
|
||||
WebSocketResourceProviderFactory<?> factory = new WebSocketResourceProviderFactory<>(environment, Account.class,
|
||||
REMOTE_ADDRESS_PROPERTY_NAME);
|
||||
mock(WebSocketConfiguration.class), REMOTE_ADDRESS_PROPERTY_NAME);
|
||||
Object connection = factory.createWebSocket(request, response);
|
||||
|
||||
assertNotNull(connection);
|
||||
verifyNoMoreInteractions(response);
|
||||
verify(authenticator).authenticate(eq(request));
|
||||
|
||||
((WebSocketResourceProvider<?>) connection).onWebSocketOpen(mock(Session.class));
|
||||
((WebSocketResourceProvider<?>) connection).onWebSocketConnect(mock(Session.class));
|
||||
|
||||
assertNotNull(((WebSocketResourceProvider<?>) connection).getContext().getAuthenticated());
|
||||
assertEquals(((WebSocketResourceProvider<?>) connection).getContext().getAuthenticated(), account);
|
||||
@@ -99,6 +103,7 @@ public class WebSocketResourceProviderFactoryTest {
|
||||
|
||||
WebSocketResourceProviderFactory<Account> factory = new WebSocketResourceProviderFactory<>(environment,
|
||||
Account.class,
|
||||
mock(WebSocketConfiguration.class),
|
||||
REMOTE_ADDRESS_PROPERTY_NAME);
|
||||
Object connection = factory.createWebSocket(request, response);
|
||||
|
||||
@@ -107,6 +112,20 @@ public class WebSocketResourceProviderFactoryTest {
|
||||
verify(authenticator).authenticate(eq(request));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testConfigure() {
|
||||
JettyWebSocketServletFactory servletFactory = mock(JettyWebSocketServletFactory.class);
|
||||
when(environment.jersey()).thenReturn(jerseyEnvironment);
|
||||
|
||||
WebSocketResourceProviderFactory<Account> factory = new WebSocketResourceProviderFactory<>(environment,
|
||||
Account.class,
|
||||
mock(WebSocketConfiguration.class),
|
||||
REMOTE_ADDRESS_PROPERTY_NAME);
|
||||
factory.configure(servletFactory);
|
||||
|
||||
verify(servletFactory).setCreator(eq(factory));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testAuthenticatedWebSocketUpgradeFilter() throws InvalidCredentialsException {
|
||||
final Account account = new Account();
|
||||
@@ -118,11 +137,12 @@ public class WebSocketResourceProviderFactoryTest {
|
||||
final HttpServletRequest httpServletRequest = mock(HttpServletRequest.class);
|
||||
when(httpServletRequest.getAttribute(REMOTE_ADDRESS_PROPERTY_NAME)).thenReturn("127.0.0.1");
|
||||
when(request.getHttpServletRequest()).thenReturn(httpServletRequest);
|
||||
|
||||
final AuthenticatedWebSocketUpgradeFilter<Account> filter = mock(AuthenticatedWebSocketUpgradeFilter.class);
|
||||
when(environment.getAuthenticatedWebSocketUpgradeFilter()).thenReturn(filter);
|
||||
|
||||
final WebSocketResourceProviderFactory<?> factory = new WebSocketResourceProviderFactory<>(environment, Account.class,
|
||||
REMOTE_ADDRESS_PROPERTY_NAME);
|
||||
mock(WebSocketConfiguration.class), REMOTE_ADDRESS_PROPERTY_NAME);
|
||||
assertNotNull(factory.createWebSocket(request, response));
|
||||
|
||||
verify(filter).handleAuthentication(reusableAuth, request, response);
|
||||
|
||||
+72
-43
@@ -47,9 +47,11 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import org.eclipse.jetty.websocket.api.Callback;
|
||||
import org.eclipse.jetty.websocket.api.CloseStatus;
|
||||
import org.eclipse.jetty.websocket.api.RemoteEndpoint;
|
||||
import org.eclipse.jetty.websocket.api.Session;
|
||||
import org.eclipse.jetty.websocket.api.UpgradeRequest;
|
||||
import org.eclipse.jetty.websocket.api.WriteCallback;
|
||||
import org.glassfish.jersey.server.ApplicationHandler;
|
||||
import org.glassfish.jersey.server.ContainerRequest;
|
||||
import org.glassfish.jersey.server.ContainerResponse;
|
||||
@@ -88,10 +90,11 @@ class WebSocketResourceProviderTest {
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
verify(session, never()).close(anyInt(), anyString(), any(Callback.class));
|
||||
verify(session, never()).close(anyInt(), anyString());
|
||||
verify(session, never()).close();
|
||||
verify(session, never()).close(any(CloseStatus.class));
|
||||
|
||||
ArgumentCaptor<WebSocketSessionContext> contextArgumentCaptor = ArgumentCaptor.forClass(
|
||||
WebSocketSessionContext.class);
|
||||
@@ -109,9 +112,11 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
ContainerResponse response = mock(ContainerResponse.class);
|
||||
when(response.getStatus()).thenReturn(200);
|
||||
@@ -141,15 +146,16 @@ class WebSocketResourceProviderTest {
|
||||
return CompletableFuture.completedFuture(response);
|
||||
});
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
verify(session, never()).close(anyInt(), anyString(), any(Callback.class));
|
||||
verify(session, never()).close(anyInt(), anyString());
|
||||
verify(session, never()).close();
|
||||
verify(session, never()).close(any(CloseStatus.class));
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET", "/bar",
|
||||
new LinkedList<>(), Optional.of("hello world!".getBytes())).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ContainerRequest> requestCaptor = ArgumentCaptor.forClass(ContainerRequest.class);
|
||||
ArgumentCaptor<ByteBuffer> responseCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
@@ -163,7 +169,7 @@ class WebSocketResourceProviderTest {
|
||||
assertThat(bundledRequest.getPath(false)).isEqualTo("bar");
|
||||
|
||||
verify(requestLog).log(eq("127.0.0.1"), eq(bundledRequest), eq(response));
|
||||
verify(session).sendBinary(responseCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketMessage responseMessageContainer = SubProtocol.WebSocketMessage.parseFrom(
|
||||
responseCaptor.getValue().array());
|
||||
@@ -183,22 +189,25 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
when(applicationHandler.apply(any(ContainerRequest.class), any(OutputStream.class))).thenReturn(
|
||||
CompletableFuture.failedFuture(new IllegalStateException("foo")));
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
verify(session, never()).close(anyInt(), anyString(), any(Callback.class));
|
||||
verify(session, never()).close(anyInt(), anyString());
|
||||
verify(session, never()).close();
|
||||
verify(session, never()).close(any(CloseStatus.class));
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET", "/bar",
|
||||
new LinkedList<>(), Optional.of("hello world!".getBytes())).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ContainerRequest> requestCaptor = ArgumentCaptor.forClass(ContainerRequest.class);
|
||||
|
||||
@@ -212,7 +221,7 @@ class WebSocketResourceProviderTest {
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketMessage responseMessageContainer = SubProtocol.WebSocketMessage.parseFrom(
|
||||
responseCaptor.getValue().array());
|
||||
@@ -236,20 +245,22 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET", "/v1/test/hello",
|
||||
new LinkedList<>(), Optional.empty()).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
@@ -274,20 +285,22 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET",
|
||||
"/v1/test/doesntexist", new LinkedList<>(), Optional.empty()).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
@@ -312,20 +325,22 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET", "/v1/test/world",
|
||||
new LinkedList<>(), Optional.empty()).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
@@ -350,20 +365,22 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET", "/v1/test/world",
|
||||
new LinkedList<>(), Optional.empty()).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
@@ -387,20 +404,22 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET", "/v1/test/optional",
|
||||
new LinkedList<>(), Optional.empty()).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
@@ -425,20 +444,22 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET", "/v1/test/optional",
|
||||
new LinkedList<>(), Optional.empty()).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
@@ -463,21 +484,23 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "PUT",
|
||||
"/v1/test/some/testparam", List.of("Content-Type: application/json"),
|
||||
Optional.of(new ObjectMapper().writeValueAsBytes(new TestResource.TestEntity("mykey", 1001)))).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
@@ -502,21 +525,23 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "PUT",
|
||||
"/v1/test/some/testparam", List.of("Content-Type: application/json"),
|
||||
Optional.of(new ObjectMapper().writeValueAsBytes(new TestResource.TestEntity("mykey", 5)))).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
@@ -542,20 +567,22 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET",
|
||||
"/v1/test/exception/map", List.of("Content-Type: application/json"), Optional.empty()).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
@@ -580,20 +607,22 @@ class WebSocketResourceProviderTest {
|
||||
new ProtobufWebSocketMessageFactory(), Optional.empty(), Duration.ofMillis(30000));
|
||||
|
||||
Session session = mock(Session.class);
|
||||
RemoteEndpoint remoteEndpoint = mock(RemoteEndpoint.class);
|
||||
UpgradeRequest request = mock(UpgradeRequest.class);
|
||||
|
||||
when(session.getUpgradeRequest()).thenReturn(request);
|
||||
when(session.getRemote()).thenReturn(remoteEndpoint);
|
||||
|
||||
provider.onWebSocketOpen(session);
|
||||
provider.onWebSocketConnect(session);
|
||||
|
||||
byte[] message = new ProtobufWebSocketMessageFactory().createRequest(Optional.of(111L), "GET", "/v1/test/keepalive",
|
||||
new LinkedList<>(), Optional.empty()).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(message), Callback.NOOP);
|
||||
provider.onWebSocketBinary(message, 0, message.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> requestCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session).sendBinary(requestCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint).sendBytes(requestCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketRequestMessage requestMessage = getRequest(requestCaptor);
|
||||
assertThat(requestMessage.getVerb()).isEqualTo("GET");
|
||||
@@ -603,11 +632,11 @@ class WebSocketResourceProviderTest {
|
||||
byte[] clientResponse = new ProtobufWebSocketMessageFactory().createResponse(requestMessage.getId(), 200, "OK",
|
||||
new LinkedList<>(), Optional.of("my response".getBytes())).toByteArray();
|
||||
|
||||
provider.onWebSocketBinary(ByteBuffer.wrap(clientResponse), Callback.NOOP);
|
||||
provider.onWebSocketBinary(clientResponse, 0, clientResponse.length);
|
||||
|
||||
ArgumentCaptor<ByteBuffer> responseBytesCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
|
||||
|
||||
verify(session, times(2)).sendBinary(responseBytesCaptor.capture(), any(Callback.class));
|
||||
verify(remoteEndpoint, times(2)).sendBytes(responseBytesCaptor.capture(), any(WriteCallback.class));
|
||||
|
||||
SubProtocol.WebSocketResponseMessage response = getResponse(responseBytesCaptor);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user