Livt packages
Livt.Net
Version 1.4.1
Ethernet, IPv4, TCP, UDP, ARP, TFTP, and Telnet networking components for Livt hardware.
Published files (163)
- ethernet
- services
- tftp
- ArpCompositionChecks.lvt
- ArpPacketParserTest.lvt
- ArpResponderTest.lvt
- ChecksumApiTest.lvt
- ChecksumWordSumTest.lvt
- CompactPacketFieldsTest.lvt
- CountingPacketData.lvt
- EthernetFrameBuilderTest.lvt
- EthernetFrameParserTest.lvt
- EthernetLiteDeviceFixture.lvt
- EthernetLiteDriverTest.lvt
- EthernetLiteReceiveWindowTest.lvt
- EthernetLiteResetScenario.lvt
- EthernetLiteResetTest.lvt
- FaultingFrameData.lvt
- FaultingPacketData.lvt
- FrameCapacityTest.lvt
- FrameCompositionTest.lvt
- FrameForwarder.lvt
- FrameLinkTest.lvt
- FrameMii10Link.lvt
- FrameMiiLink.lvt
- FrameMiiPins.lvt
- GenericPacketTest.lvt
- IcmpCapacityChecks.lvt
- IcmpEchoResponderTest.lvt
- IcmpStorageBackendTest.lvt
- InternetChecksumTest.lvt
- Ipv4HeaderBuilderTest.lvt
- Ipv4HeaderChecksumTest.lvt
- Ipv4PacketFieldsTest.lvt
- Ipv4PacketParserTest.lvt
- MiiFrame10Test.lvt
- MiiFrameTest.lvt
- PacketConvenienceTest.lvt
- PacketDataTest.lvt
- PacketMetadataStub.lvt
- PacketMetadataTest.lvt
- PacketParserFailureTest.lvt
- PacketStorageParityTest.lvt
- RamIpv4PacketParserTest.lvt
- ReceiveContractChecks.lvt
- ScheduledWordSumTest.lvt
- SynAckCompositionChecks.lvt
- TcpChecksumTest.lvt
- TcpConnectionRecognizerTest.lvt
- TcpHeaderParserTest.lvt
- TcpMultiSessionArrayStorageTest.lvt
- TcpMultiSessionAutoStorageTest.lvt
- TcpMultiSessionDistributedStorageTest.lvt
- TcpMultiSessionMixedStorageTest.lvt
- TcpMultiSessionStorageChecks.lvt
- TcpMultiSessionTest.lvt
- TcpRamPacketTest.lvt
- TcpRetryTimerTest.lvt
- TcpSegmentBuilderTest.lvt
- TcpSegmentTest.lvt
- TcpStreamServerArrayStorageTest.lvt
- TcpStreamServerAutoStorageTest.lvt
- TcpStreamServerDistributedStorageTest.lvt
- TcpStreamServerMixedStorageTest.lvt
- TcpStreamServerStorageChecks.lvt
- TcpStreamServerTest.lvt
- TelnetSessionTest.lvt
- TransmitContractChecks.lvt
- UdpPacketTest.lvt
tests/PacketDataTest.lvt
namespace Livt.Net.Tests
using Livt.Net
/**
* Checks array/RAM publication and nested views. Each case closes views and resets its provider at entry.
*/
@Test
component PacketDataTest
{
// Owned providers and borrowed region views; close descendants before provider reuse.
array: ArrayPacketData<3>
ram: RamPacketData<3>
single: RamPacketData<1>
arrayRegion: PacketRegion<ArrayPacketData<3>>
ramRegion: PacketRegion<RamPacketData<3>>
nested: PacketRegion<PacketRegion<RamPacketData<3>>>
/**
* Creates unpublished array/RAM providers and closed nested views borrowing those providers.
*/
new()
{
array = new ArrayPacketData<3>()
ram = new RamPacketData<3>()
single = new RamPacketData<1>()
arrayRegion = new PacketRegion<ArrayPacketData<3>>(array)
ramRegion = new PacketRegion<RamPacketData<3>>(ram)
nested = new PacketRegion<PacketRegion<RamPacketData<3>>>(ramRegion)
}
/**
* Checks prefix bounds, publication immutability, empty publication and array reuse.
*/
@Test
fn PublishesOnlyInitializedArrayBytesAndAllowsReuse()
{
arrayRegion.TryClose()
if (array.IsReady()) {
array.TryRelease()
}
else {
array.TryClear()
}
var value: byte = 0xEE
assert array.IsReady() == false
assert array.GetCapacity() == 3
assert array.TryRead(0, value) == PacketDataResult.NotReady
assert array.TryRelease() == PacketDataResult.Invalid
assert array.TryWrite(-1, 0xAA) == PacketDataResult.Invalid
assert array.TryWrite(1, 0xAA) == PacketDataResult.Invalid
assert array.TryWrite(0, 0x80) == PacketDataResult.Success
assert array.TryWrite(0, 0x81) == PacketDataResult.Success
assert array.GetWrittenLength() == 1
assert array.GetAvailableLength() == 0
assert array.TryPublish() == PacketDataResult.Success
assert array.GetAvailableLength() == 1
assert array.TryRead(0, value) == PacketDataResult.Success
assert value == 0x81
assert array.TryRead(1, value) == PacketDataResult.Invalid
assert array.TryRead(-1, value) == PacketDataResult.Invalid
assert array.TryWrite(0, 0xFF) == PacketDataResult.Busy
assert array.TryPublish() == PacketDataResult.Busy
assert array.TryClear() == PacketDataResult.Busy
assert array.TryRead(0, value) == PacketDataResult.Success
assert value == 0x81
assert array.TryRelease() == PacketDataResult.Success
assert array.GetWrittenLength() == 0
assert array.TryRead(0, value) == PacketDataResult.NotReady
assert array.TryPublish() == PacketDataResult.Success
assert array.IsReady() == true
assert array.GetAvailableLength() == 0
assert array.TryRead(0, value) == PacketDataResult.Invalid
assert array.TryRelease() == PacketDataResult.Success
assert array.TryWrite(0, 0xFF) == PacketDataResult.Success
assert array.TryClear() == PacketDataResult.Success
assert array.TryWrite(1, 0xDD) == PacketDataResult.Invalid
assert array.TryWrite(0, 0x00) == PacketDataResult.Success
assert array.TryWrite(1, 0x80) == PacketDataResult.Success
assert array.TryWrite(2, 0xFF) == PacketDataResult.Success
assert array.TryWrite(3, 0xEE) == PacketDataResult.Invalid
assert array.TryPublish() == PacketDataResult.Success
assert array.GetAvailableLength() == 3
assert array.TryRead(0, value) == PacketDataResult.Success
assert value == 0x00
assert array.TryRead(1, value) == PacketDataResult.Success
assert value == 0x80
assert array.TryRead(2, value) == PacketDataResult.Success
assert value == 0xFF
assert array.TryRelease() == PacketDataResult.Success
}
/**
* Checks relative array views, overflow-safe bounds and close-before-reopen behavior.
*/
@Test
fn BoundsArrayViewsAndRequiresCloseBeforeReuse()
{
arrayRegion.TryClose()
if (array.IsReady()) {
array.TryRelease()
}
else {
array.TryClear()
}
var value: byte = 0xEE
assert arrayRegion.TryOpen(0, 0) == PacketDataResult.NotReady
assert array.TryWrite(0, 0x11) == PacketDataResult.Success
assert array.TryWrite(1, 0x80) == PacketDataResult.Success
assert array.TryWrite(2, 0xFF) == PacketDataResult.Success
assert array.TryPublish() == PacketDataResult.Success
assert arrayRegion.TryOpen(-1, 1) == PacketDataResult.Invalid
assert arrayRegion.TryOpen(0, -1) == PacketDataResult.Invalid
assert arrayRegion.TryOpen(4, 0) == PacketDataResult.Invalid
assert arrayRegion.TryOpen(1, 2147483647) == PacketDataResult.Invalid
assert arrayRegion.TryOpen(2147483647, 1) == PacketDataResult.Invalid
assert arrayRegion.TryOpen(2, 2) == PacketDataResult.Invalid
assert arrayRegion.IsReady() == false
assert arrayRegion.TryOpen(1, 2) == PacketDataResult.Success
assert arrayRegion.TryOpen(0, 3) == PacketDataResult.Busy
assert arrayRegion.GetAvailableLength() == 2
assert arrayRegion.TryRead(0, value) == PacketDataResult.Success
assert value == 0x80
assert arrayRegion.TryRead(1, value) == PacketDataResult.Success
assert value == 0xFF
assert arrayRegion.TryRead(2, value) == PacketDataResult.Invalid
assert arrayRegion.TryRead(-1, value) == PacketDataResult.Invalid
assert arrayRegion.TryClose() == PacketDataResult.Success
assert arrayRegion.TryRead(0, value) == PacketDataResult.NotReady
assert arrayRegion.TryClose() == PacketDataResult.Invalid
assert arrayRegion.TryOpen(3, 0) == PacketDataResult.Success
assert arrayRegion.IsReady() == true
assert arrayRegion.GetAvailableLength() == 0
assert arrayRegion.TryRead(0, value) == PacketDataResult.Invalid
assert arrayRegion.TryClose() == PacketDataResult.Success
assert array.TryRelease() == PacketDataResult.Success
assert array.TryWrite(0, 0x42) == PacketDataResult.Success
assert array.TryPublish() == PacketDataResult.Success
assert arrayRegion.TryOpen(0, 1) == PacketDataResult.Success
assert arrayRegion.TryRead(0, value) == PacketDataResult.Success
assert value == 0x42
assert arrayRegion.TryClose() == PacketDataResult.Success
assert array.TryRelease() == PacketDataResult.Success
}
/**
* Checks RAM prefix bounds, publication immutability and reuse without clearing retained memory.
*/
@Test
fn PublishesOnlyInitializedRamBytesAndAllowsReuse()
{
nested.TryClose()
ramRegion.TryClose()
if (ram.IsReady()) {
ram.TryRelease()
}
else {
ram.TryClear()
}
var value: byte = 0xEE
assert ram.IsReady() == false
assert ram.GetCapacity() == 3
assert ram.TryRead(0, value) == PacketDataResult.NotReady
assert ram.TryRelease() == PacketDataResult.Invalid
assert ram.TryWrite(-1, 0xAA) == PacketDataResult.Invalid
assert ram.TryWrite(1, 0xAA) == PacketDataResult.Invalid
assert ram.TryWrite(0, 0x80) == PacketDataResult.Success
assert ram.TryWrite(0, 0x81) == PacketDataResult.Success
assert ram.GetWrittenLength() == 1
assert ram.GetAvailableLength() == 0
assert ram.TryPublish() == PacketDataResult.Success
assert ram.GetAvailableLength() == 1
assert ram.TryRead(0, value) == PacketDataResult.Success
assert value == 0x81
assert ram.TryRead(1, value) == PacketDataResult.Invalid
assert ram.TryRead(-1, value) == PacketDataResult.Invalid
assert ram.TryWrite(0, 0xFF) == PacketDataResult.Busy
assert ram.TryPublish() == PacketDataResult.Busy
assert ram.TryClear() == PacketDataResult.Busy
assert ram.TryRead(0, value) == PacketDataResult.Success
assert value == 0x81
assert ram.TryRelease() == PacketDataResult.Success
assert ram.GetWrittenLength() == 0
assert ram.TryRead(0, value) == PacketDataResult.NotReady
assert ram.TryPublish() == PacketDataResult.Success
assert ram.IsReady() == true
assert ram.GetAvailableLength() == 0
assert ram.TryRead(0, value) == PacketDataResult.Invalid
assert ram.TryRelease() == PacketDataResult.Success
assert ram.TryWrite(0, 0xFF) == PacketDataResult.Success
assert ram.TryClear() == PacketDataResult.Success
assert ram.TryWrite(1, 0xDD) == PacketDataResult.Invalid
assert ram.TryWrite(0, 0x00) == PacketDataResult.Success
assert ram.TryWrite(1, 0x80) == PacketDataResult.Success
assert ram.TryWrite(2, 0xFF) == PacketDataResult.Success
assert ram.TryWrite(3, 0xEE) == PacketDataResult.Invalid
assert ram.TryPublish() == PacketDataResult.Success
assert ram.GetAvailableLength() == 3
assert ram.TryRead(0, value) == PacketDataResult.Success
assert value == 0x00
assert ram.TryRead(1, value) == PacketDataResult.Success
assert value == 0x80
assert ram.TryRead(2, value) == PacketDataResult.Success
assert value == 0xFF
assert ram.TryRelease() == PacketDataResult.Success
}
/**
* Checks scheduled RAM-backed views against relative and overflowing extents.
*/
@Test
fn BoundsRamViewsAndRequiresCloseBeforeReuse()
{
nested.TryClose()
ramRegion.TryClose()
if (ram.IsReady()) {
ram.TryRelease()
}
else {
ram.TryClear()
}
var value: byte = 0xEE
assert ramRegion.TryOpen(0, 0) == PacketDataResult.NotReady
assert ram.TryWrite(0, 0x11) == PacketDataResult.Success
assert ram.TryWrite(1, 0x80) == PacketDataResult.Success
assert ram.TryWrite(2, 0xFF) == PacketDataResult.Success
assert ram.TryPublish() == PacketDataResult.Success
assert ramRegion.TryOpen(-1, 1) == PacketDataResult.Invalid
assert ramRegion.TryOpen(0, -1) == PacketDataResult.Invalid
assert ramRegion.TryOpen(4, 0) == PacketDataResult.Invalid
assert ramRegion.TryOpen(1, 2147483647) == PacketDataResult.Invalid
assert ramRegion.TryOpen(2147483647, 1) == PacketDataResult.Invalid
assert ramRegion.TryOpen(2, 2) == PacketDataResult.Invalid
assert ramRegion.IsReady() == false
assert ramRegion.TryOpen(1, 2) == PacketDataResult.Success
assert ramRegion.TryOpen(0, 3) == PacketDataResult.Busy
assert ramRegion.GetAvailableLength() == 2
assert ramRegion.TryRead(0, value) == PacketDataResult.Success
assert value == 0x80
assert ramRegion.TryRead(1, value) == PacketDataResult.Success
assert value == 0xFF
assert ramRegion.TryRead(2, value) == PacketDataResult.Invalid
assert ramRegion.TryRead(-1, value) == PacketDataResult.Invalid
assert ramRegion.TryClose() == PacketDataResult.Success
assert ramRegion.TryRead(0, value) == PacketDataResult.NotReady
assert ramRegion.TryClose() == PacketDataResult.Invalid
assert ramRegion.TryOpen(3, 0) == PacketDataResult.Success
assert ramRegion.IsReady() == true
assert ramRegion.GetAvailableLength() == 0
assert ramRegion.TryRead(0, value) == PacketDataResult.Invalid
assert ramRegion.TryClose() == PacketDataResult.Success
assert ram.TryRelease() == PacketDataResult.Success
assert ram.TryWrite(0, 0x42) == PacketDataResult.Success
assert ram.TryPublish() == PacketDataResult.Success
assert ramRegion.TryOpen(0, 1) == PacketDataResult.Success
assert ramRegion.TryRead(0, value) == PacketDataResult.Success
assert value == 0x42
assert ramRegion.TryClose() == PacketDataResult.Success
assert ram.TryRelease() == PacketDataResult.Success
}
/**
* Composes two views and verifies that child indices are relative to the parent region.
*/
@Test
fn NestedRegionsUseRelativeOffsets()
{
nested.TryClose()
ramRegion.TryClose()
if (ram.IsReady()) {
ram.TryRelease()
}
else {
ram.TryClear()
}
var value: byte = 0x00
assert ram.TryWrite(0, 0x12) == PacketDataResult.Success
assert ram.TryWrite(1, 0x80) == PacketDataResult.Success
assert ram.TryWrite(2, 0xFF) == PacketDataResult.Success
assert ram.TryPublish() == PacketDataResult.Success
assert ramRegion.TryOpen(1, 2) == PacketDataResult.Success
assert nested.TryOpen(1, 2) == PacketDataResult.Invalid
assert nested.TryOpen(1, 1) == PacketDataResult.Success
assert nested.TryRead(0, value) == PacketDataResult.Success
assert value == 0xFF
assert nested.TryRead(1, value) == PacketDataResult.Invalid
assert nested.TryClose() == PacketDataResult.Success
assert ramRegion.TryClose() == PacketDataResult.Success
assert ram.TryRelease() == PacketDataResult.Success
}
/**
* Republishes an empty single-cell RAM and verifies that retained bytes are not readable.
*/
@Test
fn HidesRetainedRamBytesAfterRelease()
{
if (single.IsReady()) {
single.TryRelease()
}
else {
single.TryClear()
}
var value: byte = 0x00
assert single.TryWrite(0, 0xFF) == PacketDataResult.Success
assert single.TryWrite(1, 0x80) == PacketDataResult.Invalid
assert single.TryPublish() == PacketDataResult.Success
assert single.TryRead(0, value) == PacketDataResult.Success
assert value == 0xFF
assert single.TryRelease() == PacketDataResult.Success
assert single.TryPublish() == PacketDataResult.Success
assert single.TryRead(0, value) == PacketDataResult.Invalid
assert single.TryRelease() == PacketDataResult.Success
}
}