Livt packages
Livt.Net
Version 1.4.1
Ethernet, IPv4, TCP, UDP, ARP, TFTP, and Telnet networking components for Livt hardware.
Published files (163)
tests/tftp/TftpRequestMemoryTest.lvt
namespace Livt.Net.Tests
using Livt.Net
using Livt.IO
/**
* Snapshot storage choices preserve source independence, bounds and failed-load invalidation.
*/
@Test
component TftpRequestMemoryTest
{
// One serialized source and independent snapshots for each supported memory style.
array: TftpRequest<ArrayPacketData<516>, MemoryStyle.Auto, ArrayRam<byte, 516>>
input: ArrayPacketData<516>
automatic: TftpRequest<ArrayPacketData<516>, MemoryStyle.Auto>
block: TftpRequest<ArrayPacketData<516>, MemoryStyle.Block>
distributed: TftpRequest<ArrayPacketData<516>, MemoryStyle.Distributed>
/**
* Constructs all snapshots in the same context; tests serialize source access.
*/
new()
{
input = new ArrayPacketData<516>()
array = new TftpRequest<ArrayPacketData<516>, MemoryStyle.Auto, ArrayRam<byte, 516>>(input)
automatic = new TftpRequest<ArrayPacketData<516>, MemoryStyle.Auto>(input)
block = new TftpRequest<ArrayPacketData<516>, MemoryStyle.Block>(input)
distributed = new TftpRequest<ArrayPacketData<516>, MemoryStyle.Distributed>(input)
}
/**
* Auto storage retains a maximum DATA packet after source reuse and hides invalid bytes.
*/
@Test
fn PreservesAutoSnapshotContract()
{
if (input.IsReady()) {
input.TryRelease()
}
input.TryClear()
for (var index = 0; index < 516; index++) {
assert input.TryWrite(index, (index % 256) as byte) == PacketDataResult.Success
}
input.TryWrite(0, 0)
input.TryWrite(1, 3)
input.TryPublish()
assert automatic.Load()
input.TryRelease()
input.TryWrite(0, 0xFF)
assert automatic.GetOpcode() == 3
assert automatic.GetLength() == 516
assert automatic.GetByte(515) == 3
assert automatic.GetByte(-1) == 0
assert automatic.GetByte(516) == 0
assert !automatic.Load()
assert automatic.GetLength() == 0
assert automatic.GetByte(515) == 0
}
/**
* Block storage retains a maximum DATA packet after source reuse and hides invalid bytes.
*/
@Test
fn PreservesBlockSnapshotContract()
{
if (input.IsReady()) {
input.TryRelease()
}
input.TryClear()
for (var index = 0; index < 516; index++) {
assert input.TryWrite(index, (index % 256) as byte) == PacketDataResult.Success
}
input.TryWrite(0, 0)
input.TryWrite(1, 3)
input.TryPublish()
assert block.Load()
input.TryRelease()
input.TryWrite(0, 0xFF)
assert block.GetOpcode() == 3
assert block.GetLength() == 516
assert block.GetByte(515) == 3
assert block.GetByte(-1) == 0
assert block.GetByte(516) == 0
assert !block.Load()
assert block.GetLength() == 0
assert block.GetByte(515) == 0
}
/**
* Distributed storage retains a maximum DATA packet after source reuse and hides invalid bytes.
*/
@Test
fn PreservesDistributedSnapshotContract()
{
if (input.IsReady()) {
input.TryRelease()
}
input.TryClear()
for (var index = 0; index < 516; index++) {
assert input.TryWrite(index, (index % 256) as byte) == PacketDataResult.Success
}
input.TryWrite(0, 0)
input.TryWrite(1, 3)
input.TryPublish()
assert distributed.Load()
input.TryRelease()
input.TryWrite(0, 0xFF)
assert distributed.GetOpcode() == 3
assert distributed.GetLength() == 516
assert distributed.GetByte(515) == 3
assert distributed.GetByte(-1) == 0
assert distributed.GetByte(516) == 0
assert !distributed.Load()
assert distributed.GetLength() == 0
assert distributed.GetByte(515) == 0
}
/**
* Array storage retains a maximum DATA packet after source reuse and hides invalid bytes.
*/
@Test
fn PreservesArraySnapshotContract()
{
if (input.IsReady()) {
input.TryRelease()
}
input.TryClear()
for (var index = 0; index < 516; index++) {
assert input.TryWrite(index, (index % 256) as byte) == PacketDataResult.Success
}
input.TryWrite(0, 0)
input.TryWrite(1, 3)
input.TryPublish()
assert array.Load()
input.TryRelease()
input.TryWrite(0, 0xFF)
assert array.GetOpcode() == 3
assert array.GetLength() == 516
assert array.GetByte(515) == 3
assert array.GetByte(-1) == 0
assert array.GetByte(516) == 0
assert !array.Load()
assert array.GetLength() == 0
assert array.GetByte(515) == 0
}
}