swarmsim/tests/engine/tnetwork.nim
2023-08-29 17:30:08 -03:00

46 lines
1.2 KiB
Nim

import unittest
import swarmsim/engine/message
import swarmsim/engine/eventdrivenengine
import swarmsim/engine/network
import swarmsim/engine/peer
import swarmsim/engine/protocol
import ../helpers/inbox
import ../helpers/types
suite "network":
test "should dispatch message to the correct peer":
let engine = EventDrivenEngine()
let i1 = Inbox(protocolId: "inbox", messageTypes: @["m"])
let i2 = Inbox(protocolId: "inbox", messageTypes: @["m"])
let p1 = Peer.new(protocols = @[Protocol i1])
let p2 = Peer.new(protocols = @[Protocol i2])
let network = Network.new(engine = engine, defaultLinkDelay = 20)
let m1: Message = FreelyTypedMessage(receiver: p1, messageType: "m")
let m2: Message = FreelyTypedMessage(receiver: p2, messageType: "m")
let message2handle = network.send(m2, linkDelay = uint64(10).some)
let message1handle = network.send(m1, linkDelay = uint64(5).some)
let noMessages: seq[Message] = @[]
check(i1.messages == noMessages)
check(i2.messages == noMessages)
message1Handle.doAwait()
check(i1.messages == @[m1])
check(i2.messages == noMessages)
message2Handle.doAwait()
check(i1.messages == @[m1])
check(i2.messages == @[m2])