Exemple #1
0
        public void ExecuteSleepsMinimumTimeToNextSplitByTime()
        {
            // given
            const int nextSplitTimeProxy1 = 120;
            const int nextSplitTimeProxy2 = 100;
            const int currentTime         = 50;

            mockSessionProxy.SplitSessionByTime().Returns(nextSplitTimeProxy1);

            var mockSessionProxy2 = Substitute.For <ISessionProxy>();

            mockSessionProxy2.SplitSessionByTime().Returns(nextSplitTimeProxy2);

            mockTimingProvider.ProvideTimestampInMilliseconds().Returns(currentTime);

            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            targetExplicit.AddToSplitByTimeout(mockSessionProxy);
            targetExplicit.AddToSplitByTimeout(mockSessionProxy2);

            // when
            target.Execute();

            // then
            mockSessionProxy.Received(1).SplitSessionByTime();
            mockSessionProxy2.Received(1).SplitSessionByTime();
            mockThreadSuspender.Received(1).Sleep(nextSplitTimeProxy2 - currentTime);
        }
        public void SetUp()
        {
            mockLogger = Substitute.For <ILogger>();
            mockLogger.IsDebugEnabled.Returns(true);

            mockContext = Substitute.For <ISessionWatchdogContext>();
            mockSession = Substitute.For <ISessionInternals>();

            threadEvent = new ManualResetEvent(false);
        }
Exemple #3
0
        public void CloseOrEnqueueForClosingAddsSessionIfSessionCannotBeClosed()
        {
            // given
            mockSession.TryEnd().Returns(false);
            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            // when
            targetExplicit.CloseOrEnqueueForClosing(mockSession, 17);

            // then
            Assert.That(target.GetSessionsToClose().Count, Is.EqualTo(1));
        }
Exemple #4
0
        public void CloseOrEnqueueForClosingDoesNotAddSessionIfItCanBeClosed()
        {
            // given
            mockSession.TryEnd().Returns(true);
            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            // when
            targetExplicit.CloseOrEnqueueForClosing(mockSession, 0);

            // then
            Assert.That(target.GetSessionsToClose().Count, Is.EqualTo(0));
            mockSession.Received(1).TryEnd();
        }
Exemple #5
0
        public void AddToSplitByTimeOutDoesNotAddSessionProxyIfFinished()
        {
            // given
            mockSessionProxy.IsFinished.Returns(true);

            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            // when
            targetExplicit.AddToSplitByTimeout(mockSessionProxy);

            // then
            Assert.That(target.SessionsToSplitByTimeout.Count, Is.EqualTo(0));
        }
Exemple #6
0
        public void DequeueFromClosingRemovesSession()
        {
            // given
            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            targetExplicit.CloseOrEnqueueForClosing(mockSession, 0);
            Assert.That(target.GetSessionsToClose().Count, Is.EqualTo(1));

            // when
            targetExplicit.DequeueFromClosing(mockSession);

            // then
            Assert.That(target.GetSessionsToClose().Count, Is.EqualTo(0));
        }
Exemple #7
0
        public void RemoveFromSplitByTimeoutRemovesSessionProxy()
        {
            // given
            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            targetExplicit.AddToSplitByTimeout(mockSessionProxy);

            Assert.That(target.SessionsToSplitByTimeout.Count, Is.EqualTo(1));

            // when
            targetExplicit.RemoveFromSplitByTimeout(mockSessionProxy);

            // then
            Assert.That(target.SessionsToSplitByTimeout.Count, Is.EqualTo(0));
        }
Exemple #8
0
        public void ExecuteSleepsDefaultTimeIfSessionProxySplitTimeIsNegativeAndNoFurtherSessionProxyExists()
        {
            // given
            mockSessionProxy.SplitSessionByTime().Returns(-1L);

            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            targetExplicit.AddToSplitByTimeout(mockSessionProxy);

            // when
            target.Execute();

            // then
            mockSessionProxy.Received(1).SplitSessionByTime();
            mockThreadSuspender.Received(1).Sleep(SessionWatchdogContext.DefaultSleepTimeInMillis);
        }
