Skip to content

Commit 54a9c75

Browse files
committed
appcontext
1 parent 8dc51f8 commit 54a9c75

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

src/Servers/HttpSys/src/RequestProcessing/TlsListener.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,30 @@ internal sealed partial class TlsListener : IDisposable
1818
private readonly Task _cleanupTask;
1919
private readonly TimeProvider _timeProvider;
2020

21-
private static readonly TimeSpan ConnectionIdleTime = TimeSpan.FromMinutes(5);
22-
private static readonly TimeSpan CleanupDelay = TimeSpan.FromSeconds(10);
23-
internal const int CacheSizeLimit = 1_000_000;
21+
private readonly TimeSpan ConnectionIdleTime = TimeSpan.FromMinutes(5);
22+
private readonly TimeSpan CleanupDelay = TimeSpan.FromSeconds(10);
23+
internal readonly int CacheSizeLimit = 1_000_000;
2424

2525
// Internal for testing purposes
2626
internal ReadOnlyDictionary<ulong, DateTimeOffset> ConnectionTimeStamps => _connectionTimestamps.AsReadOnly();
2727

2828
internal TlsListener(ILogger logger, Action<IFeatureCollection, ReadOnlySpan<byte>> tlsClientHelloBytesCallback, TimeProvider? timeProvider = null)
2929
{
30+
if (AppContext.GetData("Microsoft.AspNetCore.Server.HttpSys.TlsListener.CacheSizeLimit") is int limit)
31+
{
32+
CacheSizeLimit = limit;
33+
}
34+
35+
if (AppContext.GetData("Microsoft.AspNetCore.Server.HttpSys.TlsListener.ConnectionIdleTime") is int idleTime)
36+
{
37+
ConnectionIdleTime = TimeSpan.FromSeconds(idleTime);
38+
}
39+
40+
if (AppContext.GetData("Microsoft.AspNetCore.Server.HttpSys.TlsListener.CleanupDelay") is int cleanupDelay)
41+
{
42+
CleanupDelay = TimeSpan.FromSeconds(cleanupDelay);
43+
}
44+
3045
_logger = logger;
3146
_tlsClientHelloBytesCallback = tlsClientHelloBytesCallback;
3247

src/Servers/HttpSys/test/FunctionalTests/TlsListenerTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,14 @@ public async Task EvictsOldestConnectionsWhenExceedingCacheSizeLimit()
100100
var features = Mock.Of<IFeatureCollection>();
101101

102102
ulong i = 0;
103-
for (; i < TlsListener.CacheSizeLimit; i++)
103+
for (; i < (ulong)tlsListener.CacheSizeLimit; i++)
104104
{
105105
tlsListener.InvokeTlsClientHelloCallback(i, features, (f, cb) => { cb(f, ReadOnlySpan<byte>.Empty); return true; });
106106
}
107107

108108
timeProvider.Advance(TimeSpan.FromSeconds(5));
109109

110-
for (; i < TlsListener.CacheSizeLimit + 3; i++)
110+
for (; i < (ulong)tlsListener.CacheSizeLimit + 3; i++)
111111
{
112112
tlsListener.InvokeTlsClientHelloCallback(i, features, (f, cb) => { cb(f, ReadOnlySpan<byte>.Empty); return true; });
113113
}
@@ -122,15 +122,15 @@ public async Task EvictsOldestConnectionsWhenExceedingCacheSizeLimit()
122122
while (timeout > TimeSpan.Zero)
123123
{
124124
// Wait for the cleanup loop to run
125-
if (tlsListener.ConnectionTimeStamps.Count == TlsListener.CacheSizeLimit)
125+
if (tlsListener.ConnectionTimeStamps.Count == tlsListener.CacheSizeLimit)
126126
{
127127
break;
128128
}
129129
timeout -= TimeSpan.FromMilliseconds(100);
130130
await Task.Delay(100);
131131
}
132132

133-
Assert.Equal(TlsListener.CacheSizeLimit, tlsListener.ConnectionTimeStamps.Count);
133+
Assert.Equal(tlsListener.CacheSizeLimit, tlsListener.ConnectionTimeStamps.Count);
134134
Assert.Contains(0UL, tlsListener.ConnectionTimeStamps.Keys);
135135
// 3 newest connections should be present
136136
Assert.Contains(i - 1, tlsListener.ConnectionTimeStamps.Keys);

0 commit comments

Comments
 (0)