예제 #1
0
        public void ConnectedTryConnectAndPublish()
        {
            // setup
            var msg = new EventBusConfigutation();

            void config(EventBusConfigutation c)
            {
                c.DefaultMap.ExchangeName = nameof(EventBusPublisherFactoryTest);
            }

            var sp = BuildTestServiceProvider(config);
            // act

            var sc = sp.GetService <IEventBusPublisherFactory <EventBusConfigutation> >();


            var unwrapSc = (EventBusPublisherFactory <EventBusConfigutation> .EventBusPublishProvider)sc.CreatePublisher();
            CancellationTokenSource ts = new CancellationTokenSource();
            var result = unwrapSc.TryToConnect();

            // validate
            Assert.True(result);
            Assert.Null(unwrapSc.ConnectionError);
            Assert.True(unwrapSc.IsConnected);
            Assert.Equal(BusConnectionState.Connected, unwrapSc.BusConnectionState);

            result = unwrapSc.PublishSync(msg, ts.Token);

            // validate
            Assert.True(result);
            Assert.Null(unwrapSc.ConnectionError);
            Assert.True(unwrapSc.IsConnected);
            Assert.Equal(BusConnectionState.Connected, unwrapSc.BusConnectionState);
        }
예제 #2
0
        public void NotConnectedCancellationTokenThowsException()
        {
            // setup
            var msg = new EventBusConfigutation();

            void config(EventBusConfigutation c)
            {
                c.Port           = 11111;
                c.RecconectCount = 1;
            }

            var sp = BuildTestServiceProvider(config);

            // act
            var sc = sp.GetService <IEventBusPublisherFactory <EventBusConfigutation> >();

            var unwrapSc = (EventBusPublisherFactory <EventBusConfigutation> .EventBusPublishProvider)sc.CreatePublisher();

            // validate
            Assert.Throws <BrokerUnreachableException>(() =>
            {
                var result = unwrapSc.PublishSync(msg, CancellationToken.None);
            });
            Assert.False(unwrapSc.IsConnected);
            Assert.Equal(BusConnectionState.ErrorDisconnected, unwrapSc.BusConnectionState);
            Assert.IsType <BrokerUnreachableException>(unwrapSc.ConnectionError);
        }
예제 #3
0
        public void NotConnectedTryToConnectReturnsFlag()
        {
            // setup
            var msg = new EventBusConfigutation();

            void config(EventBusConfigutation c)
            {
                c.Port           = 11111;
                c.RecconectCount = 1;
            }

            var sp = BuildTestServiceProvider(config);

            var sc = sp.GetService <IEventBusPublisherFactory <EventBusConfigutation> >();

            var unwrapSc = (EventBusPublisherFactory <EventBusConfigutation> .EventBusPublishProvider)sc.CreatePublisher();

            // validate
            var result = unwrapSc.TryToConnect(true);

            Assert.False(result);
            Assert.False(unwrapSc.IsConnected);
            Assert.Equal(BusConnectionState.ErrorDisconnected, unwrapSc.BusConnectionState);
            Assert.IsType <BrokerUnreachableException>(unwrapSc.ConnectionError);
        }
예제 #4
0
        public void NotConnectedPublishCancellationTokenReturnsFlag()
        {
            // setup
            var msg = new EventBusConfigutation();

            void config(EventBusConfigutation c)
            {
                c.Port           = 11111;
                c.RecconectCount = 6;
            }

            var sp = BuildTestServiceProvider(config);

            // act
            var sc = sp.GetService <IEventBusPublisherFactory <EventBusConfigutation> >();

            var unwrapSc = (EventBusPublisherFactory <EventBusConfigutation> .EventBusPublishProvider)sc.CreatePublisher();
            CancellationTokenSource ts = new CancellationTokenSource();

            // validate
            var result = unwrapSc.PublishAsync(msg, ts.Token, true);

            Thread.Yield();
            Thread.Sleep(5000);
            ts.Cancel();
            Assert.False(result.Result);
            Assert.False(unwrapSc.IsConnected);
            Assert.Equal(BusConnectionState.ErrorDisconnected, unwrapSc.BusConnectionState);
            Assert.IsType <OperationCanceledException>(unwrapSc.ConnectionError);
        }
