mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-01-15 20:03:09 +00:00
- removed ethersuite as the base testing suite for multinodesuite because the need to launch hardhat before ethersuite setup and kill hardhat after ethersuite teardown was required. Removing ethersuite allowed for checking if a connection to hardhat was established. If no connection established, hardhat would need to be started via the test config. If there was a connection established, a snapshot is taken during test setup and reverted during teardown. - modified the way the hardhat process was launched, because evaluating a command using chronos startProcess would wait for the command to complete before access to the output stream was given. Instead, we now launch the hardhat executable from node_modules/.bin/hardhat. - modify the way the processes are exited by killing them immediately. - fix warnings
129 lines
3.3 KiB
Nim
129 lines
3.3 KiB
Nim
import pkg/questionable
|
|
import pkg/questionable/results
|
|
import pkg/confutils
|
|
import pkg/chronicles
|
|
import pkg/chronos
|
|
import pkg/stew/io2
|
|
import std/os
|
|
import std/sets
|
|
import std/sequtils
|
|
import std/strutils
|
|
import pkg/codex/conf
|
|
import pkg/codex/utils/trackedfutures
|
|
import ./codexclient
|
|
import ./nodeprocess
|
|
|
|
export codexclient
|
|
export chronicles
|
|
|
|
logScope:
|
|
topics = "integration testing hardhat process"
|
|
nodeName = "hardhat"
|
|
|
|
type
|
|
HardhatProcess* = ref object of NodeProcess
|
|
logFile: ?IoHandle
|
|
|
|
method workingDir(node: HardhatProcess): string =
|
|
return currentSourcePath() / ".." / ".." / ".." / "vendor" / "codex-contracts-eth"
|
|
|
|
method executable(node: HardhatProcess): string =
|
|
return "node_modules" / ".bin" / "hardhat"
|
|
|
|
method startedOutput(node: HardhatProcess): string =
|
|
return "Started HTTP and WebSocket JSON-RPC server at"
|
|
|
|
method processOptions(node: HardhatProcess): set[AsyncProcessOption] =
|
|
return {}
|
|
|
|
method outputLineEndings(node: HardhatProcess): string =
|
|
return "\n"
|
|
|
|
proc openLogFile(node: HardhatProcess, logFilePath: string): IoHandle =
|
|
let logFileHandle = openFile(
|
|
logFilePath,
|
|
{OpenFlags.Write, OpenFlags.Create, OpenFlags.Truncate}
|
|
)
|
|
|
|
without fileHandle =? logFileHandle:
|
|
fatal "failed to open log file",
|
|
path = logFilePath,
|
|
errorCode = $logFileHandle.error
|
|
|
|
raiseAssert "failed to open log file, aborting"
|
|
|
|
return fileHandle
|
|
|
|
method start*(node: HardhatProcess) {.async.} =
|
|
|
|
let poptions = node.processOptions + {AsyncProcessOption.StdErrToStdOut}
|
|
trace "starting node",
|
|
args = node.arguments,
|
|
executable = node.executable,
|
|
workingDir = node.workingDir,
|
|
processOptions = poptions
|
|
|
|
try:
|
|
node.process = await startProcess(
|
|
node.executable,
|
|
node.workingDir,
|
|
@["node", "--export", "deployment-localhost.json"].concat(node.arguments),
|
|
options = poptions,
|
|
stdoutHandle = AsyncProcess.Pipe
|
|
)
|
|
except CatchableError as e:
|
|
error "failed to start node process", error = e.msg
|
|
|
|
proc startNode*(
|
|
_: type HardhatProcess,
|
|
args: seq[string],
|
|
debug: string | bool = false,
|
|
name: string
|
|
): Future[HardhatProcess] {.async.} =
|
|
|
|
var logFilePath = ""
|
|
|
|
var arguments = newSeq[string]()
|
|
for arg in args:
|
|
if arg.contains "--log-file=":
|
|
logFilePath = arg.split("=")[1]
|
|
else:
|
|
arguments.add arg
|
|
|
|
trace "starting hardhat node", arguments
|
|
## Starts a Hardhat Node with the specified arguments.
|
|
## Set debug to 'true' to see output of the node.
|
|
let hardhat = HardhatProcess(
|
|
arguments: arguments,
|
|
debug: ($debug != "false"),
|
|
trackedFutures: TrackedFutures.new(),
|
|
name: "hardhat"
|
|
)
|
|
|
|
await hardhat.start()
|
|
|
|
if logFilePath != "":
|
|
hardhat.logFile = some hardhat.openLogFile(logFilePath)
|
|
|
|
return hardhat
|
|
|
|
method onOutputLineCaptured(node: HardhatProcess, line: string) =
|
|
without logFile =? node.logFile:
|
|
return
|
|
|
|
if error =? logFile.writeFile(line & "\n").errorOption:
|
|
error "failed to write to hardhat file", errorCode = error
|
|
discard logFile.closeFile()
|
|
node.logFile = none IoHandle
|
|
|
|
method stop*(node: HardhatProcess) {.async.} =
|
|
# terminate the process
|
|
await procCall NodeProcess(node).stop()
|
|
|
|
if logFile =? node.logFile:
|
|
trace "closing hardhat log file"
|
|
discard logFile.closeFile()
|
|
|
|
method removeDataDir*(node: HardhatProcess) =
|
|
discard
|