Files
lmxopcua/tests/Server/ZB.MOM.WW.OtOpcUa.AdminUI.Tests/HistorianWonderwareDriverPageFormSerializationTests.cs
T
2026-05-28 09:55:15 -04:00

84 lines
2.8 KiB
C#

using System.Text.Json;
using System.Text.Json.Serialization;
using Shouldly;
using Xunit;
using ZB.MOM.WW.OtOpcUa.Driver.Historian.Wonderware.Client;
namespace ZB.MOM.WW.OtOpcUa.AdminUI.Tests;
public sealed class HistorianWonderwareDriverPageFormSerializationTests
{
private static readonly JsonSerializerOptions _opts = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = false,
};
[Fact]
public void RoundTrip_PreservesKnownFields()
{
var original = new WonderwareHistorianClientOptions(
PipeName: "otopcua-historian-prod",
SharedSecret: "t0ps3cr3t",
PeerName: "OtOpcUa-Primary",
ConnectTimeout: TimeSpan.FromSeconds(20),
CallTimeout: TimeSpan.FromSeconds(60))
{
ProbeTimeoutSeconds = 25,
};
var json = JsonSerializer.Serialize(original, _opts);
var back = JsonSerializer.Deserialize<WonderwareHistorianClientOptions>(json, _opts);
back.ShouldNotBeNull();
back.PipeName.ShouldBe("otopcua-historian-prod");
back.SharedSecret.ShouldBe("t0ps3cr3t");
back.PeerName.ShouldBe("OtOpcUa-Primary");
back.ConnectTimeout.ShouldBe(TimeSpan.FromSeconds(20));
back.CallTimeout.ShouldBe(TimeSpan.FromSeconds(60));
back.EffectiveConnectTimeout.ShouldBe(TimeSpan.FromSeconds(20));
back.EffectiveCallTimeout.ShouldBe(TimeSpan.FromSeconds(60));
back.ProbeTimeoutSeconds.ShouldBe(25);
}
[Fact]
public void RoundTrip_NullTimeouts_UsesDefaults()
{
var original = new WonderwareHistorianClientOptions(
PipeName: "otopcua-historian",
SharedSecret: "secret");
var json = JsonSerializer.Serialize(original, _opts);
var back = JsonSerializer.Deserialize<WonderwareHistorianClientOptions>(json, _opts);
back.ShouldNotBeNull();
back.ConnectTimeout.ShouldBeNull();
back.CallTimeout.ShouldBeNull();
back.EffectiveConnectTimeout.ShouldBe(TimeSpan.FromSeconds(10));
back.EffectiveCallTimeout.ShouldBe(TimeSpan.FromSeconds(30));
}
[Fact]
public void Deserialize_DropsUnknownFields()
{
var jsonWithExtra = """
{
"unknownField": "old-value",
"pipeName": "otopcua-historian",
"sharedSecret": "s3cr3t",
"probeTimeoutSeconds": 20
}
""";
var optsWithSkip = new JsonSerializerOptions(_opts)
{
UnmappedMemberHandling = JsonUnmappedMemberHandling.Skip,
};
var back = JsonSerializer.Deserialize<WonderwareHistorianClientOptions>(jsonWithExtra, optsWithSkip);
back.ShouldNotBeNull();
back.ProbeTimeoutSeconds.ShouldBe(20);
back.PipeName.ShouldBe("otopcua-historian");
}
}