public void ShouldStartAndStopListening() { var fixtureSnapshot = new Fixture { Id = "TestId", MatchStatus = "30", Sequence = 1 }; var plugin = new Mock<IAdapterPlugin>(); var resource = new Mock<IResourceFacade>(); var connector = new Mock<IAdapterPlugin>(); var eventState = new Mock<IEventState>(); var marketFilterObjectStore = new StateManager(_settings.Object,plugin.Object); resource.Setup(r => r.Sport).Returns("Football"); resource.Setup(r => r.Content).Returns(new Summary()); resource.Setup(r => r.StartStreaming()).Raises(r => r.StreamConnected += null, EventArgs.Empty); resource.Setup(r => r.StopStreaming()).Raises(r => r.StreamDisconnected += null, EventArgs.Empty); resource.Setup(r => r.GetSnapshot()).Returns(FixtureJsonHelper.ToJson(fixtureSnapshot)); resource.Setup(r => r.Id).Returns("TestId"); eventState.Setup(e => e.GetCurrentSequence(It.IsAny<string>(), It.IsAny<string>())).Returns(-1); var listener = new StreamListener(resource.Object, connector.Object, eventState.Object, marketFilterObjectStore,_settings.Object); listener.MonitorEvents(); listener.Start(); listener.Stop(); listener.ShouldRaise("OnConnected"); listener.ShouldNotRaise("OnError"); listener.ShouldRaise("OnStop"); listener.ShouldNotRaise("OnDisconnected","The disconnection is triggered by the user"); connector.Verify(c => c.ProcessSnapshot(It.IsAny<Fixture>(), false), Times.Once()); }
public void StreamListenerEvents() { // STEP 1: prepare the stub data Mock<IResourceFacade> resource = new Mock<IResourceFacade>(); Mock<IAdapterPlugin> connector = new Mock<IAdapterPlugin>(); Mock<IEventState> state = new Mock<IEventState>(); _settings.Setup(x => x.MarketFiltersDirectory).Returns("."); var provider = new StateManager(_settings.Object, connector.Object); var suspensionManager = new SuspensionManager(provider, connector.Object); var fixtureSnapshot = new Fixture { Id = "ABC", Epoch = 0, MatchStatus = "30", Sequence = 1 }; var settledSnapshot = new Fixture { Id = "ABC", Epoch = 3, MatchStatus = "50", Sequence = 5 }; resource.Setup(x => x.Id).Returns("ABC"); resource.Setup(x => x.Content).Returns(new Summary()); resource.Setup(x => x.MatchStatus).Returns(MatchStatus.InRunning); resource.Setup(r => r.StartStreaming()).Raises(r => r.StreamConnected += null, EventArgs.Empty); resource.Setup(r => r.StopStreaming()).Raises(r => r.StreamDisconnected += (e, o) => { }, EventArgs.Empty); //sequence of 3 snapshots middle one should raise an exception resource.SetupSequence(r => r.GetSnapshot()) .Returns(FixtureJsonHelper.ToJson(fixtureSnapshot)) .Returns(String.Empty) .Returns(FixtureJsonHelper.ToJson(settledSnapshot)); // STEP 2: start the listener StreamListener listener = new StreamListener(resource.Object, connector.Object, state.Object, provider, _settings.Object); listener.MonitorEvents(); listener.Start(); listener.ShouldRaise("OnConnected"); listener.ShouldRaise("OnBeginSnapshotProcessing"); listener.ShouldRaise("OnFinishedSnapshotProcessing"); //stream event var update = new Fixture { Id = "ABC", Sequence = 2, MatchStatus = ((int)MatchStatus.MatchOver).ToString(), Epoch = 2, LastEpochChangeReason = new[] { (int)EpochChangeReason.MatchStatus } }; var message = new StreamMessage { Content = update }; listener.ResourceOnStreamEvent(this, new StreamEventArgs(JsonConvert.SerializeObject(message))); listener.ShouldRaise("OnBeginStreamUpdateProcessing"); listener.ShouldRaise("OnFinishedStreamUpdateProcessing"); //as a result of match status change it will get a second snapshot which is String.Empty listener.ShouldRaise("OnError") .WithArgs<StreamListenerEventArgs>(e => e.Exception != null); listener.ShouldRaise("OnSuspend"); //when recovered the IsErrored should clear listener.IsErrored.Should().BeFalse(); listener.ShouldRaise("OnFlagsChanged") .WithArgs<StreamListenerEventArgs>(e => ((StreamListener)e.Listener).IsErrored == false); //simulate stream disconnection listener.ResourceOnStreamDisconnected(null, null); listener.ShouldRaise("OnDisconnected"); listener.Stop(); listener.ShouldRaise("OnStop"); resource.Verify(x => x.GetSnapshot(), Times.Exactly(3), "The StreamListener was supposed to acquire 3 snasphots"); connector.Verify(x => x.ProcessSnapshot(It.IsAny<Fixture>(), It.IsAny<bool>()), Times.Exactly(2)); }