Files
lmxopcua/tests/Server/ZB.MOM.WW.OtOpcUa.AdminUI.Tests/Browsing/BrowseSessionRegistryTests.cs
Joseph Doherty bd6c0b4d3d docs: complete XML doc comments via fixdocs (2757 to 131 findings)
Add missing <returns>/<param>/<summary>/<typeparam> tags and clean up
misused inheritdoc across 481 files so the documented API surface is
complete. Documentation-only (zero code lines changed). The 131 remaining
findings are inheritdoc-style warnings deliberately left to preserve
hand-written implementation rationale (plan-decision notes, race-condition
explanations).
2026-06-03 12:34:34 -04:00

68 lines
2.5 KiB
C#

using Shouldly;
using Xunit;
using ZB.MOM.WW.OtOpcUa.AdminUI.Browsing;
using ZB.MOM.WW.OtOpcUa.Commons.Browsing;
namespace ZB.MOM.WW.OtOpcUa.AdminUI.Tests.Browsing;
/// <summary>Unit tests for <see cref="BrowseSessionRegistry"/>'s lookup, removal and
/// concurrent-registration behaviour.</summary>
public sealed class BrowseSessionRegistryTests
{
/// <summary>Verifies that a registered session can be retrieved by its token.</summary>
[Fact]
public void Register_then_TryGet_returns_session()
{
var registry = new BrowseSessionRegistry();
var session = new FakeBrowseSession();
registry.Register(session);
var found = registry.TryGet(session.Token, out var got);
found.ShouldBeTrue();
got.ShouldBeSameAs((IBrowseSession)session);
}
/// <summary>Verifies that looking up an unknown token returns false.</summary>
[Fact]
public void TryGet_unknown_returns_false()
{
var registry = new BrowseSessionRegistry();
registry.TryGet(Guid.NewGuid(), out var got).ShouldBeFalse();
got.ShouldBeNull();
}
/// <summary>Verifies that a removed session can no longer be retrieved.</summary>
[Fact]
public void TryRemove_then_TryGet_returns_false()
{
var registry = new BrowseSessionRegistry();
var session = new FakeBrowseSession();
registry.Register(session);
registry.TryRemove(session.Token, out var removed).ShouldBeTrue();
removed.ShouldBeSameAs((IBrowseSession)session);
registry.TryGet(session.Token, out _).ShouldBeFalse();
}
/// <summary>Verifies that concurrent registrations from many tasks are all visible in the snapshot.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Concurrent_Register_from_many_tasks_all_visible_in_Snapshot()
{
var registry = new BrowseSessionRegistry();
const int count = 50;
var sessions = Enumerable.Range(0, count).Select(_ => new FakeBrowseSession()).ToArray();
var tasks = sessions.Select(s => Task.Run(() => registry.Register(s))).ToArray();
await Task.WhenAll(tasks);
var snapshot = registry.Snapshot();
snapshot.Count.ShouldBe(count);
var snapshotTokens = snapshot.Select(x => x.Token).OrderBy(g => g).ToArray();
var expectedTokens = sessions.Select(s => s.Token).OrderBy(g => g).ToArray();
snapshotTokens.ShouldBe(expectedTokens);
}
}