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); }
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)); }
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(); }
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)); }
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)); }
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)); }
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); }
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)); }
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); }
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)); }
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); }
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)); }
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; }