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/TcpSegmentBuilderTest.lvt

namespace Livt.Net.Tests

using Livt.Net

/**
 * Checks explicit TCP metadata; endpoint swapping belongs to the caller.
 */
@Test
component TcpSegmentBuilderTest
{
	/**
	 * Compares emitted header fields with explicit expected octets; no timing property is asserted.
	 */
	@Test
	fn WritesExplicitSourceAndDestinationPorts()
	{
		var request: byte[128]
		var clientPort: byte[2]
		clientPort[0] = 0xC0
		clientPort[1] = 0x01
		var localPort: byte[2]
		localPort[0] = 0x00
		localPort[1] = 0x50
		var tcpSequence: byte[4]
		tcpSequence[0] = 0x11
		tcpSequence[1] = 0x22
		tcpSequence[2] = 0x33
		tcpSequence[3] = 0x44
		var acknowledgment: byte[4]
		acknowledgment[0] = 0xAA
		acknowledgment[1] = 0xBB
		acknowledgment[2] = 0xCC
		acknowledgment[3] = 0xDD
		var window: byte[2]
		window[0] = 0x04
		window[1] = 0x00
		var checksum: byte[2]
		checksum[0] = 0xBE
		checksum[1] = 0xEF

		request[34] = clientPort[0]
		request[35] = clientPort[1]
		request[36] = localPort[0]
		request[37] = localPort[1]

		var sourcePort: byte[2] = [request[36], request[37]]
		var destinationPort: byte[2] = [request[34], request[35]]
		assert TcpSegmentBuilder.GetByte(0, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x00
		assert TcpSegmentBuilder.GetByte(1, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x50
		assert TcpSegmentBuilder.GetByte(2, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0xC0
		assert TcpSegmentBuilder.GetByte(3, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x01
	}

	/**
	 * Compares emitted header fields with explicit expected octets; no timing property is asserted.
	 */
	@Test
	fn WritesSequenceAndAcknowledgmentNumbers()
	{
		var request: byte[128]
		var tcpSequence: byte[4]
		tcpSequence[0] = 0x11
		tcpSequence[1] = 0x22
		tcpSequence[2] = 0x33
		tcpSequence[3] = 0x44
		var acknowledgment: byte[4]
		acknowledgment[0] = 0xAA
		acknowledgment[1] = 0xBB
		acknowledgment[2] = 0xCC
		acknowledgment[3] = 0xDD
		var window: byte[2]
		window[0] = 0x04
		window[1] = 0x00
		var checksum: byte[2]
		checksum[0] = 0xBE
		checksum[1] = 0xEF

		var sourcePort: byte[2] = [request[36], request[37]]
		var destinationPort: byte[2] = [request[34], request[35]]
		assert TcpSegmentBuilder.GetByte(4, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x11
		assert TcpSegmentBuilder.GetByte(5, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x22
		assert TcpSegmentBuilder.GetByte(6, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x33
		assert TcpSegmentBuilder.GetByte(7, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x44
		assert TcpSegmentBuilder.GetByte(8, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0xAA
		assert TcpSegmentBuilder.GetByte(11, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0xDD
	}

	/**
	 * Compares emitted header fields with explicit expected octets; no timing property is asserted.
	 */
	@Test
	fn WritesFixedHeaderControlFields()
	{
		var request: byte[128]
		var tcpSequence: byte[4]
		tcpSequence[0] = 0x11
		tcpSequence[1] = 0x22
		tcpSequence[2] = 0x33
		tcpSequence[3] = 0x44
		var acknowledgment: byte[4]
		acknowledgment[0] = 0xAA
		acknowledgment[1] = 0xBB
		acknowledgment[2] = 0xCC
		acknowledgment[3] = 0xDD
		var window: byte[2]
		window[0] = 0x04
		window[1] = 0x00
		var checksum: byte[2]
		checksum[0] = 0xBE
		checksum[1] = 0xEF

		var sourcePort: byte[2] = [request[36], request[37]]
		var destinationPort: byte[2] = [request[34], request[35]]
		assert TcpSegmentBuilder.GetByte(12, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x50
		assert TcpSegmentBuilder.GetByte(13, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x12
		assert TcpSegmentBuilder.GetByte(14, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x04
		assert TcpSegmentBuilder.GetByte(15, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x00
		assert TcpSegmentBuilder.GetByte(16, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0xBE
		assert TcpSegmentBuilder.GetByte(17, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0xEF
		assert TcpSegmentBuilder.GetByte(18, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x00
		assert TcpSegmentBuilder.GetByte(19, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x00
		assert TcpSegmentBuilder.GetByte(20, sourcePort, destinationPort, tcpSequence, acknowledgment, 0x12, window, checksum) == 0x00
	}
}