mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-02 22:13:07 +00:00
* chore: rename Waku API's "Waku Config" to "Protocols" Config Make it clearer that with this config, we are configuring the Waku protocols, in contrast to other parameters which are more executable related. * ensure var name matches type * format
280 lines
8.2 KiB
Nim
280 lines
8.2 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 "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]
|