| File: CancellationTokenRegistryTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.RemoteHost.Tests\Aspire.Hosting.RemoteHost.Tests.csproj (Aspire.Hosting.RemoteHost.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Xunit; namespace Aspire.Hosting.RemoteHost.Tests; public class CancellationTokenRegistryTests { [Fact] public void Create_ReturnsUniqueTokenId() { using var registry = new CancellationTokenRegistry(); var (id1, _) = registry.Create(); var (id2, _) = registry.Create(); Assert.NotEqual(id1, id2); Assert.StartsWith("ct_", id1); Assert.StartsWith("ct_", id2); } [Fact] public void Create_ReturnsValidCancellationToken() { using var registry = new CancellationTokenRegistry(); var (_, token) = registry.Create(); Assert.False(token.IsCancellationRequested); Assert.True(token.CanBeCanceled); } [Fact] public void CreateLinked_TokenIsCancelledWhenLinkedTokenCancels() { using var registry = new CancellationTokenRegistry(); using var cts = new CancellationTokenSource(); var (_, token) = registry.CreateLinked(cts.Token); Assert.False(token.IsCancellationRequested); cts.Cancel(); Assert.True(token.IsCancellationRequested); } [Fact] public void Cancel_CancelsRegisteredToken() { using var registry = new CancellationTokenRegistry(); var (tokenId, token) = registry.Create(); Assert.False(token.IsCancellationRequested); var result = registry.Cancel(tokenId); Assert.True(result); Assert.True(token.IsCancellationRequested); } [Fact] public void Cancel_ReturnsFalseForUnknownId() { using var registry = new CancellationTokenRegistry(); var result = registry.Cancel("ct_unknown"); Assert.False(result); } [Fact] public void TryGetToken_ReturnsTrueAndTokenForRegisteredId() { using var registry = new CancellationTokenRegistry(); var (tokenId, originalToken) = registry.Create(); var found = registry.TryGetToken(tokenId, out var retrievedToken); Assert.True(found); Assert.Equal(originalToken, retrievedToken); } [Fact] public void TryGetToken_ReturnsFalseForUnknownId() { using var registry = new CancellationTokenRegistry(); var found = registry.TryGetToken("ct_unknown", out var token); Assert.False(found); Assert.Equal(default, token); } [Fact] public void Unregister_RemovesTokenAndReturnsTrue() { using var registry = new CancellationTokenRegistry(); var (tokenId, _) = registry.Create(); var result = registry.Unregister(tokenId); Assert.True(result); Assert.False(registry.TryGetToken(tokenId, out _)); } [Fact] public void Unregister_ReturnsFalseForUnknownId() { using var registry = new CancellationTokenRegistry(); var result = registry.Unregister("ct_unknown"); Assert.False(result); } [Fact] public void Dispose_ClearsAllRegisteredTokens() { var registry = new CancellationTokenRegistry(); var (tokenId1, _) = registry.Create(); var (tokenId2, _) = registry.Create(); registry.Dispose(); // After dispose, TryGetToken should return false Assert.False(registry.TryGetToken(tokenId1, out _)); Assert.False(registry.TryGetToken(tokenId2, out _)); } [Fact] public void Create_ThrowsAfterDispose() { var registry = new CancellationTokenRegistry(); registry.Dispose(); Assert.Throws<ObjectDisposedException>(() => registry.Create()); } [Fact] public void CreateLinked_ThrowsAfterDispose() { var registry = new CancellationTokenRegistry(); registry.Dispose(); Assert.Throws<ObjectDisposedException>(() => registry.CreateLinked(CancellationToken.None)); } }