Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,11 @@ public async Task CertificateOptions_update_on_changed_contents(string certifica
var optionsMonitor = serviceProvider.GetRequiredService<IOptionsMonitor<CertificateOptions>>();
optionsMonitor.Get(certificateName).Certificate.Should().BeEquivalentTo(firstX509);

await File.WriteAllTextAsync(certificateFilePath, secondCertificateContent, TestContext.Current.CancellationToken);
await File.WriteAllTextAsync(privateKeyFilePath, secondPrivateKeyContent, TestContext.Current.CancellationToken);

using Task pollTask = WaitUntilCertificateChangedToAsync(secondX509, optionsMonitor, certificateName, TestContext.Current.CancellationToken);
await pollTask.WaitAsync(TimeSpan.FromSeconds(5), TestContext.Current.CancellationToken);
await WaitUntilCertificateChangedToAsync(certificateName, secondX509, optionsMonitor, async () =>
{
await File.WriteAllTextAsync(certificateFilePath, secondCertificateContent, TestContext.Current.CancellationToken);
await File.WriteAllTextAsync(privateKeyFilePath, secondPrivateKeyContent, TestContext.Current.CancellationToken);
});

optionsMonitor.Get(certificateName).Certificate.Should().Be(secondX509);
}
Expand Down Expand Up @@ -200,11 +200,11 @@ public async Task CertificateOptions_update_on_changed_path(string certificateNa
var optionsMonitor = serviceProvider.GetRequiredService<IOptionsMonitor<CertificateOptions>>();
optionsMonitor.Get(certificateName).Certificate.Should().BeEquivalentTo(firstX509);

appSettings = BuildAppSettingsJson(certificateName, "secondInstance.crt", "secondInstance.key");
await File.WriteAllTextAsync(appSettingsPath, appSettings, TestContext.Current.CancellationToken);

using Task pollTask = WaitUntilCertificateChangedToAsync(secondX509, optionsMonitor, certificateName, TestContext.Current.CancellationToken);
await pollTask.WaitAsync(TimeSpan.FromSeconds(1), TestContext.Current.CancellationToken);
await WaitUntilCertificateChangedToAsync(certificateName, secondX509, optionsMonitor, async () =>
{
appSettings = BuildAppSettingsJson(certificateName, "secondInstance.crt", "secondInstance.key");
await File.WriteAllTextAsync(appSettingsPath, appSettings, TestContext.Current.CancellationToken);
});

optionsMonitor.Get(certificateName).Certificate.Should().Be(secondX509);
}
Expand Down Expand Up @@ -235,13 +235,21 @@ private static string BuildAppSettingsJson(string certificateName, string certif
""";
}

private static async Task WaitUntilCertificateChangedToAsync(X509Certificate2 expectedCertificate, IOptionsMonitor<CertificateOptions> optionsMonitor,
string certificateName, CancellationToken cancellationToken)
private static async Task WaitUntilCertificateChangedToAsync(string certificateName, X509Certificate2 expectedCertificate,
IOptionsMonitor<CertificateOptions> optionsMonitor, Func<Task> triggerAction)
{
while (!Equals(optionsMonitor.Get(certificateName).Certificate, expectedCertificate))
var completionSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);

using IDisposable? changeListener = optionsMonitor.OnChange((options, name) =>
{
await Task.Delay(50, cancellationToken);
}
if (name == certificateName && Equals(options.Certificate, expectedCertificate))
{
completionSource.TrySetResult();
}
});

await triggerAction();
await completionSource.Task.WaitAsync(TimeSpan.FromSeconds(5), TestContext.Current.CancellationToken);
}

private static string GetConfigurationKey(string? optionName, string propertyName)
Expand Down
Loading