mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-07-20 11:40:02 +00:00
* convert all codecs except sds_persistency to proto2 * add common/protobuf_ext.nim: generic array[N,byte] protobuf extension * encode PeerId and MultiAddress via libp2p extensions * encode PublicKey as seq[byte] * change encode() to return seq[byte] and update all .encode().buffer call sites * reduce common/protobuf.nim to ProtobufError/ProtobufResult * add wire-format tests for message, filter v2, lightpush v3/legacy, rln proof * adapt chat2, chat2mix, chat2bridge, wakustealthcommitments * delete tests/common/test_protobuf_validation * add protobuf_serialization to logos_delivery.nimble
58 lines
2.0 KiB
Nim
58 lines
2.0 KiB
Nim
{.used.}
|
|
|
|
import results, testutils/unittests
|
|
import
|
|
logos_delivery/waku/waku_lightpush_legacy/rpc,
|
|
logos_delivery/waku/waku_lightpush_legacy/rpc_codec,
|
|
logos_delivery/waku/waku_core
|
|
|
|
# PushResponse{isSuccess:false}: field 1 emitted even when false
|
|
const PushRespFalse = @[byte 0x08, 0x00]
|
|
# PushResponse{isSuccess:true}, info omitted
|
|
const PushRespTrue = @[byte 0x08, 0x01]
|
|
# PushResponse{isSuccess:false, info:"hi"}
|
|
const PushRespFalseInfo = @[byte 0x08, 0x00, 0x12, 0x02, 0x68, 0x69]
|
|
# PushRPC{requestId:"x"}, request/response omitted
|
|
const PushRpcIdOnly = @[byte 0x0a, 0x01, 0x78]
|
|
|
|
suite "Waku Legacy Lightpush - codec wire format":
|
|
test "PushResponse always emits the required isSuccess field, even when false":
|
|
check PushResponse(isSuccess: false, info: Opt.none(string)).encode() ==
|
|
PushRespFalse
|
|
|
|
test "PushResponse success, no info":
|
|
check PushResponse(isSuccess: true, info: Opt.none(string)).encode() == PushRespTrue
|
|
|
|
test "PushResponse failure, with info":
|
|
check PushResponse(isSuccess: false, info: Opt.some("hi")).encode() ==
|
|
PushRespFalseInfo
|
|
|
|
test "PushRPC omits absent optional request/response":
|
|
check PushRPC(
|
|
requestId: "x", request: Opt.none(PushRequest), response: Opt.none(PushResponse)
|
|
).encode() == PushRpcIdOnly
|
|
|
|
test "PushResponse round-trips":
|
|
for r in [
|
|
PushResponse(isSuccess: false, info: Opt.none(string)),
|
|
PushResponse(isSuccess: true, info: Opt.some("done")),
|
|
]:
|
|
let decoded = PushResponse.decode(r.encode())
|
|
check decoded.isOk()
|
|
check decoded.get() == r
|
|
|
|
test "PushRPC round-trips with nested request and message":
|
|
let rpc = PushRPC(
|
|
requestId: "req-1",
|
|
request: Opt.some(
|
|
PushRequest(
|
|
pubSubTopic: "/waku/2/rs/0/0",
|
|
message: WakuMessage(payload: @[byte 1, 2, 3], contentTopic: "/a/1/b/c"),
|
|
)
|
|
),
|
|
response: Opt.none(PushResponse),
|
|
)
|
|
let decoded = PushRPC.decode(rpc.encode())
|
|
check decoded.isOk()
|
|
check decoded.get() == rpc
|