# Copyright (c) 2020-2021 Status Research & Development GmbH # Licensed and distributed under either of # * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). # at your option. This file may not be copied, modified, or distributed except according to those terms. {.used.} import unittest, ../../eth/utp/packets, ../../eth/keys suite "Utp packets encoding/decoding": let rng = newRng() test "Encode/decode syn packet": let synPacket = synPacket(5, 10, 20) let encoded = encodePacket(synPacket) let decoded = decodePacket(encoded) check: decoded.isOk() synPacket == decoded.get() test "Decode state packet": # Packet obtained by interaction with c reference implementation let pack: array[20, uint8] = [ 0x21'u8, 0x0, 0x15, 0x72, 0x00, 0xBA, 0x4D, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x41, 0xA7, 0x00, 0x01] let decoded = decodePacket(pack) check: decoded.isOk() let packet = decoded.get() check: packet.header.pType == ST_STATE packet.header.version == 1 packet.header.extension == 0 packet.header.connectionId == 5490 packet.header.timestamp == 12209521 packet.header.timestampDiff == 0 packet.header.wndSize == 1048576 packet.header.seqNr == 16807 packet.header.ackNr == 1 test "Modify timestamp of encoded packet": let synPacket = synPacket(5, 10, 20) let initialTimestamp = synPacket.header.timestamp let initialAckNr = synPacket.header.ackNr let modifiedTimeStamp = initialTimestamp + 120324 let modifiedAckNr = initialAckNr + 20 var encoded = encodePacket(synPacket) modifyTimeStampAndAckNr(encoded, modifiedTimeStamp, modifiedAckNr) let decoded = decodePacket(encoded) check: decoded.isOk() decoded.get().header.timestamp == modifiedTimeStamp decoded.get().header.ackNr == modifiedAckNr