logos-messaging-nim/tests/api/test_node_conf.nim
NagyZoltanPeter 1fd25355e0
feat: waku api send (#3669)
* Introduce api/send
Added events and requests for support.
Reworked delivery_monitor into a featured devlivery_service, that
- supports relay publish and lightpush depending on configuration but with fallback options
- if available and configured it utilizes store api to confirm message delivery
- emits message delivery events accordingly

prepare for use in api_example

* Fix edge mode config and test added
* Fix some import issues, start and stop waku shall not throw exception but return with result properly
* Utlize sync RequestBroker, adapt to non-async broker usage and gcsafe where appropriate, removed leftover
* add api_example app to examples2
* Adapt after merge from master
* Adapt code for using broker context
* Fix brokerCtx settings for all usedbrokers, cover locked node init
* Various fixes upon test failures. Added initial of subscribe API and auto-subscribe for send api
* More test added
* Fix multi propagate event emit, fix fail send test case
* Fix rebase
* Fix PushMessageHandlers in tests
* adapt libwaku to api changes
* Fix relay test by adapting publish return error in case NoPeersToPublish
* Addressing all remaining review findings. Removed leftovers. Fixed loggings and typos
* Fix rln relay broker, missed brokerCtx
* Fix rest relay test failed, due to publish will fail if no peer avail
* ignore anvil test state file
* Make terst_wakunode_rln_relay broker context aware to fix
* Fix waku rln tests by having them broker context aware
* fix typo in test_app.nim
2026-01-30 01:06:00 +01:00

301 lines
8.8 KiB
Nim

{.used.}
import std/options, results, stint, testutils/unittests
import waku/api/api_conf, waku/factory/waku_conf, waku/factory/networks_config
suite "LibWaku Conf - toWakuConf":
test "Minimal configuration":
## Given
let nodeConfig = NodeConfig.init(ethRpcEndpoints = @["http://someaddress"])
## When
let wakuConfRes = toWakuConf(nodeConfig)
## Then
let wakuConf = wakuConfRes.valueOr:
raiseAssert error
wakuConf.validate().isOkOr:
raiseAssert error
check:
wakuConf.clusterId == 1
wakuConf.shardingConf.numShardsInCluster == 8
wakuConf.staticNodes.len == 0
test "Edge mode configuration":
## Given
let protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 1)
let nodeConfig = NodeConfig.init(mode = Edge, protocolsConfig = protocolsConfig)
## When
let wakuConfRes = toWakuConf(nodeConfig)
## Then
require wakuConfRes.isOk()
let wakuConf = wakuConfRes.get()
require wakuConf.validate().isOk()
check:
wakuConf.relay == false
wakuConf.lightPush == false
wakuConf.filterServiceConf.isSome() == false
wakuConf.storeServiceConf.isSome() == false
wakuConf.peerExchangeService == true
wakuConf.clusterId == 1
test "Core mode configuration":
## Given
let protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 1)
let nodeConfig = NodeConfig.init(mode = Core, protocolsConfig = protocolsConfig)
## When
let wakuConfRes = toWakuConf(nodeConfig)
## Then
require wakuConfRes.isOk()
let wakuConf = wakuConfRes.get()
require wakuConf.validate().isOk()
check:
wakuConf.relay == true
wakuConf.lightPush == true
wakuConf.peerExchangeService == true
wakuConf.clusterId == 1
test "Auto-sharding configuration":
## Given
let nodeConfig = NodeConfig.init(
mode = Core,
protocolsConfig = ProtocolsConfig.init(
entryNodes = @[],
staticStoreNodes = @[],
clusterId = 42,
autoShardingConfig = AutoShardingConfig(numShardsInCluster: 16),
),
)
## When
let wakuConfRes = toWakuConf(nodeConfig)
## Then
require wakuConfRes.isOk()
let wakuConf = wakuConfRes.get()
require wakuConf.validate().isOk()
check:
wakuConf.clusterId == 42
wakuConf.shardingConf.numShardsInCluster == 16
test "Bootstrap nodes configuration":
## Given
let entryNodes =
@[
"enr:-QESuEC1p_s3xJzAC_XlOuuNrhVUETmfhbm1wxRGis0f7DlqGSw2FM-p2Vn7gmfkTTnAe8Ys2cgGBN8ufJnvzKQFZqFMBgmlkgnY0iXNlY3AyNTZrMaEDS8-D878DrdbNwcuY-3p1qdDp5MOoCurhdsNPJTXZ3c5g3RjcIJ2X4N1ZHCCd2g",
"enr:-QEkuECnZ3IbVAgkOzv-QLnKC4dRKAPRY80m1-R7G8jZ7yfT3ipEfBrhKN7ARcQgQ-vg-h40AQzyvAkPYlHPaFKk6u9MBgmlkgnY0iXNlY3AyNTZrMaEDk49D8JjMSns4p1XVNBvJquOUzT4PENSJknkROspfAFGg3RjcIJ2X4N1ZHCCd2g",
]
let libConf = NodeConfig.init(
mode = Core,
protocolsConfig = ProtocolsConfig.init(
entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1
),
)
## When
let wakuConfRes = toWakuConf(libConf)
## Then
require wakuConfRes.isOk()
let wakuConf = wakuConfRes.get()
require wakuConf.validate().isOk()
require wakuConf.discv5Conf.isSome()
check:
wakuConf.discv5Conf.get().bootstrapNodes == entryNodes
test "Static store nodes configuration":
## Given
let staticStoreNodes =
@[
"/ip4/127.0.0.1/tcp/60000/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc",
"/ip4/192.168.1.1/tcp/60001/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYd",
]
let nodeConf = NodeConfig.init(
protocolsConfig = ProtocolsConfig.init(
entryNodes = @[], staticStoreNodes = staticStoreNodes, clusterId = 1
)
)
## When
let wakuConfRes = toWakuConf(nodeConf)
## Then
require wakuConfRes.isOk()
let wakuConf = wakuConfRes.get()
require wakuConf.validate().isOk()
check:
wakuConf.staticNodes == staticStoreNodes
test "Message validation with max message size":
## Given
let nodeConfig = NodeConfig.init(
protocolsConfig = ProtocolsConfig.init(
entryNodes = @[],
staticStoreNodes = @[],
clusterId = 1,
messageValidation =
MessageValidation(maxMessageSize: "100KiB", rlnConfig: none(RlnConfig)),
)
)
## When
let wakuConfRes = toWakuConf(nodeConfig)
## Then
require wakuConfRes.isOk()
let wakuConf = wakuConfRes.get()
require wakuConf.validate().isOk()
check:
wakuConf.maxMessageSizeBytes == 100'u64 * 1024'u64
test "Message validation with RLN config":
## Given
let nodeConfig = NodeConfig.init(
protocolsConfig = ProtocolsConfig.init(
entryNodes = @[],
clusterId = 1,
messageValidation = MessageValidation(
maxMessageSize: "150 KiB",
rlnConfig: some(
RlnConfig(
contractAddress: "0x1234567890123456789012345678901234567890",
chainId: 1'u,
epochSizeSec: 600'u64,
)
),
),
),
ethRpcEndpoints = @["http://127.0.0.1:1111"],
)
## When
let wakuConf = toWakuConf(nodeConfig).valueOr:
raiseAssert error
wakuConf.validate().isOkOr:
raiseAssert error
check:
wakuConf.maxMessageSizeBytes == 150'u64 * 1024'u64
require wakuConf.rlnRelayConf.isSome()
let rlnConf = wakuConf.rlnRelayConf.get()
check:
rlnConf.dynamic == true
rlnConf.ethContractAddress == "0x1234567890123456789012345678901234567890"
rlnConf.chainId == 1'u256
rlnConf.epochSizeSec == 600'u64
test "Full Core mode configuration with all fields":
## Given
let nodeConfig = NodeConfig.init(
mode = Core,
protocolsConfig = ProtocolsConfig.init(
entryNodes =
@[
"enr:-QESuEC1p_s3xJzAC_XlOuuNrhVUETmfhbm1wxRGis0f7DlqGSw2FM-p2Vn7gmfkTTnAe8Ys2cgGBN8ufJnvzKQFZqFMBgmlkgnY0iXNlY3AyNTZrMaEDS8-D878DrdbNwcuY-3p1qdDp5MOoCurhdsNPJTXZ3c5g3RjcIJ2X4N1ZHCCd2g"
],
staticStoreNodes =
@[
"/ip4/127.0.0.1/tcp/60000/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc"
],
clusterId = 99,
autoShardingConfig = AutoShardingConfig(numShardsInCluster: 12),
messageValidation = MessageValidation(
maxMessageSize: "512KiB",
rlnConfig: some(
RlnConfig(
contractAddress: "0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
chainId: 5'u, # Goerli
epochSizeSec: 300'u64,
)
),
),
),
ethRpcEndpoints = @["https://127.0.0.1:8333"],
)
## When
let wakuConfRes = toWakuConf(nodeConfig)
## Then
let wakuConf = wakuConfRes.valueOr:
raiseAssert error
wakuConf.validate().isOkOr:
raiseAssert error
# Check basic settings
check:
wakuConf.relay == true
wakuConf.lightPush == true
wakuConf.peerExchangeService == true
wakuConf.rendezvous == true
wakuConf.clusterId == 99
# Check sharding
check:
wakuConf.shardingConf.numShardsInCluster == 12
# Check bootstrap nodes
require wakuConf.discv5Conf.isSome()
check:
wakuConf.discv5Conf.get().bootstrapNodes.len == 1
# Check static nodes
check:
wakuConf.staticNodes.len == 1
wakuConf.staticNodes[0] ==
"/ip4/127.0.0.1/tcp/60000/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc"
# Check message validation
check:
wakuConf.maxMessageSizeBytes == 512'u64 * 1024'u64
# Check RLN config
require wakuConf.rlnRelayConf.isSome()
let rlnConf = wakuConf.rlnRelayConf.get()
check:
rlnConf.dynamic == true
rlnConf.ethContractAddress == "0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
rlnConf.chainId == 5'u256
rlnConf.epochSizeSec == 300'u64
test "NodeConfig with mixed entry nodes (integration test)":
## Given
let entryNodes =
@[
"enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im",
"/ip4/127.0.0.1/tcp/60000/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc",
]
let nodeConfig = NodeConfig.init(
mode = Core,
protocolsConfig = ProtocolsConfig.init(
entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1
),
)
## When
let wakuConfRes = toWakuConf(nodeConfig)
## Then
require wakuConfRes.isOk()
let wakuConf = wakuConfRes.get()
require wakuConf.validate().isOk()
# Check that ENRTree went to DNS discovery
require wakuConf.dnsDiscoveryConf.isSome()
check:
wakuConf.dnsDiscoveryConf.get().enrTreeUrl == entryNodes[0]
# Check that multiaddr went to static nodes
check:
wakuConf.staticNodes.len == 1
wakuConf.staticNodes[0] == entryNodes[1]