Example #1
0
        private void HandleNewConsumerMessageUnprocessed(NewConsumerMessage newConsumerMessage)
        {
            var fixtureId = newConsumerMessage?.Consumer?.Id;

            if (fixtureId == null)
            {
                Logger.LogWarning("HandleNewConsumerMessageUnprocessed failed as fixtureId=NULL");
                return;
            }

            if (NewConsumerErrorsCount.ContainsKey(fixtureId))
            {
                NewConsumerErrorsCount[fixtureId] = NewConsumerErrorsCount[fixtureId] + 1;
            }
            else
            {
                NewConsumerErrorsCount[fixtureId] = 1;
            }


            if (NewConsumerErrorsCount[fixtureId] > NewConsumerErrorLimitForConsumer)
            {
                Logger.LogWarning($"HandleNewConsumerMessageUnprocessed message will not be resend for fixtureId={fixtureId}");
            }
            else
            {
                Logger.LogWarning($"HandleNewConsumerMessageUnprocessed message will be resend for fixtureId={fixtureId}");
                SdkActorSystem.ActorSystem.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(10), Self, newConsumerMessage, Self);
            }
        }
Example #2
0
 private void NewConsumerHandler(NewConsumerMessage newConsumerMessage)
 {
     if (ProcessNewConsumer(newConsumerMessage.Consumer))
     {
         HandleNewConsumerMessageProcessed(newConsumerMessage);
     }
     else
     {
         HandleNewConsumerMessageUnprocessed(newConsumerMessage);
     }
 }
        public void EstablishConnectionTest()
        {
            // STEP 1: prepare mocked data

            var updateDispatcherActor = ActorOf(() => new UpdateDispatcherActor());

            var streamCtrlActorTestRef = ActorOfAsTestActorRef <MockedStreamControllerActor>(
                Props.Create(() => new MockedStreamControllerActor(updateDispatcherActor)),
                StreamControllerActor.ActorName);

            Mock <IConsumer> consumer = new Mock <IConsumer>();

            consumer.Setup(x => x.Id).Returns("testing");
            consumer.Setup(x => x.GetQueueDetails()).Returns(_queryDetails);
            Mock <IStreamSubscriber> subscriber1 = new Mock <IStreamSubscriber>();

            subscriber1.Setup(x => x.Consumer).Returns(consumer.Object);
            updateDispatcherActor.Tell(new NewSubscriberMessage()
            {
                Subscriber = subscriber1.Object
            });

            // STEP 2: add the consumers
            streamCtrlActorTestRef.UnderlyingActor.StreamConnectionMock.Setup(c => c.IsOpen).Returns(true);



            // is the controller in its initial state?
            streamCtrlActorTestRef.UnderlyingActor.State.Should().Be(StreamControllerActor.ConnectionState.DISCONNECTED);

            //register new consumer
            var newConsumerMessage = new NewConsumerMessage()
            {
                Consumer = consumer.Object
            };

            streamCtrlActorTestRef.Tell(newConsumerMessage);

            //ExpectMsg<ConnectStreamMessage>();

            //StreamController.Instance.AddConsumer(consumer.Object, -1, -1);

            streamCtrlActorTestRef.UnderlyingActor.State.Should().Be(StreamControllerActor.ConnectionState.CONNECTED);

            streamCtrlActorTestRef.Tell(new RemoveConsumerMessage {
                Consumer = consumer.Object
            });

            streamCtrlActorTestRef.UnderlyingActor.State.Should().Be(StreamControllerActor.ConnectionState.CONNECTED);
        }
Example #4
0
        private void HandleNewConsumerMessageProcessed(NewConsumerMessage newConsumerMessage)
        {
            var fixtureId = newConsumerMessage?.Consumer?.Id;

            if (fixtureId == null)
            {
                Logger.LogWarning("HandleNewConsumerMessageProcessed failed as fixtureId=NULL");
                return;
            }

            if (NewConsumerErrorsCount.ContainsKey(fixtureId))
            {
                NewConsumerErrorsCount.Remove(fixtureId);
            }
        }
