{.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 = newNodeConfig(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 "Relay mode configuration": ## Given let wakuConfig = newWakuConfig(bootstrapNodes = @[], staticStoreNodes = @[], clusterId = 1) let nodeConfig = newNodeConfig(mode = Relay, wakuConfig = wakuConfig, storeConfirmation = false) ## 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 = newNodeConfig( mode = Relay, wakuConfig = newWakuConfig( bootstrapNodes = @[], staticStoreNodes = @[], clusterId = 42, autoShardingConfig = AutoShardingConfig(numShardsInCluster: 16), ), storeConfirmation = false, ) ## 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 bootstrapNodes = @[ "enr:-QESuEC1p_s3xJzAC_XlOuuNrhVUETmfhbm1wxRGis0f7DlqGSw2FM-p2Vn7gmfkTTnAe8Ys2cgGBN8ufJnvzKQFZqFMBgmlkgnY0iXNlY3AyNTZrMaEDS8-D878DrdbNwcuY-3p1qdDp5MOoCurhdsNPJTXZ3c5g3RjcIJ2X4N1ZHCCd2g", "enr:-QEkuECnZ3IbVAgkOzv-QLnKC4dRKAPRY80m1-R7G8jZ7yfT3ipEfBrhKN7ARcQgQ-vg-h40AQzyvAkPYlHPaFKk6u9MBgmlkgnY0iXNlY3AyNTZrMaEDk49D8JjMSns4p1XVNBvJquOUzT4PENSJknkROspfAFGg3RjcIJ2X4N1ZHCCd2g", ] let libConf = newNodeConfig( mode = Relay, wakuConfig = newWakuConfig( bootstrapNodes = bootstrapNodes, staticStoreNodes = @[], clusterId = 1 ), storeConfirmation = false, ) ## 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 == bootstrapNodes 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 = newNodeConfig( wakuConfig = newWakuConfig( bootstrapNodes = @[], 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 = newNodeConfig( wakuConfig = newWakuConfig( bootstrapNodes = @[], staticStoreNodes = @[], clusterId = 1, messageValidation = MessageValidation( maxMessageSizeBytes: 100'u64 * 1024'u64, # 100kB rlnConfig: none(RlnConfig), ), ), storeConfirmation = false, ) ## 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 = newNodeConfig( wakuConfig = newWakuConfig( bootstrapNodes = @[], clusterId = 1, messageValidation = MessageValidation( maxMessageSizeBytes: 150'u64 * 1024'u64, # 150KB 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 Relay mode configuration with all fields": ## Given let nodeConfig = newNodeConfig( mode = Relay, wakuConfig = newWakuConfig( bootstrapNodes = @[ "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( maxMessageSizeBytes: 512'u64 * 1024'u64, # 512KB rlnConfig: some( RlnConfig( contractAddress: "0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", chainId: 5'u, # Goerli epochSizeSec: 300'u64, ) ), ), ), storeConfirmation = true, 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.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