mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-06-27 21:09:28 +00:00
Add config validation
This commit is contained in:
parent
7ac6819b4e
commit
a46d7b18b3
@ -394,6 +394,27 @@ func defaultAddress*(conf: StorageConf): IpAddress =
|
||||
func defaultNatConfig*(): NatConfig =
|
||||
result = NatConfig(hasExtIp: false, nat: NatStrategy.NatAuto)
|
||||
|
||||
func validateAutonatConfig*(config: StorageConf): ?!void =
|
||||
# An autonat or relay server must be Reachable, assumed with extIp.
|
||||
# In other words, a node cannot be autonat server AND autonat client.
|
||||
# Currently, only bootstrap nodes should be autonat servers.
|
||||
if config.autonatServer and not config.nat.hasExtIp:
|
||||
return failure "--autonat-server requires --nat=extip:<IP>"
|
||||
|
||||
if config.isRelayServer and not config.nat.hasExtIp:
|
||||
return failure "--relay-server requires --nat=extip:<IP>"
|
||||
|
||||
if config.natMaxQueueSize < 1:
|
||||
return failure "--nat-max-queue-size must be at least 1"
|
||||
|
||||
if config.natNumPeersToAsk < 1:
|
||||
return failure "--nat-num-peers-to-ask must be at least 1"
|
||||
|
||||
if config.natMinConfidence < 0.0 or config.natMinConfidence > 1.0:
|
||||
return failure "--nat-min-confidence must be between 0 and 1"
|
||||
|
||||
success()
|
||||
|
||||
proc getStorageVersion(): string =
|
||||
let tag = strip(staticExec("git describe --tags --abbrev=0"))
|
||||
if tag.isEmptyOrWhitespace:
|
||||
|
||||
@ -241,15 +241,8 @@ proc new*(
|
||||
): StorageServer =
|
||||
## create StorageServer including setting up datastore, repostore, etc
|
||||
|
||||
# Ensure that you can run an autonat server if the node is Reachable, assumed
|
||||
# with extIp.
|
||||
# In other words, a node cannot have autonat server AND autonat client.
|
||||
# Currently, only bootstrap node should be autonat server.
|
||||
if config.autonatServer and not config.nat.hasExtIp:
|
||||
raise newException(StorageError, "--autonat-server requires --nat=extip:<IP>")
|
||||
|
||||
if config.isRelayServer and not config.nat.hasExtIp:
|
||||
raise newException(StorageError, "--relay-server requires --nat=extip:<IP>")
|
||||
if err =? config.validateAutonatConfig().errorOption:
|
||||
raise newException(StorageError, err.msg)
|
||||
|
||||
# Switch
|
||||
let listenMultiAddr = getMultiAddrWithIpAndTcpPort(config.listenIp, config.listenPort)
|
||||
|
||||
89
tests/storage/testconf.nim
Normal file
89
tests/storage/testconf.nim
Normal file
@ -0,0 +1,89 @@
|
||||
import std/net
|
||||
import pkg/questionable/results
|
||||
|
||||
import ../asynctest
|
||||
import ./helpers
|
||||
import ../../storage/conf
|
||||
|
||||
proc validConfig(): StorageConf =
|
||||
StorageConf(
|
||||
nat: defaultNatConfig(),
|
||||
natMaxQueueSize: 3,
|
||||
natNumPeersToAsk: 5,
|
||||
natMinConfidence: 0.7,
|
||||
)
|
||||
|
||||
suite "Conf - validateAutonatConfig":
|
||||
test "accepts a valid config":
|
||||
check validConfig().validateAutonatConfig().isOk
|
||||
|
||||
test "rejects autonat server without extip":
|
||||
var config = validConfig()
|
||||
config.autonatServer = true
|
||||
|
||||
check config.validateAutonatConfig().isErr
|
||||
|
||||
test "accepts autonat server with extip":
|
||||
var config = validConfig()
|
||||
config.autonatServer = true
|
||||
config.nat = NatConfig(hasExtIp: true, extIp: parseIpAddress("1.2.3.4"))
|
||||
|
||||
check config.validateAutonatConfig().isOk
|
||||
|
||||
test "rejects relay server without extip":
|
||||
var config = validConfig()
|
||||
config.isRelayServer = true
|
||||
|
||||
check config.validateAutonatConfig().isErr
|
||||
|
||||
test "accepts relay server with extip":
|
||||
var config = validConfig()
|
||||
config.isRelayServer = true
|
||||
config.nat = NatConfig(hasExtIp: true, extIp: parseIpAddress("1.2.3.4"))
|
||||
|
||||
check config.validateAutonatConfig().isOk
|
||||
|
||||
test "rejects nat-max-queue-size below 1":
|
||||
var config = validConfig()
|
||||
config.natMaxQueueSize = 0
|
||||
|
||||
check config.validateAutonatConfig().isErr
|
||||
|
||||
test "accepts nat-max-queue-size of 1":
|
||||
var config = validConfig()
|
||||
config.natMaxQueueSize = 1
|
||||
|
||||
check config.validateAutonatConfig().isOk
|
||||
|
||||
test "rejects nat-num-peers-to-ask below 1":
|
||||
var config = validConfig()
|
||||
config.natNumPeersToAsk = 0
|
||||
|
||||
check config.validateAutonatConfig().isErr
|
||||
|
||||
test "accepts nat-num-peers-to-ask of 1":
|
||||
var config = validConfig()
|
||||
config.natNumPeersToAsk = 1
|
||||
|
||||
check config.validateAutonatConfig().isOk
|
||||
|
||||
test "rejects negative nat-min-confidence":
|
||||
var config = validConfig()
|
||||
config.natMinConfidence = -0.1
|
||||
|
||||
check config.validateAutonatConfig().isErr
|
||||
|
||||
test "rejects nat-min-confidence above 1":
|
||||
var config = validConfig()
|
||||
config.natMinConfidence = 1.1
|
||||
|
||||
check config.validateAutonatConfig().isErr
|
||||
|
||||
test "accepts nat-min-confidence bounds":
|
||||
var config = validConfig()
|
||||
|
||||
config.natMinConfidence = 0.0
|
||||
check config.validateAutonatConfig().isOk
|
||||
|
||||
config.natMinConfidence = 1.0
|
||||
check config.validateAutonatConfig().isOk
|
||||
Loading…
x
Reference in New Issue
Block a user