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); } }
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); }
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); } }
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)); }