diff --git a/src/Kestrel.Core/Internal/Http/DateHeaderValueManager.cs b/src/Kestrel.Core/Internal/Http/DateHeaderValueManager.cs
index b2cb874364..ee82fd1bc1 100644
--- a/src/Kestrel.Core/Internal/Http/DateHeaderValueManager.cs
+++ b/src/Kestrel.Core/Internal/Http/DateHeaderValueManager.cs
@@ -22,14 +22,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
/// Initializes a new instance of the class.
///
public DateHeaderValueManager()
- : this(systemClock: new SystemClock())
+ : this(DateTimeOffset.UtcNow)
{
}
// Internal for testing
- internal DateHeaderValueManager(ISystemClock systemClock)
+ internal DateHeaderValueManager(DateTimeOffset initialUtcNow)
{
- SetDateValues(systemClock.UtcNow);
+ SetDateValues(initialUtcNow);
}
///
diff --git a/src/Kestrel.Core/Internal/Infrastructure/Heartbeat.cs b/src/Kestrel.Core/Internal/Infrastructure/Heartbeat.cs
index fb0f17d83b..5937002304 100644
--- a/src/Kestrel.Core/Internal/Infrastructure/Heartbeat.cs
+++ b/src/Kestrel.Core/Internal/Infrastructure/Heartbeat.cs
@@ -19,18 +19,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
private Timer _timer;
private int _executingOnHeartbeat;
- public Heartbeat(IHeartbeatHandler[] callbacks, ISystemClock systemClock, IDebugger debugger, IKestrelTrace trace): this(callbacks, systemClock, debugger, trace, Interval)
- {
-
- }
-
- internal Heartbeat(IHeartbeatHandler[] callbacks, ISystemClock systemClock, IDebugger debugger, IKestrelTrace trace, TimeSpan interval)
+ public Heartbeat(IHeartbeatHandler[] callbacks, ISystemClock systemClock, IDebugger debugger, IKestrelTrace trace)
{
_callbacks = callbacks;
_systemClock = systemClock;
_debugger = debugger;
_trace = trace;
- _interval = interval;
+ _interval = Interval;
}
public void Start()
diff --git a/src/Kestrel.Core/Internal/Infrastructure/HeartbeatManager.cs b/src/Kestrel.Core/Internal/Infrastructure/HeartbeatManager.cs
index bc54e73385..98d3585921 100644
--- a/src/Kestrel.Core/Internal/Infrastructure/HeartbeatManager.cs
+++ b/src/Kestrel.Core/Internal/Infrastructure/HeartbeatManager.cs
@@ -11,9 +11,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
private readonly Action _walkCallback;
private DateTimeOffset _now;
- public HeartbeatManager(ConnectionManager connectionManager)
+ public HeartbeatManager(ConnectionManager connectionManager, DateTimeOffset initialUtcNow)
{
_connectionManager = connectionManager;
+ _now = initialUtcNow;
_walkCallback = WalkCallback;
}
diff --git a/src/Kestrel.Core/KestrelServer.cs b/src/Kestrel.Core/KestrelServer.cs
index cc21f738d0..e90188a6eb 100644
--- a/src/Kestrel.Core/KestrelServer.cs
+++ b/src/Kestrel.Core/KestrelServer.cs
@@ -71,8 +71,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
trace,
serverOptions.Limits.MaxConcurrentUpgradedConnections);
- var heartbeatManager = new HeartbeatManager(connectionManager);
- var dateHeaderValueManager = new DateHeaderValueManager(heartbeatManager);
+ var now = DateTimeOffset.UtcNow;
+ var heartbeatManager = new HeartbeatManager(connectionManager, now);
+ var dateHeaderValueManager = new DateHeaderValueManager(now);
var heartbeat = new Heartbeat(
new IHeartbeatHandler[] { dateHeaderValueManager, heartbeatManager },
new SystemClock(),
diff --git a/test/Kestrel.Core.Tests/DateHeaderValueManagerTests.cs b/test/Kestrel.Core.Tests/DateHeaderValueManagerTests.cs
index 3d1e880765..adf2971c2c 100644
--- a/test/Kestrel.Core.Tests/DateHeaderValueManagerTests.cs
+++ b/test/Kestrel.Core.Tests/DateHeaderValueManagerTests.cs
@@ -24,12 +24,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
public void GetDateHeaderValue_ReturnsDateValueInRFC1123Format()
{
var now = DateTimeOffset.UtcNow;
- var systemClock = new MockSystemClock
- {
- UtcNow = now
- };
- var dateHeaderValueManager = new DateHeaderValueManager(systemClock);
+ var dateHeaderValueManager = new DateHeaderValueManager(now);
Assert.Equal(now.ToString(Rfc1123DateFormat), dateHeaderValueManager.GetDateHeaderValues().String);
}
@@ -43,7 +39,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
UtcNow = now
};
- var dateHeaderValueManager = new DateHeaderValueManager(systemClock);
+ var dateHeaderValueManager = new DateHeaderValueManager(now);
var testKestrelTrace = new TestKestrelTrace();
using (var heartbeat = new Heartbeat(new IHeartbeatHandler[] { dateHeaderValueManager }, systemClock, DebuggerWrapper.Singleton, testKestrelTrace))
@@ -53,7 +49,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
Assert.Equal(now.ToString(Rfc1123DateFormat), dateHeaderValueManager.GetDateHeaderValues().String);
}
- Assert.Equal(1, systemClock.UtcNowCalled);
+ Assert.Equal(0, systemClock.UtcNowCalled);
}
[Fact]
@@ -66,7 +62,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
UtcNow = now
};
- var dateHeaderValueManager = new DateHeaderValueManager(systemClock);
+ var dateHeaderValueManager = new DateHeaderValueManager(now);
var testKestrelTrace = new TestKestrelTrace();
var mockHeartbeatHandler = new Mock();
@@ -83,7 +79,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
heartbeat.OnHeartbeat();
Assert.Equal(future.ToString(Rfc1123DateFormat), dateHeaderValueManager.GetDateHeaderValues().String);
- Assert.True(systemClock.UtcNowCalled >= 2);
+ Assert.Equal(2, systemClock.UtcNowCalled);
}
}
@@ -97,7 +93,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
UtcNow = now
};
- var dateHeaderValueManager = new DateHeaderValueManager(systemClock);
+ var dateHeaderValueManager = new DateHeaderValueManager(now);
var testKestrelTrace = new TestKestrelTrace();
using (var heatbeat = new Heartbeat(new IHeartbeatHandler[] { dateHeaderValueManager }, systemClock, DebuggerWrapper.Singleton, testKestrelTrace))
diff --git a/test/Kestrel.InMemory.FunctionalTests/HttpsTests.cs b/test/Kestrel.InMemory.FunctionalTests/HttpsTests.cs
index 9e52de9f12..1f3039abbb 100644
--- a/test/Kestrel.InMemory.FunctionalTests/HttpsTests.cs
+++ b/test/Kestrel.InMemory.FunctionalTests/HttpsTests.cs
@@ -312,7 +312,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests
LoggerFactory.AddProvider(loggerProvider);
var testContext = new TestServiceContext(LoggerFactory);
- var heartbeatManager = new HeartbeatManager(testContext.ConnectionManager);
+ var heartbeatManager = new HeartbeatManager(testContext.ConnectionManager, testContext.SystemClock.UtcNow);
var handshakeStartedTcs = new TaskCompletionSource