using NATS.Server.Mqtt; namespace NATS.Server.Mqtt.Tests.Mqtt; public class MqttModelParityBatch3Tests { [Fact] public void Mqtt_helper_models_cover_go_core_shapes() { var jsa = new MqttJsa { AccountName = "A", ReplyPrefix = "$MQTT.JSA.A", Domain = "D1", }; var pubMsg = new MqttJsPubMsg { Subject = "$MQTT.msgs.s1", Payload = new byte[] { 1, 2, 3 }, ReplyTo = "$MQTT.JSA.A.reply", }; var delete = new MqttRetMsgDel { Topic = "devices/x", Sequence = 123, }; var persisted = new MqttPersistedSession { ClientId = "c1", LastPacketId = 7, MaxAckPending = 1024, }; var retainedRef = new MqttRetainedMessageRef { StreamSequence = 88, Subject = "$MQTT.rmsgs.devices/x", }; var sub = new MqttSub { Filter = "devices/+", Qos = 1, JsDur = "DUR-c1", Prm = true, Reserved = false, }; var filter = new MqttFilter { Filter = "devices/#", Qos = 1, TopicToken = "devices", }; var parsedHeader = new MqttParsedPublishNatsHeader { Subject = "devices/x", Mapped = "devices.y", IsPublish = true, IsPubRel = false, }; jsa.AccountName.ShouldBe("A"); pubMsg.Payload.ShouldBe(new byte[] { 1, 2, 3 }); delete.Sequence.ShouldBe(123UL); persisted.MaxAckPending.ShouldBe(1024); retainedRef.StreamSequence.ShouldBe(88UL); sub.JsDur.ShouldBe("DUR-c1"); filter.TopicToken.ShouldBe("devices"); parsedHeader.IsPublish.ShouldBeTrue(); } [Fact] public void Retained_message_model_includes_origin_flags_and_source_fields() { var msg = new MqttRetainedMessage( Topic: "devices/x", Payload: new byte[] { 0x41, 0x42 }, Origin: "origin-a", Flags: 0b_0000_0011, Source: "src-a"); msg.Topic.ShouldBe("devices/x"); msg.Origin.ShouldBe("origin-a"); msg.Flags.ShouldBe((byte)0b_0000_0011); msg.Source.ShouldBe("src-a"); } }