Beispiel #1
0
        public void BuildRaceTrace_ShouldThrowException_WhenDriverLookupIsNull(
            RaceTraceFactory raceTraceFactory,
            DriverCodeGenerator driverCodeGenerator)
        {
            var driverRaceData = new DriverRaceData(driverCodeGenerator.Generate());
            var raceData       = new RaceData(driverRaceData);
            var timeSpan       = TimeSpan.FromTicks(TimeSpan.TicksPerMinute);
            var referenceTime  = new ReferenceTime(timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds);

            Assert.Throws <ArgumentNullException>(() => raceTraceFactory.Build(raceData, referenceTime, null));
        }
Beispiel #2
0
        public void BuildRaceTrace_ShouldThrowException_WhenRaceDataIsNull(
            RaceTraceFactory raceTraceFactory,
            DriverCodeGenerator driverCodeGenerator,
            string driverName)
        {
            var timeSpan      = TimeSpan.FromTicks(TimeSpan.TicksPerMinute);
            var referenceTime = new ReferenceTime(timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds);
            var diverLookup   = new Dictionary <DriverCode, string> {
                { driverCodeGenerator.Generate(), driverName }
            };

            Assert.Throws <ArgumentNullException>(() => raceTraceFactory.Build(null, referenceTime, diverLookup));
        }
        public void GetNextAllowedCallTime_WhenOnePreviousCallWasMadeMoreThanTimespanAgo_ReturnsZero(int lastCallMillisecondsAgo)
        {
            var currentDate = new DateTime(2018, 01, 01);

            ReferenceTime.FreezeAtUtc(currentDate);

            var callTracker = new Tracker(_store);

            callTracker.CallWillHappenIn(-lastCallMillisecondsAgo);

            var standardRateLimit = new StandardLimit(1, TimeSpan.FromMilliseconds(lastCallMillisecondsAgo - 100));

            var nextAllowedCallTime = standardRateLimit.GetNextAllowedCallTime(callTracker);

            Assert.Equal(0, nextAllowedCallTime);

            ReferenceTime.Unfreeze();
        }
        public void GetNextAllowedCallTime_WhenOnePreviousCallTrackedForCurrentTime_ShouldBeNowPlusTimespanRange(int millisecondsTimespan)
        {
            var currentDate = new DateTime(2018, 01, 01);

            ReferenceTime.FreezeAtUtc(currentDate);

            var callTracker = new Tracker(_store);

            callTracker.CallWillHappenIn(0);

            var standardRateLimit = new StandardLimit(1, TimeSpan.FromMilliseconds(millisecondsTimespan));

            var nextAllowedCallTime = standardRateLimit.GetNextAllowedCallTime(callTracker);

            Assert.Equal(millisecondsTimespan, nextAllowedCallTime);

            ReferenceTime.Unfreeze();
        }
        public void GetNextAllowedCallTime_ForTwoPreviousCalls_ReturnsCorrectTimespan()
        {
            var currentDate = new DateTime(2018, 01, 01);

            ReferenceTime.FreezeAtUtc(currentDate);

            var callTracker = new Tracker(_store);

            callTracker.CallWillHappenIn(10);
            callTracker.CallWillHappenIn(30);

            var standardRateLimit   = new StandardLimit(2, TimeSpan.FromMilliseconds(100));
            var nextAllowedCallTime = standardRateLimit.GetNextAllowedCallTime(callTracker);

            // 2 calls allowed every 100 milliseconds, so next call should be allowed in 110 milliseconds
            Assert.Equal(110, nextAllowedCallTime);

            ReferenceTime.Unfreeze();
        }
        public void TrimCallsForRateLimits_ForOneRateLimit_KeepsTheMostRecentCalls()
        {
            var now = new DateTime(2018, 01, 01);

            ReferenceTime.FreezeAtUtc(now);

            var callTracker = new Tracker(_store);

            callTracker.CallWillHappenIn(0);
            callTracker.CallWillHappenIn(1000);

            var rateLimit = new StandardLimit(1, TimeSpan.FromSeconds(1));

            callTracker.TrimCallsForRateLimits(rateLimit);

            Assert.Single(callTracker.History);
            Assert.Equal(now.AddMilliseconds(1000), callTracker.History.Single());

            ReferenceTime.Unfreeze();
        }
Beispiel #7
0
        public void BuildRaceTrace_CalculatesTrace_ForSingleDriver(
            RaceTraceFactory raceTraceFactory,
            DriverCodeGenerator driverCodeGenerator,
            LapDataGenerator lapDataGenerator,
            string driverName)
        {
            var driverCode     = driverCodeGenerator.Generate();
            var driverRaceData = new DriverRaceData(driverCode);

            var laps = lapDataGenerator.GenerateLaps(4);

            foreach (var(lapTime, lapData) in laps)
            {
                driverRaceData.AddLap(lapTime, lapData);
            }

            var raceData      = new RaceData(driverRaceData);
            var timeSpan      = TimeSpan.FromTicks(TimeSpan.TicksPerMinute);
            var referenceTime = new ReferenceTime(timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds);
            var diverLookup   = new Dictionary <DriverCode, string> {
                { driverCode, driverName }
            };

            var raceTrace = raceTraceFactory.Build(raceData, referenceTime, diverLookup);

            Assert.NotNull(raceTrace);
            Assert.Equal(1, raceTrace.DriverCodes.Count);

            var traceData = raceTrace.GetDataForDriver(driverCode);

            Assert.NotNull(traceData);

            var traceLapDeltas = traceData.GetAllLaps();

            Assert.Equal(4, traceLapDeltas.Count);
        }
 /// <summary>
 /// Update <see cref="ReferenceTime"/> to observers.
 /// </summary>
 /// <param name="referenceTime">The reference time.</param>
 public void UpdateReferenceTime(ReferenceTime referenceTime)
 {
     _referenceTimeSubject.OnNext(referenceTime);
 }
Beispiel #9
0
        private void CalculateRaceTrace(ReferenceTime referenceTime)
        {
            var traceData = _raceTraceFactory.Build(_raceData, referenceTime, _driveTeamLookup);

            PublishRaceTrace(traceData);
        }
Beispiel #10
0
        //---------------------------------------------------------------------------------------------------------------------

        public override string GetExecutionLogMessage()
        {
            return(String.Format("reference time of last run: {0}", ReferenceTime.ToString(@"yyyy\-MM\-dd\THH\:mm\:ss.fff\Z")));
        }