mirror of
https://github.com/logos-storage/swarmsim.git
synced 2026-01-02 13:53:07 +00:00
130 lines
3.8 KiB
Nim
130 lines
3.8 KiB
Nim
import unittest
|
|
import std/sets
|
|
|
|
import swarmsim/engine/eventdrivenengine
|
|
import swarmsim/engine/network
|
|
import swarmsim/engine/peer
|
|
import swarmsim/engine/message
|
|
|
|
import ../helpers/inbox
|
|
import ../helpers/types
|
|
|
|
# We need this here as otherwise for some reason the nim compiler trips.
|
|
proc `$`*(m: Message): string = repr m
|
|
|
|
suite "peer":
|
|
setup:
|
|
let engine = EventDrivenEngine()
|
|
let network = Network.new(engine = engine, defaultLinkDelay = 20)
|
|
|
|
test "should allow inclusion and membership tests on a HashSet":
|
|
var peerSet = HashSet[Peer]()
|
|
|
|
let p1 = Peer.new(protocols = @[], peerId = 1.some)
|
|
let p2 = Peer.new(protocols = @[], peerId = 2.some)
|
|
|
|
peerSet.incl(p1)
|
|
|
|
check(peerSet.contains(p1))
|
|
check(not peerSet.contains(p2))
|
|
|
|
peerSet.excl(p1)
|
|
|
|
check(not peerSet.contains(p1))
|
|
|
|
test "should dispatch message to correct protocol":
|
|
let i1 = Inbox(protocolId: "protocol1", messageTypes: @["m1"])
|
|
let i2 = Inbox(protocolId: "protocol2", messageTypes: @["m2"])
|
|
|
|
let peer = Peer.new(protocols = @[Protocol i1, i2])
|
|
|
|
let m1: Message = FreelyTypedMessage(receiver: peer, messageType: "m1")
|
|
let m2: Message = FreelyTypedMessage(receiver: peer, messageType: "m2")
|
|
|
|
peer.deliver(m1, engine, network)
|
|
|
|
check(i1.messages == @[m1])
|
|
check(i2.messages == seq[Message] @[])
|
|
|
|
peer.deliver(m2, engine, network)
|
|
|
|
check(i1.messages == @[m1])
|
|
check(i2.messages == @[m2])
|
|
|
|
test "should dispatch a message to multiple protocols if they are listening on the same message type":
|
|
let i1 = Inbox(protocolId: "protocol1", messageTypes: @["m1"])
|
|
let i2 = Inbox(protocolId: "protocol2", messageTypes: @["m1"])
|
|
|
|
let peer = Peer.new(protocols = @[Protocol i1, i2])
|
|
|
|
let m1: Message = FreelyTypedMessage(receiver: peer, messageType: "m1")
|
|
|
|
peer.deliver(m1, engine, network)
|
|
|
|
check(i1.messages == @[m1])
|
|
check(i2.messages == @[m1])
|
|
|
|
test "should allow protocol to listen on multiple message types":
|
|
let i1 = Inbox(protocolId: "protocol1", messageTypes: @["m1", "m2"])
|
|
|
|
let peer = Peer.new(protocols = @[Protocol i1])
|
|
|
|
let m1: Message = FreelyTypedMessage(receiver: peer, messageType: "m1")
|
|
let m2: Message = FreelyTypedMessage(receiver: peer, messageType: "m2")
|
|
let m3: Message = FreelyTypedMessage(receiver: peer, messageType: "m3")
|
|
|
|
peer.deliver(m1, engine, network)
|
|
peer.deliver(m2, engine, network)
|
|
peer.deliver(m3, engine, network)
|
|
|
|
check(i1.messages == @[m1, m2])
|
|
|
|
test "should deliver all message types when listening to Message.allMessages":
|
|
let i1 = Inbox(protocolId: "protocol1", messageTypes: @[Message.allMessages])
|
|
|
|
let peer = Peer.new(protocols = @[Protocol i1])
|
|
|
|
let m1: Message = FreelyTypedMessage(receiver: peer, messageType: "m1")
|
|
let m2: Message = FreelyTypedMessage(receiver: peer, messageType: "m2")
|
|
let m3: Message = FreelyTypedMessage(receiver: peer, messageType: "m3")
|
|
|
|
peer.deliver(m1, engine, network)
|
|
peer.deliver(m2, engine, network)
|
|
peer.deliver(m3, engine, network)
|
|
|
|
check(i1.messages == @[m1, m2, m3])
|
|
|
|
test "should be up after start":
|
|
let i1 = Inbox(protocolId: "lifecycleListener", messageTypes: @[])
|
|
let peer = Peer.new(protocols = @[Protocol i1])
|
|
|
|
peer.startAt(network, 5)
|
|
|
|
check(not peer.up)
|
|
|
|
engine.run()
|
|
|
|
check((repr i1.events) == (repr @[
|
|
LifecycleEvent(event: started, time: 5.uint64)]))
|
|
|
|
check(peer.up)
|
|
|
|
test "should not be up after going down":
|
|
let i1 = Inbox(protocolId: "lifecycleListener", messageTypes: @[])
|
|
|
|
let peer = Peer.new(protocols = @[Protocol i1])
|
|
|
|
peer.start(network)
|
|
peer.scheduleLifecycleChange(
|
|
event = down,
|
|
network = network,
|
|
time = 10
|
|
)
|
|
|
|
engine.run()
|
|
|
|
check((repr i1.events) == (repr @[
|
|
LifecycleEvent(event: started, time: 0),
|
|
LifecycleEvent(event: down, time: 10)
|
|
]))
|