mirror of https://github.com/status-im/nim-eth.git
Test vectors upt decoding/encoding (#458)
This commit is contained in:
parent
fcb0ff521c
commit
0f18272315
|
@ -32,7 +32,7 @@ type
|
||||||
|
|
||||||
MicroSeconds = uint32
|
MicroSeconds = uint32
|
||||||
|
|
||||||
PacketHeaderV1 = object
|
PacketHeaderV1* = object
|
||||||
pType*: PacketType
|
pType*: PacketType
|
||||||
version*: uint8
|
version*: uint8
|
||||||
extension*: uint8
|
extension*: uint8
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
import
|
import
|
||||||
./test_packets,
|
./test_packets,
|
||||||
|
./utp_packet_test_vectors,
|
||||||
./test_protocol,
|
./test_protocol,
|
||||||
./test_discv5_protocol,
|
./test_discv5_protocol,
|
||||||
./test_buffer,
|
./test_buffer,
|
||||||
|
|
|
@ -0,0 +1,164 @@
|
||||||
|
# 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
|
||||||
|
std/options,
|
||||||
|
stew/[byteutils, bitops2],
|
||||||
|
unittest2,
|
||||||
|
../../eth/utp/packets,
|
||||||
|
../../eth/keys
|
||||||
|
|
||||||
|
suite "Utp packets test vectors":
|
||||||
|
test "SYN packet":
|
||||||
|
let synPacket = Packet(
|
||||||
|
header: PacketHeaderV1(
|
||||||
|
pType: ST_SYN,
|
||||||
|
version: 1,
|
||||||
|
extension: 0,
|
||||||
|
connectionId: 10049,
|
||||||
|
timestamp: 3384187322'u32,
|
||||||
|
timestampDiff: 0,
|
||||||
|
wndSize: 1048576,
|
||||||
|
seqNr: 11884,
|
||||||
|
ackNr: 0
|
||||||
|
),
|
||||||
|
eack: none[SelectiveAckExtension](),
|
||||||
|
payload: @[]
|
||||||
|
)
|
||||||
|
|
||||||
|
let encodedSyn = encodePacket(synPacket)
|
||||||
|
|
||||||
|
let synBytes = hexToSeqByte("0x41002741c9b699ba00000000001000002e6c0000")
|
||||||
|
|
||||||
|
check:
|
||||||
|
encodedSyn == synBytes
|
||||||
|
|
||||||
|
test "ACK packet (No selective acks)":
|
||||||
|
let ackPacket = Packet(
|
||||||
|
header: PacketHeaderV1(
|
||||||
|
pType: ST_STATE,
|
||||||
|
version: 1,
|
||||||
|
extension: 0,
|
||||||
|
connectionId: 10049,
|
||||||
|
timestamp: 6195294,
|
||||||
|
timestampDiff: 916973699,
|
||||||
|
wndSize: 1048576,
|
||||||
|
seqNr: 16807,
|
||||||
|
ackNr: 11885
|
||||||
|
),
|
||||||
|
eack: none[SelectiveAckExtension](),
|
||||||
|
payload: @[]
|
||||||
|
)
|
||||||
|
|
||||||
|
let encodedAck = encodePacket(ackPacket)
|
||||||
|
|
||||||
|
let ackBytes = hexToSeqByte("0x21002741005e885e36a7e8830010000041a72e6d")
|
||||||
|
|
||||||
|
check:
|
||||||
|
encodedAck == ackBytes
|
||||||
|
|
||||||
|
test "ACK packet (with selective acks)":
|
||||||
|
# bit mask with the first and last bit set
|
||||||
|
var bitMask = [1'u8, 0, 0, 128]
|
||||||
|
|
||||||
|
let ackPacket = Packet(
|
||||||
|
header: PacketHeaderV1(
|
||||||
|
pType: ST_STATE,
|
||||||
|
version: 1,
|
||||||
|
extension: 1,
|
||||||
|
connectionId: 10049,
|
||||||
|
timestamp: 6195294,
|
||||||
|
timestampDiff: 916973699,
|
||||||
|
wndSize: 1048576,
|
||||||
|
seqNr: 16807,
|
||||||
|
ackNr: 11885
|
||||||
|
),
|
||||||
|
eack: some(SelectiveAckExtension(
|
||||||
|
acks: bitMask
|
||||||
|
)),
|
||||||
|
payload: @[]
|
||||||
|
)
|
||||||
|
|
||||||
|
let encodedAck = encodePacket(ackPacket)
|
||||||
|
|
||||||
|
let ackBytes = hexToSeqByte("0x21012741005e885e36a7e8830010000041a72e6d000401000080")
|
||||||
|
|
||||||
|
check:
|
||||||
|
encodedAck == ackBytes
|
||||||
|
|
||||||
|
test "DATA packet":
|
||||||
|
let dataPacket = Packet(
|
||||||
|
header: PacketHeaderV1(
|
||||||
|
pType: ST_DATA,
|
||||||
|
version: 1,
|
||||||
|
extension: 0,
|
||||||
|
connectionId: 26237,
|
||||||
|
timestamp: 252492495'u32,
|
||||||
|
timestampDiff: 242289855,
|
||||||
|
wndSize: 1048576,
|
||||||
|
seqNr: 8334,
|
||||||
|
ackNr: 16806
|
||||||
|
),
|
||||||
|
eack: none[SelectiveAckExtension](),
|
||||||
|
payload: @[0'u8, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
)
|
||||||
|
|
||||||
|
let encodedData = encodePacket(dataPacket)
|
||||||
|
|
||||||
|
let dataBytes = hexToSeqByte("0x0100667d0f0cbacf0e710cbf00100000208e41a600010203040506070809")
|
||||||
|
|
||||||
|
check:
|
||||||
|
encodedData == dataBytes
|
||||||
|
|
||||||
|
test "FIN packet":
|
||||||
|
let finPacket = Packet(
|
||||||
|
header: PacketHeaderV1(
|
||||||
|
pType: ST_FIN,
|
||||||
|
version: 1,
|
||||||
|
extension: 0,
|
||||||
|
connectionId: 19003,
|
||||||
|
timestamp: 515227279,
|
||||||
|
timestampDiff: 511481041,
|
||||||
|
wndSize: 1048576,
|
||||||
|
seqNr: 41050,
|
||||||
|
ackNr: 16806
|
||||||
|
),
|
||||||
|
eack: none[SelectiveAckExtension](),
|
||||||
|
payload: @[]
|
||||||
|
)
|
||||||
|
|
||||||
|
let encodedFIn = encodePacket(finPacket)
|
||||||
|
|
||||||
|
let finBytes = hexToSeqByte("0x11004a3b1eb5be8f1e7c94d100100000a05a41a6")
|
||||||
|
|
||||||
|
check:
|
||||||
|
encodedFIn == finBytes
|
||||||
|
|
||||||
|
test "RESET packet":
|
||||||
|
let resetPacket = Packet(
|
||||||
|
header: PacketHeaderV1(
|
||||||
|
pType: ST_RESET,
|
||||||
|
version: 1,
|
||||||
|
extension: 0,
|
||||||
|
connectionId: 62285,
|
||||||
|
timestamp: 751226811,
|
||||||
|
timestampDiff: 0,
|
||||||
|
wndSize: 0,
|
||||||
|
seqNr: 55413,
|
||||||
|
ackNr: 16807
|
||||||
|
),
|
||||||
|
eack: none[SelectiveAckExtension](),
|
||||||
|
payload: @[]
|
||||||
|
)
|
||||||
|
|
||||||
|
let encodedReset = encodePacket(resetPacket)
|
||||||
|
|
||||||
|
let resetBytes = hexToSeqByte("0x3100f34d2cc6cfbb0000000000000000d87541a7")
|
||||||
|
|
||||||
|
check:
|
||||||
|
encodedReset == resetBytes
|
Loading…
Reference in New Issue