74 lines
2.6 KiB
C#
74 lines
2.6 KiB
C#
using SuiteLink.Client.Protocol;
|
|
|
|
namespace SuiteLink.Client.Tests.Protocol;
|
|
|
|
public sealed class SuiteLinkSubscriptionCodecTests
|
|
{
|
|
[Fact]
|
|
public void EncodeAdvise_WritesExpectedGoldenVectorWithCallerTagId()
|
|
{
|
|
var bytes = SuiteLinkSubscriptionCodec.EncodeAdvise(0x11223344, "A");
|
|
var frame = SuiteLinkFrameReader.ParseFrame(bytes);
|
|
byte[] expected = [0x0A, 0x00, 0x10, 0x80, 0x44, 0x33, 0x22, 0x11, 0x01, 0x41, 0x00, 0xA5];
|
|
|
|
Assert.Equal(expected, bytes);
|
|
Assert.Equal(0x10, bytes[2]);
|
|
Assert.Equal(0x80, bytes[3]);
|
|
Assert.Equal(SuiteLinkSubscriptionCodec.AdviseMessageType, frame.MessageType);
|
|
Assert.Equal(0x11223344u, SuiteLinkEncoding.ReadUInt32LittleEndian(frame.Payload.Span[..4]));
|
|
}
|
|
|
|
[Fact]
|
|
public void EncodeAdviseWithoutTagId_UsesExplicitDefaultTagIdOfZero()
|
|
{
|
|
var bytes = SuiteLinkSubscriptionCodec.EncodeAdvise("Pump001.Run");
|
|
var frame = SuiteLinkFrameReader.ParseFrame(bytes);
|
|
Assert.Equal(0u, SuiteLinkEncoding.ReadUInt32LittleEndian(frame.Payload.Span[..4]));
|
|
}
|
|
|
|
[Fact]
|
|
public void EncodeUnadvise_WritesExpectedGoldenVector()
|
|
{
|
|
var bytes = SuiteLinkSubscriptionCodec.EncodeUnadvise(0x78563412);
|
|
var frame = SuiteLinkFrameReader.ParseFrame(bytes);
|
|
byte[] expected = [0x07, 0x00, 0x04, 0x80, 0x12, 0x34, 0x56, 0x78, 0xA5];
|
|
|
|
Assert.Equal(expected, bytes);
|
|
Assert.Equal(0x04, bytes[2]);
|
|
Assert.Equal(0x80, bytes[3]);
|
|
Assert.Equal(SuiteLinkSubscriptionCodec.UnadviseMessageType, frame.MessageType);
|
|
Assert.Equal(4, frame.Payload.Length);
|
|
Assert.Equal(0x78563412u, SuiteLinkEncoding.ReadUInt32LittleEndian(frame.Payload.Span));
|
|
}
|
|
|
|
[Fact]
|
|
public void DecodeAdviseAck_ParsesTagIdFromFixedVector()
|
|
{
|
|
// remaining=0x0008, type=0x0003, payload={tag_id=0x78563412, unknown=0x00}, marker=0xA5
|
|
byte[] frame = [0x08, 0x00, 0x03, 0x00, 0x12, 0x34, 0x56, 0x78, 0x00, 0xA5];
|
|
|
|
var ack = SuiteLinkSubscriptionCodec.DecodeAdviseAck(frame);
|
|
|
|
Assert.Equal(0x78563412u, ack.TagId);
|
|
}
|
|
|
|
[Fact]
|
|
public void DecodeAdviseAckMany_ParsesTwoAckItems()
|
|
{
|
|
// remaining=0x000D, type=0x0003, payload={item1,item2}, marker=0xA5
|
|
byte[] frame =
|
|
[
|
|
0x0D, 0x00, 0x03, 0x00,
|
|
0x12, 0x34, 0x56, 0x78, 0x00,
|
|
0xAA, 0xBB, 0xCC, 0xDD, 0x01,
|
|
0xA5
|
|
];
|
|
|
|
var acks = SuiteLinkSubscriptionCodec.DecodeAdviseAckMany(frame);
|
|
|
|
Assert.Equal(2, acks.Count);
|
|
Assert.Equal(0x78563412u, acks[0].TagId);
|
|
Assert.Equal(0xDDCCBBAAu, acks[1].TagId);
|
|
}
|
|
}
|