Files
mix/tests/test_utils.nim

153 lines
5.5 KiB
Nim

{.used.}
import chronicles, results, unittest
import ../mix/[config, utils]
suite "Utils tests":
test "multi_addr_conversion":
let multiAddrs = [
"/ip4/0.0.0.0/tcp/4242/p2p/16Uiu2HAmFkwLVsVh6gGPmSm9R3X4scJ5thVdKfWYeJsKeVrbcgVC",
"/ip4/10.0.0.1/tcp/1234/p2p/16Uiu2HAmDHw4mwBdEjxjJPhrt8Eq1kvDjXAuwkqCmhNiz363AFV2",
"/ip4/192.168.1.1/udp/8080/quic-v1/p2p/16Uiu2HAm6WNzw8AssyPscYYi8x1bY5wXyQrGTShRH75bh5dPCjBQ",
"/ip4/10.0.0.1/tcp/1234/p2p/16Uiu2HAmDHw4mwBdEjxjJPhrt8Eq1kvDjXAuwkqCmhNiz363AFV2/p2p-circuit/p2p/16Uiu2HAm6WNzw8AssyPscYYi8x1bY5wXyQrGTShRH75bh5dPCjBQ",
"/ip4/10.0.0.1/udp/1234/quic-v1/p2p/16Uiu2HAmDHw4mwBdEjxjJPhrt8Eq1kvDjXAuwkqCmhNiz363AFV2/p2p-circuit/p2p/16Uiu2HAm6WNzw8AssyPscYYi8x1bY5wXyQrGTShRH75bh5dPCjBQ",
]
for multiAddr in multiAddrs:
let multiAddrBytesRes = multiAddrToBytes(multiAddr)
if multiAddrBytesRes.isErr:
error "Multiaddress to bytes conversion failed", err = multiAddrBytesRes.error
fail()
let multiAddrBytes = multiAddrBytesRes.get()
if multiAddrBytes.len != addrSize:
error "Incorrect address size", expected = addrSize, actual = multiAddrBytes.len
fail()
let multiAddrStringRes = bytesToMultiAddr(multiAddrBytes)
if multiAddrStringRes.isErr:
error "Bytes to MultiAddr conversion failed", err = multiAddrStringRes.error
fail()
let multiAddrString = multiAddrStringRes.get()
if multiAddrString != multiAddr:
error "MultiAddr mismatch", expected = multiAddr, actual = multiAddrString
fail()
test "invalid_protocol":
let res = multiAddrToBytes(
"/ip4/0.0.0.0/abc/4242/p2p/16Uiu2HAmFkwLVsVh6gGPmSm9R3X4scJ5thVdKfWYeJsKeVrbcgVC"
)
if res.isOk:
error "Expected error for invalid protocol, but conversion succeeded"
fail()
test "invalid_peerid_length":
let res = multiAddrToBytes("/ip4/0.0.0.0/tcp/4242/p2p/16Uiu2HAmFk")
if res.isOk:
error "Expected error for invalid peer ID length, but conversion succeeded"
fail()
test "invalid_addr_length":
let invalidBytes = newSeq[byte](addrSize - 1)
let res = bytesToMultiAddr(invalidBytes)
if res.isOk:
error "Expected error for invalid address length, but conversion succeeded"
fail()
test "invalid_ip_address_format":
let res = multiAddrToBytes(
"/ip4/0.0.0/tcp/4242/p2p/16Uiu2HAmFkwLVsVh6gGPmSm9R3X4scJ5thVdKfWYeJsKeVrbcgVC"
)
if res.isOk:
error "Expected error for invalid IP address format, but conversion succeeded"
fail()
test "invalid_ip_address_part":
let res = multiAddrToBytes(
"/ip4/127.0.0.256/tcp/4242/p2p/16Uiu2HAmFkwLVsVh6gGPmSm9R3X4scJ5thVdKfWYeJsKeVrbcgVC"
)
if res.isOk:
error "Expected error for invalid IP address part, but conversion succeeded"
fail()
test "invalid_base58_encoding":
let res = multiAddrToBytes(
"/ip4/0.0.0.0/tcp/4242/p2p/16Uiu2HAmFkwLVsVh6gGPmSm9R3X4scJ5thVdKfWYeJsKeVrbcgV!"
)
if res.isOk:
error "Expected error for invalid Base58 encoding, but conversion succeeded"
fail()
test "invalid_multiaddress_format":
let res = multiAddrToBytes("/ip4/0.0.0.0/tcp/4242")
if res.isOk:
error "Expected error for invalid multiaddress format, but conversion succeeded"
fail()
test "invalid_port_number":
let res = multiAddrToBytes(
"/ip4/0.0.0.0/tcp/65536/p2p/16Uiu2HAmFkwLVsVh6gGPmSm9R3X4scJ5thVdKfWYeJsKeVrbcgVC"
)
if res.isOk:
error "Expected error for invalid port number, but conversion succeeded"
fail()
test "bytes_to_uint16_conversion":
let res = bytesToUInt16([0x12'u8, 0x34'u8])
if res.isErr:
error "Bytes to uint16 conversion failed", err = res.error
fail()
if res.get() != 0x1234'u16:
error "Incorrect uint16 conversion", expected = 0x1234'u16, actual = res.get()
fail()
test "uint16_to_bytes_conversion":
let value: uint16 = 0x1234
let bytes = uint16ToBytes(value)
if bytes != @[byte 0x12, 0x34]:
error "Incorrect uint16 to bytes conversion",
expected = @[byte 0x12, 0x34], actual = bytes
fail()
test "bytes_to_uint32_conversion":
let res = bytesToUInt32([0x12'u8, 0x34'u8, 0x56'u8, 0x78'u8])
if res.isErr:
error "Bytes to uint32 conversion failed", err = res.error
fail()
if res.get() != 0x12345678'u32:
error "Incorrect uint32 conversion", expected = 0x12345678'u32, actual = res.get()
fail()
test "uint32_to_bytes_conversion":
let value: uint32 = 0x12345678
let bytes = uint32ToBytes(value)
if bytes != @[byte 0x12, 0x34, 0x56, 0x78]:
error "Incorrect uint32 to bytes conversion",
expected = @[byte 0x12, 0x34, 0x56, 0x78], actual = bytes
fail()
test "uint16_bytes_roundtrip":
let original: uint16 = 0xABCD'u16
let bytes = uint16ToBytes(original)
let roundtripRes = bytesToUInt16(bytes)
if roundtripRes.isErr:
error "Uint16 bytes roundtrip failed", err = roundtripRes.error
fail()
if roundtripRes.get() != original:
error "Uint16 bytes roundtrip mismatch",
expected = original, actual = roundtripRes.get()
fail()
test "uint32_bytes_roundtrip":
let original: uint32 = 0x12345678'u32
let bytes = uint32ToBytes(original)
let roundtripRes = bytesToUInt32(bytes)
if roundtripRes.isErr:
error "Uint32 bytes roundtrip failed", err = roundtripRes.error
fail()
if roundtripRes.get() != original:
error "Uint32 bytes roundtrip mismatch",
expected = original, actual = roundtripRes.get()
fail()