Skip to content

Commit 03b68a7

Browse files
committed
Make ReloadsOnConfigurationChangeByDefault more reliable
1 parent 4b9f2bc commit 03b68a7

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

src/Servers/Kestrel/Core/test/KestrelServerTests.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -466,12 +466,21 @@ public async Task ReloadsOnConfigurationChangeByDefault()
466466
new KeyValuePair<string, string>("Endpoints:B:Url", "http://*:5001"),
467467
}).Build();
468468

469-
Action changeCallback = null;
469+
Func<Task> changeCallback = null;
470+
TaskCompletionSource<object> changeCallbackRegisteredTcs = null;
470471

471472
var mockChangeToken = new Mock<IChangeToken>();
472473
mockChangeToken.Setup(t => t.RegisterChangeCallback(It.IsAny<Action<object>>(), It.IsAny<object>())).Returns<Action<object>, object>((callback, state) =>
473474
{
474-
changeCallback = () => callback(state);
475+
changeCallbackRegisteredTcs?.SetResult(null);
476+
477+
changeCallback = () =>
478+
{
479+
changeCallbackRegisteredTcs = new TaskCompletionSource<object>(TaskCreationOptions.RunContinuationsAsynchronously);
480+
callback(state);
481+
return changeCallbackRegisteredTcs.Task;
482+
};
483+
475484
return Mock.Of<IDisposable>();
476485
});
477486

@@ -505,7 +514,8 @@ public async Task ReloadsOnConfigurationChangeByDefault()
505514
.Setup(transport => transport.AcceptAsync(It.IsAny<CancellationToken>()))
506515
.Returns(new ValueTask<ConnectionContext>(result: null));
507516
mockTransport
508-
.Setup(transport => transport.EndPoint).Returns(e);
517+
.Setup(transport => transport.EndPoint)
518+
.Returns(e);
509519

510520
mockTransports.Add(mockTransport);
511521

@@ -536,7 +546,7 @@ public async Task ReloadsOnConfigurationChangeByDefault()
536546
new KeyValuePair<string, string>("Endpoints:C:Url", "http://*:5003"),
537547
}).Build();
538548

539-
changeCallback();
549+
await changeCallback().DefaultTimeout();
540550

541551
mockTransportFactory.Verify(f => f.BindAsync(new IPEndPoint(IPAddress.IPv6Any, 5000), It.IsAny<CancellationToken>()), Times.Once);
542552
mockTransportFactory.Verify(f => f.BindAsync(new IPEndPoint(IPAddress.IPv6Any, 5001), It.IsAny<CancellationToken>()), Times.Once);
@@ -564,7 +574,7 @@ public async Task ReloadsOnConfigurationChangeByDefault()
564574
new KeyValuePair<string, string>("Endpoints:C:Url", "https://*:5003"),
565575
}).Build();
566576

567-
changeCallback();
577+
await changeCallback().DefaultTimeout();
568578

569579
mockTransportFactory.Verify(f => f.BindAsync(new IPEndPoint(IPAddress.IPv6Any, 5000), It.IsAny<CancellationToken>()), Times.Once);
570580
mockTransportFactory.Verify(f => f.BindAsync(new IPEndPoint(IPAddress.IPv6Any, 5001), It.IsAny<CancellationToken>()), Times.Once);

0 commit comments

Comments
 (0)