BGPLite/BGPLite.Tests/PrefixCodecTests.cs
Mikhail Movchan 9a6c0af00b feat: initial commit — BGPLite BGP route server
Lightweight BGP route server with TCP session management,
route table, community-based filtering, management HTTP API,
and SQLite peer store.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-05 19:30:18 +03:00

84 lines
2.3 KiB
C#

using BGPLite.Protocol;
namespace BGPLite.Tests;
public class PrefixCodecTests
{
[Fact]
public void Encode_24bitPrefix_3bytes()
{
var prefix = new IpPrefix(0xC0A80000, 24); // 192.168.0.0/24
var buffer = new byte[8];
var written = PrefixCodec.Encode(prefix, buffer);
Assert.Equal(4, written);
Assert.Equal((byte)24, buffer[0]);
Assert.Equal(0xC0, buffer[1]);
Assert.Equal(0xA8, buffer[2]);
Assert.Equal(0x00, buffer[3]);
}
[Fact]
public void Encode_8bitPrefix_2bytes()
{
var prefix = new IpPrefix(0x0A000000, 8); // 10.0.0.0/8
var buffer = new byte[8];
var written = PrefixCodec.Encode(prefix, buffer);
Assert.Equal(2, written);
Assert.Equal((byte)8, buffer[0]);
Assert.Equal(0x0A, buffer[1]);
}
[Fact]
public void Encode_32bitPrefix_5bytes()
{
var prefix = new IpPrefix(0x01020304, 32); // 1.2.3.4/32
var buffer = new byte[8];
var written = PrefixCodec.Encode(prefix, buffer);
Assert.Equal(5, written);
Assert.Equal((byte)32, buffer[0]);
Assert.Equal(0x01, buffer[1]);
Assert.Equal(0x02, buffer[2]);
Assert.Equal(0x03, buffer[3]);
Assert.Equal(0x04, buffer[4]);
}
[Fact]
public void Encode_DefaultRoute_1byte()
{
var prefix = new IpPrefix(0, 0); // 0.0.0.0/0
var buffer = new byte[8];
var written = PrefixCodec.Encode(prefix, buffer);
Assert.Equal(1, written);
Assert.Equal((byte)0, buffer[0]);
}
[Fact]
public void Roundtrip_VariousPrefixes()
{
var prefixes = new[]
{
new IpPrefix(0xC0A80000, 24),
new IpPrefix(0x0A000000, 8),
new IpPrefix(0x01020304, 32),
new IpPrefix(0, 0),
new IpPrefix(0xAC100000, 20)
};
var buffer = new byte[64];
var written = PrefixCodec.EncodeList(prefixes, buffer);
var decoded = new IpPrefix[prefixes.Length];
var count = PrefixCodec.DecodeList(buffer, written, decoded);
Assert.Equal(prefixes.Length, count);
for (var i = 0; i < count; i++)
{
Assert.Equal(prefixes[i].Address, decoded[i].Address);
Assert.Equal(prefixes[i].Length, decoded[i].Length);
}
}
}