docs: backfill XML documentation across 756 files
v2-ci / build (push) Failing after 1m43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
v2-ci / build (push) Failing after 1m43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
Adds <summary>, <param>, <typeparam>, and <inheritdoc/> tags to public members surfaced by commentchecker — resolves 5,847 of 5,869 issues (99.6%) across three /fixdocs passes.
This commit is contained in:
@@ -47,6 +47,7 @@ public sealed class PermissionTrieBuilderTests
|
||||
Kind = NodeHierarchyKind.Equipment,
|
||||
};
|
||||
|
||||
/// <summary>Verifies that Build with ScopePaths places UnsLine row at correct multi-level node.</summary>
|
||||
[Fact]
|
||||
public void Build_With_ScopePaths_Places_UnsLine_Row_At_Correct_Multi_Level_Node()
|
||||
{
|
||||
@@ -73,6 +74,7 @@ public sealed class PermissionTrieBuilderTests
|
||||
"grant anchored at line-42 must not leak to sibling line-99 under the same area");
|
||||
}
|
||||
|
||||
/// <summary>Verifies that Build without ScopePaths falls back to root child for deterministic tests.</summary>
|
||||
[Fact]
|
||||
public void Build_Without_ScopePaths_Falls_Back_To_Root_Child_For_Tests()
|
||||
{
|
||||
@@ -117,6 +119,7 @@ public sealed class PermissionTrieBuilderTests
|
||||
diagnostics[0].Reason.ShouldBe(PermissionTrieBuildDiagnosticReason.MissingScopePath);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that no diagnostic is emitted when all sub-cluster rows have ScopePaths.</summary>
|
||||
[Fact]
|
||||
public void Build_No_Diagnostic_When_All_Sub_Cluster_Rows_Have_ScopePaths()
|
||||
{
|
||||
@@ -138,6 +141,7 @@ public sealed class PermissionTrieBuilderTests
|
||||
diagnostics.ShouldBeEmpty("no rows are missing a scope-path entry");
|
||||
}
|
||||
|
||||
/// <summary>Verifies that diagnostic callback is optional when ScopePaths is null.</summary>
|
||||
[Fact]
|
||||
public void Build_Diagnostic_Callback_Optional_When_ScopePaths_Null()
|
||||
{
|
||||
|
||||
@@ -13,12 +13,14 @@ public sealed class PermissionTrieCacheTests
|
||||
GenerationId = generation,
|
||||
};
|
||||
|
||||
/// <summary>Verifies that GetTrie returns null when the cache is empty.</summary>
|
||||
[Fact]
|
||||
public void GetTrie_Empty_ReturnsNull()
|
||||
{
|
||||
new PermissionTrieCache().GetTrie("c1").ShouldBeNull();
|
||||
}
|
||||
|
||||
/// <summary>Verifies that a trie installed can be retrieved with matching generation id.</summary>
|
||||
[Fact]
|
||||
public void Install_ThenGet_RoundTrips()
|
||||
{
|
||||
@@ -29,6 +31,7 @@ public sealed class PermissionTrieCacheTests
|
||||
cache.CurrentGenerationId("c1").ShouldBe(5);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that installing a new generation makes it the current generation.</summary>
|
||||
[Fact]
|
||||
public void NewGeneration_BecomesCurrent()
|
||||
{
|
||||
@@ -41,6 +44,7 @@ public sealed class PermissionTrieCacheTests
|
||||
cache.GetTrie("c1", 2).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
/// <summary>Verifies that out-of-order installs do not downgrade the current generation.</summary>
|
||||
[Fact]
|
||||
public void OutOfOrder_Install_DoesNotDowngrade_Current()
|
||||
{
|
||||
@@ -52,6 +56,7 @@ public sealed class PermissionTrieCacheTests
|
||||
cache.GetTrie("c1", 1).ShouldNotBeNull("but older is still retrievable by explicit lookup");
|
||||
}
|
||||
|
||||
/// <summary>Verifies that Invalidate drops only the specified cluster.</summary>
|
||||
[Fact]
|
||||
public void Invalidate_DropsCluster()
|
||||
{
|
||||
@@ -65,6 +70,7 @@ public sealed class PermissionTrieCacheTests
|
||||
cache.GetTrie("c2").ShouldNotBeNull("sibling cluster unaffected");
|
||||
}
|
||||
|
||||
/// <summary>Verifies that Prune retains the most recent generations.</summary>
|
||||
[Fact]
|
||||
public void Prune_RetainsMostRecent()
|
||||
{
|
||||
@@ -79,6 +85,7 @@ public sealed class PermissionTrieCacheTests
|
||||
cache.GetTrie("c1", 1).ShouldBeNull();
|
||||
}
|
||||
|
||||
/// <summary>Verifies that Prune with keepLatest greater than the cache size is a no-op.</summary>
|
||||
[Fact]
|
||||
public void Prune_LessThanKeep_IsNoOp()
|
||||
{
|
||||
@@ -91,6 +98,7 @@ public sealed class PermissionTrieCacheTests
|
||||
cache.CachedTrieCount.ShouldBe(2);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that different clusters maintain independent generation tracking.</summary>
|
||||
[Fact]
|
||||
public void ClusterIsolation()
|
||||
{
|
||||
@@ -125,6 +133,7 @@ public sealed class PermissionTrieCacheTests
|
||||
cache.GetTrie("c1", 4).ShouldBeNull("generation 4 was pruned");
|
||||
}
|
||||
|
||||
/// <summary>Verifies that the current generation pointer is preserved after pruning.</summary>
|
||||
[Fact]
|
||||
public void Prune_Current_Pointer_Survives_Pruning()
|
||||
{
|
||||
|
||||
@@ -43,6 +43,7 @@ public sealed class PermissionTrieTests
|
||||
Kind = NodeHierarchyKind.SystemPlatform,
|
||||
};
|
||||
|
||||
/// <summary>Verifies cluster-level grant cascades to every tag.</summary>
|
||||
[Fact]
|
||||
public void ClusterLevelGrant_Cascades_ToEveryTag()
|
||||
{
|
||||
@@ -58,6 +59,7 @@ public sealed class PermissionTrieTests
|
||||
matches[0].Scope.ShouldBe(NodeAclScopeKind.Cluster);
|
||||
}
|
||||
|
||||
/// <summary>Verifies equipment-scope grant does not leak to sibling.</summary>
|
||||
[Fact]
|
||||
public void EquipmentScope_DoesNotLeak_ToSibling()
|
||||
{
|
||||
@@ -75,6 +77,7 @@ public sealed class PermissionTrieTests
|
||||
matchB.ShouldBeEmpty("grant at eq-A must not apply to sibling eq-B");
|
||||
}
|
||||
|
||||
/// <summary>Verifies multiple groups union their permission flags.</summary>
|
||||
[Fact]
|
||||
public void MultiGroup_Union_OrsPermissionFlags()
|
||||
{
|
||||
@@ -94,6 +97,7 @@ public sealed class PermissionTrieTests
|
||||
combined.ShouldBe(NodePermissions.Read | NodePermissions.WriteOperate);
|
||||
}
|
||||
|
||||
/// <summary>Verifies no matching group returns empty.</summary>
|
||||
[Fact]
|
||||
public void NoMatchingGroup_ReturnsEmpty()
|
||||
{
|
||||
@@ -107,6 +111,7 @@ public sealed class PermissionTrieTests
|
||||
matches.ShouldBeEmpty();
|
||||
}
|
||||
|
||||
/// <summary>Verifies Galaxy folder segment grant does not leak to sibling folder.</summary>
|
||||
[Fact]
|
||||
public void Galaxy_FolderSegment_Grant_DoesNotLeak_To_Sibling_Folder()
|
||||
{
|
||||
@@ -147,6 +152,7 @@ public sealed class PermissionTrieTests
|
||||
"the trie walk reports the structural level where the grant was found — FolderSegment for Galaxy, not Equipment");
|
||||
}
|
||||
|
||||
/// <summary>Verifies Galaxy deep folder path all segments report folder segment scope.</summary>
|
||||
[Fact]
|
||||
public void Galaxy_DeepFolderPath_AllSegments_Report_FolderSegment_Scope()
|
||||
{
|
||||
@@ -173,6 +179,7 @@ public sealed class PermissionTrieTests
|
||||
"every matched folder level must report FolderSegment, never Equipment");
|
||||
}
|
||||
|
||||
/// <summary>Verifies cross-cluster grant does not leak.</summary>
|
||||
[Fact]
|
||||
public void CrossCluster_Grant_DoesNotLeak()
|
||||
{
|
||||
@@ -186,6 +193,7 @@ public sealed class PermissionTrieTests
|
||||
matches.ShouldBeEmpty("rows for cluster c-other must not land in c1's trie");
|
||||
}
|
||||
|
||||
/// <summary>Verifies build is idempotent.</summary>
|
||||
[Fact]
|
||||
public void Build_IsIdempotent()
|
||||
{
|
||||
|
||||
@@ -15,7 +15,10 @@ public sealed class TriePermissionEvaluatorTests
|
||||
|
||||
private sealed class FakeTimeProvider : TimeProvider
|
||||
{
|
||||
/// <summary>Gets or sets the current UTC time.</summary>
|
||||
public DateTime Utc { get; set; } = Now;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override DateTimeOffset GetUtcNow() => new(Utc, TimeSpan.Zero);
|
||||
}
|
||||
|
||||
@@ -62,6 +65,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
return new TriePermissionEvaluator(cache, _time);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that authorization is allowed when required permission flags are matched.</summary>
|
||||
[Fact]
|
||||
public void Allow_When_RequiredFlag_Matched()
|
||||
{
|
||||
@@ -73,6 +77,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
decision.Provenance.Count.ShouldBe(1);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that authorization is denied when no matching group is found.</summary>
|
||||
[Fact]
|
||||
public void NotGranted_When_NoMatchingGroup()
|
||||
{
|
||||
@@ -84,6 +89,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
decision.Provenance.ShouldBeEmpty();
|
||||
}
|
||||
|
||||
/// <summary>Verifies that authorization is denied when permission flags are insufficient.</summary>
|
||||
[Fact]
|
||||
public void NotGranted_When_FlagsInsufficient()
|
||||
{
|
||||
@@ -94,6 +100,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
decision.Verdict.ShouldBe(AuthorizationVerdict.NotGranted);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that HistoryRead permission requires its own flag and is not implied by Read.</summary>
|
||||
[Fact]
|
||||
public void HistoryRead_Requires_Its_Own_Bit()
|
||||
{
|
||||
@@ -107,6 +114,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
historyRead.IsAllowed.ShouldBeFalse("HistoryRead uses its own NodePermissions flag, not Read");
|
||||
}
|
||||
|
||||
/// <summary>Verifies that cross-cluster sessions are denied.</summary>
|
||||
[Fact]
|
||||
public void CrossCluster_Session_Denied()
|
||||
{
|
||||
@@ -118,6 +126,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
decision.Verdict.ShouldBe(AuthorizationVerdict.NotGranted);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that stale sessions fail closed.</summary>
|
||||
[Fact]
|
||||
public void StaleSession_FailsClosed()
|
||||
{
|
||||
@@ -130,6 +139,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
decision.Verdict.ShouldBe(AuthorizationVerdict.NotGranted);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that authorization is denied when no cached trie exists for the cluster.</summary>
|
||||
[Fact]
|
||||
public void NoCachedTrie_ForCluster_Denied()
|
||||
{
|
||||
@@ -141,6 +151,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
decision.Verdict.ShouldBe(AuthorizationVerdict.NotGranted);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that stale generations evaluate against their bound session generation.</summary>
|
||||
[Fact]
|
||||
public void StaleGeneration_EvaluatesAgainst_SessionBoundGeneration()
|
||||
{
|
||||
@@ -161,6 +172,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
decision.Provenance.Count.ShouldBe(1);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that stale generations fail closed when the bound generation is pruned.</summary>
|
||||
[Fact]
|
||||
public void StaleGeneration_FailsClosed_WhenBoundGenerationPruned()
|
||||
{
|
||||
@@ -179,6 +191,7 @@ public sealed class TriePermissionEvaluatorTests
|
||||
"a session bound to a generation absent from the cache must fail closed");
|
||||
}
|
||||
|
||||
/// <summary>Verifies that the operation-to-permission mapping is total.</summary>
|
||||
[Fact]
|
||||
public void OperationToPermission_Mapping_IsTotal()
|
||||
{
|
||||
|
||||
@@ -19,6 +19,7 @@ public sealed class UserAuthorizationStateTests
|
||||
MembershipVersion = 1,
|
||||
};
|
||||
|
||||
/// <summary>Verifies that freshly resolved authorization state is neither stale nor needs refresh.</summary>
|
||||
[Fact]
|
||||
public void FreshlyResolved_Is_NotStale_NorNeedsRefresh()
|
||||
{
|
||||
@@ -28,6 +29,7 @@ public sealed class UserAuthorizationStateTests
|
||||
session.NeedsRefresh(Now.AddMinutes(1)).ShouldBeFalse();
|
||||
}
|
||||
|
||||
/// <summary>Verifies that refresh flag fires after the freshness interval expires.</summary>
|
||||
[Fact]
|
||||
public void NeedsRefresh_FiresAfter_FreshnessInterval()
|
||||
{
|
||||
@@ -36,6 +38,7 @@ public sealed class UserAuthorizationStateTests
|
||||
session.NeedsRefresh(Now.AddMinutes(16)).ShouldBeFalse("past freshness but also past the 15-min staleness ceiling — should be Stale, not NeedsRefresh");
|
||||
}
|
||||
|
||||
/// <summary>Verifies that the refresh flag fires within the production default freshness and staleness windows.</summary>
|
||||
[Fact]
|
||||
public void NeedsRefresh_FiresWithin_ProductionDefault_Windows()
|
||||
{
|
||||
@@ -50,6 +53,7 @@ public sealed class UserAuthorizationStateTests
|
||||
session.IsStale(Now.AddMinutes(10)).ShouldBeFalse("10 min is still within the 15-min staleness ceiling");
|
||||
}
|
||||
|
||||
/// <summary>Verifies that the refresh flag is true between the freshness and staleness windows.</summary>
|
||||
[Fact]
|
||||
public void NeedsRefresh_TrueBetween_Freshness_And_Staleness_Windows()
|
||||
{
|
||||
@@ -64,6 +68,7 @@ public sealed class UserAuthorizationStateTests
|
||||
session.IsStale(Now.AddMinutes(5)).ShouldBeFalse();
|
||||
}
|
||||
|
||||
/// <summary>Verifies that the stale flag is true after the staleness window expires.</summary>
|
||||
[Fact]
|
||||
public void IsStale_TrueAfter_StalenessWindow()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user