Example #5
0
        public void ConnectionShutdownCausesConsumersToStopStreamingTest()
        {
            ((Configuration)UDAPI.Configuration).AutoReconnect      = false;
            ((Configuration)UDAPI.Configuration).DisconnectionDelay = 5;
            var echoControllerActor    = ActorOfAsTestActorRef(() => new EchoControllerActor(), EchoControllerActor.ActorName);
            var updateDispatcherActor  = ActorOfAsTestActorRef(() => new UpdateDispatcherActor(), UpdateDispatcherActor.ActorName);
            var streamCtrlActorTestRef = ActorOfAsTestActorRef <MockedStreamControllerActor>(
                Props.Create(() => new MockedStreamControllerActor(updateDispatcherActor)),
                StreamControllerActor.ActorName);

            Mock <IConsumer> consumer1 = new Mock <IConsumer>();

            consumer1.Setup(x => x.Id).Returns(Id1);
            consumer1.Setup(x => x.GetQueueDetails()).Returns(_queueDetails);
            consumer1.Setup(x => x.OnStreamDisconnected()).Callback(() =>
            {
                streamCtrlActorTestRef.UnderlyingActor.ForceCloseConnection();
            });


            Mock <IConsumer> consumer2 = new Mock <IConsumer>();

            consumer2.Setup(x => x.Id).Returns(Id2);
            consumer2.Setup(x => x.GetQueueDetails()).Returns(_queueDetails);
            consumer2.Setup(x => x.OnStreamDisconnected()).Callback(() => { });



            AwaitAssert(() =>
            {
                streamCtrlActorTestRef.UnderlyingActor.State.Should().Be(StreamControllerActor
                                                                         .ConnectionState.DISCONNECTED);
            },
                        TimeSpan.FromMilliseconds(ASSERT_WAIT_TIMEOUT),
                        TimeSpan.FromMilliseconds(ASSERT_EXEC_INTERVAL));

            //register new consumer 1
            streamCtrlActorTestRef.UnderlyingActor.StreamConnectionMock.Setup(c => c.IsOpen).Returns(true);
            var newConsumerMessage = new NewConsumerMessage {
                Consumer = consumer1.Object
            };

            streamCtrlActorTestRef.Tell(newConsumerMessage);

            //register new consumer 2
            newConsumerMessage = new NewConsumerMessage {
                Consumer = consumer2.Object
            };

            streamCtrlActorTestRef.Tell(newConsumerMessage);
            Mock <IStreamSubscriber> subscriber1 = new Mock <IStreamSubscriber>();

            subscriber1.Setup(x => x.Consumer).Returns(consumer1.Object);
            Mock <IStreamSubscriber> subscriber2 = new Mock <IStreamSubscriber>();

            subscriber2.Setup(x => x.Consumer).Returns(consumer2.Object);

            echoControllerActor.UnderlyingActor.AddConsumer(subscriber1.Object);
            echoControllerActor.UnderlyingActor.AddConsumer(subscriber2.Object);
            updateDispatcherActor.Tell(new NewSubscriberMessage()
            {
                Subscriber = subscriber1.Object
            });
            updateDispatcherActor.Tell(new NewSubscriberMessage()
            {
                Subscriber = subscriber2.Object
            });

            AwaitAssert(() =>
            {
                streamCtrlActorTestRef.UnderlyingActor.State.Should().Be(StreamControllerActor
                                                                         .ConnectionState.CONNECTED);

                echoControllerActor.UnderlyingActor.ConsumerCount.Should().Be(2);
                updateDispatcherActor.UnderlyingActor.SubscribersCount.Should().Be(2);
            },
                        TimeSpan.FromMilliseconds(ASSERT_WAIT_TIMEOUT),
                        TimeSpan.FromMilliseconds(ASSERT_EXEC_INTERVAL));

            streamCtrlActorTestRef.UnderlyingActor.OnConnectionShutdown(null,
                                                                        new ShutdownEventArgs(ShutdownInitiator.Application, 541, "TestException"));
            ((Configuration)UDAPI.Configuration).AutoReconnect = true;
            AwaitAssert(() =>
            {
                consumer1.Verify(x => x.OnStreamDisconnected(), Times.Once,
                                 "Consumer 1 was not disconnected on connection shutdown");
                consumer2.Verify(x => x.OnStreamDisconnected(), Times.Once,
                                 "Consumer 2 was not disconnected on connection shutdown");
                //streamCtrlActorTestRef.UnderlyingActor.State.Should().Be(StreamControllerActor
                //ConnectionState.DISCONNECTED);
            },
                        TimeSpan.FromMilliseconds(ASSERT_WAIT_TIMEOUT),
                        TimeSpan.FromMilliseconds(ASSERT_EXEC_INTERVAL));
        }