mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-01-04 22:43:12 +00:00
Also, catch exceptions on JsonRpcProvider.close, which should not need to be done, as this routine should not raise any exceptions.
123 lines
3.9 KiB
Nim
123 lines
3.9 KiB
Nim
import std/tempfiles
|
|
import std/times
|
|
import codex/conf
|
|
import codex/utils/fileutils
|
|
import ../asynctest
|
|
import ../checktest
|
|
import ./codexprocess
|
|
import ./nodeprocess
|
|
import ./utils
|
|
import ../examples
|
|
|
|
const HardhatPort {.intdefine.}: int = 8545
|
|
const CodexApiPort {.intdefine.}: int = 8080
|
|
const CodexDiscPort {.intdefine.}: int = 8090
|
|
const CodexLogToFile {.booldefine.}: bool = false
|
|
const CodexLogLevel {.strdefine.}: string = ""
|
|
const CodexLogsDir {.strdefine.}: string = ""
|
|
|
|
asyncchecksuite "Command line interface":
|
|
let startTime = now().format("yyyy-MM-dd'_'HH:mm:ss")
|
|
let key = "4242424242424242424242424242424242424242424242424242424242424242"
|
|
|
|
var currentTestName = ""
|
|
var testCount = 0
|
|
var nodeCount = 0
|
|
|
|
template test(tname, tbody) =
|
|
inc testCount
|
|
currentTestName = tname
|
|
test tname:
|
|
tbody
|
|
|
|
proc addLogFile(args: seq[string]): seq[string] =
|
|
var args = args
|
|
when CodexLogToFile:
|
|
args.add(
|
|
"--log-file=" &
|
|
getLogFile(
|
|
CodexLogsDir,
|
|
startTime,
|
|
"Command line interface",
|
|
currentTestName,
|
|
"Client",
|
|
some nodeCount mod testCount,
|
|
)
|
|
)
|
|
when CodexLogLevel != "":
|
|
args.add "--log-level=" & CodexLogLevel
|
|
|
|
return args
|
|
|
|
proc startCodex(arguments: seq[string]): Future[CodexProcess] {.async.} =
|
|
inc nodeCount
|
|
let args = arguments.addLogFile
|
|
return await CodexProcess.startNode(
|
|
args.concat(
|
|
@[
|
|
"--api-port=" & $(await nextFreePort(CodexApiPort + nodeCount)),
|
|
"--disc-port=" & $(await nextFreePort(CodexDiscPort + nodeCount)),
|
|
]
|
|
),
|
|
debug = false,
|
|
"cli-test-node",
|
|
)
|
|
|
|
test "complains when persistence is enabled without ethereum account":
|
|
let node = await startCodex(@["persistence"])
|
|
await node.waitUntilOutput("Persistence enabled, but no Ethereum account was set")
|
|
await node.stop(expectedErrCode = 1)
|
|
|
|
test "complains when ethereum private key file has wrong permissions":
|
|
let unsafeKeyFile = genTempPath("", "")
|
|
discard unsafeKeyFile.writeFile(key, 0o666)
|
|
let node = await startCodex(
|
|
@[
|
|
"persistence",
|
|
"--eth-provider=" & "ws://localhost:" & $HardhatPort,
|
|
"--eth-private-key=" & unsafeKeyFile,
|
|
]
|
|
)
|
|
await node.waitUntilOutput(
|
|
"Ethereum private key file does not have safe file permissions"
|
|
)
|
|
await node.stop(expectedErrCode = 1)
|
|
discard removeFile(unsafeKeyFile)
|
|
|
|
let
|
|
marketplaceArg = "--marketplace-address=" & $EthAddress.example
|
|
expectedDownloadInstruction =
|
|
"Proving circuit files are not found. Please run the following to download them:"
|
|
|
|
test "suggests downloading of circuit files when persistence is enabled without accessible r1cs file":
|
|
let node = await startCodex(@["persistence", "prover", marketplaceArg])
|
|
await node.waitUntilOutput(expectedDownloadInstruction)
|
|
await node.stop(expectedErrCode = 1)
|
|
|
|
test "suggests downloading of circuit files when persistence is enabled without accessible wasm file":
|
|
let node = await startCodex(
|
|
@[
|
|
"persistence",
|
|
"--eth-provider=" & "ws://localhost:" & $HardhatPort,
|
|
"prover",
|
|
marketplaceArg,
|
|
"--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs",
|
|
]
|
|
)
|
|
await node.waitUntilOutput(expectedDownloadInstruction)
|
|
await node.stop(expectedErrCode = 1)
|
|
|
|
test "suggests downloading of circuit files when persistence is enabled without accessible zkey file":
|
|
let node = await startCodex(
|
|
@[
|
|
"persistence",
|
|
"--eth-provider=" & "ws://localhost:" & $HardhatPort,
|
|
"prover",
|
|
marketplaceArg,
|
|
"--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs",
|
|
"--circom-wasm=tests/circuits/fixtures/proof_main.wasm",
|
|
]
|
|
)
|
|
await node.waitUntilOutput(expectedDownloadInstruction)
|
|
await node.stop(expectedErrCode = 1)
|