private void UnsuspendFixture(FixtureState state) { Fixture fixture = new Fixture { Id = _fixtureId, Sequence = -1 }; if (state != null) { fixture.Sequence = state.Sequence; fixture.MatchStatus = state.MatchStatus.ToString(); } try { _suspensionManager.Unsuspend(fixture); _fixtureIsSuspended = false; } catch (PluginException ex) { UpdateStatsError(ex); throw; } }
/// <summary> /// This method checks whether we need to retrieve and process a new snapshot (when current resource sequence is different than te stored sequence). /// </summary> /// <param name="resourceFacade"></param> /// <param name="state"></param> /// <returns></returns> public bool IsSnapshotNeeded(IResourceFacade resourceFacade, FixtureState state) { _logger.Debug( $"{resourceFacade} has stored sequence={state?.Sequence}; resource sequence={resourceFacade?.Content?.Sequence}"); return(state == null || resourceFacade?.Content != null && resourceFacade.Content.Sequence != state.Sequence); }
public void GivenEmptyStateWhenSendUpdateFixtureStateMsgThenItUpdatedTheStateInMemory() { // //Arrange // var storedFixtureState = new FixtureState { Id = "id1", Sport = "sport1", Epoch = 1, Sequence = 1, MatchStatus = MatchStatus.Setup }; var fixtureStateActor = ActorOfAsTestActorRef <FixtureStateActor>( Props.Create(() => new FixtureStateActor( SettingsMock.Object, StoreProviderMock.Object)), FixtureStateActor.ActorName); // //Act // var fixtureState = fixtureStateActor .Ask <FixtureState>(new GetFixtureStateMsg { FixtureId = storedFixtureState.Id }) .Result; //initial null state Assert.IsNull(fixtureState); //upsert the state fixtureStateActor.Ask( new UpdateFixtureStateMsg { FixtureId = storedFixtureState.Id, Sport = storedFixtureState.Sport, Status = storedFixtureState.MatchStatus, Epoch = storedFixtureState.Epoch, Sequence = storedFixtureState.Sequence }); // //Assert // fixtureState = fixtureStateActor .Ask <FixtureState>(new GetFixtureStateMsg { FixtureId = storedFixtureState.Id }) .Result; Assert.AreEqual(storedFixtureState, fixtureState); }
public void GivenExistingFixtureStateWhenSendRemoveFixtureStateMsgThenRemovesTheFixtureState() { // //Arrange // var storedFixtureState = new FixtureState { Id = "id1", Sport = "sport1", Epoch = 1, Sequence = 1, MatchStatus = MatchStatus.Setup }; StoreProviderMock.Setup(o => o.Read(It.IsAny <string>())) .Returns(JsonConvert.SerializeObject( new Dictionary <string, FixtureState> { { storedFixtureState.Id, storedFixtureState } }, Formatting.Indented)); var fixtureStateActor = ActorOfAsTestActorRef <FixtureStateActor>( Props.Create(() => new FixtureStateActor( SettingsMock.Object, StoreProviderMock.Object)), FixtureStateActor.ActorName); var fixtureState = fixtureStateActor .Ask <FixtureState>(new GetFixtureStateMsg { FixtureId = storedFixtureState.Id }) .Result; Assert.AreEqual(storedFixtureState, fixtureState); // //Act // //Send RemoveFixtureStateMsg and wait for completion fixtureStateActor.Ask(new RemoveFixtureStateMsg { FixtureId = storedFixtureState.Id }); fixtureState = fixtureStateActor .Ask <FixtureState>(new GetFixtureStateMsg { FixtureId = storedFixtureState.Id }) .Result; // //Assert // Assert.IsNull(fixtureState); }
public void Apply(WeekFixtureCreatedEvent @event) { base.Id = new Identity(@event.FixtureId); this.SeasonId = @event.SeasonId; this.DivisionId = @event.DivisionId; this.StartDate = @event.StartDate; this.EndDate = @event.EndDate; this.FixtureWeekNumber = @event.FixtureWeekNumber; this.matches = new List <Match>(); this.State = FixtureState.Ready; }
/// <summary> /// This method determines whether we should suspend the fixture when the stream disconnection occurs /// </summary> /// <param name="fixtureState"></param> /// <param name="fixtureStartTime"></param> /// <returns></returns> public bool ShouldSuspendOnDisconnection(FixtureState fixtureState, DateTime?fixtureStartTime) { if (fixtureState == null || !fixtureStartTime.HasValue) { return(true); } var spanBetweenNowAndStartTime = fixtureStartTime.Value - DateTime.UtcNow; var doNotSuspend = _settings.DisablePrematchSuspensionOnDisconnection && spanBetweenNowAndStartTime.TotalMinutes > _settings.PreMatchSuspensionBeforeStartTimeInMins; return(!doNotSuspend); }
private void UpdateFixtureStateMsgHandler(UpdateFixtureStateMsg msg) { _logger.Debug($"Updating state for Fixture fixtureId={msg.FixtureId} sequence={msg.Sequence}"); FixtureState fixtureState; if (!_fixturesState.TryGetValue(msg.FixtureId, out fixtureState)) { fixtureState = new FixtureState { Id = msg.FixtureId, Sport = msg.Sport }; } fixtureState.Sequence = msg.Sequence; fixtureState.MatchStatus = msg.Status; fixtureState.Epoch = msg.Epoch; _fixturesState[msg.FixtureId] = fixtureState; }
private void RetrieveAndProcessSnapshotIfNeeded() { FixtureState state = _eventState.GetFixtureState(_resource.Id); int sequence_number = -1; if (state != null) { sequence_number = state.Sequence; } int resource_sequence = SequenceOnStreamingAvailable; _logger.DebugFormat("{0} has stored sequence={1} and current_sequence={2}", _resource, sequence_number, resource_sequence); if (sequence_number == -1 || resource_sequence != sequence_number) { RetrieveAndProcessSnapshot(); } else { Fixture fixture = new Fixture { Sequence = sequence_number, Id = _resource.Id }; if (state != null) { fixture.MatchStatus = state.MatchStatus.ToString(); } try { //unsuspends markets suspended by adapter _stateManager.StateProvider.SuspensionManager.Unsuspend(fixture.Id); _platformConnector.UnSuspend(fixture); } catch (Exception e) { _logger.Error(string.Format("Error unsuspending {0}", _resource), e); SetErrorState(); } } }
public void GivenFixtureStartTimeNullShouldSuspendOnDisconnectionReturnsTrue() { // //Arrange // var fixtureState = new FixtureState(); var streamHealthCheckValidation = new StreamHealthCheckValidation(_settings.Object); // //Act // bool shouldSuspendOnDisconnection = streamHealthCheckValidation.ShouldSuspendOnDisconnection( fixtureState, null); // //Assert // Assert.IsTrue(shouldSuspendOnDisconnection); }
public void GivenFixtureStateNotNullAndStartTimeNotNullShouldSuspendOnDisconnectionReturnsTrue() { // //Arrange // var fixtureState = new FixtureState(); _settings.SetupGet(o => o.DisablePrematchSuspensionOnDisconnection).Returns(false); var streamHealthCheckValidation = new StreamHealthCheckValidation(_settings.Object); // //Act // bool shouldSuspendOnDisconnection = streamHealthCheckValidation.ShouldSuspendOnDisconnection( fixtureState, It.IsAny <DateTime>()); // //Assert // Assert.IsTrue(shouldSuspendOnDisconnection); }
private FixtureState GetFixtureState(IResourceFacade resource) { var fixtureStateActor = Context.System.ActorSelection(FixtureStateActor.Path); FixtureState state = null; try { state = fixtureStateActor .Ask <FixtureState>( new GetFixtureStateMsg { FixtureId = resource.Id }, TimeSpan.FromSeconds(10)) .Result; } catch (Exception e) { _logger.Warn($"GetFixtureState failed for {resource} {e}"); } return(state); }
public void GivenFixtureStateAndStartTimeAreInvalidThenShouldSuspendOnDisconnectionReturnsFalse() { // //Arrange // var fixtureState = new FixtureState(); _settings.SetupGet(o => o.DisablePrematchSuspensionOnDisconnection).Returns(true); _settings.SetupGet(o => o.PreMatchSuspensionBeforeStartTimeInMins).Returns(5); var streamHealthCheckValidation = new StreamHealthCheckValidation(_settings.Object); // //Act // bool shouldSuspendOnDisconnection = streamHealthCheckValidation.ShouldSuspendOnDisconnection( fixtureState, DateTime.UtcNow.AddMinutes(10)); // //Assert // Assert.IsFalse(shouldSuspendOnDisconnection); }
protected override void OnStateUpdate(FixtureState prevState = new FixtureState()) { base.OnStateUpdate(prevState); UpdateWallCaps(); }
public void Apply(FixtureFinishedEvent @event) { this.State = FixtureState.Finished; }
public void Apply(FixtureStartedEvent @event) { this.State = FixtureState.Started; }
protected void SetupCommonMockObjects( string sport, byte[] fixtureData, dynamic storedData, out Fixture snapshot, out Mock <IResourceFacade> resourceFacadeMock, Action <Mock <IResourceFacade>, string> resourceGetSnapshotCallsSequence = null) { resourceFacadeMock = new Mock <IResourceFacade>(); FootabllSportMock.SetupGet(o => o.Name).Returns("Football"); var snapshotJson = System.Text.Encoding.UTF8.GetString(fixtureData); snapshot = FixtureHelper.GetFromJson(snapshotJson); var snapshotVar = snapshot; resourceFacadeMock.Setup(o => o.Id).Returns(snapshot.Id); resourceFacadeMock.Setup(o => o.Sport).Returns(sport); resourceFacadeMock.Setup(o => o.MatchStatus).Returns((MatchStatus)Convert.ToInt32(snapshot.MatchStatus)); resourceFacadeMock.Setup(o => o.Content).Returns(new Summary { Id = snapshot.Id, Sequence = snapshot.Sequence, MatchStatus = Convert.ToInt32(snapshot.MatchStatus), StartTime = snapshot.StartTime?.ToString("yyyy-MM-ddTHH:mm:ssZ") }); if (resourceGetSnapshotCallsSequence == null) { resourceFacadeMock.Setup(o => o.GetSnapshot()).Returns(snapshotJson); } else { resourceGetSnapshotCallsSequence(resourceFacadeMock, snapshotJson); } resourceFacadeMock.Setup(r => r.StartStreaming()).Raises(r => r.StreamConnected += null, EventArgs.Empty); resourceFacadeMock.Setup(r => r.StopStreaming()).Raises(r => r.StreamDisconnected += null, EventArgs.Empty); StateManagerMock.Setup(o => o.CreateNewMarketRuleManager(It.Is <string>(id => id.Equals(snapshotVar.Id)))) .Returns(MarketRulesManagerMock.Object); if (snapshot.IsMatchOver) { resourceFacadeMock.SetupGet(o => o.IsMatchOver).Returns(true); } var storedFixtureState = new FixtureState { Id = snapshot.Id, Sport = sport }; if (storedData != null) { storedFixtureState.Epoch = (int)storedData.Epoch; storedFixtureState.Sequence = (int)storedData.Sequence; storedFixtureState.MatchStatus = (MatchStatus)storedData.MatchStatus; var dic = new Dictionary <string, FixtureState> { { storedFixtureState.Id, storedFixtureState } }; StoreProviderMock.Setup(o => o.Read(It.IsAny <string>())) .Returns(JsonConvert.SerializeObject(dic, Formatting.Indented)); } ActorOfAsTestActorRef <FixtureStateActor>( Props.Create(() => new FixtureStateActor( SettingsMock.Object, StoreProviderMock.Object)), FixtureStateActor.ActorName); }
public void GivenFixtureStateActorWhenMatchIsOverThenShouldProcessFixtureReturnsFalse() { // //Arrange // var storedFixtureState = new FixtureState { Id = "id1", Sport = "sport1", Epoch = 1, Sequence = 1, MatchStatus = MatchStatus.MatchOver }; var fixtureStateActor = ActorOfAsTestActorRef <FixtureStateActor>( Props.Create(() => new FixtureStateActor( SettingsMock.Object, StoreProviderMock.Object)), FixtureStateActor.ActorName); // //Act // //upsert the state fixtureStateActor.Ask( new UpdateFixtureStateMsg { FixtureId = storedFixtureState.Id, Sport = storedFixtureState.Sport, Status = storedFixtureState.MatchStatus, Epoch = storedFixtureState.Epoch, Sequence = storedFixtureState.Sequence }); // //Assert // var fixtureState = fixtureStateActor .Ask <FixtureState>(new GetFixtureStateMsg { FixtureId = storedFixtureState.Id }) .Result; Assert.AreEqual(storedFixtureState, fixtureState); Mock <IResourceFacade> resourceMock = new Mock <IResourceFacade>(); resourceMock.SetupGet(o => o.Id).Returns(storedFixtureState.Id); resourceMock.SetupGet(o => o.MatchStatus).Returns(MatchStatus.MatchOver); // //Act // var checkFixtureStateMsg = fixtureStateActor .Ask <CheckFixtureStateMsg>(new CheckFixtureStateMsg { Resource = resourceMock.Object }) .Result; // //Assert // Assert.IsFalse(checkFixtureStateMsg.ShouldProcessFixture); }