Exemple #9
0
        public void ExecuteDoesNotRemoveSessionProxyIfNextSplitTimeIsNegative()
        {
            // given
            mockSessionProxy.SplitSessionByTime().Returns(10L);

            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            targetExplicit.AddToSplitByTimeout(mockSessionProxy);

            // when
            target.Execute();

            // then
            mockSessionProxy.Received(1).SplitSessionByTime();
            Assert.That(target.SessionsToSplitByTimeout.Count, Is.EqualTo(1));
        }
Exemple #10
0
        public void CloseOrEnqueueForClosingSetsSplitByEventsGracePeriodEndTimeIfSessionCannotBeClosed()
        {
            // given
            const long timestamp   = 10;
            const int  gracePeriod = 5;

            mockTimingProvider.ProvideTimestampInMilliseconds().Returns(timestamp);
            mockSession.TryEnd().Returns(false);
            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            // when
            targetExplicit.CloseOrEnqueueForClosing(mockSession, gracePeriod);

            // then
            mockSession.Received(1).SplitByEventsGracePeriodEndTimeInMillis = (timestamp + gracePeriod);
        }
Exemple #11
0
        public void ExecuteEndsSessionsWithGraceEndTimeSameAsCurrentTime()
        {
            // given
            mockTimingProvider.ProvideTimestampInMilliseconds().Returns(5L);
            mockSession.TryEnd().Returns(false);

            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            targetExplicit.CloseOrEnqueueForClosing(mockSession, 0);

            // when
            target.Execute();

            // then
            mockSession.Received(1).End(false);
            Assert.That(target.GetSessionsToClose().Count, Is.EqualTo(0));
        }
Exemple #12
0
        public void ExecuteDoesNotSleepLongerThanDefaultSleepTimeForDurationToNextSplitByTime()
        {
            // given
            var        nextSplitTime = SessionWatchdogContext.DefaultSleepTimeInMillis + 20;
            const long currentTime   = 5;

            mockSessionProxy.SplitSessionByTime().Returns(nextSplitTime);
            mockTimingProvider.ProvideTimestampInMilliseconds().Returns(currentTime);

            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            targetExplicit.AddToSplitByTimeout(mockSessionProxy);

            // when
            target.Execute();

            // then
            mockSessionProxy.Received(1).SplitSessionByTime();
            mockThreadSuspender.Received(1).Sleep(SessionWatchdogContext.DefaultSleepTimeInMillis);
        }
Exemple #13
0
        public void ExecuteDoesNotEndSessionsWhenGracePeriodIsNotExpired()
        {
            // given
            const int gracePeriod = 1;
            const int now         = 5;

            mockTimingProvider.ProvideTimestampInMilliseconds().Returns(now);
            mockSession.TryEnd().Returns(false);

            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            targetExplicit.CloseOrEnqueueForClosing(mockSession, gracePeriod); // close at now + gracePeriod

            // when
            target.Execute();

            // then
            mockSession.Received(0).End();
            mockSession.Received(1).SplitByEventsGracePeriodEndTimeInMillis = (now + gracePeriod);
            Assert.That(target.GetSessionsToClose().Count, Is.EqualTo(1));
        }
Exemple #14
0
        public void ExecuteSleepsMinimumDurationToNextGracePeriodEnd()
        {
            // given
            const int gracePeriod = 100;
            const int nextSessionProxySplitTime = 200;
            const int currentTime = 50;

            mockSessionProxy.SplitSessionByTime().Returns(nextSessionProxySplitTime);
            mockTimingProvider.ProvideTimestampInMilliseconds().Returns(currentTime);

            var target = CreateContext();
            ISessionWatchdogContext targetExplicit = target;

            targetExplicit.CloseOrEnqueueForClosing(mockSession, gracePeriod);
            targetExplicit.AddToSplitByTimeout(mockSessionProxy);

            // when
            target.Execute();

            // then
            mockSessionProxy.Received(1).SplitSessionByTime();
            mockSession.Received(0).End();
            mockThreadSuspender.Received(1).Sleep(gracePeriod);
        }
 internal SessionWatchdog(ILogger logger, ISessionWatchdogContext context)
 {
     this.logger  = logger;
     this.context = context;
 }