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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #13
0
 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;
 }
Exemple #16
0
        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);
        }
Exemple #17
0
        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);
        }