test: preserve server SDK 2.0 value security and history contracts

This commit is contained in:
Joseph Doherty
2026-11-10 10:37:52 -05:00
parent ac5e9d84f0
commit 9cddc9306b
45 changed files with 1215 additions and 641 deletions
@@ -74,7 +74,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
var ctx = SessionContext(server, "bob", "ReadOnly"); // no AlarmAck
var result = condition!.OnAcknowledge!(ctx, condition, EventIdBytes(), new LocalizedText("nope"));
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied);
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied.Code);
captured.ShouldBeEmpty();
await host.DisposeAsync();
@@ -100,7 +100,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
var ctx = new ServerSystemContext(server.CurrentInstance);
var result = condition!.OnAcknowledge!(ctx, condition, EventIdBytes(), new LocalizedText("x"));
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied);
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied.Code);
captured.ShouldBeEmpty();
await host.DisposeAsync();
@@ -122,7 +122,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
condition!.OnConfirm.ShouldNotBeNull();
var ctx = SessionContext(server, "carol", OpcUaDataPlaneRoles.AlarmAck);
var result = condition.OnConfirm!(ctx, condition, EventIdBytes(), comment: null);
var result = condition.OnConfirm!(ctx, condition, EventIdBytes(), comment: default);
result.ShouldBe(ServiceResult.Good);
captured.Count.ShouldBe(1);
@@ -262,7 +262,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
var ctx = SessionContext(server, "heidi", "ReadOnly"); // no AlarmAck
var result = condition!.OnShelve!(ctx, condition, shelving: true, oneShot: true, shelvingTime: 0.0);
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied);
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied.Code);
captured.ShouldBeEmpty();
await host.DisposeAsync();
@@ -383,7 +383,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
var ctx = new ServerSystemContext(server.CurrentInstance);
var result = condition!.OnEnableDisable!(ctx, condition, enabling: false);
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied);
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied.Code);
captured.ShouldBeEmpty();
await host.DisposeAsync();
@@ -409,7 +409,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
var ctx = SessionContext(server, "kara", OpcUaDataPlaneRoles.AlarmAck);
var result = condition.OnEnableDisable!(ctx, condition, enabling: false);
result.StatusCode.Code.ShouldBe(StatusCodes.BadNotSupported);
result.StatusCode.Code.ShouldBe(StatusCodes.BadNotSupported.Code);
captured.ShouldBeEmpty();
await host.DisposeAsync();
@@ -478,7 +478,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
var ctx = SessionContext(server, "quinn", OpcUaDataPlaneRoles.AlarmAck);
var result = condition!.OnAcknowledge!(ctx, condition, EventIdBytes(), new LocalizedText("ack"));
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied);
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied.Code);
result.LocalizedText.Text.ShouldBe("no Galaxy ack account for an anonymous session");
native.ShouldBeEmpty();
checkedAcks.ShouldHaveSingleItem().ConditionNodeId.ShouldBe("alm-nak5");
@@ -547,7 +547,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
var ctx = SessionContext(server, "pete", "ReadOnly"); // non-null identity, but no AlarmAck
var result = condition!.OnAcknowledge!(ctx, condition, EventIdBytes(), new LocalizedText("nope"));
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied);
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied.Code);
native.ShouldBeEmpty();
scripted.ShouldBeEmpty();
@@ -576,7 +576,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
var ctx = new ServerSystemContext(server.CurrentInstance);
var result = condition!.OnAcknowledge!(ctx, condition, EventIdBytes(), new LocalizedText("x"));
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied);
result.StatusCode.Code.ShouldBe(StatusCodes.BadUserAccessDenied.Code);
native.ShouldBeEmpty();
scripted.ShouldBeEmpty();
@@ -727,7 +727,7 @@ public sealed class AlarmCommandRouterTests : IDisposable
return new ServerSystemContext(server.CurrentInstance) { UserIdentity = identity };
}
private static byte[] EventIdBytes() => Guid.NewGuid().ToByteArray();
private static ByteString EventIdBytes() => ByteString.From(Guid.NewGuid().ToByteArray());
private async Task<(OpcUaApplicationHost Host, OtOpcUaSdkServer Server)> BootAsync()
{