mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-08-01 14:33:19 +00:00
116 lines
3.3 KiB
Nim
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
|