feat: bootstrap suitelink tag client codecs
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user