Files
logos-messaging-nim/tests/test_peer_storage.nim

98 lines
2.9 KiB
Nim
Raw Permalink Normal View History

2021-03-25 10:37:11 +02:00
{.used.}
2024-03-16 00:08:47 +01:00
import std/options, testutils/unittests, eth/p2p/discoveryv5/enr, libp2p/crypto/crypto
import
logos_delivery/waku/[
common/databases/db_sqlite,
node/peer_manager/peer_manager,
node/peer_manager/peer_store/waku_peer_storage,
waku_enr,
],
./testlib/wakucore
2021-03-25 10:37:11 +02:00
suite "Peer Storage":
2021-03-26 10:49:51 +02:00
test "Store, replace and retrieve from persistent peer storage":
let
database = SqliteDatabase.new(":memory:").tryGet()
2021-03-26 10:49:51 +02:00
storage = WakuPeerStorage.new(database)[]
2021-03-25 10:37:11 +02:00
# Test Peer
peerLoc = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet()
2023-11-27 08:08:58 -05:00
peerKey = generateSecp256k1Key()
2021-11-04 15:46:38 +01:00
peer = PeerInfo.new(peerKey, @[peerLoc])
2021-03-25 10:37:11 +02:00
peerProto = "/waku/2/default-waku/codec"
connectedness = Connectedness.CanConnect
2021-04-21 11:36:56 +02:00
disconn = 999999
pubsubTopics = @["/waku/2/rs/2/0", "/waku/2/rs/2/1"]
2024-03-16 00:08:47 +01:00
2023-11-27 08:08:58 -05:00
# Create ENR
var enrBuilder = EnrBuilder.init(peerKey)
enrBuilder.withShardedTopics(pubsubTopics).expect("Valid topics")
2023-11-27 08:08:58 -05:00
let record = enrBuilder.build().expect("Valid record")
let stored = RemotePeerInfo(
2024-03-16 00:08:47 +01:00
peerId: peer.peerId,
addrs: @[peerLoc],
enr: some(record),
protocols: @[peerProto],
publicKey: peerKey.getPublicKey().tryGet(),
connectedness: connectedness,
disconnectTime: disconn,
)
2024-03-16 00:08:47 +01:00
defer:
storage.close()
2021-03-26 10:49:51 +02:00
# Test insert and retrieve
2023-11-27 08:08:58 -05:00
require storage.put(stored).isOk
2021-03-25 10:37:11 +02:00
var responseCount = 0
2021-07-14 19:58:46 +02:00
2023-11-27 08:08:58 -05:00
# Fetched variable from callback
var resStoredInfo: RemotePeerInfo
2023-11-27 08:08:58 -05:00
proc data(storedInfo: RemotePeerInfo) =
2021-03-25 10:37:11 +02:00
responseCount += 1
resStoredInfo = storedInfo
2021-03-25 10:37:11 +02:00
let res = storage.getAll(data)
2021-03-25 10:37:11 +02:00
check:
res.isErr == false
responseCount == 1
resStoredInfo.peerId == peer.peerId
resStoredInfo.addrs == @[peerLoc]
resStoredInfo.protocols == @[peerProto]
resStoredInfo.publicKey == peerKey.getPublicKey().tryGet()
2023-11-27 08:08:58 -05:00
resStoredInfo.connectedness == connectedness
resStoredInfo.disconnectTime == disconn
2024-03-16 00:08:47 +01:00
2023-11-27 08:08:58 -05:00
assert resStoredInfo.enr.isSome(), "The ENR info wasn't properly stored"
2024-03-16 00:08:47 +01:00
check:
resStoredInfo.enr.get() == record
2021-03-26 10:49:51 +02:00
# Test replace and retrieve (update an existing entry)
2023-11-27 08:08:58 -05:00
stored.connectedness = CannotConnect
stored.disconnectTime = disconn + 10
stored.enr = none(Record)
require storage.put(stored).isOk
2021-03-26 10:49:51 +02:00
responseCount = 0
2023-11-27 08:08:58 -05:00
proc replacedData(storedInfo: RemotePeerInfo) =
2021-03-26 10:49:51 +02:00
responseCount += 1
resStoredInfo = storedInfo
2021-07-14 19:58:46 +02:00
2021-03-26 10:49:51 +02:00
let repRes = storage.getAll(replacedData)
2021-03-26 10:49:51 +02:00
check:
repRes.isErr == false
responseCount == 1
resStoredInfo.peerId == peer.peerId
resStoredInfo.addrs == @[peerLoc]
resStoredInfo.protocols == @[peerProto]
resStoredInfo.publicKey == peerKey.getPublicKey().tryGet()
2023-11-27 08:08:58 -05:00
resStoredInfo.connectedness == Connectedness.CannotConnect
resStoredInfo.disconnectTime == disconn + 10
resStoredInfo.enr.isNone()