public async Task Invoke(HttpContext context) { if (!_wsPorts.Contains(context.Connection.LocalPort)) { await _next.Invoke(context); return; } if (!context.WebSockets.IsWebSocketRequest) { // Do not continue in the ASP.NET pipeline if this is not a websocket request. context.Response.StatusCode = StatusCodes.Status400BadRequest; return; } var webSocket = await context.WebSockets.AcceptWebSocketAsync("lime"); using var transport = new ServerWebSocketTransport( context, webSocket, _envelopeSerializer); await transport.OpenAsync(null, context.RequestAborted); await _listener.ListenAsync(transport, context.RequestAborted); }
public void ReadAsyncThrowsWhenBufferIsNull() { var webSocket = new Mock <WebSocket>(); var serverTransport = new ServerWebSocketTransport(webSocket.Object, "local", "remote", Guid.NewGuid().ToString()); Assert.Throws <ArgumentNullException>(() => serverTransport.ReadAsync(new TransportAsyncCallbackArgs())); }
public void ReadAsyncThrowsWhenSocketNotOpen() { var webSocket = new Mock <WebSocket>(); webSocket.SetupSequence(ws => ws.State) .Returns(WebSocketState.Aborted) .Returns(WebSocketState.Closed) .Returns(WebSocketState.CloseSent) .Returns(WebSocketState.CloseReceived) .Returns(WebSocketState.None); var serverTransport = new ServerWebSocketTransport(webSocket.Object, "local", "remote", Guid.NewGuid().ToString()); var args = new TransportAsyncCallbackArgs(); args.SetBuffer(new byte[4], 0, 4); args.CompletedCallback += delegate(TransportAsyncCallbackArgs callbackArgs) { }; Assert.Throws <ObjectDisposedException>(() => serverTransport.ReadAsync(args)); Assert.Throws <ObjectDisposedException>(() => serverTransport.ReadAsync(args)); Assert.Throws <ObjectDisposedException>(() => serverTransport.ReadAsync(args)); Assert.Throws <ObjectDisposedException>(() => serverTransport.ReadAsync(args)); Assert.Throws <AmqpException>(() => serverTransport.ReadAsync(args)); }
public void ReadAsyncThrowsWhenBufferLimits() { var webSocket = new Mock <WebSocket>(); webSocket.Setup(ws => ws.State) .Returns(WebSocketState.Open); var serverTransport = new ServerWebSocketTransport(webSocket.Object, "local", "remote", Guid.NewGuid().ToString()); var args = new TransportAsyncCallbackArgs(); args.SetBuffer(new byte[4], -1, 4); args.CompletedCallback += delegate { }; Assert.Throws <ArgumentOutOfRangeException>(() => serverTransport.ReadAsync(args)); args.SetBuffer(new byte[4], 5, 9); Assert.Throws <ArgumentOutOfRangeException>(() => serverTransport.ReadAsync(args)); args.SetBuffer(new byte[4], 2, -1); Assert.Throws <ArgumentOutOfRangeException>(() => serverTransport.ReadAsync(args)); args.SetBuffer(new byte[4], 2, 3); Assert.Throws <ArgumentOutOfRangeException>(() => serverTransport.ReadAsync(args)); }
public void WriteBufferListAsyncSuccess() { var webSocket = new Mock <WebSocket>(); webSocket.Setup(ws => ws.State) .Returns(WebSocketState.Open); webSocket.Setup(ws => ws.SendAsync(It.IsAny <ArraySegment <byte> >(), It.IsAny <WebSocketMessageType>(), It.IsAny <bool>(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult(new WebSocketReceiveResult(2, WebSocketMessageType.Text, true))); var serverTransport = new ServerWebSocketTransport( webSocket.Object, "local", "remote", Guid.NewGuid().ToString()); var args = new TransportAsyncCallbackArgs(); args.SetBuffer(new List <ByteBuffer> { new ByteBuffer(new byte[4]), new ByteBuffer(new byte[5]) }); args.CompletedCallback += obj => { }; Assert.False(serverTransport.WriteAsync(args)); webSocket.Verify(ws => ws.SendAsync(It.IsAny <ArraySegment <byte> >(), It.IsAny <WebSocketMessageType>(), It.IsAny <bool>(), It.IsAny <CancellationToken>()), Times.Exactly(2)); }
public void ValidCtorWithCertTestsSucceeds() { var webSocket = new Mock <WebSocket>(); var guid = Guid.NewGuid().ToString(); var swst = new ServerWebSocketTransport(webSocket.Object, "local", "remote", guid, clientCert, clientCertChain, authenticator, credentialsProvider); Assert.NotNull(swst.Principal); }
public void ReadAsyncThrowsWhenCompletedCallbackIsNull() { var webSocket = new Mock <WebSocket>(); var serverTransport = new ServerWebSocketTransport(webSocket.Object, "local", "remote", Guid.NewGuid().ToString()); var args = new TransportAsyncCallbackArgs(); args.SetBuffer(new byte[4], 0, 4); Assert.Throws <ArgumentNullException>(() => serverTransport.ReadAsync(args)); }
public void ReadAsyncSuccess() { var webSocket = new Mock <WebSocket>(); webSocket.Setup(ws => ws.State) .Returns(WebSocketState.Open); webSocket.Setup(ws => ws.ReceiveAsync(It.IsAny <ArraySegment <byte> >(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult(new WebSocketReceiveResult(2, WebSocketMessageType.Text, true))); var serverTransport = new ServerWebSocketTransport(webSocket.Object, "local", "remote", Guid.NewGuid().ToString()); var args = new TransportAsyncCallbackArgs(); args.SetBuffer(new byte[4], 0, 4); args.CompletedCallback += delegate { }; Assert.False(serverTransport.ReadAsync(args)); webSocket.VerifyAll(); }