nwaku/tests/waku_store/test_resume.nim

114 lines
2.8 KiB
Nim

{.used.}
import std/[options, net], testutils/unittests, chronos, results
import
waku/[
node/peer_manager,
node/waku_node,
waku_core,
waku_store/resume,
waku_store/common,
waku_archive/driver,
],
../testlib/[wakucore, testasync, wakunode],
./store_utils,
../waku_archive/archive_utils
suite "Store Resume":
var resume {.threadvar.}: StoreResume
asyncSetup:
let resumeRes: Result[StoreResume, string] =
StoreResume.new(peerManager = nil, wakuArchive = nil, wakuStoreClient = nil)
assert resumeRes.isOk(), $resumeRes.error
resume = resumeRes.get()
asyncTeardown:
await resume.stopWait()
asyncTest "get set roundtrip":
let ts = getNowInNanosecondTime()
let setRes = resume.setLastOnlineTimestamp(ts)
assert setRes.isOk(), $setRes.error
let getRes = resume.getLastOnlineTimestamp()
assert getRes.isOk(), $getRes.error
let getTs = getRes.get()
assert getTs == ts, "wrong timestamp"
suite "Store Resume - End to End":
var server {.threadvar.}: WakuNode
var client {.threadvar.}: WakuNode
var serverDriver {.threadvar.}: ArchiveDriver
var clientDriver {.threadvar.}: ArchiveDriver
asyncSetup:
let messages =
@[
fakeWakuMessage(@[byte 00]),
fakeWakuMessage(@[byte 01]),
fakeWakuMessage(@[byte 02]),
fakeWakuMessage(@[byte 03]),
fakeWakuMessage(@[byte 04]),
fakeWakuMessage(@[byte 05]),
fakeWakuMessage(@[byte 06]),
fakeWakuMessage(@[byte 07]),
fakeWakuMessage(@[byte 08]),
fakeWakuMessage(@[byte 09]),
]
let
serverKey = generateSecp256k1Key()
clientKey = generateSecp256k1Key()
server = newTestWakuNode(serverKey, IPv4_any(), Port(0))
client = newTestWakuNode(clientKey, IPv4_any(), Port(0))
serverDriver = newArchiveDriverWithMessages(DefaultPubsubTopic, messages)
clientDriver = newSqliteArchiveDriver()
let mountServerArchiveRes = server.mountArchive(serverDriver)
let mountClientArchiveRes = client.mountArchive(clientDriver)
assert mountServerArchiveRes.isOk()
assert mountClientArchiveRes.isOk()
await server.mountStore()
await client.mountStore()
client.mountStoreClient()
server.mountStoreClient()
client.setupStoreResume()
await server.start()
let serverRemotePeerInfo = server.peerInfo.toRemotePeerInfo()
client.peerManager.addServicePeer(serverRemotePeerInfo, WakuStoreCodec)
asyncTeardown:
await allFutures(client.stop(), server.stop())
asyncTest "10 messages resume":
var countRes = await clientDriver.getMessagesCount()
assert countRes.isOk(), $countRes.error
check:
countRes.get() == 0
await client.start()
countRes = await clientDriver.getMessagesCount()
assert countRes.isOk(), $countRes.error
check:
countRes.get() == 10