public async Task RunShouldThrowIfTheGatewayWasStopped( [Target] DefaultGatewayService gateway ) { var cancellationToken = new CancellationToken(false); await gateway.StartAsync(); await gateway.StopAsync(); Func <Task> func = () => gateway.Run(); await func.Should().ThrowAsync <OperationCanceledException>(); }
public async Task RunShouldReceiveChunksFromTheWebSocket( [Frozen, Options] IOptions <GatewayOptions> options, [Frozen, Substitute] IClientWebSocket webSocket, [Frozen, Substitute] IGatewayRxWorker rxWorker, [Target] DefaultGatewayService gateway ) { var cancellationToken = new CancellationToken(false); webSocket.Receive(Any <Memory <byte> >(), Any <CancellationToken>()).Returns(x => new ValueWebSocketReceiveResult(0, WebSocketMessageType.Text, true)); await gateway.StartAsync(); await gateway.Run(cancellationToken); await webSocket.Received().Receive(Any <Memory <byte> >(), Is(cancellationToken)); }
public async Task RunShouldNotConnectToTheWebSocketServerIfAlreadyConnected( [Frozen, Options] IOptions <GatewayOptions> options, [Frozen, Substitute] IClientWebSocket webSocket, [Frozen, Substitute] IGatewayRxWorker rxWorker, [Target] DefaultGatewayService gateway ) { var cancellationToken = new CancellationToken(false); webSocket.State.Returns(WebSocketState.Open); webSocket.Receive(Any <Memory <byte> >(), Any <CancellationToken>()).Returns(x => new ValueWebSocketReceiveResult(0, WebSocketMessageType.Text, true)); await gateway.StartAsync(); await gateway.Run(cancellationToken); await webSocket.DidNotReceive().Connect(Is(options.Value.Uri), Is(cancellationToken)); }
public async Task RunShouldEmitMessageChunksToTheRxWorker( string messageChunk, [Frozen] CancellationTokenSource cancellationTokenSource, [Frozen, Options] IOptions <GatewayOptions> options, [Frozen, Substitute] IClientWebSocket webSocket, [Frozen, Substitute] IGatewayRxWorker rxWorker, [Target] DefaultGatewayService gateway ) { var buffer = new byte[messageChunk.Length]; var memoryBuffer = new Memory <byte>(buffer); var cancellationToken = new CancellationToken(false); gateway.SetPrivateField("buffer", buffer); gateway.SetPrivateField("memoryBuffer", memoryBuffer); webSocket.Receive(Any <Memory <byte> >(), Any <CancellationToken>()).Returns(x => { var buffer = x.ArgAt <Memory <byte> >(0); ((Memory <byte>)Encoding.UTF8.GetBytes(messageChunk)).CopyTo(buffer); return(new ValueWebSocketReceiveResult(messageChunk.Length, WebSocketMessageType.Text, true)); }); await gateway.StartAsync(); await gateway.Run(cancellationToken); await rxWorker.Received().Emit( Is <GatewayMessageChunk>(chunk => Encoding.UTF8.GetString(chunk.Bytes.ToArray()) == messageChunk && chunk.Count == messageChunk.Length && chunk.EndOfMessage ), Is(cancellationToken) ); }