Chrysostomos Nanakos 673823d600
refactor(protobuf): migrate to protobuf serde (#1485)
Signed-off-by: Chrysostomos Nanakos <chris@include.gr>
2026-07-14 14:09:12 +00:00

116 lines
3.3 KiB
Nim

import std/sequtils
import std/strutils
import pkg/unittest2
import pkg/storage/blockexchange/protocol/constants
import pkg/storage/blockexchange/protocol/message
import ../../examples
import ../../helpers
suite "Full Message protobuf encoding":
test "Should encode and decode empty Message":
let
msg = Message(wantList: WantList(entries: @[], full: false), blockPresences: @[])
encoded = msg.encode()
decoded = Message.decode(encoded)
check decoded.isOk
check decoded.get.wantList.entries.len == 0
check decoded.get.blockPresences.len == 0
test "Should encode and decode Message with WantList":
let
treeCid = Cid.example
msg = Message(
wantList: WantList(
entries: @[
WantListEntry(
address: BlockAddress(treeCid: treeCid, index: 0),
priority: 1,
cancel: false,
wantType: WantType.WantHave,
sendDontHave: false,
rangeCount: 100,
)
],
full: false,
),
blockPresences: @[],
)
encoded = msg.encode()
decoded = Message.decode(encoded)
check decoded.isOk
check decoded.get.wantList.entries.len == 1
check decoded.get.wantList.entries[0].rangeCount == 100
test "Should encode and decode Message with BlockPresences":
let
treeCid = Cid.example
msg = Message(
wantList: WantList(entries: @[], full: false),
blockPresences: @[
BlockPresence(
address: BlockAddress(treeCid: treeCid, index: 0),
kind: BlockPresenceType.HaveRange,
ranges: @[IndexRange(start: 0'u64, count: 500'u64)],
)
],
)
encoded = msg.encode()
decoded = Message.decode(encoded)
check decoded.isOk
check decoded.get.blockPresences.len == 1
check decoded.get.blockPresences[0].kind == BlockPresenceType.HaveRange
check decoded.get.blockPresences[0].ranges.len == 1
check decoded.get.blockPresences[0].ranges[0].count == 500
test "Should reject Message with too many blockPresences":
let
treeCid = Cid.example
msg = Message(
wantList: WantList(entries: @[], full: false),
blockPresences: newSeqWith(
MaxBlockPresenceEntries + 1,
BlockPresence(
address: BlockAddress(treeCid: treeCid, index: 0),
kind: BlockPresenceType.DontHave,
ranges: @[],
),
),
)
encoded = msg.encode()
decoded = Message.decode(encoded)
check decoded.isErr
check "exceeds" in decoded.error.msg
test "Should reject Message with too many wantList entries":
let
treeCid = Cid.example
msg = Message(
wantList: WantList(
entries: newSeqWith(
MaxWantListEntries + 1,
WantListEntry(
address: BlockAddress(treeCid: treeCid, index: 0),
priority: 1,
cancel: false,
wantType: WantType.WantHave,
sendDontHave: false,
rangeCount: 0,
),
),
full: false,
),
blockPresences: @[],
)
encoded = msg.encode()
decoded = Message.decode(encoded)
check decoded.isErr
check "exceeds" in decoded.error.msg