mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-02 22:13:07 +00:00
* introduce createNode # Conflicts: # apps/wakunode2/cli_args.nim * remove confutils dependency on the library * test: remove websocket in default test config * update to latest specs * test: cli_args * align to spec changes (sovereign, message conf, entrypoints * accept enr, entree and multiaddr as entry points * post rebase * format * change from "sovereign" to "core" * add example * get example to continue running * nitpicks * idiomatic constructors * fix enum naming * replace procs with consts * remove messageConfirmation * use pure enum * rename example file
278 lines
8.1 KiB
Nim
278 lines
8.1 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 wakuConfig = WakuConfig.init(entryNodes = @[], clusterId = 1)
|
|
|
|
let nodeConfig = NodeConfig.init(mode = Core, wakuConfig = wakuConfig)
|
|
|
|
## 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,
|
|
wakuConfig = WakuConfig.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,
|
|
wakuConfig =
|
|
WakuConfig.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(
|
|
wakuConfig = WakuConfig.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(
|
|
wakuConfig = WakuConfig.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(
|
|
wakuConfig = WakuConfig.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,
|
|
wakuConfig = WakuConfig.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,
|
|
wakuConfig =
|
|
WakuConfig.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]
|