f22db5d801
Task 1 of the MQTT/Sparkplug B driver plan: MqttMode, MqttPayloadFormat, MqttProtocolVersion enums + MqttDriverOptions (broker conn + mode + nullable Sparkplug/Plain sub-options) per design doc §5.1. Removes the Task 0 temporary MQTTnet PackageReference from .Contracts (transport-free; references only Core.Abstractions). MQTTnet stays pinned in Directory.Packages.props for the .Driver project (Task 3). Claude-Session: https://claude.ai/code/session_01GASWkNEi68FSCtvr6rLoEW
40 lines
1.2 KiB
C#
40 lines
1.2 KiB
C#
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
using Shouldly;
|
|
using Xunit;
|
|
using ZB.MOM.WW.OtOpcUa.Driver.Mqtt;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.Driver.Mqtt.Tests;
|
|
|
|
public sealed class MqttDriverOptionsTests
|
|
{
|
|
private static readonly JsonSerializerOptions J = new()
|
|
{
|
|
PropertyNameCaseInsensitive = true,
|
|
UnmappedMemberHandling = JsonUnmappedMemberHandling.Skip,
|
|
Converters = { new JsonStringEnumConverter() },
|
|
};
|
|
|
|
[Fact]
|
|
public void Deserialize_SparkplugConfig_ReadsModeAndSubObject()
|
|
{
|
|
const string json = """
|
|
{ "host":"10.100.0.35","port":8883,"useTls":true,"mode":"SparkplugB",
|
|
"sparkplug":{"groupId":"Plant1","hostId":"h1","requestRebirthOnGap":true} }
|
|
""";
|
|
var o = JsonSerializer.Deserialize<MqttDriverOptions>(json, J)!;
|
|
o.Mode.ShouldBe(MqttMode.SparkplugB);
|
|
o.UseTls.ShouldBeTrue();
|
|
o.Sparkplug!.GroupId.ShouldBe("Plant1");
|
|
o.Plain.ShouldBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void Serialize_WritesEnumsAsNames_NotOrdinals()
|
|
{
|
|
var s = JsonSerializer.Serialize(new MqttDriverOptions { Mode = MqttMode.Plain }, J);
|
|
s.ShouldContain("\"Plain\"");
|
|
s.ShouldNotContain("\"mode\":0");
|
|
}
|
|
}
|