private void RunWebSocketScenario(Action <SimulatedWebSocket> performCalls) { var config = new WebSocketApiActionConfiguration(); var app = CreateApp(s => { s.AddApiActions(GetType().Assembly, "ApiActions.WebSockets"); s.AddApiActionsWebSockets(); }, a => { a.UseWebSocketApiActions(); }); var simulatedWebSocket = new SimulatedWebSocket(); var mockWebSocketFeature = new Mock <IHttpWebSocketFeature>(); mockWebSocketFeature.Setup(c => c.IsWebSocketRequest).Returns(true); mockWebSocketFeature.Setup(c => c.AcceptAsync(It.IsAny <WebSocketAcceptContext>())) .ReturnsAsync(simulatedWebSocket); var executeTask = app.ExecuteAsync(new HttpRequestFeature { Path = config.SocketTunnelUrl, }, features => { features.Set <IHttpWebSocketFeature>(mockWebSocketFeature.Object); }); performCalls?.Invoke(simulatedWebSocket); simulatedWebSocket.SimulateClose(WebSocketCloseStatus.NormalClosure, "closed"); executeTask.Wait(); var resultContext = executeTask.Result; }
private static JsonWebSocketHttpResponse SimulateCall(SimulatedWebSocket webSocket, JsonWebSocketHttpRequest request) { webSocket.SimulateSend(JsonConvert.SerializeObject(request)); var response = webSocket.SentFromServerQueue.Take(); Assert.IsNull(webSocket.CloseStatus, "Socket Closed Unexpectedly"); Assert.IsNotNull(response); var parsedResponse = JsonConvert.DeserializeObject <JsonWebSocketHttpResponse>(Encoding.UTF8.GetString(response.Data)); Assert.IsNotNull(parsedResponse); Assert.AreEqual(request.Id, parsedResponse.Id); return(parsedResponse); }