public async Task SendAndReceiveAsyncVariableTimeoutCustomHeaders()
        {
            var latch = new CountdownEvent(1);

            Template.ReceiveTimeout            = 10000;
            Template.SendTimeout               = 20000;
            Template.ThrowExceptionOnLateReply = true;
            Template.SendTimeoutHeader         = "sto";
            Template.ReceiveTimeoutHeader      = "rto";

            var handler  = new LateReplierMessageHandler(latch);
            var chanMock = new Mock <ISubscribableChannel>();
            var channel  = chanMock.Object;

            chanMock.Setup(
                chan => chan.SendAsync(It.IsAny <IMessage>(), It.Is <CancellationToken>(t => t.IsCancellationRequested == false)))
            .Callback <IMessage, CancellationToken>((m, t) => { Task.Run(() => handler.HandleMessage(m)); })
            .Returns(new ValueTask <bool>(true));

            var message = MessageBuilder.WithPayload("request")
                          .SetHeader("sto", 30000)
                          .SetHeader("rto", 1)
                          .Build();

            var result = await Template.SendAndReceiveAsync(channel, message);

            Assert.Null(result);
            Assert.True(latch.Wait(10000));
            Assert.Null(handler.Failure);

            chanMock.Verify(chan => chan.SendAsync(It.IsAny <IMessage>(), It.Is <CancellationToken>(t => t.IsCancellationRequested == false)));
        }
        public void SendAndReceiveVariableTimeoutCustomHeaders()
        {
            var latch = new CountdownEvent(1);

            Template.ReceiveTimeout            = 10000;
            Template.SendTimeout               = 20000;
            Template.ThrowExceptionOnLateReply = true;
            Template.SendTimeoutHeader         = "sto";
            Template.ReceiveTimeoutHeader      = "rto";

            var handler  = new LateReplierMessageHandler(latch);
            var chanMock = new Mock <ISubscribableChannel>();
            var channel  = chanMock.Object;

            chanMock.Setup(
                chan => chan.Send(It.IsAny <IMessage>(), It.IsAny <int>()))
            .Callback <IMessage, int>((m, t) => { Task.Run(() => handler.HandleMessage(m)); })
            .Returns(true);

            var message = MessageBuilder.WithPayload("request")
                          .SetHeader("sto", 30000)
                          .SetHeader("rto", 1)
                          .Build();

            var result = Template.SendAndReceive(channel, message);

            Assert.Null(result);
            Assert.True(latch.Wait(10000));
            Assert.Null(handler.Failure);

            chanMock.Verify(chan => chan.Send(It.IsAny <IMessage>(), It.Is <int>(i => i == 30000)));
        }
        public async Task SendAndReceiveAsyncTimeout()
        {
            var latch = new CountdownEvent(1);

            Template.ReceiveTimeout            = 1;
            Template.SendTimeout               = 30000;
            Template.ThrowExceptionOnLateReply = true;

            var handler  = new LateReplierMessageHandler(latch);
            var chanMock = new Mock <ISubscribableChannel>();
            var channel  = chanMock.Object;

            chanMock.Setup(
                chan => chan.SendAsync(It.IsAny <IMessage>(), It.Is <CancellationToken>(t => t.IsCancellationRequested == false)))
            .Callback <IMessage, CancellationToken>((m, t) => { Task.Run(() => handler.HandleMessage(m)); })
            .Returns(new ValueTask <bool>(true));
            var result = await Template.ConvertSendAndReceiveAsync <string>(channel, "request");

            Assert.Null(result);
            Assert.True(latch.Wait(10000));
            Assert.Null(handler.Failure);

            chanMock.Verify(chan => chan.SendAsync(It.IsAny <IMessage>(), It.Is <CancellationToken>(t => t.IsCancellationRequested == false)));
        }
        public void SendAndReceiveTimeout()
        {
            var latch = new CountdownEvent(1);

            Template.ReceiveTimeout            = 1;
            Template.SendTimeout               = 30000;
            Template.ThrowExceptionOnLateReply = true;

            var handler  = new LateReplierMessageHandler(latch);
            var chanMock = new Mock <ISubscribableChannel>();
            var channel  = chanMock.Object;

            chanMock.Setup(
                chan => chan.Send(It.IsAny <IMessage>(), It.Is <int>(i => i == 30000)))
            .Callback <IMessage, int>((m, t) => { Task.Run(() => handler.HandleMessage(m)); })
            .Returns(true);
            var result = Template.ConvertSendAndReceive <string>(channel, "request");

            Assert.Null(result);
            Assert.True(latch.Wait(10000));
            Assert.Null(handler.Failure);

            chanMock.Verify(chan => chan.Send(It.IsAny <IMessage>(), It.Is <int>(i => i == 30000)));
        }