コード例 #1
0
        public async Task Should_Return_Channel_From_Connection()
        {
            /* Setup */
            var channel           = new Mock <IModel>();
            var connectionFactory = new Mock <IConnectionFactory>();
            var connection        = new Mock <IConnection>();

            connectionFactory
            .Setup(c => c.CreateConnection(
                       It.IsAny <List <string> >(), It.IsAny <string>()))
            .Returns(connection.Object);
            connection
            .Setup(c => c.CreateModel())
            .Returns(channel.Object);
            connection
            .Setup(c => c.IsOpen)
            .Returns(true);
            var channelFactory = new ChannelFactory(connectionFactory.Object, ZyRabbitConfiguration.Local, NullLogger <ChannelFactory> .Instance);

            /* Test */
            var retrievedChannel = await channelFactory.CreateChannelAsync();

            /* Assert */
            Assert.Equal(channel.Object, retrievedChannel);
        }
コード例 #2
0
        public async Task Should_Wait_For_Connection_To_Recover_Before_Returning_Channel()
        {
            /* Setup */
            var channel           = new Mock <IModel>();
            var connectionFactroy = new Mock <IConnectionFactory>();
            var connection        = new Mock <IConnection>();
            var recoverable       = connection.As <IRecoverable>();

            connectionFactroy
            .Setup(c => c.CreateConnection(
                       It.IsAny <List <string> >(), It.IsAny <string>()))
            .Returns(connection.Object);
            connection
            .Setup(c => c.CreateModel())
            .Returns(channel.Object);
            connection
            .Setup(c => c.IsOpen)
            .Returns(false);
            var channelFactory = new ChannelFactory(connectionFactroy.Object, ZyRabbitConfiguration.Local, NullLogger <ChannelFactory> .Instance);

            /* Test */
            /* Assert */
            var channelTask = channelFactory.CreateChannelAsync();

            channelTask.Wait(TimeSpan.FromMilliseconds(30));
            Assert.False(channelTask.IsCompleted);

            recoverable.Raise(r => r.Recovery += null, null, null);
            await channelTask;

            Assert.Equal(channel.Object, channelTask.Result);
        }
コード例 #3
0
        public async Task Should_Throw_Exception_If_Connection_Is_Closed_By_Lib_But_Is_Not_Recoverable()
        {
            /* Setup */
            var connectionFactory = new Mock <IConnectionFactory>();
            var connection        = new Mock <IConnection>();

            connectionFactory
            .Setup(c => c.CreateConnection(
                       It.IsAny <List <string> >(), It.IsAny <string>()))
            .Returns(connection.Object);
            connection
            .Setup(c => c.IsOpen)
            .Returns(false);
            connection
            .Setup(c => c.CloseReason)
            .Returns(new ShutdownEventArgs(ShutdownInitiator.Library, 0, string.Empty));
            var channelFactory = new ChannelFactory(connectionFactory.Object, ZyRabbitConfiguration.Local, NullLogger <ChannelFactory> .Instance);

            /* Test */
            /* Assert */
            try
            {
                await channelFactory.CreateChannelAsync();

                Assert.True(false, $"Connection is closed by Application, expected {nameof(ChannelAvailabilityException)}.");
            }
            catch (ChannelAvailabilityException e)
            {
                Assert.True(true, e.Message);
            }
        }
コード例 #4
0
        public async Task Should_Use_Create_Channel_Policy_When_Creating_Channels()
        {
            /* Setup */
            var channel           = new Mock <IModel>();
            var connection        = new Mock <IConnection>();
            var connectionFactory = new Mock <IConnectionFactory>();

            connectionFactory
            .Setup(f => f.CreateConnection())
            .Returns(connection.Object);
            connectionFactory
            .Setup(c => c.CreateConnection(
                       It.IsAny <List <string> >(), It.IsAny <string>()
                       ))
            .Returns(connection.Object);
            connection
            .Setup(c => c.IsOpen)
            .Returns(true);
            connection
            .SetupSequence(c => c.CreateModel())
            .Throws(new TimeoutException())
            .Throws(new TimeoutException())
            .Returns(channel.Object);

            var policy = Policy
                         .Handle <TimeoutException>()
                         .WaitAndRetryAsync(new[]
            {
                TimeSpan.FromMilliseconds(1),
                TimeSpan.FromMilliseconds(2),
                TimeSpan.FromMilliseconds(4),
                TimeSpan.FromMilliseconds(8),
                TimeSpan.FromMilliseconds(16)
            });

            var factory = new ChannelFactory(
                connectionFactory.Object,
                ZyRabbitConfiguration.Local,
                NullLogger <ChannelFactory> .Instance,
                new ConnectionPolicies {
                CreateChannel = policy
            });

            /* Test */
            var retrievedChannel = await factory.CreateChannelAsync();

            /* Assert */
            Assert.Equal(channel.Object, retrievedChannel);
        }