Пример #1
0
            public async Task RunShouldWriteBytesToWebSocket(
                int sequenceNumber,
                byte[] bytes,
                [Substitute] IClientWebSocket clientWebSocket,
                [Frozen, Substitute] IGatewayService gateway,
                [Frozen, Substitute] IChannel <GatewayMessage> channel,
                [Frozen, Substitute] ISerializer serializer,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Target] DefaultGatewayTxWorker worker
                )
            {
                var message = new GatewayMessage {
                    SequenceNumber = sequenceNumber
                };
                var cancellationToken = new CancellationToken(false);

                serializer.SerializeToBytes(Any <GatewayMessage>()).Returns(bytes);
                channel.Read(Any <CancellationToken>()).Returns(new ValueTask <GatewayMessage>(message));

                clientWebSocket.State.Returns(WebSocketState.Open);
                await worker.Start(gateway, clientWebSocket);

                await worker.Run(cancellationToken);

                await clientWebSocket.Received().Send(Is <ArraySegment <byte> >(bytes), Is(WebSocketMessageType.Text), Is(true), Is(cancellationToken));
            }
Пример #2
0
            public async Task RunShouldReadFromChannelIfWaitToReadReturnsTrue(
                int sequenceNumber,
                [Substitute] IClientWebSocket clientWebSocket,
                [Frozen, Substitute] IGatewayService gateway,
                [Frozen, Substitute] IChannel <GatewayMessage> channel,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Target] DefaultGatewayTxWorker worker
                )
            {
                var message = new GatewayMessage {
                    SequenceNumber = sequenceNumber
                };
                var cancellationToken = new CancellationToken(false);

                channel.Read(Any <CancellationToken>()).Returns(new ValueTask <GatewayMessage>(message));

                clientWebSocket.State.Returns(WebSocketState.Open);
                await worker.Start(gateway, clientWebSocket);

                await worker.Run(cancellationToken);

                await channel.Received().WaitToRead(Is(cancellationToken));

                await channel.Received().Read(Is(cancellationToken));
            }
Пример #3
0
            public async Task RunShouldWaitUntilTheWebSocketIsOpen(
                int sequenceNumber,
                [Substitute] IClientWebSocket clientWebSocket,
                [Frozen, Substitute] IGatewayService gateway,
                [Frozen, Substitute] IChannel <GatewayMessage> channel,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Target] DefaultGatewayTxWorker worker
                )
            {
                var tries   = 0;
                var message = new GatewayMessage {
                    SequenceNumber = sequenceNumber
                };
                var cancellationToken = new CancellationToken(false);

                clientWebSocket.State.Returns(WebSocketState.Connecting);

                channel.Read(Any <CancellationToken>()).Returns(new ValueTask <GatewayMessage>(message));
                channel.WaitToRead(Any <CancellationToken>()).Returns(true);
                factory.CreateDelay(Any <uint>(), Any <CancellationToken>()).Returns(async x =>
                {
                    if (++tries == 2)
                    {
                        clientWebSocket.State.Returns(WebSocketState.Open);
                    }

                    await Task.CompletedTask;
                });

                await worker.Start(gateway, clientWebSocket);

                await worker.Run(cancellationToken);

                await factory.Received(2).CreateDelay(100, Is(cancellationToken));
            }
Пример #4
0
            public async Task StartShouldStartTheWorkerThread(
                [Substitute] IClientWebSocket clientWebSocket,
                [Frozen, Substitute] IGatewayService gateway,
                [Frozen, Substitute] ITimer timer,
                [Target] DefaultGatewayTxWorker txWorker
                )
            {
                await txWorker.Start(gateway, clientWebSocket);

                await timer.Received().Start();
            }
Пример #5
0
            public async Task StartShouldCreateTimer(
                [Substitute] IClientWebSocket clientWebSocket,
                [Frozen, Substitute] IGatewayService gateway,
                [Frozen, Substitute] ITimerFactory timerFactory,
                [Target] DefaultGatewayTxWorker txWorker
                )
            {
                await txWorker.Start(gateway, clientWebSocket);

                timerFactory.Received().CreateTimer(Is((AsyncTimerCallback)txWorker.Run), Is(0), Is("Gateway TX"));
            }
Пример #6
0
            public async Task RunShouldNotReadFromChannelIfWaitToReadReturnsFalse(
                [Substitute] IClientWebSocket clientWebSocket,
                [Frozen, Substitute] IGatewayService gateway,
                [Frozen, Substitute] IChannel <GatewayMessage> channel,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Target] DefaultGatewayTxWorker worker
                )
            {
                var cancellationToken = new CancellationToken(false);

                channel.WaitToRead(Any <CancellationToken>()).Returns(false);

                clientWebSocket.State.Returns(WebSocketState.Open);
                await worker.Start(gateway, clientWebSocket);

                await worker.Run(cancellationToken);

                await channel.DidNotReceive().Read(Is(cancellationToken));
            }
Пример #7
0
            public async Task EmitShouldThrowIfTheOperationWasCanceled(
                int sequenceNumber,
                [Substitute] IClientWebSocket clientWebSocket,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] DefaultGatewayTxWorker worker
                )
            {
                var message = new GatewayMessage {
                    SequenceNumber = sequenceNumber
                };
                var cancellationToken = new CancellationToken(false);

                await worker.Start(gateway, clientWebSocket);

                var         operationCancellationToken = new CancellationToken(true);
                Func <Task> func = () => worker.Emit(message, operationCancellationToken);

                await func.Should().ThrowAsync <OperationCanceledException>();
            }
Пример #8
0
            public async Task EmitShouldEmitTheMessageToTheChannel(
                int sequenceNumber,
                [Frozen, Substitute] IGatewayService gateway,
                [Frozen, Substitute] IClientWebSocket webSocket,
                [Frozen, Substitute] IChannel <GatewayMessage> channel,
                [Target] DefaultGatewayTxWorker worker
                )
            {
                var message = new GatewayMessage {
                    SequenceNumber = sequenceNumber
                };
                var cancellationToken = new CancellationToken(false);

                await worker.Start(gateway, webSocket);

                await worker.Emit(message, cancellationToken);

                await channel.Received().Write(Is(message), Is(cancellationToken));
            }
Пример #9
0
            public async Task StartShouldSetupGatewayToRestartOnUnexpectedStops(
                [Substitute] IClientWebSocket clientWebSocket,
                [Frozen, Substitute] ITimer timer,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] DefaultGatewayTxWorker worker
                )
            {
                var cancellationToken = new CancellationToken(false);
                var source            = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
                await worker.Start(gateway, clientWebSocket);

                timer.Received().StopOnException  = Is(true);
                timer.Received().OnUnexpectedStop = Any <OnUnexpectedTimerStop>();
                var arg = (from call in timer.ReceivedCalls()
                           where call.GetMethodInfo().Name.Contains(nameof(timer.OnUnexpectedStop))
                           select(OnUnexpectedTimerStop) call.GetArguments()[0]).First();

                await arg();

                await gateway.Received().Restart();
            }