예제 #5
0
        public void ConnectedAutoFailedReconnectChannelAndPublish()
        {
            // setup
            var msg = new EventBusConfigutation();

            void config(EventBusConfigutation c)
            {
                c.DefaultMap.ExchangeName = nameof(EventBusPublisherFactoryTest);
            }

            var sp = BuildTestServiceProvider(config);
            // act
            var sc = sp.GetService <IEventBusPublisherFactory <EventBusConfigutation> >();

            var unwrapSc = (EventBusPublisherFactory <EventBusConfigutation> .EventBusPublishProvider)sc.CreatePublisher();
            CancellationTokenSource ts = new CancellationTokenSource();
            var result = unwrapSc.TryToConnect();

            // validate
            Assert.True(result);
            Assert.Null(unwrapSc.ConnectionError);
            Assert.True(unwrapSc.IsConnected);
            Assert.Equal(BusConnectionState.Connected, unwrapSc.BusConnectionState);

            // setup simulate hard disconnection
            unwrapSc.ConfigutationRabbitMQ.Port = 11111;
            unwrapSc.ConnectionFactory.GetConnectionFactory().Port = 11111;
            unwrapSc.ConfigutationRabbitMQ.RecconectCount = 2;

            try
            {
                unwrapSc.Channel.Close();
            }
            catch { /*channel disconnection simulation*/ }
            Thread.Yield();
            Thread.Sleep(5000);

            // validate
            Assert.False(unwrapSc.IsConnected);
            Assert.NotEqual(BusConnectionState.Connected, unwrapSc.BusConnectionState);

            result = unwrapSc.PublishSync(msg, ts.Token, true);

            // validate
            Assert.False(result);
            Assert.NotNull(unwrapSc.ConnectionError);
            Assert.False(unwrapSc.IsConnected);
            Assert.Equal(BusConnectionState.ErrorDisconnected, unwrapSc.BusConnectionState);
        }
        public void SubscribeAndPublishAndGetMessage()
        {
            EventBusConfigutation msgResponse = null;
            Exception             error       = null;

            // setup
            void SubscriptionDelegate(EventBusConfigutation notification)
            {
                msgResponse = notification;
            }

            void LocalErrorHandler(Exception obj)
            {
                error = obj;
            }

            void config(EventBusConfigutation c)
            {
                c.DefaultMap.ExchangeName = nameof(EventBusSubscribeFactoryTest) + "1";
                c.DefaultMap.QueueName    = nameof(EventBusSubscribeFactoryTest) + "1";
            }

            var msg = new EventBusConfigutation();

            var sp = BuildTestServiceProvider(config);

            // act
            var pb = sp.GetRequiredService <IEventBusPublisherFactory <EventBusConfigutation> >().CreatePublisher();

            Assert.NotNull(pb);

            var scf = sp.GetRequiredService <IEventBusSubscribtionFactory <EventBusConfigutation> >();

            // validate
            Assert.NotNull(scf);

            // act
            var subScr = (EventBusSubscriberFactory <EventBusConfigutation> .EventBusSubscriberProvider)scf.SubscribeSync(SubscriptionDelegate);

            subScr.ErrorHandler += LocalErrorHandler;

            pb.PublishSync(msg, CancellationToken.None);

            Thread.Yield();
            Thread.Sleep(1000);

            Assert.NotNull(msgResponse);
            Assert.Null(error);
        }
