@@ -22,16 +22,17 @@ public void HeartbeatIntervalIsOneSecond()
22
22
}
23
23
24
24
[ Fact ]
25
- public async Task BlockedHeartbeatDoesntCauseOverlapsAndIsLoggedAsError ( )
25
+ public async Task HeartbeatTakingLongerThanIntervalIsLoggedAsError ( )
26
26
{
27
27
var systemClock = new MockSystemClock ( ) ;
28
28
var heartbeatHandler = new Mock < IHeartbeatHandler > ( ) ;
29
29
var debugger = new Mock < IDebugger > ( ) ;
30
30
var kestrelTrace = new Mock < IKestrelTrace > ( ) ;
31
31
var handlerMre = new ManualResetEventSlim ( ) ;
32
32
var handlerStartedTcs = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
33
+ var now = systemClock . UtcNow ;
33
34
34
- heartbeatHandler . Setup ( h => h . OnHeartbeat ( systemClock . UtcNow ) ) . Callback ( ( ) =>
35
+ heartbeatHandler . Setup ( h => h . OnHeartbeat ( now ) ) . Callback ( ( ) =>
35
36
{
36
37
handlerStartedTcs . SetResult ( null ) ;
37
38
handlerMre . Wait ( ) ;
@@ -45,29 +46,31 @@ public async Task BlockedHeartbeatDoesntCauseOverlapsAndIsLoggedAsError()
45
46
blockedHeartbeatTask = Task . Run ( ( ) => heartbeat . OnHeartbeat ( ) ) ;
46
47
47
48
await handlerStartedTcs . Task . DefaultTimeout ( ) ;
48
-
49
- heartbeat . OnHeartbeat ( ) ;
50
49
}
51
50
51
+ // 2 seconds passes...
52
+ systemClock . UtcNow = systemClock . UtcNow . AddSeconds ( 2 ) ;
53
+
52
54
handlerMre . Set ( ) ;
53
55
54
56
await blockedHeartbeatTask . DefaultTimeout ( ) ;
55
57
56
- heartbeatHandler . Verify ( h => h . OnHeartbeat ( systemClock . UtcNow ) , Times . Once ( ) ) ;
57
- kestrelTrace . Verify ( t => t . HeartbeatSlow ( TimeSpan . Zero , Heartbeat . Interval , systemClock . UtcNow ) , Times . Once ( ) ) ;
58
+ heartbeatHandler . Verify ( h => h . OnHeartbeat ( now ) , Times . Once ( ) ) ;
59
+ kestrelTrace . Verify ( t => t . HeartbeatSlow ( TimeSpan . FromSeconds ( 2 ) , Heartbeat . Interval , now ) , Times . Once ( ) ) ;
58
60
}
59
61
60
62
[ Fact ]
61
- public async Task BlockedHeartbeatIsNotLoggedAsErrorIfDebuggerAttached ( )
63
+ public async Task HeartbeatTakingLongerThanIntervalIsNotLoggedAsErrorIfDebuggerAttached ( )
62
64
{
63
65
var systemClock = new MockSystemClock ( ) ;
64
66
var heartbeatHandler = new Mock < IHeartbeatHandler > ( ) ;
65
67
var debugger = new Mock < IDebugger > ( ) ;
66
68
var kestrelTrace = new Mock < IKestrelTrace > ( ) ;
67
69
var handlerMre = new ManualResetEventSlim ( ) ;
68
70
var handlerStartedTcs = new TaskCompletionSource < object > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
71
+ var now = systemClock . UtcNow ;
69
72
70
- heartbeatHandler . Setup ( h => h . OnHeartbeat ( systemClock . UtcNow ) ) . Callback ( ( ) =>
73
+ heartbeatHandler . Setup ( h => h . OnHeartbeat ( now ) ) . Callback ( ( ) =>
71
74
{
72
75
handlerStartedTcs . SetResult ( null ) ;
73
76
handlerMre . Wait ( ) ;
@@ -82,16 +85,17 @@ public async Task BlockedHeartbeatIsNotLoggedAsErrorIfDebuggerAttached()
82
85
blockedHeartbeatTask = Task . Run ( ( ) => heartbeat . OnHeartbeat ( ) ) ;
83
86
84
87
await handlerStartedTcs . Task . DefaultTimeout ( ) ;
85
-
86
- heartbeat . OnHeartbeat ( ) ;
87
88
}
88
89
90
+ // 2 seconds passes...
91
+ systemClock . UtcNow = systemClock . UtcNow . AddSeconds ( 2 ) ;
92
+
89
93
handlerMre . Set ( ) ;
90
94
91
95
await blockedHeartbeatTask . DefaultTimeout ( ) ;
92
96
93
- heartbeatHandler . Verify ( h => h . OnHeartbeat ( systemClock . UtcNow ) , Times . Once ( ) ) ;
94
- kestrelTrace . Verify ( t => t . HeartbeatSlow ( TimeSpan . Zero , Heartbeat . Interval , systemClock . UtcNow ) , Times . Never ( ) ) ;
97
+ heartbeatHandler . Verify ( h => h . OnHeartbeat ( now ) , Times . Once ( ) ) ;
98
+ kestrelTrace . Verify ( t => t . HeartbeatSlow ( TimeSpan . FromSeconds ( 2 ) , Heartbeat . Interval , now ) , Times . Never ( ) ) ;
95
99
}
96
100
97
101
[ Fact ]
0 commit comments