nim-sds/tests/test_reliability.nim
shash256 62821077bc feat: add nim-bloom, many more updates on reliability API
split to common and utils, logging, error handling, thread safety
2024-10-21 16:55:07 +05:30

92 lines
3.0 KiB
Nim

import unittest
import ../src/reliability
suite "ReliabilityManager":
setup:
let rmResult = newReliabilityManager("testChannel")
check rmResult.isOk
let rm = rmResult.value
test "wrapOutgoingMessage":
let msgResult = rm.wrapOutgoingMessage("Hello, World!")
check msgResult.isOk
let msg = msgResult.value
check:
msg.content == "Hello, World!"
msg.channelId == "testChannel"
msg.causalHistory.len == 0
test "unwrapReceivedMessage":
let wrappedMsgResult = rm.wrapOutgoingMessage("Test message")
check wrappedMsgResult.isOk
let wrappedMsg = wrappedMsgResult.value
let unwrapResult = rm.unwrapReceivedMessage(wrappedMsg)
check unwrapResult.isOk
let (unwrappedMsg, missingDeps) = unwrapResult.value
check:
unwrappedMsg.content == "Test message"
missingDeps.len == 0
test "markDependenciesMet":
var msg1Result = rm.wrapOutgoingMessage("Message 1")
var msg2Result = rm.wrapOutgoingMessage("Message 2")
var msg3Result = rm.wrapOutgoingMessage("Message 3")
check msg1Result.isOk and msg2Result.isOk and msg3Result.isOk
let msg1 = msg1Result.value
let msg2 = msg2Result.value
let msg3 = msg3Result.value
var unwrapResult = rm.unwrapReceivedMessage(msg3)
check unwrapResult.isOk
var (_, missingDeps) = unwrapResult.value
check missingDeps.len == 2
let markResult = rm.markDependenciesMet(@[msg1.messageId, msg2.messageId])
check markResult.isOk
unwrapResult = rm.unwrapReceivedMessage(msg3)
check unwrapResult.isOk
(_, missingDeps) = unwrapResult.value
check missingDeps.len == 0
test "callbacks":
var messageReadyCount = 0
var messageSentCount = 0
var missingDepsCount = 0
rm.setCallbacks(
proc(messageId: MessageID) = messageReadyCount += 1,
proc(messageId: MessageID) = messageSentCount += 1,
proc(messageId: MessageID, missingDeps: seq[MessageID]) = missingDepsCount += 1
)
let msg1Result = rm.wrapOutgoingMessage("Message 1")
let msg2Result = rm.wrapOutgoingMessage("Message 2")
check msg1Result.isOk and msg2Result.isOk
let msg1 = msg1Result.value
let msg2 = msg2Result.value
discard rm.unwrapReceivedMessage(msg1)
discard rm.unwrapReceivedMessage(msg2)
check:
messageReadyCount == 2
messageSentCount == 0 # This would be triggered by the checkUnacknowledgedMessages function
missingDepsCount == 0
test "serialization":
let msgResult = rm.wrapOutgoingMessage("Test serialization")
check msgResult.isOk
let msg = msgResult.value
let serializeResult = serializeMessage(msg)
check serializeResult.isOk
let serialized = serializeResult.value
let deserializeResult = deserializeMessage(serialized)
check deserializeResult.isOk
let deserialized = deserializeResult.value
check:
deserialized.content == "Test serialization"
deserialized.messageId == msg.messageId
deserialized.lamportTimestamp == msg.lamportTimestamp
when isMainModule:
unittest.run()