예제 #7
0
        public void NotConnectedPublishThowsException()
        {
            // setup
            var msg = new EventBusConfigutation();

            void config(EventBusConfigutation c)
            {
                c.Port           = 11111;
                c.RecconectCount = 6;
            }

            var sp = BuildTestServiceProvider(config);

            // act
            var sc = sp.GetService <IEventBusPublisherFactory <EventBusConfigutation> >();

            var unwrapSc = (EventBusPublisherFactory <EventBusConfigutation> .EventBusPublishProvider)sc.CreatePublisher();
            CancellationTokenSource ts = new CancellationTokenSource();

            // validate
            try
            {
                var result = unwrapSc.PublishAsync(msg, ts.Token);
                Thread.Yield();
                Thread.Sleep(5000);
                ts.Cancel();
                result.Wait();
            }
            catch (Exception ex)
            {
                if (!(ex is AggregateException) && !(ex is AggregateException))
                {
                    Assert.False(true);
                }
            }
            Assert.False(unwrapSc.IsConnected);
            Assert.Equal(BusConnectionState.ErrorDisconnected, unwrapSc.BusConnectionState);
            Assert.NotNull(unwrapSc.ConnectionError);
        }
        public void SubscribeAutoReConnectAndPublishAndGetMessage()
        {
            EventBusConfigutation msgResponse = null;
            Exception             error       = null;

            // setup
            void SubscriptionDelegate(EventBusConfigutation notification)
            {
                msgResponse = notification;
            }

            void LocalErrorHandler(Exception obj)
            {
                error = obj;
            }

            void config(EventBusConfigutation c)
            {
                c.DefaultMap.ExchangeName = nameof(EventBusSubscribeFactoryTest) + "2";
                c.DefaultMap.QueueName    = nameof(EventBusSubscribeFactoryTest) + "2";
            }

            var msg = new EventBusConfigutation();

            var sp = BuildTestServiceProvider(config);

            // act
            var pb = sp.GetRequiredService <IEventBusPublisherFactory <EventBusConfigutation> >().CreatePublisher();

            Assert.NotNull(pb);

            var scf = sp.GetService <IEventBusSubscribtionFactory <EventBusConfigutation> >();

            // validate
            Assert.NotNull(scf);

            // act
            var subScr = (EventBusSubscriberFactory <EventBusConfigutation> .EventBusSubscriberProvider)scf.SubscribeSync(SubscriptionDelegate);

            subScr.ErrorHandler += LocalErrorHandler;

            subScr.Connection.Close();

            for (int i = 0; i < 30; i++)
            {
                Thread.Yield();
                Thread.Sleep(1000);
                if (subScr.IsConnected)
                {
                    break;
                }
            }

            Assert.True(subScr.IsConnected);
            Assert.Equal(BusConnectionState.Connected, subScr.BusConnectionState);
            Assert.Null(subScr.ConnectionError);
            //Assert.IsType<OperationCanceledException>(subScr.ConnectionError);

            pb.PublishSync(msg, CancellationToken.None);

            Thread.Yield();
            Thread.Sleep(1000);

            Assert.NotNull(msgResponse);
            Assert.Null(error);
        }
        public void SubscribeDisConnectChannelAndPublishAndGetMessage()
        {
            EventBusConfigutation msgResponse = null;
            Exception             error       = null;

            // setup
            void SubscriptionDelegate(EventBusConfigutation notification)
            {
                msgResponse = notification;
            }

            void LocalErrorHandler(Exception obj)
            {
                error = obj;
            }

            void config(EventBusConfigutation c)
            {
                c.DefaultMap.ExchangeName = nameof(EventBusSubscribeFactoryTest) + "4";
                c.DefaultMap.QueueName    = nameof(EventBusSubscribeFactoryTest) + "4";
                c.RecconectCount          = 2;
            }

            var msg = new EventBusConfigutation();

            var sp = BuildTestServiceProvider(config);

            // act
            var pb = sp.GetRequiredService <IEventBusPublisherFactory <EventBusConfigutation> >().CreatePublisher();

            Assert.NotNull(pb);

            var scf = sp.GetService <IEventBusSubscribtionFactory <EventBusConfigutation> >();

            // validate
            Assert.NotNull(scf);

            // act
            var subScr = (EventBusSubscriberFactory <EventBusConfigutation> .EventBusSubscriberProvider)scf.SubscribeSync(SubscriptionDelegate);

            subScr.ErrorHandler += LocalErrorHandler;

            subScr.ConfigutationRabbitMQ.Port = 11111;
            subScr.ConnectionFactory.GetConnectionFactory().Port = 11111;
            subScr.ConfigutationRabbitMQ.RecconectCount = 1;

            try
            {
                subScr.Channel.Close();
            }
            catch { /*channel disconnection simulation*/ }

            Thread.Yield();
            Thread.Sleep(5000);

            Assert.False(subScr.IsConnected);
            Assert.Equal(BusConnectionState.ErrorDisconnected, subScr.BusConnectionState);
            Assert.NotNull(subScr.ConnectionError);

            Assert.NotNull(error);
        }