예제 #1
0
        public void Task_should_complete_when_early_heartbeat_is_requested()
        {
            var subject = new HeartbeatDelay(TimeSpan.FromHours(10), TimeSpan.FromMilliseconds(1));

            subject.RequestHeartbeat();

            subject.Task.Wait(TimeSpan.FromSeconds(1)).Should().BeTrue();
        }
        public void Task_should_complete_when_early_heartbeat_is_requested()
        {
            var subject = new HeartbeatDelay(TimeSpan.FromHours(10), TimeSpan.FromMilliseconds(1));

            subject.RequestHeartbeat();

            subject.Task.Wait(TimeSpan.FromSeconds(1)).Should().BeTrue();
        }
예제 #3
0
        public void RequestHeartbeat_should_respect_to_minHeartbeatInterval([Values(10, -1)] int heartbeatIntervalInMinutes)
        {
            var heartbeatInterval = heartbeatIntervalInMinutes == -1 ? Timeout.InfiniteTimeSpan : TimeSpan.FromMinutes(heartbeatIntervalInMinutes);
            var subject           = new HeartbeatDelay(heartbeatInterval, TimeSpan.FromSeconds(2));

            subject.RequestHeartbeat();

            SpinWait.SpinUntil(() => subject.Task.Status != TaskStatus.WaitingForActivation, TimeSpan.FromMilliseconds(1500)).Should().BeFalse();
            Thread.Sleep(TimeSpan.FromMilliseconds(700));
            subject.Task.Status.Should().Be(TaskStatus.RanToCompletion);
        }
        public void RequestHeartbeat_should_respect_to_minHeartbeatInterval([Values(10, -1)] int heartbeatIntervalInMinutes)
        {
            var heartbeatInterval    = heartbeatIntervalInMinutes == -1 ? Timeout.InfiniteTimeSpan : TimeSpan.FromMinutes(heartbeatIntervalInMinutes);
            var minHeartbeatInterval = TimeSpan.FromSeconds(2);

            var stopwatch = Stopwatch.StartNew();
            var subject   = new HeartbeatDelay(heartbeatInterval, minHeartbeatInterval);

            subject.RequestHeartbeat();
            var timeout = TimeSpan.FromMinutes(1);
            var result  = Task.WaitAny(subject.Task, Task.Delay(timeout));

            if (result != 0)
            {
                throw new Exception($"The test timeout {timeout} is exceeded.");
            }
            stopwatch.Stop();

            stopwatch.Elapsed.Should().BeGreaterOrEqualTo(minHeartbeatInterval - TimeSpan.FromMilliseconds(15));
        }