コード例 #1
0
            public async Task StartShouldStartTheTxWorker(
                [Frozen, Substitute] IClientWebSocket clientWebSocket,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Target] DefaultGatewayService gateway
                )
            {
                await gateway.StartAsync();

                await txWorker.Received().Start(Is(gateway), Is(clientWebSocket));
            }
コード例 #2
0
            public async Task StopShouldStopTheTxWorker(
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Target] DefaultGatewayService gateway
                )
            {
                await gateway.StartAsync();

                await gateway.StopAsync();

                await txWorker.Received().Stop();
            }
コード例 #3
0
            public async Task StopShouldSetIsReadyToFalse(
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Target] DefaultGatewayService gateway
                )
            {
                gateway.IsReady = true;
                await gateway.StartAsync();

                await gateway.StopAsync();

                gateway.IsReady.Should().BeFalse();
            }
コード例 #4
0
            public async Task SendShouldEmitTheMessageToTheTxWorker(
                int sequenceNumber,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Target] DefaultGatewayService gateway
                )
            {
                var message = new GatewayMessage {
                    SequenceNumber = sequenceNumber
                };
                var cancellationToken = new CancellationToken(false);

                await gateway.StartAsync();

                await gateway.Send(message, cancellationToken);

                await txWorker.Received().Emit(Is(message), Is(cancellationToken));
            }
コード例 #5
0
            public async Task ShouldSendAHeartbeatToTheTxWorker(
                int sequenceNumber,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Target] DefaultGatewayService gateway,
                CancellationToken cancellationToken
                )
            {
                gateway.SequenceNumber = sequenceNumber;
                await gateway.Heartbeat(cancellationToken);

                await txWorker.Received().Emit(
                    Is <GatewayMessage>(message =>
                                        message.OpCode == GatewayOpCode.Heartbeat &&
                                        (HeartbeatEvent?)message.Data == sequenceNumber
                                        ),
                    Any <CancellationToken>()
                    );
            }
コード例 #6
0
            public async Task SendShouldThrowIfTheOperationWasCanceled(
                int sequenceNumber,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Target] DefaultGatewayService gateway
                )
            {
                var message = new GatewayMessage {
                    SequenceNumber = sequenceNumber
                };
                var cancellationToken = new CancellationToken(false);

                await gateway.StartAsync();

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

                await func.Should().ThrowAsync <OperationCanceledException>();
            }
コード例 #7
0
            public async Task ShouldStopSendingHeartbeatsToTheTxWorker(
                uint interval,
                int sequenceNumber,
                [Frozen] ITimer heartbeat,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Frozen, Substitute] ITimerFactory timerFactory,
                [Target] DefaultGatewayService gateway
                )
            {
                gateway.SequenceNumber = sequenceNumber;
                await gateway.StartAsync();

                await gateway.StartHeartbeat(interval);

                await gateway.StopHeartbeat();

                await heartbeat.Received().Stop();
            }
コード例 #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultGatewayService" /> class.
 /// </summary>
 /// <param name="rxWorker">The worker to use for receiving message chunks and parsing messages.</param>
 /// <param name="txWorker">The worker to use for sending messages to the gateway.</param>
 /// <param name="timerFactory">Factory to create timers with.</param>
 /// <param name="restartService">Service used to restart the gateway.</param>
 /// <param name="gatewayUtilsFactory">Factory to create various utils with.</param>
 /// <param name="options">Options to use for interacting with the gateway.</param>
 /// <param name="logger">Logger used to log information to some destination(s).</param>
 public DefaultGatewayService(
     IGatewayRxWorker rxWorker,
     IGatewayTxWorker txWorker,
     ITimerFactory timerFactory,
     IGatewayRestartService restartService,
     IGatewayUtilsFactory gatewayUtilsFactory,
     IOptions <GatewayOptions> options,
     ILogger <DefaultGatewayService> logger
     )
 {
     this.rxWorker            = rxWorker;
     this.txWorker            = txWorker;
     this.timerFactory        = timerFactory;
     this.restartService      = restartService;
     this.gatewayUtilsFactory = gatewayUtilsFactory;
     this.options             = options.Value;
     this.logger  = logger;
     buffer       = new byte[this.options.BufferSize];
     memoryBuffer = new Memory <byte>(buffer);
 }
コード例 #9
0
            public async Task ShouldStartSendingAHeartbeatToTheTxWorker(
                uint interval,
                int sequenceNumber,
                [Frozen] ITimer timer,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Frozen, Substitute] ITimerFactory timerFactory,
                [Target] DefaultGatewayService gateway
                )
            {
                var cancellationToken = new CancellationToken(false);

                gateway.SequenceNumber = sequenceNumber;
                await gateway.StartAsync();

                await gateway.StartHeartbeat(interval);

                timerFactory.Received().CreateTimer(Is <AsyncTimerCallback>(gateway.Heartbeat), Is((int)interval), Is("Heartbeat"));
                await timer.Received().Start();
            }
コード例 #10
0
            public async Task StopShouldStopTheHeartbeat(
                ITimer heartbeat,
                [Frozen, Substitute] ITimerFactory timerFactory,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Target] DefaultGatewayService gateway
                )
            {
                var cancellationToken = new CancellationToken(false);

                timerFactory.CreateTimer(Any <AsyncTimerCallback>(), Any <int>(), Is("Heartbeat")).Returns(heartbeat);

                await gateway.StartAsync();

                await gateway.StartHeartbeat(10);

                await gateway.StopAsync();

                await heartbeat.Received().Stop();
            }