From 2dd436bfb7b679d36388b79eedc5108b97367f4c Mon Sep 17 00:00:00 2001 From: markspanbroek Date: Wed, 4 Jun 2025 13:22:14 +0200 Subject: [PATCH 001/178] fix(sales): do not crash when retrieving request fails (#1248) --- codex/sales/statemachine.nim | 2 +- codex/sales/states/preparing.nim | 4 +++- codex/sales/states/unknown.nim | 5 +++++ tests/codex/sales/states/testpreparing.nim | 6 ++++++ tests/codex/sales/states/testunknown.nim | 12 ++++++++++-- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/codex/sales/statemachine.nim b/codex/sales/statemachine.nim index ec770ece03..d173254910 100644 --- a/codex/sales/statemachine.nim +++ b/codex/sales/statemachine.nim @@ -12,7 +12,7 @@ export asyncstatemachine type SaleState* = ref object of State - SaleError* = ref object of CodexError + SaleError* = object of CodexError method onCancelled*( state: SaleState, request: StorageRequest diff --git a/codex/sales/states/preparing.nim b/codex/sales/states/preparing.nim index 807bb196c5..dba249de5c 100644 --- a/codex/sales/states/preparing.nim +++ b/codex/sales/states/preparing.nim @@ -51,7 +51,9 @@ method run*( await agent.subscribe() without request =? data.request: - raiseAssert "no sale request" + error "request could not be retrieved", id = data.requestId + let error = newException(SaleError, "request could not be retrieved") + return some State(SaleErrored(error: error)) let slotId = slotId(data.requestId, data.slotIndex) let state = await market.slotState(slotId) diff --git a/codex/sales/states/unknown.nim b/codex/sales/states/unknown.nim index d182d74429..b714a4b986 100644 --- a/codex/sales/states/unknown.nim +++ b/codex/sales/states/unknown.nim @@ -38,6 +38,11 @@ method run*( await agent.retrieveRequest() await agent.subscribe() + without request =? data.request: + error "request could not be retrieved", id = data.requestId + let error = newException(SaleError, "request could not be retrieved") + return some State(SaleErrored(error: error)) + let slotId = slotId(data.requestId, data.slotIndex) let slotState = await market.slotState(slotId) diff --git a/tests/codex/sales/states/testpreparing.nim b/tests/codex/sales/states/testpreparing.nim index 802489a135..747544117a 100644 --- a/tests/codex/sales/states/testpreparing.nim +++ b/tests/codex/sales/states/testpreparing.nim @@ -72,6 +72,12 @@ asyncchecksuite "sales state 'preparing'": let next = state.onSlotFilled(request.id, slotIndex) check !next of SaleFilled + test "run switches to errored when the request cannot be retrieved": + agent = newSalesAgent(context, request.id, slotIndex, StorageRequest.none) + let next = !(await state.run(agent)) + check next of SaleErrored + check SaleErrored(next).error.msg == "request could not be retrieved" + proc createAvailability(enabled = true) {.async.} = let a = await reservations.createAvailability( availability.totalSize, diff --git a/tests/codex/sales/states/testunknown.nim b/tests/codex/sales/states/testunknown.nim index 98b23224a3..4806122f77 100644 --- a/tests/codex/sales/states/testunknown.nim +++ b/tests/codex/sales/states/testunknown.nim @@ -20,15 +20,22 @@ suite "sales state 'unknown'": let slotId = slotId(request.id, slotIndex) var market: MockMarket + var context: SalesContext var agent: SalesAgent var state: SaleUnknown setup: market = MockMarket.new() - let context = SalesContext(market: market) - agent = newSalesAgent(context, request.id, slotIndex, StorageRequest.none) + context = SalesContext(market: market) + agent = newSalesAgent(context, request.id, slotIndex, request.some) state = SaleUnknown.new() + test "switches to error state when the request cannot be retrieved": + agent = newSalesAgent(context, request.id, slotIndex, StorageRequest.none) + let next = await state.run(agent) + check !next of SaleErrored + check SaleErrored(!next).error.msg == "request could not be retrieved" + test "switches to error state when on chain state cannot be fetched": let next = await state.run(agent) check !next of SaleErrored @@ -37,6 +44,7 @@ suite "sales state 'unknown'": market.slotState[slotId] = SlotState.Free let next = await state.run(agent) check !next of SaleErrored + check SaleErrored(!next).error.msg == "Slot state on chain should not be 'free'" test "switches to filled state when on chain state is 'filled'": market.slotState[slotId] = SlotState.Filled From ffbbee01b19404784af92e9b7adf9cc47d43f65f Mon Sep 17 00:00:00 2001 From: markspanbroek Date: Wed, 4 Jun 2025 16:15:07 +0200 Subject: [PATCH 002/178] fix(purchasing): fix crash completing future more than once (#1249) --- codex/purchasing/states/submitted.nim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/codex/purchasing/states/submitted.nim b/codex/purchasing/states/submitted.nim index dd3669e45c..96d384a419 100644 --- a/codex/purchasing/states/submitted.nim +++ b/codex/purchasing/states/submitted.nim @@ -30,12 +30,12 @@ method run*( requestId = purchase.requestId proc wait() {.async.} = - let done = newFuture[void]() + let done = newAsyncEvent() proc callback(_: RequestId) = - done.complete() + done.fire() let subscription = await market.subscribeFulfillment(request.id, callback) - await done + await done.wait() await subscription.unsubscribe() proc withTimeout(future: Future[void]) {.async.} = From 1bea94c39067f6da72732eab231dad334f1c50b3 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 13:36:09 +1000 Subject: [PATCH 003/178] fix(tests): fetching past contract events test (#1255) --- tests/contracts/testMarket.nim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/contracts/testMarket.nim b/tests/contracts/testMarket.nim index a13d0c67e9..cf4882ab1f 100644 --- a/tests/contracts/testMarket.nim +++ b/tests/contracts/testMarket.nim @@ -537,6 +537,8 @@ ethersuite "On-Chain Market": let (_, fromTime) = await ethProvider.blockNumberAndTimestamp(BlockTag.latest) + await ethProvider.advanceTime(1.u256) + await market.reserveSlot(request.id, 1.uint64) await market.reserveSlot(request.id, 2.uint64) await market.fillSlot(request.id, 1.uint64, proof, request.ask.collateralPerSlot) From 092de71d9c54f3d65c04b343708a27c578f468b4 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 20 Dec 2024 16:23:40 +1100 Subject: [PATCH 004/178] parallel tests running - need to test with longer tests to ensure the parallelisation is truly happening - is the +10 hardhat port needed? - try with more integration tests # Conflicts: # tests/integration/hardhatprocess.nim # tests/integration/multinodes.nim # tests/integration/testcli.nim # tests/testIntegration.nim --- tests/integration/hardhatprocess.nim | 10 +- tests/integration/multinodes.nim | 58 +++--- tests/integration/nodeprocess.nim | 3 + tests/integration/testcli.nim | 17 +- tests/integration/testmanager.nim | 275 +++++++++++++++++++++++++++ tests/integration/utils.nim | 34 ++++ tests/testIntegration.nim | 62 ++++-- 7 files changed, 409 insertions(+), 50 deletions(-) create mode 100644 tests/integration/testmanager.nim create mode 100644 tests/integration/utils.nim diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index 40c7942d4d..b30c9320db 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -16,10 +16,10 @@ import ./nodeprocess export codexclient export chronicles +export nodeprocess logScope: topics = "integration testing hardhat process" - nodeName = "hardhat" type HardhatProcess* = ref object of NodeProcess logFile: ?IoHandle @@ -78,6 +78,9 @@ proc startNode*( debug: string | bool = false, name: string, ): Future[HardhatProcess] {.async.} = + logScope: + nodeName = name + var logFilePath = "" var arguments = newSeq[string]() @@ -94,7 +97,7 @@ proc startNode*( arguments: arguments, debug: ($debug != "false"), trackedFutures: TrackedFutures.new(), - name: "hardhat", + name: name, ) await hardhat.start() @@ -105,6 +108,9 @@ proc startNode*( return hardhat method onOutputLineCaptured(node: HardhatProcess, line: string) = + logScope: + nodeName = node.name + without logFile =? node.logFile: return diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index a95fde5890..eeb2df54fc 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -13,6 +13,7 @@ import ./codexprocess import ./hardhatconfig import ./hardhatprocess import ./nodeconfigs +import ./utils import ../asynctest import ../checktest @@ -37,39 +38,15 @@ type MultiNodeSuiteError = object of CatchableError -const jsonRpcProviderUrl* = "ws://localhost:8545" +const HardhatPort {.intdefine.}: int = 8545 +const CodexApiPort {.intdefine.}: int = 8080 +const CodexDiscPort {.intdefine.}: int = 8090 +const TestId {.strdefine.}: string = "TestId" proc raiseMultiNodeSuiteError(msg: string) = raise newException(MultiNodeSuiteError, msg) -proc nextFreePort*(startPort: int): Future[int] {.async.} = - proc client(server: StreamServer, transp: StreamTransport) {.async.} = - await transp.closeWait() - - var port = startPort - while true: - trace "checking if port is free", port - try: - let host = initTAddress("127.0.0.1", port) - # We use ReuseAddr here only to be able to reuse the same IP/Port when - # there's a TIME_WAIT socket. It's useful when running the test multiple - # times or if a test ran previously using the same port. - var server = createStreamServer(host, client, {ReuseAddr}) - trace "port is free", port - await server.closeWait() - return port - except TransportOsError: - trace "port is not free", port - inc port - -proc sanitize(pathSegment: string): string = - var sanitized = pathSegment - for invalid in invalidFilenameChars.items: - sanitized = sanitized.replace(invalid, '_').replace(' ', '_') - sanitized - -proc getTempDirName*(starttime: string, role: Role, roleIdx: int): string = - getTempDir() / "Codex" / sanitize($starttime) / sanitize($role & "_" & $roleIdx) + template multinodesuite*(name: string, body: untyped) = asyncchecksuite name: @@ -85,7 +62,7 @@ template multinodesuite*(name: string, body: untyped) = # If you want to use a different provider url in the nodes, you can # use withEthProvider config modifier in the node config # to set the desired provider url. E.g.: - # NodeConfigs( + # NodeConfigs( # hardhat: # HardhatConfig.none, # clients: @@ -93,6 +70,7 @@ template multinodesuite*(name: string, body: untyped) = # .withEthProvider("ws://localhost:8545") # .some, # ... + var jsonRpcProviderUrl = "http://127.0.0.1:" & $HardhatPort var running {.inject, used.}: seq[RunningNode] var bootstrapNodes: seq[string] let starttime = now().format("yyyy-MM-dd'_'HH:mm:ss") @@ -131,6 +109,10 @@ template multinodesuite*(name: string, body: untyped) = let fileName = logDir / fn return fileName + proc updatePort(url: var string, port: int) = + let parts = url.split(':') + url = @[parts[0], parts[1], $port].join(":") + proc newHardhatProcess( config: HardhatConfig, role: Role ): Future[NodeProcess] {.async.} = @@ -139,6 +121,12 @@ template multinodesuite*(name: string, body: untyped) = let updatedLogFile = getLogFile(role, none int) args.add "--log-file=" & updatedLogFile + let port = await nextFreePort(HardhatPort) + jsonRpcProviderUrl.updatePort(port) + trace "updated jsonRpcProviderUrl", jsonRpcProviderUrl + args.add("--port") + args.add($port) + let node = await HardhatProcess.startNode(args, config.debugEnabled, "hardhat") try: await node.waitUntilStarted() @@ -167,11 +155,11 @@ template multinodesuite*(name: string, body: untyped) = for bootstrapNode in bootstrapNodes: config.addCliOption("--bootstrap-node", bootstrapNode) - config.addCliOption("--api-port", $await nextFreePort(8080 + nodeIdx)) + config.addCliOption("--api-port", $await nextFreePort(CodexApiPort + nodeIdx)) config.addCliOption("--data-dir", datadir) config.addCliOption("--nat", "none") config.addCliOption("--listen-addrs", "/ip4/127.0.0.1/tcp/0") - config.addCliOption("--disc-port", $await nextFreePort(8090 + nodeIdx)) + config.addCliOption("--disc-port", $await nextFreePort(CodexDiscPort + nodeIdx)) except CodexConfigError as e: raiseMultiNodeSuiteError "invalid cli option, error: " & e.msg @@ -232,15 +220,15 @@ template multinodesuite*(name: string, body: untyped) = ) config.addCliOption( PersistenceCmd.prover, "--circom-r1cs", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.r1cs", + "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.r1cs" ) config.addCliOption( PersistenceCmd.prover, "--circom-wasm", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.wasm", + "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.wasm" ) config.addCliOption( PersistenceCmd.prover, "--circom-zkey", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.zkey", + "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.zkey" ) return await newCodexProcess(providerIdx, config, Role.Provider) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index d50dacbe28..5aed81df28 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -156,6 +156,9 @@ proc waitUntilOutput*(node: NodeProcess, output: string) {.async.} = await started.wait(60.seconds) # allow enough time for proof generation proc waitUntilStarted*(node: NodeProcess) {.async.} = + logScope: + nodeName = node.name + try: await node.waitUntilOutput(node.startedOutput) trace "node started" diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index d9f2d08179..ef2a9df216 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -5,13 +5,26 @@ import ../asynctest import ../checktest import ./codexprocess import ./nodeprocess +import ./utils import ../examples asyncchecksuite "Command line interface": let key = "4242424242424242424242424242424242424242424242424242424242424242" + var nodeCount = -1 proc startCodex(args: seq[string]): Future[CodexProcess] {.async.} = return await CodexProcess.startNode(args, false, "cli-test-node") + inc nodeCount + return await CodexProcess.startNode( + args.concat( + @[ + "--api-port=" & $(await nextFreePort(8080 + nodeCount)), + "--disc-port=" & $(await nextFreePort(8090 + nodeCount)) + ] + ), + true, + "cli-test-node", + ) test "complains when persistence is enabled without ethereum account": let node = await startCodex(@["persistence"]) @@ -42,7 +55,7 @@ asyncchecksuite "Command line interface": let node = await startCodex( @[ "persistence", "prover", marketplaceArg, - "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", + "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs" ] ) await node.waitUntilOutput(expectedDownloadInstruction) @@ -53,7 +66,7 @@ asyncchecksuite "Command line interface": @[ "persistence", "prover", marketplaceArg, "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", - "--circom-wasm=tests/circuits/fixtures/proof_main.wasm", + "--circom-wasm=tests/circuits/fixtures/proof_main.wasm" ] ) await node.waitUntilOutput(expectedDownloadInstruction) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim new file mode 100644 index 0000000000..fd46c05950 --- /dev/null +++ b/tests/integration/testmanager.nim @@ -0,0 +1,275 @@ +import std/os +import std/strformat +import pkg/chronos +import pkg/chronos/asyncproc +import pkg/codex/utils/exceptions +import pkg/codex/logutils +import pkg/questionable +import pkg/questionable/results +import ./hardhatprocess +import ./utils +import ../examples + +type + TestManager* = ref object + configs: seq[IntegrationTestConfig] + tests: seq[IntegrationTest] + hardhats: seq[HardhatProcess] + lastHardhatPort: int + lastCodexApiPort: int + lastCodexDiscPort: int + debugTestHarness: bool # output chronicles logs for the manager and multinodes harness + debugHardhat: bool + timeStart: Moment + timeEnd: Moment + codexPortLock: AsyncLock + hardhatPortLock: AsyncLock + + IntegrationTestConfig* = object + startHardhat*: bool + testFile*: string + name*: string + + IntegrationTest = ref object + config: IntegrationTestConfig + process: Future[CommandExResponse].Raising([AsyncProcessError, AsyncProcessTimeoutError, CancelledError]) + timeStart: Moment + timeEnd: Moment + output: ?!CommandExResponse + testId: string # when used in datadir path, prevents data dir clashes + + TestManagerError = object of CatchableError + +{.push raises: [].} + +logScope: + topics = "testing integration testmanager" + +func new*( + _: type TestManager, + configs: seq[IntegrationTestConfig], + debugTestHarness = false, + debugHardhat = false): TestManager = + + TestManager( + configs: configs, + lastHardhatPort: 8545, + lastCodexApiPort: 8000, + lastCodexDiscPort: 9000, + debugTestHarness: debugTestHarness, + debugHardhat: debugHardhat + ) + +proc raiseTestManagerError(msg: string, parent: ref CatchableError = nil) {.raises: [TestManagerError].} = + raise newException(TestManagerError, msg, parent) + +template withLock*(lock: AsyncLock, body: untyped) = + if lock.isNil: + lock = newAsyncLock() + + await lock.acquire() + try: + body + await sleepAsync(1.millis) + finally: + try: + lock.release() + except AsyncLockError as e: + raiseAssert "failed to release lock, error: " & e.msg + +proc startHardhat( + manager: TestManager, + config: IntegrationTestConfig): Future[int] {.async: (raises: [CancelledError, TestManagerError]).} = + + var args: seq[string] = @[] + var port: int + + withLock(manager.hardhatPortLock): + port = await nextFreePort(manager.lastHardhatPort + 10) + manager.lastHardhatPort = port + + args.add("--port") + args.add($port) + + trace "starting hardhat process on port ", port + try: + let node = await HardhatProcess.startNode( + args, + manager.debugHardhat, + "hardhat for '" & config.name & "'") + await node.waitUntilStarted() + manager.hardhats.add node + return port + except CancelledError as e: + raise e + except CatchableError as e: + raiseTestManagerError "hardhat node failed to start: " & e.msg, e + +proc printOutput(manager: TestManager, test: IntegrationTest) = + without output =? test.output, error: + echo "[FATAL] Test '", test.config.name, "' failed to run to completion" + echo " Error: ", error.msg + echo " Stacktrace: ", error.getStackTrace() + return + + if output.status != 0: + if manager.debugTestHarness: + echo output.stdError + echo output.stdOutput + echo "[FAILED] Test '", test.config.name, "' failed" + + else: + echo output.stdOutput + echo "[OK] Test '", test.config.name, "' succeeded" + +proc runTest(manager: TestManager, config: IntegrationTestConfig) {.async: (raises: [CancelledError]).} = + logScope: + config + + trace "Running test" + + var test = IntegrationTest( + config: config, + testId: $ uint16.example + ) + + var hardhatPort = 0 + if config.startHardhat: + try: + hardhatPort = await manager.startHardhat(config) + except TestManagerError as e: + e.msg = "Failed to start hardhat: " & e.msg + test.output = CommandExResponse.failure(e) + + var apiPort, discPort: int + withLock(manager.codexPortLock): + # inc by 20 to allow each test to run 20 codex nodes (clients, SPs, + # validators) giving a good chance the port will be free + apiPort = await nextFreePort(manager.lastCodexApiPort + 20) + manager.lastCodexApiPort = apiPort + discPort = await nextFreePort(manager.lastCodexDiscPort + 20) + manager.lastCodexDiscPort = discPort + + var logging = "" + if manager.debugTestHarness: + logging = "-d:chronicles_log_level=TRACE " & + "-d:chronicles_disabled_topics=websock " & + "-d:chronicles_default_output_device=stdout " & + "-d:chronicles_sinks=textlines" + + var testFile: string + try: + testFile = absolutePath( + config.testFile, + root = currentSourcePath().parentDir().parentDir()) + except ValueError as e: + raiseAssert "bad file name, testFile: " & config.testFile & ", error: " & e.msg + + var command: string + try: + withLock(manager.hardhatPortLock): + command = "nim c " & + &"-d:CodexApiPort={apiPort} " & + &"-d:CodexDiscPort={discPort} " & + (if config.startHardhat: + &"-d:HardhatPort={hardhatPort} " + else: "") & + &"-d:TestId={test.testId} " & + &"{logging} " & + "--verbosity:0 " & + "--hints:off " & + "-d:release " & + "-r " & + &"{testFile}" + except ValueError as e: + raiseAssert "bad command" & + ", apiPort: " & $apiPort & + ", discPort: " & $discPort & + ", logging: " & logging & + ", testFile: " & testFile & + ", error: " & e.msg + trace "Starting parallel integration test", command + + test.timeStart = Moment.now() + test.process = execCommandEx( + command = command, + # options = {AsyncProcessOption.StdErrToStdOut, AsyncProcessOption.EvalCommand}, + timeout = 60.minutes + ) + manager.tests.add test + + try: + test.output = success(await test.process) # waits on waitForExit + test.timeEnd = Moment.now() + # echo "[OK] Test '" & config.name & "' completed in ", test.timeEnd - test.timeStart + info "Test completed", name = config.name, duration = test.timeEnd - test.timeStart + manager.printOutput(test) + except CancelledError as e: + raise e + except AsyncProcessTimeoutError as e: + test.timeEnd = Moment.now() + # echo "[TIMEOUT] Test '" & config.name & "' timed out in ", test.timeEnd - test.timeStart + error "Test timed out", name = config.name, duration = test.timeEnd - test.timeStart + test.output = CommandExResponse.failure(e) + manager.printOutput(test) + except AsyncProcessError as e: + test.timeEnd = Moment.now() + # echo "[FAILED] Test '" & config.name & "' failed in ", test.timeEnd - test.timeStart + error "Test failed to complete", name = config.name,duration = test.timeEnd - test.timeStart + test.output = CommandExResponse.failure(e) + manager.printOutput(test) + +proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = + var testFutures: seq[Future[void].Raising([CancelledError])] + + manager.timeStart = Moment.now() + + for config in manager.configs: + testFutures.add manager.runTest(config) + + await allFutures testFutures + + manager.timeEnd = Moment.now() + +proc printOutput(manager: TestManager) = + var successes = 0 + echo "▢=====================================================================▢" + echo "| TEST SUMMARY |" + echo "=" + for test in manager.tests: + without output =? test.output: + echo "| [FATAL] Test '", test.config.name, "' failed to run to completion" + continue + if output.status != 0: + echo "| [FAILED] Test '", test.config.name, "' failed" + else: + echo "| [OK] Test '", test.config.name, "' succeeded" + inc successes + + echo "| ------------------------------------------------------------------- |" + echo "| PASSING : ", successes, " / ", manager.tests.len + let totalDuration = manager.timeEnd - manager.timeStart + echo "| TOTAL TIME : ", totalDuration + var totalDurationSerial: Duration + for test in manager.tests: + totalDurationSerial += (test.timeEnd - test.timeStart) + # estimated time saved as serial execution with a single hardhat instance + # incurs less overhead + echo "| EST TOTAL TIME IF RUN SERIALLY: ", totalDurationSerial + echo "| EST TIME SAVED (ROUGH) : ", totalDurationSerial - totalDuration + echo "▢=====================================================================▢" + +proc start*(manager: TestManager) {.async: (raises: [CancelledError]).} = + await manager.runTests() + manager.printOutput() + +proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = + for test in manager.tests: + if not test.process.isNil and not test.process.finished: + await test.process.cancelAndWait() + + for hardhat in manager.hardhats: + try: + await hardhat.stop() + except CatchableError as e: + trace "failed to stop hardhat node", error = e.msg \ No newline at end of file diff --git a/tests/integration/utils.nim b/tests/integration/utils.nim new file mode 100644 index 0000000000..d70289e432 --- /dev/null +++ b/tests/integration/utils.nim @@ -0,0 +1,34 @@ +import pkg/chronos +import pkg/codex/logutils + +proc nextFreePort*(startPort: int): Future[int] {.async: (raises:[CancelledError]).} = + + proc client(server: StreamServer, transp: StreamTransport) {.async.} = + await transp.closeWait() + + var port = startPort + while true: + trace "checking if port is free", port + try: + let host = initTAddress("127.0.0.1", port) + # We use ReuseAddr here only to be able to reuse the same IP/Port when + # there's a TIME_WAIT socket. It's useful when running the test multiple + # times or if a test ran previously using the same port. + var server = createStreamServer(host, client, {ReuseAddr}) + trace "port is free", port + await server.closeWait() + return port + except TransportOsError: + trace "port is not free", port + inc port + except TransportAddressError: + raiseAssert "bad address" + +proc sanitize*(pathSegment: string): string = + var sanitized = pathSegment + for invalid in invalidFilenameChars.items: + sanitized = sanitized.replace(invalid, '_').replace(' ', '_') + sanitized + +proc getTempDirName*(starttime: string, role: Role, roleIdx: int): string = + getTempDir() / "Codex" / sanitize(TestId) / sanitize($starttime) / sanitize($role & "_" & $roleIdx) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 152d22ddea..686c4de56e 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -1,13 +1,53 @@ -import ./integration/testcli -import ./integration/testrestapi -import ./integration/testrestapivalidation -import ./integration/testupdownload -import ./integration/testsales -import ./integration/testpurchasing -import ./integration/testblockexpiration -import ./integration/testmarketplace -import ./integration/testproofs -import ./integration/testvalidator -import ./integration/testecbug +# import ./integration/testcli +# import ./integration/testrestapi +# import ./integration/testrestapivalidation +# import ./integration/testupdownload +# import ./integration/testsales +# import ./integration/testpurchasing +# import ./integration/testblockexpiration +# import ./integration/testmarketplace +# import ./integration/testproofs +# import ./integration/testvalidator +# import ./integration/testecbug + +import pkg/chronos +import pkg/codex/logutils +import ./integration/testmanager {.warning[UnusedImport]: off.} + +const TestConfigs = + @[ + # IntegrationTestConfig(testFile: "./integration/testcli", startHardhat: true), + # IntegrationTestConfig(testFile: "./integration/testrestapi", startHardhat: true), + # IntegrationTestConfig(testFile: "./integration/testupdownload", startHardhat: true), + # IntegrationTestConfig(testFile: "./integration/testsales", startHardhat: true), + # IntegrationTestConfig(testFile: "./integration/testpurchasing", startHardhat: true), + # IntegrationTestConfig(testFile: "./integration/testblockexpiration", startHardhat: true), + IntegrationTestConfig( + name: "Basic Marketplace and payout tests", + testFile: "./integration/testmarketplace", + startHardhat: true, + ), + # IntegrationTestConfig(testFile: "./integration/testproofs", startHardhat: true), + # IntegrationTestConfig(testFile: "./integration/testvalidator", startHardhat: true), + IntegrationTestConfig( + name: "Erasure Coding Bug", + testFile: "./integration/testecbug", + startHardhat: true, + ) + IntegrationTestConfig(testFile: "./integration/testrestapivalidation", startHardhat: true) + ] + +proc run() {.async.} = + let manager = TestManager.new( + configs = TestConfigs, debugTestHarness = true, debugHardhat = false + ) + try: + trace "starting test manager" + await manager.start() + finally: + trace "stopping test manager" + await manager.stop() + +waitFor run() From 38f752667d8d309a93b1aceb4720054905b15887 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 20 Dec 2024 16:24:56 +1100 Subject: [PATCH 005/178] test summary formatting --- tests/integration/testmanager.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index fd46c05950..22a700a523 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -235,7 +235,7 @@ proc printOutput(manager: TestManager) = var successes = 0 echo "▢=====================================================================▢" echo "| TEST SUMMARY |" - echo "=" + echo "|" for test in manager.tests: without output =? test.output: echo "| [FATAL] Test '", test.config.name, "' failed to run to completion" @@ -246,7 +246,7 @@ proc printOutput(manager: TestManager) = echo "| [OK] Test '", test.config.name, "' succeeded" inc successes - echo "| ------------------------------------------------------------------- |" + echo "| |" echo "| PASSING : ", successes, " / ", manager.tests.len let totalDuration = manager.timeEnd - manager.timeStart echo "| TOTAL TIME : ", totalDuration From 28eb91b3a5afe6bc3f18c99c88a1d4a601f62f9d Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:15:49 +1100 Subject: [PATCH 006/178] prevent errors during node shutdown --- tests/integration/nodeprocess.nim | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 5aed81df28..3fbb444573 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -128,17 +128,28 @@ method stop*(node: NodeProcess) {.base, async.} = error "failed to terminate process", errCode = $errCode trace "waiting for node process to exit" - let exitCode = await node.process.waitForExit(3.seconds) - if exitCode > 0: + var backoff = 8 + while node.process.running().valueOr false: + backoff = min(backoff*2, 1024) # Exponential backoff + await sleepAsync(backoff) + + let exitCode = node.process.peekExitCode().valueOr: + fatal "could not get exit code from process", error + return + + if exitCode > 0 and exitCode != 143: # 143 = SIGTERM (initiated above) error "failed to exit process, check for zombies", exitCode - trace "closing node process' streams" - await node.process.closeWait() except CancelledError as error: raise error except CatchableError as e: error "error stopping node process", error = e.msg finally: + try: + trace "closing node process' streams" + await node.process.closeWait() + except: + discard node.process = nil trace "node stopped" From 0e9439b201658ee830a3cae17325f210b7db6f70 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 10 Jan 2025 23:22:34 +1100 Subject: [PATCH 007/178] stdout formatting for test results # Conflicts: # tests/testIntegration.nim --- tests/integration/testmanager.nim | 299 ++++++++++++++++++++---------- tests/testIntegration.nim | 6 +- 2 files changed, 206 insertions(+), 99 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 22a700a523..7b829d8b27 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -1,8 +1,10 @@ import std/os import std/strformat +import std/strutils +import std/terminal +import std/unittest import pkg/chronos import pkg/chronos/asyncproc -import pkg/codex/utils/exceptions import pkg/codex/logutils import pkg/questionable import pkg/questionable/results @@ -20,16 +22,24 @@ type lastCodexDiscPort: int debugTestHarness: bool # output chronicles logs for the manager and multinodes harness debugHardhat: bool + debugCodexNodes: bool # output chronicles logs for the codex nodes running in the tests timeStart: Moment timeEnd: Moment codexPortLock: AsyncLock hardhatPortLock: AsyncLock + testTimeout: Duration # individual test timeout IntegrationTestConfig* = object startHardhat*: bool testFile*: string name*: string + IntegrationTestStatus* = enum ## The status of a test when it is done. + OK, + FAILED, + TIMEOUT, + ERROR + IntegrationTest = ref object config: IntegrationTestConfig process: Future[CommandExResponse].Raising([AsyncProcessError, AsyncProcessTimeoutError, CancelledError]) @@ -37,19 +47,27 @@ type timeEnd: Moment output: ?!CommandExResponse testId: string # when used in datadir path, prevents data dir clashes + status: IntegrationTestStatus TestManagerError = object of CatchableError + FormattingError = object of TestManagerError + LockError = object of TestManagerError {.push raises: [].} logScope: topics = "testing integration testmanager" -func new*( +proc raiseTestManagerError(msg: string, parent: ref CatchableError = nil) {.raises: [TestManagerError].} = + raise newException(TestManagerError, msg, parent) + +proc new*( _: type TestManager, configs: seq[IntegrationTestConfig], debugTestHarness = false, - debugHardhat = false): TestManager = + debugHardhat = false, + debugCodexNodes = false, + testTimeout = 60.minutes): TestManager = TestManager( configs: configs, @@ -57,12 +75,11 @@ func new*( lastCodexApiPort: 8000, lastCodexDiscPort: 9000, debugTestHarness: debugTestHarness, - debugHardhat: debugHardhat + debugHardhat: debugHardhat, + debugCodexNodes: debugCodexNodes, + testTimeout: testTimeout ) -proc raiseTestManagerError(msg: string, parent: ref CatchableError = nil) {.raises: [TestManagerError].} = - raise newException(TestManagerError, msg, parent) - template withLock*(lock: AsyncLock, body: untyped) = if lock.isNil: lock = newAsyncLock() @@ -74,8 +91,20 @@ template withLock*(lock: AsyncLock, body: untyped) = finally: try: lock.release() - except AsyncLockError as e: - raiseAssert "failed to release lock, error: " & e.msg + except AsyncLockError as parent: + raiseTestManagerError "lock error", parent + +template styledEcho*(args: varargs[untyped]) = + try: + styledEcho args + except CatchableError as parent: + raiseTestManagerError "failed to print to terminal, error: " & parent.msg, parent + +proc duration(manager: TestManager): Duration = + manager.timeEnd - manager.timeStart + +proc duration(test: IntegrationTest): Duration = + test.timeEnd - test.timeStart proc startHardhat( manager: TestManager, @@ -105,44 +134,57 @@ proc startHardhat( except CatchableError as e: raiseTestManagerError "hardhat node failed to start: " & e.msg, e -proc printOutput(manager: TestManager, test: IntegrationTest) = - without output =? test.output, error: - echo "[FATAL] Test '", test.config.name, "' failed to run to completion" - echo " Error: ", error.msg - echo " Stacktrace: ", error.getStackTrace() - return - - if output.status != 0: - if manager.debugTestHarness: - echo output.stdError - echo output.stdOutput - echo "[FAILED] Test '", test.config.name, "' failed" - - else: - echo output.stdOutput - echo "[OK] Test '", test.config.name, "' succeeded" - -proc runTest(manager: TestManager, config: IntegrationTestConfig) {.async: (raises: [CancelledError]).} = - logScope: - config - - trace "Running test" - - var test = IntegrationTest( - config: config, - testId: $ uint16.example - ) - - var hardhatPort = 0 - if config.startHardhat: - try: - hardhatPort = await manager.startHardhat(config) - except TestManagerError as e: - e.msg = "Failed to start hardhat: " & e.msg - test.output = CommandExResponse.failure(e) +proc printResult( + test: IntegrationTest, + colour: ForegroundColor) {.raises: [TestManagerError].} = + + styledEcho styleBright, colour, &"[{test.status}] ", + resetStyle, test.config.name, + resetStyle, styleDim, &" ({test.duration})" + +proc printResult( + test: IntegrationTest, + processOutput = false, + testHarnessErrors = false) {.raises: [TestManagerError].} = + + if test.status == IntegrationTestStatus.ERROR and + error =? test.output.errorOption: + test.printResult(fgRed) + if testHarnessErrors: + echo "Error during test execution: ", error.msg + echo "Stacktrace: ", error.getStackTrace() + + elif test.status == IntegrationTestStatus.FAILED: + if output =? test.output: + if testHarnessErrors: #manager.debugTestHarness + echo output.stdError + if processOutput: + echo output.stdOutput + test.printResult(fgRed) + + elif test.status == IntegrationTestStatus.TIMEOUT: + test.printResult(fgYellow) + + elif test.status == IntegrationTestStatus.OK: + if processOutput and + output =? test.output: + echo output.stdOutput + test.printResult(fgGreen) + +proc printSummary(test: IntegrationTest) {.raises: [TestManagerError].} = + test.printResult(processOutput = false, testHarnessErrors = false) + +proc printStart(test: IntegrationTest) {.raises: [TestManagerError].} = + styledEcho styleBright, fgMagenta, &"[Integration test started] ", resetStyle, test.config.name + +proc buildCommand( + manager: TestManager, + test: IntegrationTest, + hardhatPort: int): Future[string] {.async: (raises:[CancelledError, TestManagerError]).} = var apiPort, discPort: int withLock(manager.codexPortLock): + # TODO: needed? nextFreePort should take care of this # inc by 20 to allow each test to run 20 codex nodes (clients, SPs, # validators) giving a good chance the port will be free apiPort = await nextFreePort(manager.lastCodexApiPort + 20) @@ -160,70 +202,114 @@ proc runTest(manager: TestManager, config: IntegrationTestConfig) {.async: (rais var testFile: string try: testFile = absolutePath( - config.testFile, + test.config.testFile, root = currentSourcePath().parentDir().parentDir()) - except ValueError as e: - raiseAssert "bad file name, testFile: " & config.testFile & ", error: " & e.msg + except ValueError as parent: + raiseTestManagerError "bad file name, testFile: " & test.config.testFile, parent var command: string - try: - withLock(manager.hardhatPortLock): - command = "nim c " & - &"-d:CodexApiPort={apiPort} " & - &"-d:CodexDiscPort={discPort} " & - (if config.startHardhat: + withLock(manager.hardhatPortLock): + try: + return "nim c " & + &"-d:CodexApiPort={apiPort} " & + &"-d:CodexDiscPort={discPort} " & + (if test.config.startHardhat: &"-d:HardhatPort={hardhatPort} " else: "") & - &"-d:TestId={test.testId} " & - &"{logging} " & + &"-d:TestId={test.testId} " & + &"{logging} " & "--verbosity:0 " & "--hints:off " & "-d:release " & "-r " & - &"{testFile}" - except ValueError as e: - raiseAssert "bad command" & - ", apiPort: " & $apiPort & - ", discPort: " & $discPort & - ", logging: " & logging & - ", testFile: " & testFile & - ", error: " & e.msg - trace "Starting parallel integration test", command + &"{testFile}" + except ValueError as parent: + raiseTestManagerError "bad command --\n" & + ", apiPort: " & $apiPort & + ", discPort: " & $discPort & + ", logging: " & logging & + ", testFile: " & testFile & + ", error: " & parent.msg, + parent + +proc runTest( + manager: TestManager, + config: IntegrationTestConfig) {.async: (raises: [CancelledError, TestManagerError]).} = + logScope: + config + + trace "Running test" + + var test = IntegrationTest( + config: config, + testId: $ uint16.example + ) + + var hardhatPort = 0 + if config.startHardhat: + try: + hardhatPort = await manager.startHardhat(config) + except TestManagerError as e: + e.msg = "Failed to start hardhat: " & e.msg + test.timeEnd = Moment.now() + test.status = IntegrationTestStatus.ERROR + test.output = CommandExResponse.failure(e) + + let command = await manager.buildCommand(test, hardhatPort) + + trace "Starting parallel integration test", command + test.printStart() test.timeStart = Moment.now() test.process = execCommandEx( command = command, - # options = {AsyncProcessOption.StdErrToStdOut, AsyncProcessOption.EvalCommand}, - timeout = 60.minutes + timeout = manager.testTimeout ) manager.tests.add test try: - test.output = success(await test.process) # waits on waitForExit + + let output = await test.process # waits on waitForExit + test.output = success(output) test.timeEnd = Moment.now() - # echo "[OK] Test '" & config.name & "' completed in ", test.timeEnd - test.timeStart + info "Test completed", name = config.name, duration = test.timeEnd - test.timeStart - manager.printOutput(test) + + if output.status != 0: + test.status = IntegrationTestStatus.FAILED + else: + test.status = IntegrationTestStatus.OK + + test.printResult(processOutput = manager.debugCodexNodes, + testHarnessErrors = manager.debugTestHarness) + except CancelledError as e: raise e + except AsyncProcessTimeoutError as e: test.timeEnd = Moment.now() - # echo "[TIMEOUT] Test '" & config.name & "' timed out in ", test.timeEnd - test.timeStart error "Test timed out", name = config.name, duration = test.timeEnd - test.timeStart test.output = CommandExResponse.failure(e) - manager.printOutput(test) + test.status = IntegrationTestStatus.TIMEOUT + test.printResult(processOutput = manager.debugCodexNodes, + testHarnessErrors = manager.debugTestHarness) + except AsyncProcessError as e: test.timeEnd = Moment.now() - # echo "[FAILED] Test '" & config.name & "' failed in ", test.timeEnd - test.timeStart error "Test failed to complete", name = config.name,duration = test.timeEnd - test.timeStart test.output = CommandExResponse.failure(e) - manager.printOutput(test) + test.status = IntegrationTestStatus.ERROR + test.printResult(processOutput = manager.debugCodexNodes, + testHarnessErrors = manager.debugTestHarness) -proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = - var testFutures: seq[Future[void].Raising([CancelledError])] +proc runTests(manager: TestManager) {.async: (raises: [CancelledError, TestManagerError]).} = + var testFutures: seq[Future[void].Raising([CancelledError, TestManagerError])] manager.timeStart = Moment.now() + styledEcho styleBright, bgWhite, fgBlack, + "[Integration Test Manager] Starting parallel integration tests" + for config in manager.configs: testFutures.add manager.runTest(config) @@ -231,37 +317,54 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = manager.timeEnd = Moment.now() -proc printOutput(manager: TestManager) = +type + Border {.pure.} = enum + Left, Right + Align {.pure.} = enum + Left, Right + +proc withBorder( + msg: string, + align = Align.Left, + width = 67, + borders = {Border.Left, Border.Right}): string = + + if borders.contains(Border.Left): + result &= "| " + if align == Align.Left: + result &= msg.alignLeft(width) + elif align == Align.Right: + result &= msg.align(width) + if borders.contains(Border.Right): + result &= " |" + +proc printResult(manager: TestManager) {.raises: [TestManagerError].}= var successes = 0 - echo "▢=====================================================================▢" - echo "| TEST SUMMARY |" - echo "|" - for test in manager.tests: - without output =? test.output: - echo "| [FATAL] Test '", test.config.name, "' failed to run to completion" - continue - if output.status != 0: - echo "| [FAILED] Test '", test.config.name, "' failed" - else: - echo "| [OK] Test '", test.config.name, "' succeeded" - inc successes - - echo "| |" - echo "| PASSING : ", successes, " / ", manager.tests.len - let totalDuration = manager.timeEnd - manager.timeStart - echo "| TOTAL TIME : ", totalDuration var totalDurationSerial: Duration for test in manager.tests: - totalDurationSerial += (test.timeEnd - test.timeStart) + totalDurationSerial += test.duration + if test.status == IntegrationTestStatus.OK: + inc successes # estimated time saved as serial execution with a single hardhat instance # incurs less overhead - echo "| EST TOTAL TIME IF RUN SERIALLY: ", totalDurationSerial - echo "| EST TIME SAVED (ROUGH) : ", totalDurationSerial - totalDuration + let relativeTimeSaved = ((totalDurationSerial - manager.duration).nanos * 100) div + (totalDurationSerial.nanos) + let passingStyle = if successes < manager.tests.len: + fgRed + else: + fgGreen + + echo "\n▢=====================================================================▢" + styledEcho "| ", styleBright, styleUnderscore, "INTEGRATION TEST SUMMARY", resetStyle, "".withBorder(Align.Right, 43, {Border.Right}) + echo "".withBorder() + styledEcho styleBright, "| TOTAL TIME : ", resetStyle, ($manager.duration).withBorder(Align.Right, 49, {Border.Right}) + styledEcho styleBright, "| TIME SAVED (EST): ", resetStyle, (&"{relativeTimeSaved}%").withBorder(Align.Right, 49, {Border.Right}) + styledEcho "| ", styleBright, passingStyle, "PASSING : ", resetStyle, passingStyle, (&"{successes} / {manager.tests.len}").align(49), resetStyle, " |" echo "▢=====================================================================▢" -proc start*(manager: TestManager) {.async: (raises: [CancelledError]).} = +proc start*(manager: TestManager) {.async: (raises: [CancelledError, TestManagerError]).} = await manager.runTests() - manager.printOutput() + manager.printResult() proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = for test in manager.tests: diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 686c4de56e..66a72d8c49 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -41,7 +41,11 @@ const TestConfigs = proc run() {.async.} = let manager = TestManager.new( - configs = TestConfigs, debugTestHarness = true, debugHardhat = false + configs = TestConfigs, + debugTestHarness = true, + debugCodexNodes = false, + # requires CodexConfig.debug to be enabled in the test file (on the marketplacesuite) + debugHardhat = false, ) try: trace "starting test manager" From bbea4371dad7a09f8daa4b24504243887da8ba49 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:30:18 +1100 Subject: [PATCH 008/178] clean up --- tests/integration/testmanager.nim | 49 +++++++++++++++---------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 7b829d8b27..15c6997d3b 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -34,11 +34,11 @@ type testFile*: string name*: string - IntegrationTestStatus* = enum ## The status of a test when it is done. - OK, - FAILED, - TIMEOUT, - ERROR + IntegrationTestStatus = enum ## The status of a test when it is done. + Ok, # tests completed and all succeeded + Failed, # tests completed, but one or more of the tests failed + Timeout, # the tests did not complete before the timeout + Error # the tests did not complete because an error occurred running the tests (usually an error in the harness) IntegrationTest = ref object config: IntegrationTestConfig @@ -50,8 +50,11 @@ type status: IntegrationTestStatus TestManagerError = object of CatchableError - FormattingError = object of TestManagerError - LockError = object of TestManagerError + + Border {.pure.} = enum + Left, Right + Align {.pure.} = enum + Left, Right {.push raises: [].} @@ -138,7 +141,7 @@ proc printResult( test: IntegrationTest, colour: ForegroundColor) {.raises: [TestManagerError].} = - styledEcho styleBright, colour, &"[{test.status}] ", + styledEcho styleBright, colour, &"[{toUpper $test.status}] ", resetStyle, test.config.name, resetStyle, styleDim, &" ({test.duration})" @@ -147,14 +150,14 @@ proc printResult( processOutput = false, testHarnessErrors = false) {.raises: [TestManagerError].} = - if test.status == IntegrationTestStatus.ERROR and + if test.status == IntegrationTestStatus.Error and error =? test.output.errorOption: test.printResult(fgRed) if testHarnessErrors: echo "Error during test execution: ", error.msg echo "Stacktrace: ", error.getStackTrace() - elif test.status == IntegrationTestStatus.FAILED: + elif test.status == IntegrationTestStatus.Failed: if output =? test.output: if testHarnessErrors: #manager.debugTestHarness echo output.stdError @@ -162,12 +165,12 @@ proc printResult( echo output.stdOutput test.printResult(fgRed) - elif test.status == IntegrationTestStatus.TIMEOUT: + elif test.status == IntegrationTestStatus.Timeout: test.printResult(fgYellow) - elif test.status == IntegrationTestStatus.OK: + elif test.status == IntegrationTestStatus.Ok: if processOutput and - output =? test.output: + output =? test.output: echo output.stdOutput test.printResult(fgGreen) @@ -253,7 +256,7 @@ proc runTest( except TestManagerError as e: e.msg = "Failed to start hardhat: " & e.msg test.timeEnd = Moment.now() - test.status = IntegrationTestStatus.ERROR + test.status = IntegrationTestStatus.Error test.output = CommandExResponse.failure(e) let command = await manager.buildCommand(test, hardhatPort) @@ -276,9 +279,9 @@ proc runTest( info "Test completed", name = config.name, duration = test.timeEnd - test.timeStart if output.status != 0: - test.status = IntegrationTestStatus.FAILED + test.status = IntegrationTestStatus.Failed else: - test.status = IntegrationTestStatus.OK + test.status = IntegrationTestStatus.Ok test.printResult(processOutput = manager.debugCodexNodes, testHarnessErrors = manager.debugTestHarness) @@ -290,7 +293,7 @@ proc runTest( test.timeEnd = Moment.now() error "Test timed out", name = config.name, duration = test.timeEnd - test.timeStart test.output = CommandExResponse.failure(e) - test.status = IntegrationTestStatus.TIMEOUT + test.status = IntegrationTestStatus.Timeout test.printResult(processOutput = manager.debugCodexNodes, testHarnessErrors = manager.debugTestHarness) @@ -298,7 +301,7 @@ proc runTest( test.timeEnd = Moment.now() error "Test failed to complete", name = config.name,duration = test.timeEnd - test.timeStart test.output = CommandExResponse.failure(e) - test.status = IntegrationTestStatus.ERROR + test.status = IntegrationTestStatus.Error test.printResult(processOutput = manager.debugCodexNodes, testHarnessErrors = manager.debugTestHarness) @@ -308,7 +311,7 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError, TestManag manager.timeStart = Moment.now() styledEcho styleBright, bgWhite, fgBlack, - "[Integration Test Manager] Starting parallel integration tests" + "\n[Integration Test Manager] Starting parallel integration tests" for config in manager.configs: testFutures.add manager.runTest(config) @@ -317,12 +320,6 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError, TestManag manager.timeEnd = Moment.now() -type - Border {.pure.} = enum - Left, Right - Align {.pure.} = enum - Left, Right - proc withBorder( msg: string, align = Align.Left, @@ -343,7 +340,7 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].}= var totalDurationSerial: Duration for test in manager.tests: totalDurationSerial += test.duration - if test.status == IntegrationTestStatus.OK: + if test.status == IntegrationTestStatus.Ok: inc successes # estimated time saved as serial execution with a single hardhat instance # incurs less overhead From 8cce661d76b9c963aeb915f7647ab6fbb99a55a9 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:38:26 +1100 Subject: [PATCH 009/178] print start/finish stderr/stdout markers # Conflicts: # tests/testIntegration.nim --- tests/integration/testmanager.nim | 31 ++++++++++++++++++++++++++++++- tests/testIntegration.nim | 5 +++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 15c6997d3b..adb868e721 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -1,7 +1,7 @@ import std/os import std/strformat -import std/strutils import std/terminal +from std/unicode import toUpper import std/unittest import pkg/chronos import pkg/chronos/asyncproc @@ -56,6 +56,10 @@ type Align {.pure.} = enum Left, Right + MarkerPosition {.pure.} = enum + Start, + Finish + {.push raises: [].} logScope: @@ -145,6 +149,17 @@ proc printResult( resetStyle, test.config.name, resetStyle, styleDim, &" ({test.duration})" +proc printOutputMarker( + test: IntegrationTest, + position: MarkerPosition, + msg: string) {.raises: [TestManagerError].} = + + let newLine = if position == MarkerPosition.Start: "\n" + else: "" + + styledEcho styleBright, bgWhite, fgBlack, + &"{newLine}----- {toUpper $position} {test.config.name} {msg} -----" + proc printResult( test: IntegrationTest, processOutput = false, @@ -154,15 +169,25 @@ proc printResult( error =? test.output.errorOption: test.printResult(fgRed) if testHarnessErrors: + test.printOutputMarker(MarkerPosition.Start, "test harness errors") echo "Error during test execution: ", error.msg echo "Stacktrace: ", error.getStackTrace() + test.printOutputMarker(MarkerPosition.Finish, "test harness errors") elif test.status == IntegrationTestStatus.Failed: if output =? test.output: if testHarnessErrors: #manager.debugTestHarness + test.printOutputMarker(MarkerPosition.Start, + "test harness errors (stderr)") echo output.stdError + test.printOutputMarker(MarkerPosition.Finish, + "test harness errors (stderr)") if processOutput: + test.printOutputMarker(MarkerPosition.Start, + "codex node output (stdout)") echo output.stdOutput + test.printOutputMarker(MarkerPosition.Finish, + "codex node output (stdout)") test.printResult(fgRed) elif test.status == IntegrationTestStatus.Timeout: @@ -171,7 +196,11 @@ proc printResult( elif test.status == IntegrationTestStatus.Ok: if processOutput and output =? test.output: + test.printOutputMarker(MarkerPosition.Start, + "codex node output (stdout)") echo output.stdOutput + test.printOutputMarker(MarkerPosition.Finish, + "codex node output (stdout)") test.printResult(fgGreen) proc printSummary(test: IntegrationTest) {.raises: [TestManagerError].} = diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 66a72d8c49..ef26a31d95 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -43,8 +43,9 @@ proc run() {.async.} = let manager = TestManager.new( configs = TestConfigs, debugTestHarness = true, - debugCodexNodes = false, - # requires CodexConfig.debug to be enabled in the test file (on the marketplacesuite) + # Echos stderr if there's a test failure or error (error in running the test) + debugCodexNodes = true, + # Echos stdout from the Codex process (chronicles logs). If test uses a multinodesuite, requires CodexConfig.debug to be enabled debugHardhat = false, ) try: From b841f0460289f9ecdfb118ca7c13905c06745aec Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:39:07 +1100 Subject: [PATCH 010/178] default test name to the filename of the integration test # Conflicts: # tests/testIntegration.nim --- tests/integration/testmanager.nim | 21 +++++++++++++++++--- tests/testIntegration.nim | 32 +++++++++++++++---------------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index adb868e721..8fc91a61d4 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -30,9 +30,9 @@ type testTimeout: Duration # individual test timeout IntegrationTestConfig* = object - startHardhat*: bool - testFile*: string - name*: string + startHardhat: bool + testFile: string + name: string IntegrationTestStatus = enum ## The status of a test when it is done. Ok, # tests completed and all succeeded @@ -87,6 +87,21 @@ proc new*( testTimeout: testTimeout ) +func init*( + _: type IntegrationTestConfig, + testFile: string, + startHardhat: bool, + name = ""): IntegrationTestConfig = + + IntegrationTestConfig( + testFile: testFile, + name: if name == "": + testFile.extractFilename + else: + name, + startHardhat: startHardhat + ) + template withLock*(lock: AsyncLock, body: untyped) = if lock.isNil: lock = newAsyncLock() diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index ef26a31d95..1a273b5237 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -18,23 +18,23 @@ import ./integration/testmanager const TestConfigs = @[ - # IntegrationTestConfig(testFile: "./integration/testcli", startHardhat: true), - # IntegrationTestConfig(testFile: "./integration/testrestapi", startHardhat: true), - # IntegrationTestConfig(testFile: "./integration/testupdownload", startHardhat: true), - # IntegrationTestConfig(testFile: "./integration/testsales", startHardhat: true), - # IntegrationTestConfig(testFile: "./integration/testpurchasing", startHardhat: true), - # IntegrationTestConfig(testFile: "./integration/testblockexpiration", startHardhat: true), - IntegrationTestConfig( - name: "Basic Marketplace and payout tests", - testFile: "./integration/testmarketplace", - startHardhat: true, + IntegrationTestConfig.init("./integration/testcli", startHardhat = true), + IntegrationTestConfig.init("./integration/testrestapi", startHardhat = false), + # IntegrationTestConfig.init("./integration/testupdownload", startHardhat = true), + # IntegrationTestConfig.init("./integration/testsales", startHardhat = true), + # IntegrationTestConfig.init("./integration/testpurchasing", startHardhat = true), + # IntegrationTestConfig.init("./integration/testblockexpiration", startHardhat = true), + # IntegrationTestConfig.init( + # name = "Basic Marketplace and payout tests", + # testFile = "./integration/testmarketplace", + # startHardhat = true, ), - # IntegrationTestConfig(testFile: "./integration/testproofs", startHardhat: true), - # IntegrationTestConfig(testFile: "./integration/testvalidator", startHardhat: true), - IntegrationTestConfig( - name: "Erasure Coding Bug", - testFile: "./integration/testecbug", - startHardhat: true, + # IntegrationTestConfig("./integration/testproofs", startHardhat = true), + # IntegrationTestConfig("./integration/testvalidator", startHardhat = true), + IntegrationTestConfig.init( + name = "Erasure Coding Bug", + testFile = "./integration/testecbug", + startHardhat = true, ) IntegrationTestConfig(testFile: "./integration/testrestapivalidation", startHardhat: true) ] From f9e26bde31f6cd6d3afb99e914bc632e844ab06a Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 14 Jan 2025 14:56:30 +1100 Subject: [PATCH 011/178] stop hardhat and show logs # Conflicts: # tests/integration/hardhatprocess.nim --- tests/integration/hardhatprocess.nim | 9 ++ tests/integration/testmanager.nim | 126 +++++++++++++++++++-------- 2 files changed, 97 insertions(+), 38 deletions(-) diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index b30c9320db..df54c1124b 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -24,6 +24,12 @@ logScope: type HardhatProcess* = ref object of NodeProcess logFile: ?IoHandle +type + OnOutputLineCaptured = proc(line: string) {.raises: [].} + HardhatProcess* = ref object of NodeProcess + logFile: ?IoHandle + onOutputLine: OnOutputLineCaptured + method workingDir(node: HardhatProcess): string = return currentSourcePath() / ".." / ".." / ".." / "vendor" / "codex-contracts-eth" @@ -111,6 +117,9 @@ method onOutputLineCaptured(node: HardhatProcess, line: string) = logScope: nodeName = node.name + if not node.onOutputLine.isNil: + node.onOutputLine(line) + without logFile =? node.logFile: return diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 8fc91a61d4..ee96109f84 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -49,7 +49,7 @@ type testId: string # when used in datadir path, prevents data dir clashes status: IntegrationTestStatus - TestManagerError = object of CatchableError + TestManagerError* = object of CatchableError Border {.pure.} = enum Left, Right @@ -120,7 +120,8 @@ template styledEcho*(args: varargs[untyped]) = try: styledEcho args except CatchableError as parent: - raiseTestManagerError "failed to print to terminal, error: " & parent.msg, parent + # no need to re-raise this, as it'll eventually have to be logged only + error "failed to print to terminal", error = parent.msg proc duration(manager: TestManager): Duration = manager.timeEnd - manager.timeStart @@ -130,11 +131,17 @@ proc duration(test: IntegrationTest): Duration = proc startHardhat( manager: TestManager, - config: IntegrationTestConfig): Future[int] {.async: (raises: [CancelledError, TestManagerError]).} = + config: IntegrationTestConfig): Future[Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = var args: seq[string] = @[] var port: int + let hardhat = Hardhat.new() + manager.hardhats.add hardhat + + proc onOutputLineCaptured(line: string) {.raises: [].} = + hardhat.output.add line + withLock(manager.hardhatPortLock): port = await nextFreePort(manager.lastHardhatPort + 10) manager.lastHardhatPort = port @@ -146,11 +153,13 @@ proc startHardhat( try: let node = await HardhatProcess.startNode( args, - manager.debugHardhat, - "hardhat for '" & config.name & "'") + false, + "hardhat for '" & config.name & "'", + onOutputLineCaptured) await node.waitUntilStarted() - manager.hardhats.add node - return port + hardhat.process = node + hardhat.port = port + return hardhat except CancelledError as e: raise e except CatchableError as e: @@ -158,7 +167,7 @@ proc startHardhat( proc printResult( test: IntegrationTest, - colour: ForegroundColor) {.raises: [TestManagerError].} = + colour: ForegroundColor) = styledEcho styleBright, colour, &"[{toUpper $test.status}] ", resetStyle, test.config.name, @@ -167,18 +176,21 @@ proc printResult( proc printOutputMarker( test: IntegrationTest, position: MarkerPosition, - msg: string) {.raises: [TestManagerError].} = + msg: string) = - let newLine = if position == MarkerPosition.Start: "\n" - else: "" + if position == MarkerPosition.Start: + echo "" styledEcho styleBright, bgWhite, fgBlack, - &"{newLine}----- {toUpper $position} {test.config.name} {msg} -----" + &"----- {toUpper $position} {test.config.name} {msg} -----" + + if position == MarkerPosition.Finish: + echo "" proc printResult( test: IntegrationTest, processOutput = false, - testHarnessErrors = false) {.raises: [TestManagerError].} = + testHarnessErrors = false) = if test.status == IntegrationTestStatus.Error and error =? test.output.errorOption: @@ -218,16 +230,27 @@ proc printResult( "codex node output (stdout)") test.printResult(fgGreen) -proc printSummary(test: IntegrationTest) {.raises: [TestManagerError].} = +proc printSummary(test: IntegrationTest) = test.printResult(processOutput = false, testHarnessErrors = false) -proc printStart(test: IntegrationTest) {.raises: [TestManagerError].} = +proc printStart(test: IntegrationTest) = styledEcho styleBright, fgMagenta, &"[Integration test started] ", resetStyle, test.config.name +proc stopHardhat( + manager: TestManager, + test: IntegrationTest, + hardhat: Hardhat) {.async: (raises: [CancelledError, TestManagerError]).} = + + try: + await hardhat.process.stop() + except CatchableError as parent: + raiseTestManagerError("failed to stop hardhat node", parent) + + proc buildCommand( manager: TestManager, test: IntegrationTest, - hardhatPort: int): Future[string] {.async: (raises:[CancelledError, TestManagerError]).} = + hardhatPort: ?int): Future[string] {.async: (raises:[CancelledError, TestManagerError]).} = var apiPort, discPort: int withLock(manager.codexPortLock): @@ -246,6 +269,13 @@ proc buildCommand( "-d:chronicles_default_output_device=stdout " & "-d:chronicles_sinks=textlines" + let strHardhatPort = + if not test.config.startHardhat: "" + else: + without port =? hardhatPort: + raiseTestManagerError "hardhatPort required when 'config.startHardhat' is true" + "-d:HardhatPort=" & $port + var testFile: string try: testFile = absolutePath( @@ -260,9 +290,7 @@ proc buildCommand( return "nim c " & &"-d:CodexApiPort={apiPort} " & &"-d:CodexDiscPort={discPort} " & - (if test.config.startHardhat: - &"-d:HardhatPort={hardhatPort} " - else: "") & + &"{strHardhatPort} " & &"-d:TestId={test.testId} " & &"{logging} " & "--verbosity:0 " & @@ -281,7 +309,7 @@ proc buildCommand( proc runTest( manager: TestManager, - config: IntegrationTestConfig) {.async: (raises: [CancelledError, TestManagerError]).} = + config: IntegrationTestConfig) {.async: (raises: [CancelledError]).} = logScope: config @@ -293,34 +321,37 @@ proc runTest( testId: $ uint16.example ) - var hardhatPort = 0 - if config.startHardhat: - try: - hardhatPort = await manager.startHardhat(config) - except TestManagerError as e: - e.msg = "Failed to start hardhat: " & e.msg - test.timeEnd = Moment.now() - test.status = IntegrationTestStatus.Error - test.output = CommandExResponse.failure(e) + test.timeStart = Moment.now() + manager.tests.add test - let command = await manager.buildCommand(test, hardhatPort) + var hardhat: Hardhat + var hardhatPort = int.none + var command: string + try: + if config.startHardhat: + hardhat = await manager.startHardhat(config) + hardhatPort = hardhat.port.some + command = await manager.buildCommand(test, hardhatPort) + except TestManagerError as e: + error "Failed to start hardhat and build command", error = e.msg + test.timeEnd = Moment.now() + test.status = IntegrationTestStatus.Error + test.output = CommandExResponse.failure(e) + test.printResult(processOutput = manager.debugCodexNodes, + testHarnessErrors = manager.debugTestHarness) + return trace "Starting parallel integration test", command test.printStart() - test.timeStart = Moment.now() test.process = execCommandEx( command = command, timeout = manager.testTimeout ) - manager.tests.add test try: let output = await test.process # waits on waitForExit test.output = success(output) - test.timeEnd = Moment.now() - - info "Test completed", name = config.name, duration = test.timeEnd - test.timeStart if output.status != 0: test.status = IntegrationTestStatus.Failed @@ -349,8 +380,27 @@ proc runTest( test.printResult(processOutput = manager.debugCodexNodes, testHarnessErrors = manager.debugTestHarness) -proc runTests(manager: TestManager) {.async: (raises: [CancelledError, TestManagerError]).} = - var testFutures: seq[Future[void].Raising([CancelledError, TestManagerError])] + if config.startHardhat and not hardhat.isNil: + try: + trace "Stopping hardhat", name = config.name + await manager.stopHardhat(test, hardhat) + except TestManagerError as e: + warn "Failed to stop hardhat node, continuing", + error = e.msg, test = test.config.name + + if manager.debugHardhat: + test.printOutputMarker(MarkerPosition.Start, "Hardhat stdout") + for line in hardhat.output: + echo line + test.printOutputMarker(MarkerPosition.Finish, "Hardhat stdout") + + manager.hardhats.keepItIf( it != hardhat ) + + test.timeEnd = Moment.now() + info "Test completed", name = config.name, duration = test.timeEnd - test.timeStart + +proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = + var testFutures: seq[Future[void].Raising([CancelledError])] manager.timeStart = Moment.now() @@ -414,6 +464,6 @@ proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = for hardhat in manager.hardhats: try: - await hardhat.stop() + await hardhat.process.stop() except CatchableError as e: trace "failed to stop hardhat node", error = e.msg \ No newline at end of file From 3af3162c0488057c2a98b35ecce340cb1dd803e7 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 14 Jan 2025 14:58:08 +1100 Subject: [PATCH 012/178] expect process exit code prevents showing error in the logs when an expected process exit code is encountered # Conflicts: # tests/integration/testcli.nim --- tests/integration/nodeprocess.nim | 6 ++-- tests/integration/testcli.nim | 48 +++++++++++++++++++------------ 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 3fbb444573..d5200a2fa2 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -116,7 +116,7 @@ proc startNode*[T: NodeProcess]( await node.start() return node -method stop*(node: NodeProcess) {.base, async.} = +method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = logScope: nodeName = node.name @@ -137,7 +137,9 @@ method stop*(node: NodeProcess) {.base, async.} = fatal "could not get exit code from process", error return - if exitCode > 0 and exitCode != 143: # 143 = SIGTERM (initiated above) + if exitCode > 0 and + exitCode != 143 and # 143 = SIGTERM (initiated above) + exitCode != expectedErrCode: error "failed to exit process, check for zombies", exitCode except CancelledError as error: diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index ef2a9df216..eaaf2810b4 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -8,6 +8,8 @@ import ./nodeprocess import ./utils import ../examples +const HardhatPort {.intdefine.}: int = 8545 + asyncchecksuite "Command line interface": let key = "4242424242424242424242424242424242424242424242424242424242424242" @@ -29,16 +31,22 @@ asyncchecksuite "Command line interface": 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() + 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-private-key=" & unsafeKeyFile]) + let node = await startCodex( + @[ + "persistence", + "--eth-provider=" & "http://127.0.0.1:" & $HardhatPort, + "--eth-private-key=" & unsafeKeyFile + ] + ) await node.waitUntilOutput( "Ethereum private key file does not have safe file permissions" ) - await node.stop() + await node.stop(expectedErrCode = 1) discard removeFile(unsafeKeyFile) let @@ -49,25 +57,27 @@ asyncchecksuite "Command line interface": 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() + await node.stop(expectedErrCode = 1) test "suggests downloading of circuit files when persistence is enabled without accessible wasm file": - let node = await startCodex( - @[ - "persistence", "prover", marketplaceArg, - "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs" - ] - ) + let node = await startCodex(@[ + "persistence",ß + "--eth-provider=" & "http://127.0.0.1:" & $HardhatPort, + "prover", + marketplaceArg, + "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs" + ]) await node.waitUntilOutput(expectedDownloadInstruction) - await node.stop() + await node.stop(expectedErrCode = 1) test "suggests downloading of circuit files when persistence is enabled without accessible zkey file": - let node = await startCodex( - @[ - "persistence", "prover", marketplaceArg, - "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", - "--circom-wasm=tests/circuits/fixtures/proof_main.wasm" - ] - ) + let node = await startCodex(@[ + "persistence", + "--eth-provider=" & "http://127.0.0.1:" & $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() + await node.stop(expectedErrCode = 1) From f957c58c582c0c949c82f1495d930b63704862cf Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 14 Jan 2025 17:48:24 +1100 Subject: [PATCH 013/178] Add additional logging info print outs # Conflicts: # tests/integration/testcli.nim --- tests/integration/testcli.nim | 2 +- tests/integration/testmanager.nim | 124 +++++++++++++++++------------- 2 files changed, 70 insertions(+), 56 deletions(-) diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index eaaf2810b4..5360a0ae20 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -24,7 +24,7 @@ asyncchecksuite "Command line interface": "--disc-port=" & $(await nextFreePort(8090 + nodeCount)) ] ), - true, + debug = false, "cli-test-node", ) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index ee96109f84..e71f953632 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -13,10 +13,15 @@ import ./utils import ../examples type + Hardhat = ref object + process: HardhatProcess + output: seq[string] + port: int + TestManager* = ref object configs: seq[IntegrationTestConfig] tests: seq[IntegrationTest] - hardhats: seq[HardhatProcess] + hardhats: seq[Hardhat] lastHardhatPort: int lastCodexApiPort: int lastCodexDiscPort: int @@ -35,10 +40,10 @@ type name: string IntegrationTestStatus = enum ## The status of a test when it is done. - Ok, # tests completed and all succeeded - Failed, # tests completed, but one or more of the tests failed - Timeout, # the tests did not complete before the timeout - Error # the tests did not complete because an error occurred running the tests (usually an error in the harness) + Ok, # Test file launched, and exited with 0. Indicates all tests completed and passed. + Failed, # Test file launched, but exited with a non-zero exit code. Indicates either the test file did not compile, or one or more of the tests in the file failed + Timeout, # Test file launched, but the tests did not complete before the timeout. + Error # Test file did not launch correctly. Indicates an error occurred running the tests (usually an error in the harness). IntegrationTest = ref object config: IntegrationTestConfig @@ -51,15 +56,6 @@ type TestManagerError* = object of CatchableError - Border {.pure.} = enum - Left, Right - Align {.pure.} = enum - Left, Right - - MarkerPosition {.pure.} = enum - Start, - Finish - {.push raises: [].} logScope: @@ -68,6 +64,13 @@ logScope: proc raiseTestManagerError(msg: string, parent: ref CatchableError = nil) {.raises: [TestManagerError].} = raise newException(TestManagerError, msg, parent) +template echoStyled(args: varargs[untyped]) = + try: + styledEcho args + except CatchableError as parent: + # no need to re-raise this, as it'll eventually have to be logged only + error "failed to print to terminal", error = parent.msg + proc new*( _: type TestManager, configs: seq[IntegrationTestConfig], @@ -76,6 +79,25 @@ proc new*( debugCodexNodes = false, testTimeout = 60.minutes): TestManager = + if debugTestHarness: + when enabledLogLevel != LogLevel.TRACE: + echoStyled bgWhite, fgBlack, styleBright, "\n\n ", + styleUnderscore, "ADDITIONAL LOGGING AVAILABILE\n\n", + resetStyle, bgWhite, fgBlack, styleBright, """ + More integration test harness logs available by running with + -d:chronicles_log_level=TRACE, eg:""", + resetStyle, bgWhite, fgBlack, + "\n\n nim c -d:chronicles_log_level=TRACE -r ./testIntegration.nim\n\n" + + if debugCodexNodes: + echoStyled bgWhite, fgBlack, styleBright, "\n\n ", + styleUnderscore, "ENABLE CODEX LOGGING\n\n", + resetStyle, bgWhite, fgBlack, styleBright, """ + For integration test suites that are multinodesuites, or for + tests launching a CodexProcess, ensure that CodexConfig.debug + is enabled. + """ + TestManager( configs: configs, lastHardhatPort: 8545, @@ -116,12 +138,6 @@ template withLock*(lock: AsyncLock, body: untyped) = except AsyncLockError as parent: raiseTestManagerError "lock error", parent -template styledEcho*(args: varargs[untyped]) = - try: - styledEcho args - except CatchableError as parent: - # no need to re-raise this, as it'll eventually have to be logged only - error "failed to print to terminal", error = parent.msg proc duration(manager: TestManager): Duration = manager.timeEnd - manager.timeStart @@ -165,11 +181,21 @@ proc startHardhat( except CatchableError as e: raiseTestManagerError "hardhat node failed to start: " & e.msg, e +proc stopHardhat( + manager: TestManager, + test: IntegrationTest, + hardhat: Hardhat) {.async: (raises: [CancelledError, TestManagerError]).} = + + try: + await hardhat.process.stop() + except CatchableError as parent: + raiseTestManagerError("failed to stop hardhat node", parent) + proc printResult( test: IntegrationTest, colour: ForegroundColor) = - styledEcho styleBright, colour, &"[{toUpper $test.status}] ", + echoStyled styleBright, colour, &"[{toUpper $test.status}] ", resetStyle, test.config.name, resetStyle, styleDim, &" ({test.duration})" @@ -181,7 +207,7 @@ proc printOutputMarker( if position == MarkerPosition.Start: echo "" - styledEcho styleBright, bgWhite, fgBlack, + echoStyled styleBright, bgWhite, fgBlack, &"----- {toUpper $position} {test.config.name} {msg} -----" if position == MarkerPosition.Finish: @@ -189,13 +215,13 @@ proc printOutputMarker( proc printResult( test: IntegrationTest, - processOutput = false, - testHarnessErrors = false) = + printStdOut = false, + printStdErr = false) = if test.status == IntegrationTestStatus.Error and error =? test.output.errorOption: test.printResult(fgRed) - if testHarnessErrors: + if printStdErr: test.printOutputMarker(MarkerPosition.Start, "test harness errors") echo "Error during test execution: ", error.msg echo "Stacktrace: ", error.getStackTrace() @@ -203,13 +229,13 @@ proc printResult( elif test.status == IntegrationTestStatus.Failed: if output =? test.output: - if testHarnessErrors: #manager.debugTestHarness + if printStdErr: #manager.debugTestHarness test.printOutputMarker(MarkerPosition.Start, "test harness errors (stderr)") echo output.stdError test.printOutputMarker(MarkerPosition.Finish, "test harness errors (stderr)") - if processOutput: + if printStdOut: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") echo output.stdOutput @@ -221,7 +247,7 @@ proc printResult( test.printResult(fgYellow) elif test.status == IntegrationTestStatus.Ok: - if processOutput and + if printStdOut and output =? test.output: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") @@ -231,21 +257,10 @@ proc printResult( test.printResult(fgGreen) proc printSummary(test: IntegrationTest) = - test.printResult(processOutput = false, testHarnessErrors = false) + test.printResult(printStdOut = false, printStdErr = false) proc printStart(test: IntegrationTest) = - styledEcho styleBright, fgMagenta, &"[Integration test started] ", resetStyle, test.config.name - -proc stopHardhat( - manager: TestManager, - test: IntegrationTest, - hardhat: Hardhat) {.async: (raises: [CancelledError, TestManagerError]).} = - - try: - await hardhat.process.stop() - except CatchableError as parent: - raiseTestManagerError("failed to stop hardhat node", parent) - + echoStyled styleBright, fgMagenta, &"[Integration test started] ", resetStyle, test.config.name proc buildCommand( manager: TestManager, @@ -337,8 +352,8 @@ proc runTest( test.timeEnd = Moment.now() test.status = IntegrationTestStatus.Error test.output = CommandExResponse.failure(e) - test.printResult(processOutput = manager.debugCodexNodes, - testHarnessErrors = manager.debugTestHarness) + test.printResult(printStdOut = manager.debugCodexNodes, + printStdErr = manager.debugTestHarness) return trace "Starting parallel integration test", command @@ -358,9 +373,6 @@ proc runTest( else: test.status = IntegrationTestStatus.Ok - test.printResult(processOutput = manager.debugCodexNodes, - testHarnessErrors = manager.debugTestHarness) - except CancelledError as e: raise e @@ -369,16 +381,16 @@ proc runTest( error "Test timed out", name = config.name, duration = test.timeEnd - test.timeStart test.output = CommandExResponse.failure(e) test.status = IntegrationTestStatus.Timeout - test.printResult(processOutput = manager.debugCodexNodes, - testHarnessErrors = manager.debugTestHarness) + test.printResult(printStdOut = manager.debugCodexNodes, + printStdErr = manager.debugTestHarness) except AsyncProcessError as e: test.timeEnd = Moment.now() error "Test failed to complete", name = config.name,duration = test.timeEnd - test.timeStart test.output = CommandExResponse.failure(e) test.status = IntegrationTestStatus.Error - test.printResult(processOutput = manager.debugCodexNodes, - testHarnessErrors = manager.debugTestHarness) + test.printResult(printStdOut = manager.debugCodexNodes, + printStdErr = manager.debugTestHarness) if config.startHardhat and not hardhat.isNil: try: @@ -398,13 +410,15 @@ proc runTest( test.timeEnd = Moment.now() info "Test completed", name = config.name, duration = test.timeEnd - test.timeStart + test.printResult(printStdOut = manager.debugCodexNodes, + printStdErr = manager.debugTestHarness) proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = var testFutures: seq[Future[void].Raising([CancelledError])] manager.timeStart = Moment.now() - styledEcho styleBright, bgWhite, fgBlack, + echoStyled styleBright, bgWhite, fgBlack, "\n[Integration Test Manager] Starting parallel integration tests" for config in manager.configs: @@ -446,11 +460,11 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].}= fgGreen echo "\n▢=====================================================================▢" - styledEcho "| ", styleBright, styleUnderscore, "INTEGRATION TEST SUMMARY", resetStyle, "".withBorder(Align.Right, 43, {Border.Right}) + echoStyled "| ", styleBright, styleUnderscore, "INTEGRATION TEST SUMMARY", resetStyle, "".withBorder(Align.Right, 43, {Border.Right}) echo "".withBorder() - styledEcho styleBright, "| TOTAL TIME : ", resetStyle, ($manager.duration).withBorder(Align.Right, 49, {Border.Right}) - styledEcho styleBright, "| TIME SAVED (EST): ", resetStyle, (&"{relativeTimeSaved}%").withBorder(Align.Right, 49, {Border.Right}) - styledEcho "| ", styleBright, passingStyle, "PASSING : ", resetStyle, passingStyle, (&"{successes} / {manager.tests.len}").align(49), resetStyle, " |" + echoStyled styleBright, "| TOTAL TIME : ", resetStyle, ($manager.duration).withBorder(Align.Right, 49, {Border.Right}) + echoStyled styleBright, "| TIME SAVED (EST): ", resetStyle, (&"{relativeTimeSaved}%").withBorder(Align.Right, 49, {Border.Right}) + echoStyled "| ", styleBright, passingStyle, "PASSING : ", resetStyle, passingStyle, (&"{successes} / {manager.tests.len}").align(49), resetStyle, " |" echo "▢=====================================================================▢" proc start*(manager: TestManager) {.async: (raises: [CancelledError, TestManagerError]).} = From 878a3847944ded291120212c5973a8d38cbfad8c Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 14 Jan 2025 17:52:33 +1100 Subject: [PATCH 014/178] reinstate removed types --- tests/integration/testmanager.nim | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index e71f953632..651e9d6bbe 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -56,6 +56,15 @@ type TestManagerError* = object of CatchableError + Border {.pure.} = enum + Left, Right + Align {.pure.} = enum + Left, Right + + MarkerPosition {.pure.} = enum + Start, + Finish + {.push raises: [].} logScope: From 79812001f197e1d4110625ca2100c249aa89d3b1 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 15 Jan 2025 10:33:54 +1100 Subject: [PATCH 015/178] pass hardhat port to ethersuite # Conflicts: # tests/ethertest.nim --- tests/ethertest.nim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/ethertest.nim b/tests/ethertest.nim index 2cab8bf5b3..636760a1ac 100644 --- a/tests/ethertest.nim +++ b/tests/ethertest.nim @@ -5,6 +5,8 @@ import pkg/chronos import ./asynctest import ./checktest +const HardhatPort {.intdefine.}: int = 8545 + ## Unit testing suite that sets up an Ethereum testing environment. ## Injects a `ethProvider` instance, and a list of `accounts`. ## Calls the `evm_snapshot` and `evm_revert` methods to ensure that any @@ -16,7 +18,7 @@ template ethersuite*(name, body) = var snapshot: JsonNode setup: - ethProvider = JsonRpcProvider.new("ws://localhost:8545") + ethProvider = JsonRpcProvider.new("ws://localhost:" & $HardhatPort) snapshot = await send(ethProvider, "evm_snapshot") accounts = await ethProvider.listAccounts() teardown: From 0d186c69a196d94c845afcc540468102fce1d042 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 15 Jan 2025 10:38:33 +1100 Subject: [PATCH 016/178] hang manager off IntegrationTest, cleanup - add a TestManager property to IntegrationTest, so manager does not need to be passed into all functions - cleanup: - remove unneeded stopHardhat function - add hardhat instance to manager outside of startHardhat --- tests/integration/testmanager.nim | 45 +++++++++++++------------------ 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 651e9d6bbe..c232ba6423 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -46,6 +46,7 @@ type Error # Test file did not launch correctly. Indicates an error occurred running the tests (usually an error in the harness). IntegrationTest = ref object + manager: TestManager config: IntegrationTestConfig process: Future[CommandExResponse].Raising([AsyncProcessError, AsyncProcessTimeoutError, CancelledError]) timeStart: Moment @@ -155,8 +156,7 @@ proc duration(test: IntegrationTest): Duration = test.timeEnd - test.timeStart proc startHardhat( - manager: TestManager, - config: IntegrationTestConfig): Future[Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = + test: IntegrationTest): Future[Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = var args: seq[string] = @[] var port: int @@ -167,9 +167,9 @@ proc startHardhat( proc onOutputLineCaptured(line: string) {.raises: [].} = hardhat.output.add line - withLock(manager.hardhatPortLock): - port = await nextFreePort(manager.lastHardhatPort + 10) - manager.lastHardhatPort = port + withLock(test.manager.hardhatPortLock): + port = await nextFreePort(test.manager.lastHardhatPort + 10) + test.manager.lastHardhatPort = port args.add("--port") args.add($port) @@ -190,16 +190,6 @@ proc startHardhat( except CatchableError as e: raiseTestManagerError "hardhat node failed to start: " & e.msg, e -proc stopHardhat( - manager: TestManager, - test: IntegrationTest, - hardhat: Hardhat) {.async: (raises: [CancelledError, TestManagerError]).} = - - try: - await hardhat.process.stop() - except CatchableError as parent: - raiseTestManagerError("failed to stop hardhat node", parent) - proc printResult( test: IntegrationTest, colour: ForegroundColor) = @@ -272,22 +262,21 @@ proc printStart(test: IntegrationTest) = echoStyled styleBright, fgMagenta, &"[Integration test started] ", resetStyle, test.config.name proc buildCommand( - manager: TestManager, test: IntegrationTest, hardhatPort: ?int): Future[string] {.async: (raises:[CancelledError, TestManagerError]).} = var apiPort, discPort: int - withLock(manager.codexPortLock): + withLock(test.manager.codexPortLock): # TODO: needed? nextFreePort should take care of this # inc by 20 to allow each test to run 20 codex nodes (clients, SPs, # validators) giving a good chance the port will be free - apiPort = await nextFreePort(manager.lastCodexApiPort + 20) - manager.lastCodexApiPort = apiPort - discPort = await nextFreePort(manager.lastCodexDiscPort + 20) - manager.lastCodexDiscPort = discPort + apiPort = await nextFreePort(test.manager.lastCodexApiPort + 20) + test.manager.lastCodexApiPort = apiPort + discPort = await nextFreePort(test.manager.lastCodexDiscPort + 20) + test.manager.lastCodexDiscPort = discPort var logging = "" - if manager.debugTestHarness: + if test.manager.debugTestHarness: logging = "-d:chronicles_log_level=TRACE " & "-d:chronicles_disabled_topics=websock " & "-d:chronicles_default_output_device=stdout " & @@ -309,7 +298,7 @@ proc buildCommand( raiseTestManagerError "bad file name, testFile: " & test.config.testFile, parent var command: string - withLock(manager.hardhatPortLock): + withLock(test.manager.hardhatPortLock): try: return "nim c " & &"-d:CodexApiPort={apiPort} " & @@ -341,6 +330,7 @@ proc runTest( trace "Running test" var test = IntegrationTest( + manager: manager, config: config, testId: $ uint16.example ) @@ -353,9 +343,10 @@ proc runTest( var command: string try: if config.startHardhat: - hardhat = await manager.startHardhat(config) + hardhat = await test.startHardhat() hardhatPort = hardhat.port.some - command = await manager.buildCommand(test, hardhatPort) + manager.hardhats.add hardhat + command = await test.buildCommand(hardhatPort) except TestManagerError as e: error "Failed to start hardhat and build command", error = e.msg test.timeEnd = Moment.now() @@ -404,8 +395,8 @@ proc runTest( if config.startHardhat and not hardhat.isNil: try: trace "Stopping hardhat", name = config.name - await manager.stopHardhat(test, hardhat) - except TestManagerError as e: + await hardhat.process.stop() + except CatchableError as e: warn "Failed to stop hardhat node, continuing", error = e.msg, test = test.config.name From 5db892adf36a184fe5d6032f8d0b00e8975fea45 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 15 Jan 2025 10:39:41 +1100 Subject: [PATCH 017/178] print hardhat testmanager errors and hardhat stdout when there is an error starting hardhat --- tests/integration/testmanager.nim | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index c232ba6423..1048abbe69 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -71,6 +71,8 @@ type logScope: topics = "testing integration testmanager" +proc printOutputMarker(test: IntegrationTest, position: MarkerPosition, msg: string) {.gcsafe, raises: [].} + proc raiseTestManagerError(msg: string, parent: ref CatchableError = nil) {.raises: [TestManagerError].} = raise newException(TestManagerError, msg, parent) @@ -188,6 +190,11 @@ proc startHardhat( except CancelledError as e: raise e except CatchableError as e: + if not hardhat.isNil: + test.printOutputMarker(MarkerPosition.Start, "hardhat stdout") + for line in hardhat.output: + echo line + test.printOutputMarker(MarkerPosition.Finish, "hardhat stdout") raiseTestManagerError "hardhat node failed to start: " & e.msg, e proc printResult( @@ -220,11 +227,10 @@ proc printResult( if test.status == IntegrationTestStatus.Error and error =? test.output.errorOption: test.printResult(fgRed) - if printStdErr: - test.printOutputMarker(MarkerPosition.Start, "test harness errors") - echo "Error during test execution: ", error.msg - echo "Stacktrace: ", error.getStackTrace() - test.printOutputMarker(MarkerPosition.Finish, "test harness errors") + test.printOutputMarker(MarkerPosition.Start, "test harness errors") + echo "Error during test execution: ", error.msg + echo "Stacktrace: ", error.getStackTrace() + test.printOutputMarker(MarkerPosition.Finish, "test harness errors") elif test.status == IntegrationTestStatus.Failed: if output =? test.output: @@ -352,10 +358,11 @@ proc runTest( test.timeEnd = Moment.now() test.status = IntegrationTestStatus.Error test.output = CommandExResponse.failure(e) - test.printResult(printStdOut = manager.debugCodexNodes, + test.printResult(printStdOut = manager.debugHardhat or manager.debugCodexNodes, printStdErr = manager.debugTestHarness) return + trace "Starting parallel integration test", command test.printStart() test.process = execCommandEx( From 44faac5a976e370ea24045cb578ba6a5166efc43 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 15 Jan 2025 10:39:53 +1100 Subject: [PATCH 018/178] clean up --- tests/integration/testmanager.nim | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 1048abbe69..54abf0f2c3 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -164,7 +164,6 @@ proc startHardhat( var port: int let hardhat = Hardhat.new() - manager.hardhats.add hardhat proc onOutputLineCaptured(line: string) {.raises: [].} = hardhat.output.add line From c8d69b646c8710f90a8a6fa6e5d353538b01d364 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 15 Jan 2025 10:40:12 +1100 Subject: [PATCH 019/178] lock hardhat start to avoid intermittent start failures --- tests/integration/testmanager.nim | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 54abf0f2c3..dc5d3512e0 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -32,6 +32,7 @@ type timeEnd: Moment codexPortLock: AsyncLock hardhatPortLock: AsyncLock + hardhatProcessLock: AsyncLock testTimeout: Duration # individual test timeout IntegrationTestConfig* = object @@ -177,15 +178,16 @@ proc startHardhat( trace "starting hardhat process on port ", port try: - let node = await HardhatProcess.startNode( - args, - false, - "hardhat for '" & config.name & "'", - onOutputLineCaptured) - await node.waitUntilStarted() - hardhat.process = node - hardhat.port = port - return hardhat + withLock(test.manager.hardhatProcessLock): + let node = await HardhatProcess.startNode( + args, + false, + "hardhat for '" & test.config.name & "'", + onOutputLineCaptured) + hardhat.process = node + hardhat.port = port + await node.waitUntilStarted() + return hardhat except CancelledError as e: raise e except CatchableError as e: From 855ba637e3b318b2f55df1037c0ab69efab37e7b Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 16 Jan 2025 11:52:02 +1100 Subject: [PATCH 020/178] cleanup # Conflicts: # tests/testIntegration.nim --- tests/integration/testmanager.nim | 33 +++++---------- tests/testIntegration.nim | 68 +++++++++++++++++++++---------- 2 files changed, 56 insertions(+), 45 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index dc5d3512e0..fbdf0bf686 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -25,11 +25,17 @@ type lastHardhatPort: int lastCodexApiPort: int lastCodexDiscPort: int - debugTestHarness: bool # output chronicles logs for the manager and multinodes harness + # Echoes stderr if there's a test failure (eg test failed, compilation + # error) or error (eg test manager error) + debugTestHarness: bool + # Echoes stdout from Hardhat process debugHardhat: bool - debugCodexNodes: bool # output chronicles logs for the codex nodes running in the tests - timeStart: Moment - timeEnd: Moment + # Echoes stdout from the integration test file process. Codex process logs + # can also be output if a test uses a multinodesuite, requires + # CodexConfig.debug to be enabled + debugCodexNodes: bool + timeStart: ?Moment + timeEnd: ?Moment codexPortLock: AsyncLock hardhatPortLock: AsyncLock hardhatProcessLock: AsyncLock @@ -92,25 +98,6 @@ proc new*( debugCodexNodes = false, testTimeout = 60.minutes): TestManager = - if debugTestHarness: - when enabledLogLevel != LogLevel.TRACE: - echoStyled bgWhite, fgBlack, styleBright, "\n\n ", - styleUnderscore, "ADDITIONAL LOGGING AVAILABILE\n\n", - resetStyle, bgWhite, fgBlack, styleBright, """ - More integration test harness logs available by running with - -d:chronicles_log_level=TRACE, eg:""", - resetStyle, bgWhite, fgBlack, - "\n\n nim c -d:chronicles_log_level=TRACE -r ./testIntegration.nim\n\n" - - if debugCodexNodes: - echoStyled bgWhite, fgBlack, styleBright, "\n\n ", - styleUnderscore, "ENABLE CODEX LOGGING\n\n", - resetStyle, bgWhite, fgBlack, styleBright, """ - For integration test suites that are multinodesuites, or for - tests launching a CodexProcess, ensure that CodexConfig.debug - is enabled. - """ - TestManager( configs: configs, lastHardhatPort: 8545, diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 1a273b5237..dfcf4a9c69 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -10,6 +10,7 @@ # import ./integration/testvalidator # import ./integration/testecbug +import std/terminal import pkg/chronos import pkg/codex/logutils import ./integration/testmanager @@ -19,34 +20,57 @@ import ./integration/testmanager const TestConfigs = @[ IntegrationTestConfig.init("./integration/testcli", startHardhat = true), - IntegrationTestConfig.init("./integration/testrestapi", startHardhat = false), - # IntegrationTestConfig.init("./integration/testupdownload", startHardhat = true), - # IntegrationTestConfig.init("./integration/testsales", startHardhat = true), - # IntegrationTestConfig.init("./integration/testpurchasing", startHardhat = true), - # IntegrationTestConfig.init("./integration/testblockexpiration", startHardhat = true), - # IntegrationTestConfig.init( - # name = "Basic Marketplace and payout tests", - # testFile = "./integration/testmarketplace", - # startHardhat = true, - ), - # IntegrationTestConfig("./integration/testproofs", startHardhat = true), - # IntegrationTestConfig("./integration/testvalidator", startHardhat = true), + IntegrationTestConfig.init("./integration/testrestapi", startHardhat = true), + IntegrationTestConfig.init("./integration/testupdownload", startHardhat = true), + IntegrationTestConfig.init("./integration/testsales", startHardhat = true), + IntegrationTestConfig.init("./integration/testpurchasing", startHardhat = true), + IntegrationTestConfig.init("./integration/testblockexpiration", startHardhat = true), + IntegrationTestConfig.init("./integration/testmarketplace", startHardhat = true), + IntegrationTestConfig.init("./integration/testproofs", startHardhat = true), + IntegrationTestConfig.init("./integration/testvalidator", startHardhat = true), + IntegrationTestConfig.init("./integration/testecbug", startHardhat = true), IntegrationTestConfig.init( - name = "Erasure Coding Bug", - testFile = "./integration/testecbug", - startHardhat = true, - ) - IntegrationTestConfig(testFile: "./integration/testrestapivalidation", startHardhat: true) + "./integration/testrestapivalidation", startHardhat = true + ), ] proc run() {.async.} = + # Echoes stderr if there's a test failure (eg test failed, compilation error) + # or error (eg test manager error) + const debugTestHarness = false + # Echoes stdout from Hardhat process + const debugHardhat = false + # Echoes stdout from the integration test file process. Codex process logs can + # also be output if a test uses a multinodesuite, requires CodexConfig.debug + # to be enabled + const debugCodexNodes = true + + when debugTestHarness and enabledLogLevel != LogLevel.TRACE: + styledEcho bgWhite, + fgBlack, styleBright, "\n\n ", styleUnderscore, + "ADDITIONAL LOGGING AVAILABILE\n\n", resetStyle, bgWhite, fgBlack, styleBright, + """ +More integration test harness logs available by running with +-d:chronicles_log_level=TRACE, eg:""", + resetStyle, bgWhite, fgBlack, + "\n\n nim c -d:chronicles_log_level=TRACE -r ./testIntegration.nim\n\n" + + when debugCodexNodes: + styledEcho bgWhite, + fgBlack, styleBright, "\n\n ", styleUnderscore, "ENABLE CODEX LOGGING\n\n", + resetStyle, bgWhite, fgBlack, styleBright, + """ + For integration test suites that are multinodesuites, or for + tests launching a CodexProcess, ensure that CodexConfig.debug + is enabled. + """ + let manager = TestManager.new( configs = TestConfigs, - debugTestHarness = true, - # Echos stderr if there's a test failure or error (error in running the test) - debugCodexNodes = true, - # Echos stdout from the Codex process (chronicles logs). If test uses a multinodesuite, requires CodexConfig.debug to be enabled - debugHardhat = false, + debugTestHarness, + debugHardhat, + debugCodexNodes, + testTimeout = 60.minutes, ) try: trace "starting test manager" From 78260feda330db29b531ee9d8d0aa6f267833143 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 16 Jan 2025 11:52:51 +1100 Subject: [PATCH 021/178] continually show test status updates allows user to know which tests are still running --- tests/integration/testmanager.nim | 89 ++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 25 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index fbdf0bf686..275fbb6dc0 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -40,6 +40,7 @@ type hardhatPortLock: AsyncLock hardhatProcessLock: AsyncLock testTimeout: Duration # individual test timeout + futContinuousUpdates: Future[void].Raising([]) IntegrationTestConfig* = object startHardhat: bool @@ -47,6 +48,8 @@ type name: string IntegrationTestStatus = enum ## The status of a test when it is done. + New, # Test not yet run + Running, # Test currently running Ok, # Test file launched, and exited with 0. Indicates all tests completed and passed. Failed, # Test file launched, but exited with a non-zero exit code. Indicates either the test file did not compile, or one or more of the tests in the file failed Timeout, # Test file launched, but the tests did not complete before the timeout. @@ -56,8 +59,8 @@ type manager: TestManager config: IntegrationTestConfig process: Future[CommandExResponse].Raising([AsyncProcessError, AsyncProcessTimeoutError, CancelledError]) - timeStart: Moment - timeEnd: Moment + timeStart: ?Moment + timeEnd: ?Moment output: ?!CommandExResponse testId: string # when used in datadir path, prevents data dir clashes status: IntegrationTestStatus @@ -140,10 +143,12 @@ template withLock*(lock: AsyncLock, body: untyped) = proc duration(manager: TestManager): Duration = - manager.timeEnd - manager.timeStart + let now = Moment.now() + (manager.timeEnd |? now) - (manager.timeStart |? now) proc duration(test: IntegrationTest): Duration = - test.timeEnd - test.timeStart + let now = Moment.now() + (test.timeEnd |? now) - (test.timeStart |? now) proc startHardhat( test: IntegrationTest): Future[Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = @@ -212,15 +217,22 @@ proc printResult( printStdOut = false, printStdErr = false) = - if test.status == IntegrationTestStatus.Error and - error =? test.output.errorOption: - test.printResult(fgRed) - test.printOutputMarker(MarkerPosition.Start, "test harness errors") - echo "Error during test execution: ", error.msg - echo "Stacktrace: ", error.getStackTrace() - test.printOutputMarker(MarkerPosition.Finish, "test harness errors") + case test.status: + of IntegrationTestStatus.New: + test.printResult(fgBlue) + + of IntegrationTestStatus.Running: + test.printResult(fgCyan) - elif test.status == IntegrationTestStatus.Failed: + of IntegrationTestStatus.Error: + if error =? test.output.errorOption: + test.printResult(fgRed) + test.printOutputMarker(MarkerPosition.Start, "test harness errors") + echo "Error during test execution: ", error.msg + echo "Stacktrace: ", error.getStackTrace() + test.printOutputMarker(MarkerPosition.Finish, "test harness errors") + + of IntegrationTestStatus.Failed: if output =? test.output: if printStdErr: #manager.debugTestHarness test.printOutputMarker(MarkerPosition.Start, @@ -236,10 +248,10 @@ proc printResult( "codex node output (stdout)") test.printResult(fgRed) - elif test.status == IntegrationTestStatus.Timeout: + of IntegrationTestStatus.Timeout: test.printResult(fgYellow) - elif test.status == IntegrationTestStatus.Ok: + of IntegrationTestStatus.Ok: if printStdOut and output =? test.output: test.printOutputMarker(MarkerPosition.Start, @@ -329,7 +341,8 @@ proc runTest( testId: $ uint16.example ) - test.timeStart = Moment.now() + test.timeStart = some Moment.now() + test.status = IntegrationTestStatus.Running manager.tests.add test var hardhat: Hardhat @@ -343,7 +356,7 @@ proc runTest( command = await test.buildCommand(hardhatPort) except TestManagerError as e: error "Failed to start hardhat and build command", error = e.msg - test.timeEnd = Moment.now() + test.timeEnd = some Moment.now() test.status = IntegrationTestStatus.Error test.output = CommandExResponse.failure(e) test.printResult(printStdOut = manager.debugHardhat or manager.debugCodexNodes, @@ -372,16 +385,16 @@ proc runTest( raise e except AsyncProcessTimeoutError as e: - test.timeEnd = Moment.now() - error "Test timed out", name = config.name, duration = test.timeEnd - test.timeStart + test.timeEnd = some Moment.now() + error "Test timed out", name = config.name, duration = test.duration test.output = CommandExResponse.failure(e) test.status = IntegrationTestStatus.Timeout test.printResult(printStdOut = manager.debugCodexNodes, printStdErr = manager.debugTestHarness) except AsyncProcessError as e: - test.timeEnd = Moment.now() - error "Test failed to complete", name = config.name,duration = test.timeEnd - test.timeStart + test.timeEnd = some Moment.now() + error "Test failed to complete", name = config.name, duration = test.duration test.output = CommandExResponse.failure(e) test.status = IntegrationTestStatus.Error test.printResult(printStdOut = manager.debugCodexNodes, @@ -403,15 +416,37 @@ proc runTest( manager.hardhats.keepItIf( it != hardhat ) - test.timeEnd = Moment.now() - info "Test completed", name = config.name, duration = test.timeEnd - test.timeStart + test.timeEnd = some Moment.now() + info "Test completed", name = config.name, duration = test.duration test.printResult(printStdOut = manager.debugCodexNodes, printStdErr = manager.debugTestHarness) +proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = + try: + + while true: + let sleepDuration = if manager.duration < 5.minutes: + 30.seconds + else: + 1.minutes + + if manager.tests.len > 0: + echo "" + echoStyled styleBright, bgWhite, fgBlack, + &"Integration tests status after {manager.duration}" + + for test in manager.tests: + test.printResult() + + await sleepAsync(sleepDuration) + + except CancelledError as e: + discard + proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = var testFutures: seq[Future[void].Raising([CancelledError])] - manager.timeStart = Moment.now() + manager.timeStart = some Moment.now() echoStyled styleBright, bgWhite, fgBlack, "\n[Integration Test Manager] Starting parallel integration tests" @@ -421,7 +456,7 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = await allFutures testFutures - manager.timeEnd = Moment.now() + manager.timeEnd = some Moment.now() proc withBorder( msg: string, @@ -463,6 +498,8 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].}= echo "▢=====================================================================▢" proc start*(manager: TestManager) {.async: (raises: [CancelledError, TestManagerError]).} = + manager.futContinuousUpdates = manager.continuallyShowUpdates() + asyncSpawn manager.futContinuousUpdates await manager.runTests() manager.printResult() @@ -475,4 +512,6 @@ proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = try: await hardhat.process.stop() except CatchableError as e: - trace "failed to stop hardhat node", error = e.msg \ No newline at end of file + trace "failed to stop hardhat node", error = e.msg + + await manager.futContinuousUpdates.cancelAndWait() \ No newline at end of file From ff1eb8b05e2b3dbf89b684a1d0567ad86032f6dd Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 16 Jan 2025 16:14:25 +1100 Subject: [PATCH 022/178] ensure timeouts work Work around the AsyncProcess timeout not working correctly --- tests/integration/testmanager.nim | 236 +++++++++++++++++++----------- 1 file changed, 150 insertions(+), 86 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 275fbb6dc0..daccb1f480 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -40,7 +40,6 @@ type hardhatPortLock: AsyncLock hardhatProcessLock: AsyncLock testTimeout: Duration # individual test timeout - futContinuousUpdates: Future[void].Raising([]) IntegrationTestConfig* = object startHardhat: bool @@ -64,6 +63,7 @@ type output: ?!CommandExResponse testId: string # when used in datadir path, prevents data dir clashes status: IntegrationTestStatus + command: string TestManagerError* = object of CatchableError @@ -214,8 +214,8 @@ proc printOutputMarker( proc printResult( test: IntegrationTest, - printStdOut = false, - printStdErr = false) = + printStdOut = test.manager.debugCodexNodes, + printStdErr = test.manager.debugTestHarness) = case test.status: of IntegrationTestStatus.New: @@ -249,6 +249,13 @@ proc printResult( test.printResult(fgRed) of IntegrationTestStatus.Timeout: + if printStdOut and + output =? test.output: + test.printOutputMarker(MarkerPosition.Start, + "codex node output (stdout)") + echo output.stdOutput + test.printOutputMarker(MarkerPosition.Finish, + "codex node output (stdout)") test.printResult(fgYellow) of IntegrationTestStatus.Ok: @@ -325,101 +332,102 @@ proc buildCommand( ", testFile: " & testFile & ", error: " & parent.msg, parent +proc setup( + test: IntegrationTest): Future[?Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = -proc runTest( - manager: TestManager, - config: IntegrationTestConfig) {.async: (raises: [CancelledError]).} = - - logScope: - config - - trace "Running test" - - var test = IntegrationTest( - manager: manager, - config: config, - testId: $ uint16.example - ) - - test.timeStart = some Moment.now() - test.status = IntegrationTestStatus.Running - manager.tests.add test - - var hardhat: Hardhat + var hardhat = Hardhat.none var hardhatPort = int.none - var command: string - try: - if config.startHardhat: - hardhat = await test.startHardhat() - hardhatPort = hardhat.port.some - manager.hardhats.add hardhat - command = await test.buildCommand(hardhatPort) - except TestManagerError as e: - error "Failed to start hardhat and build command", error = e.msg - test.timeEnd = some Moment.now() - test.status = IntegrationTestStatus.Error - test.output = CommandExResponse.failure(e) - test.printResult(printStdOut = manager.debugHardhat or manager.debugCodexNodes, - printStdErr = manager.debugTestHarness) - return - - - trace "Starting parallel integration test", command - test.printStart() - test.process = execCommandEx( - command = command, - timeout = manager.testTimeout - ) - try: + if test.config.startHardhat: + let hh = await test.startHardhat() + hardhat = some hh + hardhatPort = some hh.port + test.manager.hardhats.add hh - let output = await test.process # waits on waitForExit - test.output = success(output) + test.command = await test.buildCommand(hardhatPort) - if output.status != 0: - test.status = IntegrationTestStatus.Failed - else: - test.status = IntegrationTestStatus.Ok + return hardhat - except CancelledError as e: - raise e +proc teardown( + test: IntegrationTest, + hardhat: ?Hardhat) {.async: (raises: [CancelledError]).} = - except AsyncProcessTimeoutError as e: - test.timeEnd = some Moment.now() - error "Test timed out", name = config.name, duration = test.duration - test.output = CommandExResponse.failure(e) - test.status = IntegrationTestStatus.Timeout - test.printResult(printStdOut = manager.debugCodexNodes, - printStdErr = manager.debugTestHarness) - - except AsyncProcessError as e: - test.timeEnd = some Moment.now() - error "Test failed to complete", name = config.name, duration = test.duration - test.output = CommandExResponse.failure(e) - test.status = IntegrationTestStatus.Error - test.printResult(printStdOut = manager.debugCodexNodes, - printStdErr = manager.debugTestHarness) - - if config.startHardhat and not hardhat.isNil: + if test.config.startHardhat and hardhat =? hardhat: try: - trace "Stopping hardhat", name = config.name + trace "Stopping hardhat", name = test.config.name await hardhat.process.stop() except CatchableError as e: warn "Failed to stop hardhat node, continuing", error = e.msg, test = test.config.name - if manager.debugHardhat: + if test.manager.debugHardhat: test.printOutputMarker(MarkerPosition.Start, "Hardhat stdout") for line in hardhat.output: echo line test.printOutputMarker(MarkerPosition.Finish, "Hardhat stdout") - manager.hardhats.keepItIf( it != hardhat ) + test.manager.hardhats.keepItIf( it != hardhat ) + +proc start(test: IntegrationTest) {.async: (raises: []).} = + + logScope: + config = test.config + + trace "Running test" + + + test.timeStart = some Moment.now() + test.status = IntegrationTestStatus.Running + + var hardhat = none Hardhat + + try: + + try: + hardhat = await test.setup() + except TestManagerError as e: + error "Failed to start hardhat and build command", error = e.msg + test.timeEnd = some Moment.now() + test.status = IntegrationTestStatus.Error + test.output = CommandExResponse.failure(e) + return + + try: + trace "Starting parallel integration test", command = test.command + test.printStart() + test.process = execCommandEx( + command = test.command, + timeout = test.manager.testTimeout + ) + + let output = await test.process # waits on waitForExit + test.output = success(output) + + if output.status != 0: + test.status = IntegrationTestStatus.Failed + else: + test.status = IntegrationTestStatus.Ok + + except AsyncProcessTimeoutError as e: + test.timeEnd = some Moment.now() + error "Test timed out", name = test.config.name, duration = test.duration + test.output = CommandExResponse.failure(e) + test.status = IntegrationTestStatus.Timeout + + except AsyncProcessError as e: + test.timeEnd = some Moment.now() + error "Test failed to complete", name = test.config.name, duration = test.duration + test.output = CommandExResponse.failure(e) + test.status = IntegrationTestStatus.Error + + await test.teardown(hardhat) + + except CancelledError: + discard # start is asyncSpawned, do not propagate test.timeEnd = some Moment.now() - info "Test completed", name = config.name, duration = test.duration - test.printResult(printStdOut = manager.debugCodexNodes, - printStdErr = manager.debugTestHarness) + if test.status == IntegrationTestStatus.Ok: + info "Test completed", name = test.config.name, duration = test.duration proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = try: @@ -436,15 +444,47 @@ proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = &"Integration tests status after {manager.duration}" for test in manager.tests: - test.printResult() + test.printResult(false, false) + + if manager.tests.len > 0: + echo "" await sleepAsync(sleepDuration) except CancelledError as e: discard +proc untilTimeout(fut: Future[void], timeout: Duration): Future[bool] {.async: (raises: [CancelledError]).} = + # workaround for withTimeout, which did not work correctly + try: + let timer = sleepAsync(timeout) + return (await race(fut, timer)) == fut + except ValueError: + discard + +proc run(test: IntegrationTest) {.async: (raises: []).} = + try: + let futStart = test.start() + let completedBeforeTimeout = await futStart.untilTimeout(test.manager.testTimeout) + if not completedBeforeTimeout: + test.timeEnd = some Moment.now() + error "Test timed out", name = test.config.name, duration = test.duration + let e = newException(AsyncProcessTimeoutError, + "Test did not complete before elapsed timeout") + test.output = CommandExResponse.failure(e) + test.status = IntegrationTestStatus.Timeout + + if not futStart.finished: + await futStart.cancelAndWait() + + test.printResult() + + + except CancelledError: + discard # do not propagate due to asyncSpawn + proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = - var testFutures: seq[Future[void].Raising([CancelledError])] + var testFutures: seq[Future[void]] manager.timeStart = some Moment.now() @@ -452,7 +492,17 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = "\n[Integration Test Manager] Starting parallel integration tests" for config in manager.configs: - testFutures.add manager.runTest(config) + + var test = IntegrationTest( + manager: manager, + config: config, + testId: $ uint16.example + ) + manager.tests.add test + + let futRun = test.run() + testFutures.add futRun + asyncSpawn futRun await allFutures testFutures @@ -476,10 +526,22 @@ proc withBorder( proc printResult(manager: TestManager) {.raises: [TestManagerError].}= var successes = 0 var totalDurationSerial: Duration + let showSummary = manager.debugCodexNodes or manager.debugHardhat or manager.debugTestHarness + + if showSummary: + echo "" + echoStyled styleBright, styleUnderscore, bgWhite, fgBlack, + &"INTEGRATION TESTS RESULT" + for test in manager.tests: totalDurationSerial += test.duration if test.status == IntegrationTestStatus.Ok: inc successes + # because debug output can really make things hard to read, show a nice + # summary of test results + if showSummary: + test.printResult(false, false) + # estimated time saved as serial execution with a single hardhat instance # incurs less overhead let relativeTimeSaved = ((totalDurationSerial - manager.duration).nanos * 100) div @@ -489,6 +551,7 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].}= else: fgGreen + echo "\n▢=====================================================================▢" echoStyled "| ", styleBright, styleUnderscore, "INTEGRATION TEST SUMMARY", resetStyle, "".withBorder(Align.Right, 43, {Border.Right}) echo "".withBorder() @@ -498,9 +561,12 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].}= echo "▢=====================================================================▢" proc start*(manager: TestManager) {.async: (raises: [CancelledError, TestManagerError]).} = - manager.futContinuousUpdates = manager.continuallyShowUpdates() - asyncSpawn manager.futContinuousUpdates + let futContinuousUpdates = manager.continuallyShowUpdates() + asyncSpawn futContinuousUpdates + await manager.runTests() + await futContinuousUpdates.cancelAndWait() + manager.printResult() proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = @@ -512,6 +578,4 @@ proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = try: await hardhat.process.stop() except CatchableError as e: - trace "failed to stop hardhat node", error = e.msg - - await manager.futContinuousUpdates.cancelAndWait() \ No newline at end of file + trace "failed to stop hardhat node", error = e.msg \ No newline at end of file From 52efcbea57974fcfe42bf3aec47b4c10658112b7 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 20 Jan 2025 12:54:00 +1100 Subject: [PATCH 023/178] fix nodeprocess not exiting --- tests/integration/nodeprocess.nim | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index d5200a2fa2..690a957a15 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -128,14 +128,7 @@ method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = error "failed to terminate process", errCode = $errCode trace "waiting for node process to exit" - var backoff = 8 - while node.process.running().valueOr false: - backoff = min(backoff*2, 1024) # Exponential backoff - await sleepAsync(backoff) - - let exitCode = node.process.peekExitCode().valueOr: - fatal "could not get exit code from process", error - return + let exitCode = await node.process.waitForExit(3.seconds) if exitCode > 0 and exitCode != 143 and # 143 = SIGTERM (initiated above) From 35964f6e73d7e3b8937e1a07dd7a69ab87eba796 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 20 Jan 2025 12:54:57 +1100 Subject: [PATCH 024/178] add constructor param for continuous status update in terminal # Conflicts: # tests/testIntegration.nim --- tests/integration/testmanager.nim | 4 ++++ tests/testIntegration.nim | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index daccb1f480..ee5b677993 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -34,6 +34,9 @@ type # can also be output if a test uses a multinodesuite, requires # CodexConfig.debug to be enabled debugCodexNodes: bool + # Shows test status updates at regular time intervals. Useful for running + # locally while attended. Set to false for unattended runs, eg CI. + showContinuousStatusUpdates: bool timeStart: ?Moment timeEnd: ?Moment codexPortLock: AsyncLock @@ -99,6 +102,7 @@ proc new*( debugTestHarness = false, debugHardhat = false, debugCodexNodes = false, + showContinuousStatusUpdates = false, testTimeout = 60.minutes): TestManager = TestManager( diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index dfcf4a9c69..51ddd3cccd 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -44,6 +44,11 @@ proc run() {.async.} = # also be output if a test uses a multinodesuite, requires CodexConfig.debug # to be enabled const debugCodexNodes = true + # Shows test status updates at time intervals. Useful for running locally with + # active terminal interaction. Set to false for unattended runs, eg CI. + const showContinuousStatusUpdates = true + # Timeout duration for EACH integration test file. + const testTimeout = 60.minutes when debugTestHarness and enabledLogLevel != LogLevel.TRACE: styledEcho bgWhite, @@ -70,7 +75,8 @@ More integration test harness logs available by running with debugTestHarness, debugHardhat, debugCodexNodes, - testTimeout = 60.minutes, + showContinuousStatusUpdates, + testTimeout, ) try: trace "starting test manager" From 982af54648c71cec5a3345b557c07e7fc52f9de7 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 20 Jan 2025 16:02:44 +1100 Subject: [PATCH 025/178] increase port distance per test run --- tests/integration/testmanager.nim | 77 +++++++++++++++---------------- tests/testIntegration.nim | 2 +- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index ee5b677993..c409a4935c 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -166,7 +166,7 @@ proc startHardhat( hardhat.output.add line withLock(test.manager.hardhatPortLock): - port = await nextFreePort(test.manager.lastHardhatPort + 10) + port = await nextFreePort(test.manager.lastHardhatPort + 1) test.manager.lastHardhatPort = port args.add("--port") @@ -282,22 +282,11 @@ proc buildCommand( test: IntegrationTest, hardhatPort: ?int): Future[string] {.async: (raises:[CancelledError, TestManagerError]).} = - var apiPort, discPort: int - withLock(test.manager.codexPortLock): - # TODO: needed? nextFreePort should take care of this - # inc by 20 to allow each test to run 20 codex nodes (clients, SPs, - # validators) giving a good chance the port will be free - apiPort = await nextFreePort(test.manager.lastCodexApiPort + 20) - test.manager.lastCodexApiPort = apiPort - discPort = await nextFreePort(test.manager.lastCodexDiscPort + 20) - test.manager.lastCodexDiscPort = discPort - - var logging = "" - if test.manager.debugTestHarness: - logging = "-d:chronicles_log_level=TRACE " & - "-d:chronicles_disabled_topics=websock " & - "-d:chronicles_default_output_device=stdout " & - "-d:chronicles_sinks=textlines" + let logging = if not test.manager.debugTestHarness: "" + else: "-d:chronicles_log_level=TRACE " & + "-d:chronicles_disabled_topics=websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT " & + "-d:chronicles_default_output_device=stdout " & + "-d:chronicles_sinks=textlines" let strHardhatPort = if not test.config.startHardhat: "" @@ -314,28 +303,38 @@ proc buildCommand( except ValueError as parent: raiseTestManagerError "bad file name, testFile: " & test.config.testFile, parent - var command: string - withLock(test.manager.hardhatPortLock): - try: - return "nim c " & - &"-d:CodexApiPort={apiPort} " & - &"-d:CodexDiscPort={discPort} " & - &"{strHardhatPort} " & - &"-d:TestId={test.testId} " & - &"{logging} " & - "--verbosity:0 " & - "--hints:off " & - "-d:release " & - "-r " & - &"{testFile}" - except ValueError as parent: - raiseTestManagerError "bad command --\n" & - ", apiPort: " & $apiPort & - ", discPort: " & $discPort & - ", logging: " & logging & - ", testFile: " & testFile & - ", error: " & parent.msg, - parent + withLock(test.manager.codexPortLock): + # Increase the port by 100 to allow each test to run 100 codex nodes + # (clients, SPs, validators) giving a good chance the port will be free. We + # cannot rely on `nextFreePort` in multinodes entirely as there could be a + # concurrency issue where the port is determined free in mulitiple tests and + # then there is a clash during the run. + let apiPort = await nextFreePort(test.manager.lastCodexApiPort + 100) + test.manager.lastCodexApiPort = apiPort + let discPort = await nextFreePort(test.manager.lastCodexDiscPort + 100) + test.manager.lastCodexDiscPort = discPort + + withLock(test.manager.hardhatPortLock): + try: + return "nim c " & + &"-d:CodexApiPort={apiPort} " & + &"-d:CodexDiscPort={discPort} " & + &"{strHardhatPort} " & + &"-d:TestId={test.testId} " & + &"{logging} " & + "--verbosity:0 " & + "--hints:off " & + "-d:release " & + "-r " & + &"{testFile}" + except ValueError as parent: + raiseTestManagerError "bad command --\n" & + ", apiPort: " & $apiPort & + ", discPort: " & $discPort & + ", logging: " & logging & + ", testFile: " & testFile & + ", error: " & parent.msg, + parent proc setup( test: IntegrationTest): Future[?Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 51ddd3cccd..1af7202cda 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -43,7 +43,7 @@ proc run() {.async.} = # Echoes stdout from the integration test file process. Codex process logs can # also be output if a test uses a multinodesuite, requires CodexConfig.debug # to be enabled - const debugCodexNodes = true + const debugCodexNodes = false # Shows test status updates at time intervals. Useful for running locally with # active terminal interaction. Set to false for unattended runs, eg CI. const showContinuousStatusUpdates = true From 8ca9d9f78df1ecab972df5bd3cd22515c26dc3a1 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 20 Jan 2025 17:25:21 +1100 Subject: [PATCH 026/178] make onoutputline callback gcsafe --- tests/integration/hardhatprocess.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index df54c1124b..7bbe39352d 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -25,7 +25,7 @@ type HardhatProcess* = ref object of NodeProcess logFile: ?IoHandle type - OnOutputLineCaptured = proc(line: string) {.raises: [].} + OnOutputLineCaptured = proc(line: string) {.gcsafe, raises: [].} HardhatProcess* = ref object of NodeProcess logFile: ?IoHandle onOutputLine: OnOutputLineCaptured From 756af9b2ab731179fb07d2819414ecbfbd208134 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 21 Jan 2025 12:19:53 +1100 Subject: [PATCH 027/178] remove unneeded sleep --- tests/integration/testmanager.nim | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index c409a4935c..35dc36a1a0 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -138,7 +138,6 @@ template withLock*(lock: AsyncLock, body: untyped) = await lock.acquire() try: body - await sleepAsync(1.millis) finally: try: lock.release() From 4661f467e6b31f517866218cbde077407c93c130 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 21 Jan 2025 12:38:32 +1100 Subject: [PATCH 028/178] fail early with message when hardhat binary not found # Conflicts: # tests/integration/hardhatprocess.nim --- tests/integration/hardhatprocess.nim | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index 7bbe39352d..4eb2267a3d 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -8,6 +8,7 @@ import pkg/stew/io2 import std/os import std/sets import std/sequtils +import std/strformat import std/strutils import pkg/codex/conf import pkg/codex/utils/trackedfutures @@ -58,6 +59,14 @@ proc openLogFile(node: HardhatProcess, logFilePath: string): IoHandle = return fileHandle method start*(node: HardhatProcess) {.async.} = + logScope: + nodeName = node.name + + if not fileExists(node.executable): + raiseAssert "cannot start hardhat, binary doesn't exist (looking for " & + &"{absolutePath(node.workingDir / node.executable)}). Try running " & + &"`npm install` in {node.workingDir}." + let poptions = node.processOptions + {AsyncProcessOption.StdErrToStdOut} trace "starting node", args = node.arguments, From 87727fbcd6fa4a9673665ba243024c6ed0565b36 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 21 Jan 2025 12:42:48 +1100 Subject: [PATCH 029/178] Use absolute path for binary when checking for existence --- tests/integration/hardhatprocess.nim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index 4eb2267a3d..c789a55e3b 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -62,10 +62,10 @@ method start*(node: HardhatProcess) {.async.} = logScope: nodeName = node.name - if not fileExists(node.executable): + let binary = absolutePath(node.workingDir / node.executable) + if not fileExists(binary): raiseAssert "cannot start hardhat, binary doesn't exist (looking for " & - &"{absolutePath(node.workingDir / node.executable)}). Try running " & - &"`npm install` in {node.workingDir}." + &"{binary}). Try running `npm install` in {node.workingDir}." let poptions = node.processOptions + {AsyncProcessOption.StdErrToStdOut} trace "starting node", From 9a81fb9949c73a8242315f30a9f22772cbf3b3e3 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:06:43 +1100 Subject: [PATCH 030/178] fix rebase --- tests/integration/hardhatprocess.nim | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index c789a55e3b..0c7ffc0828 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -22,9 +22,6 @@ export nodeprocess logScope: topics = "integration testing hardhat process" -type HardhatProcess* = ref object of NodeProcess - logFile: ?IoHandle - type OnOutputLineCaptured = proc(line: string) {.gcsafe, raises: [].} HardhatProcess* = ref object of NodeProcess @@ -92,6 +89,7 @@ proc startNode*( args: seq[string], debug: string | bool = false, name: string, + onOutputLineCaptured: OnOutputLineCaptured = nil, ): Future[HardhatProcess] {.async.} = logScope: nodeName = name @@ -113,6 +111,7 @@ proc startNode*( debug: ($debug != "false"), trackedFutures: TrackedFutures.new(), name: name, + onOutputLine: onOutputLineCaptured, ) await hardhat.start() @@ -122,7 +121,7 @@ proc startNode*( return hardhat -method onOutputLineCaptured(node: HardhatProcess, line: string) = +method onOutputLineCaptured(node: HardhatProcess, line: string) {.raises: [].} = logScope: nodeName = node.name From 81ace104542d7c9c53319a4789b77223633e4dc3 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:25:52 +1100 Subject: [PATCH 031/178] fix rebase, formatting --- tests/integration/testcli.nim | 34 +++++++++++++++++++--------------- tests/testIntegration.nim | 8 ++++---- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index 5360a0ae20..8d1878e218 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -60,24 +60,28 @@ asyncchecksuite "Command line interface": 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=" & "http://127.0.0.1:" & $HardhatPort, - "prover", - marketplaceArg, - "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs" - ]) + let node = await startCodex( + @[ + "persistence", + "--eth-provider=" & "http://127.0.0.1:" & $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=" & "http://127.0.0.1:" & $HardhatPort, - "prover", - marketplaceArg, - "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", - "--circom-wasm=tests/circuits/fixtures/proof_main.wasm" - ]) + let node = await startCodex( + @[ + "persistence", + "--eth-provider=" & "http://127.0.0.1:" & $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) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 1af7202cda..bbbb026328 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -43,7 +43,7 @@ proc run() {.async.} = # Echoes stdout from the integration test file process. Codex process logs can # also be output if a test uses a multinodesuite, requires CodexConfig.debug # to be enabled - const debugCodexNodes = false + const debugCodexNodes = true # Shows test status updates at time intervals. Useful for running locally with # active terminal interaction. Set to false for unattended runs, eg CI. const showContinuousStatusUpdates = true @@ -55,8 +55,8 @@ proc run() {.async.} = fgBlack, styleBright, "\n\n ", styleUnderscore, "ADDITIONAL LOGGING AVAILABILE\n\n", resetStyle, bgWhite, fgBlack, styleBright, """ -More integration test harness logs available by running with --d:chronicles_log_level=TRACE, eg:""", + More integration test harness logs available by running with + -d:chronicles_log_level=TRACE, eg:""", resetStyle, bgWhite, fgBlack, "\n\n nim c -d:chronicles_log_level=TRACE -r ./testIntegration.nim\n\n" @@ -67,7 +67,7 @@ More integration test harness logs available by running with """ For integration test suites that are multinodesuites, or for tests launching a CodexProcess, ensure that CodexConfig.debug - is enabled. + is enabled to see chronicles logs. """ let manager = TestManager.new( From 5338c567ed127bede65b45adf56422297ad4d040 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:28:38 +1100 Subject: [PATCH 032/178] DIsable continuous updates by default (for CI) --- tests/testIntegration.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index bbbb026328..0a81e62ec3 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -46,7 +46,7 @@ proc run() {.async.} = const debugCodexNodes = true # Shows test status updates at time intervals. Useful for running locally with # active terminal interaction. Set to false for unattended runs, eg CI. - const showContinuousStatusUpdates = true + const showContinuousStatusUpdates = false # Timeout duration for EACH integration test file. const testTimeout = 60.minutes From 05a11cbe4491990d5bbbbadb2408d556cd9d323c Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 17:55:31 +1100 Subject: [PATCH 033/178] allow test parameters to be set from make testIntegration command --- Makefile | 20 +++++++++++++++++- tests/testIntegration.nim | 44 +++++++++++++++++++-------------------- 2 files changed, 41 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index f39a3394af..6a34713827 100644 --- a/Makefile +++ b/Makefile @@ -140,10 +140,28 @@ testContracts: | build deps echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim testContracts $(NIM_PARAMS) --define:ws_resubscribe=240 build.nims +TEST_PARAMS := +ifdef DEBUG_TESTHARNESS + TEST_PARAMS := $(TEST_PARAMS) -d:DebugTestHarness=$(DEBUG_TESTHARNESS) +endif +ifdef DEBUG_HARDHAT + TEST_PARAMS := $(TEST_PARAMS) -d:DebugHardhat=$(DEBUG_HARDHAT) +endif +ifdef DEBUG_CODEXNODES + TEST_PARAMS := $(TEST_PARAMS) -d:DebugCodexNodes=$(DEBUG_CODEXNODES) +endif +ifdef DEBUG_UPDATES + TEST_PARAMS := $(TEST_PARAMS) -d:ShowContinuousStatusUpdates=$(DEBUG_UPDATES) +endif +ifdef TEST_TIMEOUT + TEST_PARAMS := $(TEST_PARAMS) -d:TestTimeout=$(TEST_TIMEOUT) +endif + # Builds and runs the integration tests testIntegration: | build deps + echo TEST PARAMS: $(TEST_PARAMS) echo -e $(BUILD_MSG) "build/$@" && \ - $(ENV_SCRIPT) nim testIntegration $(NIM_PARAMS) --define:ws_resubscribe=240 build.nims + $(ENV_SCRIPT) nim testIntegration $(TEST_PARAMS) $(NIM_PARAMS) --define:ws_resubscribe=240 build.nims # Builds and runs all tests (except for Taiko L2 tests) testAll: | build deps diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 0a81e62ec3..38e0e8e80b 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -34,23 +34,23 @@ const TestConfigs = ), ] -proc run() {.async.} = - # Echoes stderr if there's a test failure (eg test failed, compilation error) - # or error (eg test manager error) - const debugTestHarness = false - # Echoes stdout from Hardhat process - const debugHardhat = false - # Echoes stdout from the integration test file process. Codex process logs can - # also be output if a test uses a multinodesuite, requires CodexConfig.debug - # to be enabled - const debugCodexNodes = true - # Shows test status updates at time intervals. Useful for running locally with - # active terminal interaction. Set to false for unattended runs, eg CI. - const showContinuousStatusUpdates = false - # Timeout duration for EACH integration test file. - const testTimeout = 60.minutes +# Echoes stderr if there's a test failure (eg test failed, compilation error) +# or error (eg test manager error) +const DebugTestHarness {.booldefine.} = false +# Echoes stdout from Hardhat process +const DebugHardhat {.booldefine.} = false +# Echoes stdout from the integration test file process. Codex process logs can +# also be output if a test uses a multinodesuite, requires CodexConfig.debug +# to be enabled +const DebugCodexNodes {.booldefine.} = true +# Shows test status updates at time intervals. Useful for running locally with +# active terminal interaction. Set to false for unattended runs, eg CI. +const ShowContinuousStatusUpdates {.booldefine.} = false +# Timeout duration (in mimutes) for EACH integration test file. +const TestTimeout {.intdefine.} = 60 - when debugTestHarness and enabledLogLevel != LogLevel.TRACE: +proc run() {.async.} = + when DebugTestHarness and enabledLogLevel != LogLevel.TRACE: styledEcho bgWhite, fgBlack, styleBright, "\n\n ", styleUnderscore, "ADDITIONAL LOGGING AVAILABILE\n\n", resetStyle, bgWhite, fgBlack, styleBright, @@ -60,7 +60,7 @@ proc run() {.async.} = resetStyle, bgWhite, fgBlack, "\n\n nim c -d:chronicles_log_level=TRACE -r ./testIntegration.nim\n\n" - when debugCodexNodes: + when DebugCodexNodes: styledEcho bgWhite, fgBlack, styleBright, "\n\n ", styleUnderscore, "ENABLE CODEX LOGGING\n\n", resetStyle, bgWhite, fgBlack, styleBright, @@ -72,11 +72,11 @@ proc run() {.async.} = let manager = TestManager.new( configs = TestConfigs, - debugTestHarness, - debugHardhat, - debugCodexNodes, - showContinuousStatusUpdates, - testTimeout, + DebugTestHarness, + DebugHardhat, + DebugCodexNodes, + ShowContinuousStatusUpdates, + TestTimeout.minutes, ) try: trace "starting test manager" From e98b60196a1f81ee7d1beb3b13ca3e54520fbb6a Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 19:22:36 +1100 Subject: [PATCH 034/178] format info blurbs --- tests/testIntegration.nim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 38e0e8e80b..9738d79529 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -53,7 +53,8 @@ proc run() {.async.} = when DebugTestHarness and enabledLogLevel != LogLevel.TRACE: styledEcho bgWhite, fgBlack, styleBright, "\n\n ", styleUnderscore, - "ADDITIONAL LOGGING AVAILABILE\n\n", resetStyle, bgWhite, fgBlack, styleBright, + "ℹ️ ADDITIONAL LOGGING AVAILABLE ℹ️\n\n", resetStyle, bgWhite, fgBlack, + styleBright, """ More integration test harness logs available by running with -d:chronicles_log_level=TRACE, eg:""", @@ -62,8 +63,9 @@ proc run() {.async.} = when DebugCodexNodes: styledEcho bgWhite, - fgBlack, styleBright, "\n\n ", styleUnderscore, "ENABLE CODEX LOGGING\n\n", - resetStyle, bgWhite, fgBlack, styleBright, + fgBlack, styleBright, "\n\n ", styleUnderscore, + "⚠️ ENABLE CODEX LOGGING ⚠️\n\n", resetStyle, bgWhite, fgBlack, + styleBright, """ For integration test suites that are multinodesuites, or for tests launching a CodexProcess, ensure that CodexConfig.debug From 044edfbfe2c9dcb100f5a5f57ed2c01b3e90e277 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 19:23:08 +1100 Subject: [PATCH 035/178] automatically enable chronicles logs for the test harness when DEBUG_TESTHARNESS=1 --- Makefile | 2 +- build.nims | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6a34713827..5233f52dd0 100644 --- a/Makefile +++ b/Makefile @@ -147,7 +147,7 @@ endif ifdef DEBUG_HARDHAT TEST_PARAMS := $(TEST_PARAMS) -d:DebugHardhat=$(DEBUG_HARDHAT) endif -ifdef DEBUG_CODEXNODES +ifdef DEBUG_CODEXNODES # true by default TEST_PARAMS := $(TEST_PARAMS) -d:DebugCodexNodes=$(DEBUG_CODEXNODES) endif ifdef DEBUG_UPDATES diff --git a/build.nims b/build.nims index 8866032102..38ac11d1cf 100644 --- a/build.nims +++ b/build.nims @@ -1,8 +1,13 @@ mode = ScriptMode.Verbose import std/os except commandLineParams +import std/strutils ### Helper functions +proc truthy(val: string): bool = + const truthySwitches = @["yes", "1", "on", "true"] + return val in truthySwitches + proc buildBinary(name: string, srcDir = "./", params = "", lang = "c") = if not dirExists "build": mkDir "build" @@ -46,7 +51,11 @@ task testIntegration, "Run integration tests": buildBinary "codex", params = "-d:chronicles_runtime_filtering -d:chronicles_log_level=TRACE -d:codex_enable_proof_failures=true" - test "testIntegration" + var testParams = "" + for i in 2 ..< paramCount(): + if "DebugTestHarness" in paramStr(i) and truthy paramStr(i).split('=')[1]: + testParams = "-d:chronicles_log_level=TRACE -d:chronicles_sinks=textlines[stdout]" + test "testIntegration", params = testParams # use params to enable logging from the integration test executable # test "testIntegration", params = "-d:chronicles_sinks=textlines[notimestamps,stdout],textlines[dynamic] " & # "-d:chronicles_enabled_topics:integration:TRACE" From 365177947f6c2739309be7287d6bf2dd9fc02710 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 19:23:21 +1100 Subject: [PATCH 036/178] CI: do not start hardhat for integration tests --- .github/workflows/ci-reusable.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index 55ee294ff7..33ee33b174 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -54,7 +54,7 @@ jobs: node-version: 20 - name: Start Ethereum node with Codex contracts - if: matrix.tests == 'contract' || matrix.tests == 'integration' || matrix.tests == 'tools' || matrix.tests == 'all' + if: matrix.tests == 'contract' || matrix.tests == 'tools' || matrix.tests == 'all' working-directory: vendor/codex-contracts-eth env: MSYS2_PATH_TYPE: inherit From 1218c493be219d9a5836398c2e088aa72b8847ae Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 19:38:30 +1100 Subject: [PATCH 037/178] formatting --- tests/integration/testmanager.nim | 328 ++++++++++++++---------------- 1 file changed, 153 insertions(+), 175 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 35dc36a1a0..7a0538bbf6 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -50,33 +50,40 @@ type name: string IntegrationTestStatus = enum ## The status of a test when it is done. - New, # Test not yet run - Running, # Test currently running - Ok, # Test file launched, and exited with 0. Indicates all tests completed and passed. - Failed, # Test file launched, but exited with a non-zero exit code. Indicates either the test file did not compile, or one or more of the tests in the file failed - Timeout, # Test file launched, but the tests did not complete before the timeout. - Error # Test file did not launch correctly. Indicates an error occurred running the tests (usually an error in the harness). + New # Test not yet run + Running # Test currently running + Ok # Test file launched, and exited with 0. Indicates all tests completed and passed. + Failed + # Test file launched, but exited with a non-zero exit code. Indicates either the test file did not compile, or one or more of the tests in the file failed + Timeout # Test file launched, but the tests did not complete before the timeout. + Error + # Test file did not launch correctly. Indicates an error occurred running the tests (usually an error in the harness). IntegrationTest = ref object manager: TestManager config: IntegrationTestConfig - process: Future[CommandExResponse].Raising([AsyncProcessError, AsyncProcessTimeoutError, CancelledError]) + process: Future[CommandExResponse].Raising( + [AsyncProcessError, AsyncProcessTimeoutError, CancelledError] + ) timeStart: ?Moment timeEnd: ?Moment output: ?!CommandExResponse - testId: string # when used in datadir path, prevents data dir clashes + testId: string # when used in datadir path, prevents data dir clashes status: IntegrationTestStatus command: string TestManagerError* = object of CatchableError Border {.pure.} = enum - Left, Right + Left + Right + Align {.pure.} = enum - Left, Right + Left + Right MarkerPosition {.pure.} = enum - Start, + Start Finish {.push raises: [].} @@ -84,9 +91,13 @@ type logScope: topics = "testing integration testmanager" -proc printOutputMarker(test: IntegrationTest, position: MarkerPosition, msg: string) {.gcsafe, raises: [].} +proc printOutputMarker( + test: IntegrationTest, position: MarkerPosition, msg: string +) {.gcsafe, raises: [].} -proc raiseTestManagerError(msg: string, parent: ref CatchableError = nil) {.raises: [TestManagerError].} = +proc raiseTestManagerError( + msg: string, parent: ref CatchableError = nil +) {.raises: [TestManagerError].} = raise newException(TestManagerError, msg, parent) template echoStyled(args: varargs[untyped]) = @@ -97,14 +108,14 @@ template echoStyled(args: varargs[untyped]) = error "failed to print to terminal", error = parent.msg proc new*( - _: type TestManager, - configs: seq[IntegrationTestConfig], - debugTestHarness = false, - debugHardhat = false, - debugCodexNodes = false, - showContinuousStatusUpdates = false, - testTimeout = 60.minutes): TestManager = - + _: type TestManager, + configs: seq[IntegrationTestConfig], + debugTestHarness = false, + debugHardhat = false, + debugCodexNodes = false, + showContinuousStatusUpdates = false, + testTimeout = 60.minutes, +): TestManager = TestManager( configs: configs, lastHardhatPort: 8545, @@ -117,18 +128,12 @@ proc new*( ) func init*( - _: type IntegrationTestConfig, - testFile: string, - startHardhat: bool, - name = ""): IntegrationTestConfig = - + _: type IntegrationTestConfig, testFile: string, startHardhat: bool, name = "" +): IntegrationTestConfig = IntegrationTestConfig( testFile: testFile, - name: if name == "": - testFile.extractFilename - else: - name, - startHardhat: startHardhat + name: if name == "": testFile.extractFilename else: name, + startHardhat: startHardhat, ) template withLock*(lock: AsyncLock, body: untyped) = @@ -144,7 +149,6 @@ template withLock*(lock: AsyncLock, body: untyped) = except AsyncLockError as parent: raiseTestManagerError "lock error", parent - proc duration(manager: TestManager): Duration = let now = Moment.now() (manager.timeEnd |? now) - (manager.timeStart |? now) @@ -154,8 +158,8 @@ proc duration(test: IntegrationTest): Duration = (test.timeEnd |? now) - (test.timeStart |? now) proc startHardhat( - test: IntegrationTest): Future[Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = - + test: IntegrationTest +): Future[Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = var args: seq[string] = @[] var port: int @@ -175,10 +179,8 @@ proc startHardhat( try: withLock(test.manager.hardhatProcessLock): let node = await HardhatProcess.startNode( - args, - false, - "hardhat for '" & test.config.name & "'", - onOutputLineCaptured) + args, false, "hardhat for '" & test.config.name & "'", onOutputLineCaptured + ) hardhat.process = node hardhat.port = port await node.waitUntilStarted() @@ -193,40 +195,36 @@ proc startHardhat( test.printOutputMarker(MarkerPosition.Finish, "hardhat stdout") raiseTestManagerError "hardhat node failed to start: " & e.msg, e -proc printResult( - test: IntegrationTest, - colour: ForegroundColor) = - - echoStyled styleBright, colour, &"[{toUpper $test.status}] ", - resetStyle, test.config.name, - resetStyle, styleDim, &" ({test.duration})" - -proc printOutputMarker( - test: IntegrationTest, - position: MarkerPosition, - msg: string) = - +proc printResult(test: IntegrationTest, colour: ForegroundColor) = + echoStyled styleBright, + colour, + &"[{toUpper $test.status}] ", + resetStyle, + test.config.name, + resetStyle, + styleDim, + &" ({test.duration})" + +proc printOutputMarker(test: IntegrationTest, position: MarkerPosition, msg: string) = if position == MarkerPosition.Start: echo "" - echoStyled styleBright, bgWhite, fgBlack, - &"----- {toUpper $position} {test.config.name} {msg} -----" + echoStyled styleBright, + bgWhite, fgBlack, &"----- {toUpper $position} {test.config.name} {msg} -----" if position == MarkerPosition.Finish: echo "" proc printResult( - test: IntegrationTest, - printStdOut = test.manager.debugCodexNodes, - printStdErr = test.manager.debugTestHarness) = - - case test.status: + test: IntegrationTest, + printStdOut = test.manager.debugCodexNodes, + printStdErr = test.manager.debugTestHarness, +) = + case test.status of IntegrationTestStatus.New: test.printResult(fgBlue) - of IntegrationTestStatus.Running: test.printResult(fgCyan) - of IntegrationTestStatus.Error: if error =? test.output.errorOption: test.printResult(fgRed) @@ -234,61 +232,51 @@ proc printResult( echo "Error during test execution: ", error.msg echo "Stacktrace: ", error.getStackTrace() test.printOutputMarker(MarkerPosition.Finish, "test harness errors") - of IntegrationTestStatus.Failed: if output =? test.output: if printStdErr: #manager.debugTestHarness - test.printOutputMarker(MarkerPosition.Start, - "test harness errors (stderr)") + test.printOutputMarker(MarkerPosition.Start, "test harness errors (stderr)") echo output.stdError - test.printOutputMarker(MarkerPosition.Finish, - "test harness errors (stderr)") + test.printOutputMarker(MarkerPosition.Finish, "test harness errors (stderr)") if printStdOut: - test.printOutputMarker(MarkerPosition.Start, - "codex node output (stdout)") + test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") echo output.stdOutput - test.printOutputMarker(MarkerPosition.Finish, - "codex node output (stdout)") + test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgRed) - of IntegrationTestStatus.Timeout: - if printStdOut and - output =? test.output: - test.printOutputMarker(MarkerPosition.Start, - "codex node output (stdout)") + if printStdOut and output =? test.output: + test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") echo output.stdOutput - test.printOutputMarker(MarkerPosition.Finish, - "codex node output (stdout)") + test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgYellow) - of IntegrationTestStatus.Ok: - if printStdOut and - output =? test.output: - test.printOutputMarker(MarkerPosition.Start, - "codex node output (stdout)") + if printStdOut and output =? test.output: + test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") echo output.stdOutput - test.printOutputMarker(MarkerPosition.Finish, - "codex node output (stdout)") + test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgGreen) proc printSummary(test: IntegrationTest) = test.printResult(printStdOut = false, printStdErr = false) proc printStart(test: IntegrationTest) = - echoStyled styleBright, fgMagenta, &"[Integration test started] ", resetStyle, test.config.name + echoStyled styleBright, + fgMagenta, &"[Integration test started] ", resetStyle, test.config.name proc buildCommand( - test: IntegrationTest, - hardhatPort: ?int): Future[string] {.async: (raises:[CancelledError, TestManagerError]).} = - - let logging = if not test.manager.debugTestHarness: "" - else: "-d:chronicles_log_level=TRACE " & - "-d:chronicles_disabled_topics=websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT " & - "-d:chronicles_default_output_device=stdout " & - "-d:chronicles_sinks=textlines" + test: IntegrationTest, hardhatPort: ?int +): Future[string] {.async: (raises: [CancelledError, TestManagerError]).} = + let logging = + if not test.manager.debugTestHarness: + "" + else: + "-d:chronicles_log_level=TRACE " & + "-d:chronicles_disabled_topics=websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT " & + "-d:chronicles_default_output_device=stdout " & "-d:chronicles_sinks=textlines" let strHardhatPort = - if not test.config.startHardhat: "" + if not test.config.startHardhat: + "" else: without port =? hardhatPort: raiseTestManagerError "hardhatPort required when 'config.startHardhat' is true" @@ -297,8 +285,8 @@ proc buildCommand( var testFile: string try: testFile = absolutePath( - test.config.testFile, - root = currentSourcePath().parentDir().parentDir()) + test.config.testFile, root = currentSourcePath().parentDir().parentDir() + ) except ValueError as parent: raiseTestManagerError "bad file name, testFile: " & test.config.testFile, parent @@ -315,28 +303,18 @@ proc buildCommand( withLock(test.manager.hardhatPortLock): try: - return "nim c " & - &"-d:CodexApiPort={apiPort} " & - &"-d:CodexDiscPort={discPort} " & - &"{strHardhatPort} " & - &"-d:TestId={test.testId} " & - &"{logging} " & - "--verbosity:0 " & - "--hints:off " & - "-d:release " & - "-r " & - &"{testFile}" + return + "nim c " & &"-d:CodexApiPort={apiPort} " & &"-d:CodexDiscPort={discPort} " & + &"{strHardhatPort} " & &"-d:TestId={test.testId} " & &"{logging} " & + "--verbosity:0 " & "--hints:off " & "-d:release " & "-r " & &"{testFile}" except ValueError as parent: - raiseTestManagerError "bad command --\n" & - ", apiPort: " & $apiPort & - ", discPort: " & $discPort & - ", logging: " & logging & - ", testFile: " & testFile & - ", error: " & parent.msg, - parent -proc setup( - test: IntegrationTest): Future[?Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = + raiseTestManagerError "bad command --\n" & ", apiPort: " & $apiPort & + ", discPort: " & $discPort & ", logging: " & logging & ", testFile: " & + testFile & ", error: " & parent.msg, parent +proc setup( + test: IntegrationTest +): Future[?Hardhat] {.async: (raises: [CancelledError, TestManagerError]).} = var hardhat = Hardhat.none var hardhatPort = int.none @@ -351,9 +329,8 @@ proc setup( return hardhat proc teardown( - test: IntegrationTest, - hardhat: ?Hardhat) {.async: (raises: [CancelledError]).} = - + test: IntegrationTest, hardhat: ?Hardhat +) {.async: (raises: [CancelledError]).} = if test.config.startHardhat and hardhat =? hardhat: try: trace "Stopping hardhat", name = test.config.name @@ -368,23 +345,20 @@ proc teardown( echo line test.printOutputMarker(MarkerPosition.Finish, "Hardhat stdout") - test.manager.hardhats.keepItIf( it != hardhat ) + test.manager.hardhats.keepItIf(it != hardhat) proc start(test: IntegrationTest) {.async: (raises: []).} = - logScope: config = test.config trace "Running test" - test.timeStart = some Moment.now() test.status = IntegrationTestStatus.Running var hardhat = none Hardhat try: - try: hardhat = await test.setup() except TestManagerError as e: @@ -397,10 +371,8 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = try: trace "Starting parallel integration test", command = test.command test.printStart() - test.process = execCommandEx( - command = test.command, - timeout = test.manager.testTimeout - ) + test.process = + execCommandEx(command = test.command, timeout = test.manager.testTimeout) let output = await test.process # waits on waitForExit test.output = success(output) @@ -409,13 +381,11 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = test.status = IntegrationTestStatus.Failed else: test.status = IntegrationTestStatus.Ok - except AsyncProcessTimeoutError as e: test.timeEnd = some Moment.now() error "Test timed out", name = test.config.name, duration = test.duration test.output = CommandExResponse.failure(e) test.status = IntegrationTestStatus.Timeout - except AsyncProcessError as e: test.timeEnd = some Moment.now() error "Test failed to complete", name = test.config.name, duration = test.duration @@ -423,7 +393,6 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = test.status = IntegrationTestStatus.Error await test.teardown(hardhat) - except CancelledError: discard # start is asyncSpawned, do not propagate @@ -433,17 +402,13 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = try: - while true: - let sleepDuration = if manager.duration < 5.minutes: - 30.seconds - else: - 1.minutes + let sleepDuration = if manager.duration < 5.minutes: 30.seconds else: 1.minutes if manager.tests.len > 0: echo "" - echoStyled styleBright, bgWhite, fgBlack, - &"Integration tests status after {manager.duration}" + echoStyled styleBright, + bgWhite, fgBlack, &"Integration tests status after {manager.duration}" for test in manager.tests: test.printResult(false, false) @@ -452,11 +417,12 @@ proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = echo "" await sleepAsync(sleepDuration) - except CancelledError as e: discard -proc untilTimeout(fut: Future[void], timeout: Duration): Future[bool] {.async: (raises: [CancelledError]).} = +proc untilTimeout( + fut: Future[void], timeout: Duration +): Future[bool] {.async: (raises: [CancelledError]).} = # workaround for withTimeout, which did not work correctly try: let timer = sleepAsync(timeout) @@ -471,8 +437,9 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = if not completedBeforeTimeout: test.timeEnd = some Moment.now() error "Test timed out", name = test.config.name, duration = test.duration - let e = newException(AsyncProcessTimeoutError, - "Test did not complete before elapsed timeout") + let e = newException( + AsyncProcessTimeoutError, "Test did not complete before elapsed timeout" + ) test.output = CommandExResponse.failure(e) test.status = IntegrationTestStatus.Timeout @@ -480,8 +447,6 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = await futStart.cancelAndWait() test.printResult() - - except CancelledError: discard # do not propagate due to asyncSpawn @@ -490,16 +455,12 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = manager.timeStart = some Moment.now() - echoStyled styleBright, bgWhite, fgBlack, - "\n[Integration Test Manager] Starting parallel integration tests" + echoStyled styleBright, + bgWhite, fgBlack, "\n[Integration Test Manager] Starting parallel integration tests" for config in manager.configs: - - var test = IntegrationTest( - manager: manager, - config: config, - testId: $ uint16.example - ) + var test = + IntegrationTest(manager: manager, config: config, testId: $uint16.example) manager.tests.add test let futRun = test.run() @@ -511,11 +472,8 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = manager.timeEnd = some Moment.now() proc withBorder( - msg: string, - align = Align.Left, - width = 67, - borders = {Border.Left, Border.Right}): string = - + msg: string, align = Align.Left, width = 67, borders = {Border.Left, Border.Right} +): string = if borders.contains(Border.Left): result &= "| " if align == Align.Left: @@ -525,15 +483,16 @@ proc withBorder( if borders.contains(Border.Right): result &= " |" -proc printResult(manager: TestManager) {.raises: [TestManagerError].}= +proc printResult(manager: TestManager) {.raises: [TestManagerError].} = var successes = 0 var totalDurationSerial: Duration - let showSummary = manager.debugCodexNodes or manager.debugHardhat or manager.debugTestHarness + let showSummary = + manager.debugCodexNodes or manager.debugHardhat or manager.debugTestHarness if showSummary: echo "" - echoStyled styleBright, styleUnderscore, bgWhite, fgBlack, - &"INTEGRATION TESTS RESULT" + echoStyled styleBright, + styleUnderscore, bgWhite, fgBlack, &"INTEGRATION TESTS RESULT" for test in manager.tests: totalDurationSerial += test.duration @@ -546,28 +505,47 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].}= # estimated time saved as serial execution with a single hardhat instance # incurs less overhead - let relativeTimeSaved = ((totalDurationSerial - manager.duration).nanos * 100) div - (totalDurationSerial.nanos) - let passingStyle = if successes < manager.tests.len: - fgRed - else: - fgGreen - + let relativeTimeSaved = + ((totalDurationSerial - manager.duration).nanos * 100) div + (totalDurationSerial.nanos) + let passingStyle = if successes < manager.tests.len: fgRed else: fgGreen echo "\n▢=====================================================================▢" - echoStyled "| ", styleBright, styleUnderscore, "INTEGRATION TEST SUMMARY", resetStyle, "".withBorder(Align.Right, 43, {Border.Right}) + echoStyled "| ", + styleBright, + styleUnderscore, + "INTEGRATION TEST SUMMARY", + resetStyle, + "".withBorder(Align.Right, 43, {Border.Right}) echo "".withBorder() - echoStyled styleBright, "| TOTAL TIME : ", resetStyle, ($manager.duration).withBorder(Align.Right, 49, {Border.Right}) - echoStyled styleBright, "| TIME SAVED (EST): ", resetStyle, (&"{relativeTimeSaved}%").withBorder(Align.Right, 49, {Border.Right}) - echoStyled "| ", styleBright, passingStyle, "PASSING : ", resetStyle, passingStyle, (&"{successes} / {manager.tests.len}").align(49), resetStyle, " |" + echoStyled styleBright, + "| TOTAL TIME : ", + resetStyle, + ($manager.duration).withBorder(Align.Right, 49, {Border.Right}) + echoStyled styleBright, + "| TIME SAVED (EST): ", + resetStyle, + (&"{relativeTimeSaved}%").withBorder(Align.Right, 49, {Border.Right}) + echoStyled "| ", + styleBright, + passingStyle, + "PASSING : ", + resetStyle, + passingStyle, + (&"{successes} / {manager.tests.len}").align(49), + resetStyle, + " |" echo "▢=====================================================================▢" -proc start*(manager: TestManager) {.async: (raises: [CancelledError, TestManagerError]).} = - let futContinuousUpdates = manager.continuallyShowUpdates() - asyncSpawn futContinuousUpdates +proc start*( + manager: TestManager +) {.async: (raises: [CancelledError, TestManagerError]).} = + if manager.showContinuousStatusUpdates: + let fut = manager.continuallyShowUpdates() + manager.trackedFutures.track fut + asyncSpawn fut await manager.runTests() - await futContinuousUpdates.cancelAndWait() manager.printResult() @@ -580,4 +558,4 @@ proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = try: await hardhat.process.stop() except CatchableError as e: - trace "failed to stop hardhat node", error = e.msg \ No newline at end of file + trace "failed to stop hardhat node", error = e.msg From e4ebfaafacf19095651244bac7ab765422498754 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 19:38:58 +1100 Subject: [PATCH 038/178] use tracked futures for showContinuousStatusUpdates --- tests/integration/testmanager.nim | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 7a0538bbf6..6ba2404acb 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -6,6 +6,7 @@ import std/unittest import pkg/chronos import pkg/chronos/asyncproc import pkg/codex/logutils +import pkg/codex/utils/trackedfutures import pkg/questionable import pkg/questionable/results import ./hardhatprocess @@ -43,6 +44,7 @@ type hardhatPortLock: AsyncLock hardhatProcessLock: AsyncLock testTimeout: Duration # individual test timeout + trackedFutures: TrackedFutures IntegrationTestConfig* = object startHardhat: bool @@ -124,7 +126,8 @@ proc new*( debugTestHarness: debugTestHarness, debugHardhat: debugHardhat, debugCodexNodes: debugCodexNodes, - testTimeout: testTimeout + testTimeout: testTimeout, + trackedFutures: TrackedFutures.new(), ) func init*( @@ -550,6 +553,8 @@ proc start*( manager.printResult() proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = + await manager.trackedFutures.cancelTracked() + for test in manager.tests: if not test.process.isNil and not test.process.finished: await test.process.cancelAndWait() From 2cfd9635e77e5cbb7c34477b9a19f263eb8b0130 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 19:43:48 +1100 Subject: [PATCH 039/178] clean up --- tests/integration/multinodes.nim | 1 - tests/testIntegration.nim | 12 ------------ 2 files changed, 13 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index eeb2df54fc..1b4f27f117 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -123,7 +123,6 @@ template multinodesuite*(name: string, body: untyped) = let port = await nextFreePort(HardhatPort) jsonRpcProviderUrl.updatePort(port) - trace "updated jsonRpcProviderUrl", jsonRpcProviderUrl args.add("--port") args.add($port) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 9738d79529..275e8ea579 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -1,15 +1,3 @@ -# import ./integration/testcli -# import ./integration/testrestapi -# import ./integration/testrestapivalidation -# import ./integration/testupdownload -# import ./integration/testsales -# import ./integration/testpurchasing -# import ./integration/testblockexpiration -# import ./integration/testmarketplace -# import ./integration/testproofs -# import ./integration/testvalidator -# import ./integration/testecbug - import std/terminal import pkg/chronos import pkg/codex/logutils From 8b70cbc13a1cd4054432ae62a9c978769b5bb583 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 19:44:39 +1100 Subject: [PATCH 040/178] formatting --- tests/integration/nodeprocess.nim | 6 ++---- tests/integration/utils.nim | 3 +-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 690a957a15..8152ee9f73 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -130,11 +130,9 @@ method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = trace "waiting for node process to exit" let exitCode = await node.process.waitForExit(3.seconds) - if exitCode > 0 and - exitCode != 143 and # 143 = SIGTERM (initiated above) - exitCode != expectedErrCode: + if exitCode > 0 and exitCode != 143 and # 143 = SIGTERM (initiated above) + exitCode != expectedErrCode: error "failed to exit process, check for zombies", exitCode - except CancelledError as error: raise error except CatchableError as e: diff --git a/tests/integration/utils.nim b/tests/integration/utils.nim index d70289e432..a2fa38313b 100644 --- a/tests/integration/utils.nim +++ b/tests/integration/utils.nim @@ -1,8 +1,7 @@ import pkg/chronos import pkg/codex/logutils -proc nextFreePort*(startPort: int): Future[int] {.async: (raises:[CancelledError]).} = - +proc nextFreePort*(startPort: int): Future[int] {.async: (raises: [CancelledError]).} = proc client(server: StreamServer, transp: StreamTransport) {.async.} = await transp.closeWait() From 6b8f6d539abde0ef18947d80ad4a0fffcfa39be9 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 22 Jan 2025 20:02:20 +1100 Subject: [PATCH 041/178] formatting trying to make nph happy --- codex/blockexchange/engine/engine.nim | 6 ++++++ tests/codex/slots/sampler/testutils.nim | 6 ++---- tests/integration/codexconfig.nim | 3 ++- tests/integration/multinodes.nim | 6 +++--- tests/integration/testcli.nim | 8 ++++---- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/codex/blockexchange/engine/engine.nim b/codex/blockexchange/engine/engine.nim index 36d00cf0be..307041f4b1 100644 --- a/codex/blockexchange/engine/engine.nim +++ b/codex/blockexchange/engine/engine.nim @@ -68,6 +68,12 @@ const DefaultMaxPeersPerRequest* = 10 DefaultTaskQueueSize = 100 DefaultConcurrentTasks = 10 + # DefaultMaxRetries = 3 + # DefaultConcurrentDiscRequests = 10 + # DefaultConcurrentAdvertRequests = 10 + # DefaultDiscoveryTimeout = 1.minutes + # DefaultMaxQueriedBlocksCache = 1000 + # DefaultMinPeersPerBlock = 3 type TaskHandler* = proc(task: BlockExcPeerCtx): Future[void] {.gcsafe.} diff --git a/tests/codex/slots/sampler/testutils.nim b/tests/codex/slots/sampler/testutils.nim index f20b5efc4d..5460fde76f 100644 --- a/tests/codex/slots/sampler/testutils.nim +++ b/tests/codex/slots/sampler/testutils.nim @@ -77,15 +77,13 @@ asyncchecksuite "Test proof sampler utils": ) proc getExpectedIndices(n: int): seq[Natural] = - return collect( - newSeq, + return collect(newSeq): (; for i in 1 .. n: cellIndex( proofInput.entropy, proofInput.slotRoot, proofInput.nCellsPerSlot, i ) - ), - ) + ) check: slotCellIndices(3) == getExpectedIndices(3) diff --git a/tests/integration/codexconfig.nim b/tests/integration/codexconfig.nim index 138ae274d9..8d0cdb3392 100644 --- a/tests/integration/codexconfig.nim +++ b/tests/integration/codexconfig.nim @@ -169,7 +169,8 @@ proc withLogFile*(self: CodexConfigs): CodexConfigs {.raises: [CodexConfigError] proc withLogFile*( self: var CodexConfig, logFile: string -) {.raises: [CodexConfigError].} = #: CodexConfigs = +) {.raises: [CodexConfigError].} = + #: CodexConfigs = ## typically called internally from the test suite, sets a log file path to ## be created during the test run, for a specified node in the group # var config = self diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 1b4f27f117..295dc9f226 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -219,15 +219,15 @@ template multinodesuite*(name: string, body: untyped) = ) config.addCliOption( PersistenceCmd.prover, "--circom-r1cs", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.r1cs" + "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.r1cs", ) config.addCliOption( PersistenceCmd.prover, "--circom-wasm", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.wasm" + "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.wasm", ) config.addCliOption( PersistenceCmd.prover, "--circom-zkey", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.zkey" + "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.zkey", ) return await newCodexProcess(providerIdx, config, Role.Provider) diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index 8d1878e218..eaaa569b3c 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -21,7 +21,7 @@ asyncchecksuite "Command line interface": args.concat( @[ "--api-port=" & $(await nextFreePort(8080 + nodeCount)), - "--disc-port=" & $(await nextFreePort(8090 + nodeCount)) + "--disc-port=" & $(await nextFreePort(8090 + nodeCount)), ] ), debug = false, @@ -40,7 +40,7 @@ asyncchecksuite "Command line interface": @[ "persistence", "--eth-provider=" & "http://127.0.0.1:" & $HardhatPort, - "--eth-private-key=" & unsafeKeyFile + "--eth-private-key=" & unsafeKeyFile, ] ) await node.waitUntilOutput( @@ -66,7 +66,7 @@ asyncchecksuite "Command line interface": "--eth-provider=" & "http://127.0.0.1:" & $HardhatPort, "prover", marketplaceArg, - "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs" + "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", ] ) await node.waitUntilOutput(expectedDownloadInstruction) @@ -80,7 +80,7 @@ asyncchecksuite "Command line interface": "prover", marketplaceArg, "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", - "--circom-wasm=tests/circuits/fixtures/proof_main.wasm" + "--circom-wasm=tests/circuits/fixtures/proof_main.wasm", ] ) await node.waitUntilOutput(expectedDownloadInstruction) From eaa3fbef9b04c3ed0f9eb60aa121d9a221b6ec56 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 23 Jan 2025 10:26:47 +1100 Subject: [PATCH 042/178] npm install to install the hardhat binary in CI --- .github/workflows/ci-reusable.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index 33ee33b174..c896f5eacd 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -53,13 +53,20 @@ jobs: with: node-version: 20 - - name: Start Ethereum node with Codex contracts - if: matrix.tests == 'contract' || matrix.tests == 'tools' || matrix.tests == 'all' + - name: Install Ethereum node dependencies + if: matrix.tests == 'contract' || matrix.tests == 'integration' || matrix.tests == 'tools' || matrix.tests == 'all' working-directory: vendor/codex-contracts-eth env: MSYS2_PATH_TYPE: inherit run: | npm install + + - name: Run Ethereum node with Codex contracts + if: matrix.tests == 'contract' || matrix.tests == 'tools' || matrix.tests == 'all' + working-directory: vendor/codex-contracts-eth + env: + MSYS2_PATH_TYPE: inherit + run: | npm start & ## Part 2 Tests ## From f9fae820262f52bd9ab29a5c6b8e467e151fb464 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 23 Jan 2025 14:33:52 +1100 Subject: [PATCH 043/178] disable windows integration tests for now --- .github/workflows/ci.yml | 1 - Makefile | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c045031c6f..9ba3b7554e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,6 @@ jobs: os {macos}, cpu {arm64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {windows}, cpu {amd64}, builder {windows-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {msys2} os {windows}, cpu {amd64}, builder {windows-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {msys2} - os {windows}, cpu {amd64}, builder {windows-latest}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} os {windows}, cpu {amd64}, builder {windows-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {msys2} build: diff --git a/Makefile b/Makefile index 5233f52dd0..d1e2ac161a 100644 --- a/Makefile +++ b/Makefile @@ -159,7 +159,6 @@ endif # Builds and runs the integration tests testIntegration: | build deps - echo TEST PARAMS: $(TEST_PARAMS) echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim testIntegration $(TEST_PARAMS) $(NIM_PARAMS) --define:ws_resubscribe=240 build.nims From 780fb6ab708c5eafe3bea95ea44ed522047b3036 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 24 Jan 2025 08:45:45 +1100 Subject: [PATCH 044/178] enable CI debugging --- .github/workflows/ci-reusable.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index c896f5eacd..12a3e89f39 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -77,7 +77,7 @@ jobs: ## Part 3 Tests ## - name: Integration tests if: matrix.tests == 'integration' || matrix.tests == 'all' - run: make -j${ncpu} testIntegration + run: make -j${ncpu} DEBUG_CODEXNODES=1 DEBUG_TESTHARNESS=1 DEBUG_UPDATES=1 testIntegration - name: Upload integration tests log files uses: actions/upload-artifact@v4 From d3245c3aa8e393b6b8e26f5965f631bc7608229b Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 12:37:03 +1100 Subject: [PATCH 045/178] Back off port inc in the hopes that this is causing issues with CI --- tests/integration/testmanager.nim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 6ba2404acb..065f61d2e2 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -294,14 +294,14 @@ proc buildCommand( raiseTestManagerError "bad file name, testFile: " & test.config.testFile, parent withLock(test.manager.codexPortLock): - # Increase the port by 100 to allow each test to run 100 codex nodes + # Increase the port by 20 to allow each test to run 20 codex nodes # (clients, SPs, validators) giving a good chance the port will be free. We # cannot rely on `nextFreePort` in multinodes entirely as there could be a # concurrency issue where the port is determined free in mulitiple tests and # then there is a clash during the run. - let apiPort = await nextFreePort(test.manager.lastCodexApiPort + 100) + let apiPort = await nextFreePort(test.manager.lastCodexApiPort + 20) test.manager.lastCodexApiPort = apiPort - let discPort = await nextFreePort(test.manager.lastCodexDiscPort + 100) + let discPort = await nextFreePort(test.manager.lastCodexDiscPort + 20) test.manager.lastCodexDiscPort = discPort withLock(test.manager.hardhatPortLock): From f0a33ad9220292da86c0f0e5ad272ea2cb81aa60 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 15:56:05 +1100 Subject: [PATCH 046/178] temporarily remove linux test to see if macos works in ci --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9ba3b7554e..b484c97624 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,6 @@ jobs: matrix: | os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {arm64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {arm64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} From e902df5365e1a349243a9c7fa9bb5859f32f83d9 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 16:36:24 +1100 Subject: [PATCH 047/178] undo changes done for CI debugging --- tests/integration/testmanager.nim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 065f61d2e2..6ba2404acb 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -294,14 +294,14 @@ proc buildCommand( raiseTestManagerError "bad file name, testFile: " & test.config.testFile, parent withLock(test.manager.codexPortLock): - # Increase the port by 20 to allow each test to run 20 codex nodes + # Increase the port by 100 to allow each test to run 100 codex nodes # (clients, SPs, validators) giving a good chance the port will be free. We # cannot rely on `nextFreePort` in multinodes entirely as there could be a # concurrency issue where the port is determined free in mulitiple tests and # then there is a clash during the run. - let apiPort = await nextFreePort(test.manager.lastCodexApiPort + 20) + let apiPort = await nextFreePort(test.manager.lastCodexApiPort + 100) test.manager.lastCodexApiPort = apiPort - let discPort = await nextFreePort(test.manager.lastCodexDiscPort + 20) + let discPort = await nextFreePort(test.manager.lastCodexDiscPort + 100) test.manager.lastCodexDiscPort = discPort withLock(test.manager.hardhatPortLock): From 373d4b5a1a53c0700bb3420852e373eb2c84b062 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 16:36:54 +1100 Subject: [PATCH 048/178] use large linux runner and disable other tests --- .github/workflows/ci.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b484c97624..d1c72b5274 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,17 +27,17 @@ jobs: uses: fabiocaccamo/create-matrix-action@v5 with: matrix: | - os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {arm64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {arm64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {arm64}, builder {macos-14}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {arm64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {windows}, cpu {amd64}, builder {windows-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {msys2} - os {windows}, cpu {amd64}, builder {windows-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {msys2} - os {windows}, cpu {amd64}, builder {windows-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {msys2} - + os {linux}, cpu {amd64}, builder {ubuntu-latest-amd64-8vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + # os {macos}, cpu {arm64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + # os {macos}, cpu {arm64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + # os {macos}, cpu {arm64}, builder {macos-14}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + # os {macos}, cpu {arm64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + # os {windows}, cpu {amd64}, builder {windows-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {msys2} + # os {windows}, cpu {amd64}, builder {windows-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {msys2} + # os {windows}, cpu {amd64}, builder {windows-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {msys2} build: needs: matrix uses: ./.github/workflows/ci-reusable.yml From 28dea5bfd298abd75c3ba331c9101fc1c8eda799 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 16:49:12 +1100 Subject: [PATCH 049/178] try large runners for linux/windows --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1c72b5274..837d3be318 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,7 @@ jobs: with: matrix: | os {linux}, cpu {amd64}, builder {ubuntu-latest-amd64-8vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {windows}, cpu {amd64}, builder {windows-latest-amd64-8vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} From 3fd43f38e8bf5d2cb3c0444aa8f79d3f265111e9 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 16:55:47 +1100 Subject: [PATCH 050/178] temp remove coverage from ci workflow --- .github/workflows/ci.yml | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 837d3be318..aa6fc718a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,36 +58,3 @@ jobs: options: "codex/ tests/" fail: true suggest: true - - coverage: - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v4 - with: - submodules: recursive - ref: ${{ github.event.pull_request.head.sha }} - - - name: Setup Nimbus Build System - uses: ./.github/actions/nimbus-build-system - with: - os: linux - nim_version: ${{ env.nim_version }} - coverage: true - - - name: Generate coverage data - run: | - # make -j${ncpu} coverage - make -j${ncpu} coverage-script - shell: bash - - - name: Upload coverage data to Codecov - uses: codecov/codecov-action@v4 - with: - directory: ./coverage/ - fail_ci_if_error: true - files: ./coverage/coverage.f.info - flags: unittests - name: codecov-umbrella - token: ${{ secrets.CODECOV_TOKEN }} - verbose: true From 14cc8fdc75b1fb0fd8ea41934f82e2db54e270f7 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 17:43:11 +1100 Subject: [PATCH 051/178] bump to larger runner, linux only --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa6fc718a7..9e3924ce6d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,8 +27,8 @@ jobs: uses: fabiocaccamo/create-matrix-action@v5 with: matrix: | - os {linux}, cpu {amd64}, builder {ubuntu-latest-amd64-8vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {windows}, cpu {amd64}, builder {windows-latest-amd64-8vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} + os {linux}, cpu {amd64}, builder {ubuntu-latest-amd64-32vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} From 702706d4ee945ed378b509941129fef0e1f22668 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:16:00 +1100 Subject: [PATCH 052/178] trying a self-hosted runner to see if it has more resources --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9e3924ce6d..ceed2a3e67 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: uses: fabiocaccamo/create-matrix-action@v5 with: matrix: | - os {linux}, cpu {amd64}, builder {ubuntu-latest-amd64-32vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {linux}, cpu {amd64}, builder {runner-node-01-linux-01-eu-hel1}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} From 7d3013f3b3537bc3f48ad72dca85656774f554c7 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:32:57 +1100 Subject: [PATCH 053/178] fix: pass show continuous updates into test manager instance --- tests/integration/testmanager.nim | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 6ba2404acb..4d5097f3f4 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -126,6 +126,7 @@ proc new*( debugTestHarness: debugTestHarness, debugHardhat: debugHardhat, debugCodexNodes: debugCodexNodes, + showContinuousStatusUpdates: showContinuousStatusUpdates, testTimeout: testTimeout, trackedFutures: TrackedFutures.new(), ) From 0dcf8ded6917db13963dd649c02ba15e75b2dba5 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:58:43 +1100 Subject: [PATCH 054/178] indicate with exit code 1 if the tests failed --- tests/integration/testmanager.nim | 10 ++++++++++ tests/testIntegration.nim | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 4d5097f3f4..088225236e 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -157,6 +157,16 @@ proc duration(manager: TestManager): Duration = let now = Moment.now() (manager.timeEnd |? now) - (manager.timeStart |? now) +proc testsStatus*(manager: TestManager): ?!bool = + for test in manager.tests: + if test.status in {IntegrationTestStatus.New, IntegrationTestStatus.Running}: + return failure "Integration tests not complete" + + if test.status != IntegrationTestStatus.Ok: + return success true + + return success false + proc duration(test: IntegrationTest): Duration = let now = Moment.now() (test.timeEnd |? now) - (test.timeStart |? now) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 275e8ea579..862ce0a1ba 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -75,4 +75,10 @@ proc run() {.async.} = trace "stopping test manager" await manager.stop() + without wasSuccessful =? manager.testsStatus, error: + raiseAssert "Failed to get test status: " & error.msg + + if not wasSuccessful: + quit(1) # indicate with a non-zero exit code that the tests failed + waitFor run() From 3040d27a58b122719350ced5f93b2446941836ee Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:59:01 +1100 Subject: [PATCH 055/178] add windows large runner 32vcpu --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ceed2a3e67..edd11be4a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,7 @@ jobs: with: matrix: | os {linux}, cpu {amd64}, builder {runner-node-01-linux-01-eu-hel1}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {windows}, cpu {amd64}, builder {windows-latest-amd64-32vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} From 5659e442e1f466aa50816cd456d02df2912cd345 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 19:26:33 +1100 Subject: [PATCH 056/178] use macos-14-large windows is failing with SIGSEGV so remove it for now --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index edd11be4a9..e7181de1c6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: with: matrix: | os {linux}, cpu {amd64}, builder {runner-node-01-linux-01-eu-hel1}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {windows}, cpu {amd64}, builder {windows-latest-amd64-32vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} + os {macos}, cpu {amd64}, builder {macos-14-large}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} From d260e6350c246be940b940356ab14e0087213d37 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 28 Jan 2025 20:49:12 +1100 Subject: [PATCH 057/178] fix exit status --- tests/integration/testmanager.nim | 6 +++--- tests/testIntegration.nim | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 088225236e..bf02e81c3f 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -157,15 +157,15 @@ proc duration(manager: TestManager): Duration = let now = Moment.now() (manager.timeEnd |? now) - (manager.timeStart |? now) -proc testsStatus*(manager: TestManager): ?!bool = +proc allTestsPassed*(manager: TestManager): ?!bool = for test in manager.tests: if test.status in {IntegrationTestStatus.New, IntegrationTestStatus.Running}: return failure "Integration tests not complete" if test.status != IntegrationTestStatus.Ok: - return success true + return success false - return success false + return success true proc duration(test: IntegrationTest): Duration = let now = Moment.now() diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 862ce0a1ba..90eb463c82 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -75,7 +75,7 @@ proc run() {.async.} = trace "stopping test manager" await manager.stop() - without wasSuccessful =? manager.testsStatus, error: + without wasSuccessful =? manager.allTestsPassed, error: raiseAssert "Failed to get test status: " & error.msg if not wasSuccessful: From 52479ef0e85086570a8c6dfa23afa84f58f2eb1e Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 29 Jan 2025 15:55:17 +1100 Subject: [PATCH 058/178] nil check hardhat process before stopping --- tests/integration/testmanager.nim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index bf02e81c3f..e0f07f1b38 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -572,6 +572,7 @@ proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = for hardhat in manager.hardhats: try: - await hardhat.process.stop() + if not hardhat.process.isNil: + await hardhat.process.stop() except CatchableError as e: trace "failed to stop hardhat node", error = e.msg From 3e4d677b8269dc94aacff20ec89e1dd793e3165f Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 29 Jan 2025 15:55:28 +1100 Subject: [PATCH 059/178] re-add windows to CI --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e7181de1c6..a357e14c7f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,7 @@ jobs: matrix: | os {linux}, cpu {amd64}, builder {runner-node-01-linux-01-eu-hel1}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {amd64}, builder {macos-14-large}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {windows}, cpu {amd64}, builder {windows-latest-amd64-32vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} From 7c248b45ab15e4f39a4f9c169f75d1502fb9bc4b Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 29 Jan 2025 18:50:17 +1100 Subject: [PATCH 060/178] Bubble errors from hardhat start - bubble errors from hardhatprocess.start (instead of just logging) - push raises: [] in all nodeprocess procs/methods to avoid leaking `Exception` exception types in method overrides --- tests/integration/codexprocess.nim | 58 ++++++++++++++++++++-------- tests/integration/hardhatprocess.nim | 27 +++++++++---- tests/integration/multinodes.nim | 7 ++-- tests/integration/nodeprocess.nim | 8 ++-- 4 files changed, 69 insertions(+), 31 deletions(-) diff --git a/tests/integration/codexprocess.nim b/tests/integration/codexprocess.nim index 3eca5b04ef..2724d729be 100644 --- a/tests/integration/codexprocess.nim +++ b/tests/integration/codexprocess.nim @@ -15,11 +15,27 @@ export codexclient export chronicles export nodeprocess +{.push raises: [].} + logScope: topics = "integration testing codex process" -type CodexProcess* = ref object of NodeProcess - client: ?CodexClient +type + CodexProcess* = ref object of NodeProcess + client: ?CodexClient + + CodexProcessError* = object of NodeProcessError + +proc raiseCodexProcessError( + msg: string, parent: ref CatchableError +) {.raises: [CodexProcessError].} = + raise newException(CodexProcessError, msg & ": " & parent.msg, parent) + +template convertError(msg, body: typed) = + try: + body + except CatchableError as parent: + raiseCodexProcessError(msg, parent) method workingDir(node: CodexProcess): string = return currentSourcePath() / ".." / ".." / ".." @@ -33,27 +49,36 @@ method startedOutput(node: CodexProcess): string = method processOptions(node: CodexProcess): set[AsyncProcessOption] = return {AsyncProcessOption.StdErrToStdOut} -method outputLineEndings(node: CodexProcess): string {.raises: [].} = +method outputLineEndings(node: CodexProcess): string = return "\n" -method onOutputLineCaptured(node: CodexProcess, line: string) {.raises: [].} = +method onOutputLineCaptured(node: CodexProcess, line: string) = discard -proc dataDir(node: CodexProcess): string = - let config = CodexConf.load(cmdLine = node.arguments, quitOnFailure = false) - return config.dataDir.string - -proc ethAccount*(node: CodexProcess): Address = - let config = CodexConf.load(cmdLine = node.arguments, quitOnFailure = false) - without ethAccount =? config.ethAccount: +proc config(node: CodexProcess): CodexConf {.raises: [CodexProcessError].} = + # cannot use convertError here as it uses typed parameters which forces type + # resolution, while confutils.load uses untyped parameters and expects type + # resolution not to happen yet. In other words, it won't compile. + try: + return CodexConf.load( + cmdLine = node.arguments, quitOnFailure = false, secondarySources = nil + ) + except ConfigurationError as parent: + raiseCodexProcessError "Failed to load node arguments into CodexConf", parent + +proc dataDir(node: CodexProcess): string {.raises: [CodexProcessError].} = + return node.config.dataDir.string + +proc ethAccount*(node: CodexProcess): Address {.raises: [CodexProcessError].} = + without ethAccount =? node.config.ethAccount: raiseAssert "eth account not set" return Address(ethAccount) -proc apiUrl*(node: CodexProcess): string = - let config = CodexConf.load(cmdLine = node.arguments, quitOnFailure = false) +proc apiUrl*(node: CodexProcess): string {.raises: [CodexProcessError].} = + let config = node.config return "http://" & config.apiBindAddress & ":" & $config.apiPort & "/api/codex/v1" -proc client*(node: CodexProcess): CodexClient = +proc client*(node: CodexProcess): CodexClient {.raises: [CodexProcessError].} = if client =? node.client: return client let client = CodexClient.new(node.apiUrl) @@ -71,5 +96,6 @@ method stop*(node: CodexProcess) {.async.} = await client.close() node.client = none CodexClient -method removeDataDir*(node: CodexProcess) = - removeDir(node.dataDir) +method removeDataDir*(node: CodexProcess) {.raises: [CodexProcessError].} = + convertError("failed to remove codex node data directory"): + removeDir(node.dataDir) diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index 0c7ffc0828..35cc947ec9 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -19,6 +19,8 @@ export codexclient export chronicles export nodeprocess +{.push raises: [].} + logScope: topics = "integration testing hardhat process" @@ -28,6 +30,8 @@ type logFile: ?IoHandle onOutputLine: OnOutputLineCaptured + HardhatProcessError* = object of NodeProcessError + method workingDir(node: HardhatProcess): string = return currentSourcePath() / ".." / ".." / ".." / "vendor" / "codex-contracts-eth" @@ -40,7 +44,7 @@ method startedOutput(node: HardhatProcess): string = method processOptions(node: HardhatProcess): set[AsyncProcessOption] = return {} -method outputLineEndings(node: HardhatProcess): string {.raises: [].} = +method outputLineEndings(node: HardhatProcess): string = return "\n" proc openLogFile(node: HardhatProcess, logFilePath: string): IoHandle = @@ -55,14 +59,19 @@ proc openLogFile(node: HardhatProcess, logFilePath: string): IoHandle = return fileHandle -method start*(node: HardhatProcess) {.async.} = +method start*( + node: HardhatProcess +) {.async: (raises: [CancelledError, NodeProcessError]).} = logScope: nodeName = node.name - let binary = absolutePath(node.workingDir / node.executable) - if not fileExists(binary): - raiseAssert "cannot start hardhat, binary doesn't exist (looking for " & - &"{binary}). Try running `npm install` in {node.workingDir}." + try: + let binary = absolutePath(node.workingDir / node.executable) + if not fileExists(binary): + raiseAssert "cannot start hardhat, binary doesn't exist (looking for " & + &"{binary}). Try running `npm install` in {node.workingDir}." + except CatchableError as parent: + raiseAssert "failed build path to hardhat executable: " & parent.msg let poptions = node.processOptions + {AsyncProcessOption.StdErrToStdOut} trace "starting node", @@ -81,8 +90,10 @@ method start*(node: HardhatProcess) {.async.} = ) except CancelledError as error: raise error - except CatchableError as e: - error "failed to start hardhat process", error = e.msg + except CatchableError as parent: + raise newException( + HardhatProcessError, "failed to start hardhat process: " & parent.msg, parent + ) proc startNode*( _: type HardhatProcess, diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 295dc9f226..f705f67b24 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -126,15 +126,14 @@ template multinodesuite*(name: string, body: untyped) = args.add("--port") args.add($port) - let node = await HardhatProcess.startNode(args, config.debugEnabled, "hardhat") try: + let node = await HardhatProcess.startNode(args, config.debugEnabled, "hardhat") await node.waitUntilStarted() + trace "hardhat node started" + return node except NodeProcessError as e: raiseMultiNodeSuiteError "hardhat node not started: " & e.msg - trace "hardhat node started" - return node - proc newCodexProcess( roleIdx: int, conf: CodexConfig, role: Role ): Future[NodeProcess] {.async.} = diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 8152ee9f73..979328c7e2 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -14,6 +14,8 @@ import ./codexclient export codexclient export chronicles +{.push raises:[].} + logScope: topics = "integration testing node process" @@ -39,12 +41,12 @@ method startedOutput(node: NodeProcess): string {.base, gcsafe.} = method processOptions(node: NodeProcess): set[AsyncProcessOption] {.base, gcsafe.} = raiseAssert "not implemented" -method outputLineEndings(node: NodeProcess): string {.base, gcsafe, raises: [].} = +method outputLineEndings(node: NodeProcess): string {.base, gcsafe.} = raiseAssert "not implemented" method onOutputLineCaptured( node: NodeProcess, line: string -) {.base, gcsafe, raises: [].} = +) {.base, gcsafe.} = raiseAssert "not implemented" method start*(node: NodeProcess) {.base, async.} = @@ -180,5 +182,5 @@ proc restart*(node: NodeProcess) {.async.} = await node.start() await node.waitUntilStarted() -method removeDataDir*(node: NodeProcess) {.base.} = +method removeDataDir*(node: NodeProcess) {.base, raises: [NodeProcessError].} = raiseAssert "[removeDataDir] not implemented" From dca40e0682f34081d1e954e84a2d5fa72faad5f1 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 29 Jan 2025 21:08:42 -0800 Subject: [PATCH 061/178] fix hardhat running on windows Solution was two-fold: 1. Run the hardhat.cmd script instead of hardhat 2. Use the absolute path to the script executable instead of relative to the working directory --- tests/integration/hardhatprocess.nim | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index 35cc947ec9..51967f5ca0 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -36,7 +36,10 @@ method workingDir(node: HardhatProcess): string = return currentSourcePath() / ".." / ".." / ".." / "vendor" / "codex-contracts-eth" method executable(node: HardhatProcess): string = - return "node_modules" / ".bin" / "hardhat" + return "node_modules" / ".bin" / (when defined(windows): + "hardhat.cmd" + else: + "hardhat") method startedOutput(node: HardhatProcess): string = return "Started HTTP and WebSocket JSON-RPC server at" @@ -65,26 +68,28 @@ method start*( logScope: nodeName = node.name + var executable = "" try: - let binary = absolutePath(node.workingDir / node.executable) - if not fileExists(binary): - raiseAssert "cannot start hardhat, binary doesn't exist (looking for " & - &"{binary}). Try running `npm install` in {node.workingDir}." + executable = absolutePath(node.workingDir / node.executable) + if not fileExists(executable): + raiseAssert "cannot start hardhat, executable doesn't exist (looking for " & + &"{executable}). Try running `npm install` in {node.workingDir}." except CatchableError as parent: raiseAssert "failed build path to hardhat executable: " & parent.msg let poptions = node.processOptions + {AsyncProcessOption.StdErrToStdOut} + let args = @["node", "--export", "deployment-localhost.json"].concat(node.arguments) trace "starting node", - args = node.arguments, - executable = node.executable, + args, + executable, workingDir = node.workingDir, processOptions = poptions try: node.process = await startProcess( - node.executable, + executable, node.workingDir, - @["node", "--export", "deployment-localhost.json"].concat(node.arguments), + args, options = poptions, stdoutHandle = AsyncProcess.Pipe, ) From 3554c772cc07664cd5aadadc29db2c3886053fa2 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:21:55 +1100 Subject: [PATCH 062/178] handle cancellations for race and allFutures --- tests/integration/testmanager.nim | 34 +++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index e0f07f1b38..d9794655b9 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -345,10 +345,13 @@ proc setup( proc teardown( test: IntegrationTest, hardhat: ?Hardhat ) {.async: (raises: [CancelledError]).} = - if test.config.startHardhat and hardhat =? hardhat: + if test.config.startHardhat and hardhat =? hardhat and not hardhat.process.isNil: try: trace "Stopping hardhat", name = test.config.name await hardhat.process.stop() + trace "Hardhat stopped", name = test.config.name + except CancelledError as e: + raise e except CatchableError as e: warn "Failed to stop hardhat node, continuing", error = e.msg, test = test.config.name @@ -438,11 +441,19 @@ proc untilTimeout( fut: Future[void], timeout: Duration ): Future[bool] {.async: (raises: [CancelledError]).} = # workaround for withTimeout, which did not work correctly + let timer = sleepAsync(timeout) try: - let timer = sleepAsync(timeout) - return (await race(fut, timer)) == fut - except ValueError: - discard + let winner = await race(fut, timer) + return winner.id == fut.id + except CancelledError as e: + # race does not cancel its futures when it's cancelled + if not fut.isNil and not fut.finished: + await fut.cancelAndWait() + if not timer.isNil and not timer.finished: + await timer.cancelAndWait() + raise e + except ValueError as e: + error "failed to wait for timeout", error = e.msg proc run(test: IntegrationTest) {.async: (raises: []).} = try: @@ -462,6 +473,8 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = test.printResult() except CancelledError: + # untilTimeout will cancel its underlying futures for us so no need to + # manually cancel them here discard # do not propagate due to asyncSpawn proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = @@ -479,9 +492,18 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = let futRun = test.run() testFutures.add futRun + # may be overkill, but ensure no exceptions are missed asyncSpawn futRun - await allFutures testFutures + try: + # if runTests is cancelled, await allFutures will be cancelled, but allFutures + # does not propagate the cancellation to the futures it's waiting on, so we + # need to cancel them here + await allFutures testFutures + except CancelledError as e: + for fut in testFutures: + if not fut.isNil and not fut.finished: + await fut.cancelAndWait() manager.timeEnd = some Moment.now() From 7695610307e31d73da170034dd254d9519a22e1b Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:22:33 +1100 Subject: [PATCH 063/178] fix waiting for hardhat node process exit on windows --- tests/integration/nodeprocess.nim | 38 +++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 979328c7e2..3fc020a4a6 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -123,31 +123,31 @@ method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = nodeName = node.name await node.trackedFutures.cancelTracked() - if node.process != nil: + if not node.process.isNil: + trace "terminating node process..." try: - trace "terminating node process..." - if errCode =? node.process.terminate().errorOption: - error "failed to terminate process", errCode = $errCode - - trace "waiting for node process to exit" - let exitCode = await node.process.waitForExit(3.seconds) - - if exitCode > 0 and exitCode != 143 and # 143 = SIGTERM (initiated above) - exitCode != expectedErrCode: - error "failed to exit process, check for zombies", exitCode + let exitCode = await node.process.terminateAndWaitForExit(2.seconds) + if exitCode > 0 and + exitCode != 143 and # 143 = SIGTERM (initiated above) + exitCode != expectedErrCode: + error "process exited with a non-zero exit code", exitCode + trace "node stopped", exitCode except CancelledError as error: raise error - except CatchableError as e: - error "error stopping node process", error = e.msg - finally: + except CatchableError: try: + let forcedExitCode = await node.process.killAndWaitForExit(3.seconds) + trace "node process forcibly killed with exit code: ", exitCode = forcedExitCode + except CatchableError as e: + error "failed to kill node process in time, it will be killed when the parent process exits", error = e.msg + writeStackTrace() + finally: + proc closeProcessStreams() {.async: (raises: []).} = trace "closing node process' streams" await node.process.closeWait() - except: - discard - node.process = nil - - trace "node stopped" + node.process = nil + trace "node process' streams closed" + asyncSpawn closeProcessStreams() proc waitUntilOutput*(node: NodeProcess, output: string) {.async.} = logScope: From 680430ef817c2c91471e32d8e80e3b9ab74f8085 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 31 Jan 2025 19:51:30 +1100 Subject: [PATCH 064/178] swap linux large runner --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a357e14c7f..556d5cb222 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: uses: fabiocaccamo/create-matrix-action@v5 with: matrix: | - os {linux}, cpu {amd64}, builder {runner-node-01-linux-01-eu-hel1}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {linux}, cpu {amd64}, builder {runner-node-01-linux-02-eu-hel1}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {amd64}, builder {macos-14-large}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {windows}, cpu {amd64}, builder {windows-latest-amd64-32vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} From fb39f12fe4d01c1cf5a1a3a75383a78a450d0c1a Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 31 Jan 2025 19:52:05 +1100 Subject: [PATCH 065/178] enable debug logs for testpurchasing since the failure in ci --- tests/integration/twonodes.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/twonodes.nim b/tests/integration/twonodes.nim index eeceb20d3f..22fc614688 100644 --- a/tests/integration/twonodes.nim +++ b/tests/integration/twonodes.nim @@ -12,7 +12,7 @@ export multinodes template twonodessuite*(name: string, body: untyped) = multinodesuite name: let twoNodesConfig {.inject, used.} = - NodeConfigs(clients: CodexConfigs.init(nodes = 2).some) + NodeConfigs(clients: CodexConfigs.init(nodes = 2).debug().some) var node1 {.inject, used.}: CodexProcess var node2 {.inject, used.}: CodexProcess From 42701ee54e6615d2b61b6bf823d6d5b7518970b4 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 3 Feb 2025 15:33:41 +1100 Subject: [PATCH 066/178] Increase hardhat, codex api, and codex discovery ports for each subsequent test Previously, each test would start with a port specified by a global const and overwritable using `define` cli flag. This seems to be causing some port clashes that `nextFreePort` is not picking up. Instead of relying on `nextFreePort`, do not reuse port numbers for any of the tests. --- tests/integration/multinodes.nim | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index f705f67b24..22535b4fab 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -79,6 +79,9 @@ template multinodesuite*(name: string, body: untyped) = var ethProvider {.inject, used.}: JsonRpcProvider var accounts {.inject, used.}: seq[Address] var snapshot: JsonNode + var lastUsedHardhatPort = HardhatPort + var lastUsedCodexApiPort = CodexApiPort + var lastUsedCodexDiscPort = CodexDiscPort template test(tname, startNodeConfigs, tbody) = currentTestName = tname @@ -121,10 +124,11 @@ template multinodesuite*(name: string, body: untyped) = let updatedLogFile = getLogFile(role, none int) args.add "--log-file=" & updatedLogFile - let port = await nextFreePort(HardhatPort) + let port = await nextFreePort(lastUsedHardhatPort) jsonRpcProviderUrl.updatePort(port) args.add("--port") args.add($port) + lastUsedHardhatPort = port try: let node = await HardhatProcess.startNode(args, config.debugEnabled, "hardhat") @@ -151,13 +155,19 @@ template multinodesuite*(name: string, body: untyped) = let updatedLogFile = getLogFile(role, some roleIdx) config.withLogFile(updatedLogFile) + let apiPort = await nextFreePort(CodexApiPort + nodeIdx) + let discPort = await nextFreePort(CodexDiscPort + nodeIdx) + config.addCliOption("--api-port", $apiPort) + config.addCliOption("--disc-port", $discPort) + lastUsedCodexApiPort = apiPort + lastUsedCodexDiscPort = discPort + for bootstrapNode in bootstrapNodes: config.addCliOption("--bootstrap-node", bootstrapNode) - config.addCliOption("--api-port", $await nextFreePort(CodexApiPort + nodeIdx)) + config.addCliOption("--data-dir", datadir) config.addCliOption("--nat", "none") config.addCliOption("--listen-addrs", "/ip4/127.0.0.1/tcp/0") - config.addCliOption("--disc-port", $await nextFreePort(CodexDiscPort + nodeIdx)) except CodexConfigError as e: raiseMultiNodeSuiteError "invalid cli option, error: " & e.msg From 44f99f5d39afa7854f14720b39498d2ac51bcece Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:36:49 +1100 Subject: [PATCH 067/178] fix: use the last used port instead of the globally defined port --- tests/integration/multinodes.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 22535b4fab..3733e97abe 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -155,8 +155,8 @@ template multinodesuite*(name: string, body: untyped) = let updatedLogFile = getLogFile(role, some roleIdx) config.withLogFile(updatedLogFile) - let apiPort = await nextFreePort(CodexApiPort + nodeIdx) - let discPort = await nextFreePort(CodexDiscPort + nodeIdx) + let apiPort = await nextFreePort(lastUsedCodexApiPort + nodeIdx) + let discPort = await nextFreePort(lastUsedCodexDiscPort + nodeIdx) config.addCliOption("--api-port", $apiPort) config.addCliOption("--disc-port", $discPort) lastUsedCodexApiPort = apiPort From 7ea21795c9b6ac75488716a4b68f40633ebb75fd Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 3 Feb 2025 19:04:24 +1100 Subject: [PATCH 068/178] Allow parallel integration tests to be disabled Disable with `make ENABLE_PARALLEL_TESTS=0 testIntegration` --- .github/workflows/ci-reusable.yml | 6 +++++- .github/workflows/ci.yml | 6 +++--- Makefile | 3 +++ build.nims | 1 + tests/testIntegration.nim | 17 ++++++++++++++++- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index 12a3e89f39..1de7bdf5f9 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -62,7 +62,7 @@ jobs: npm install - name: Run Ethereum node with Codex contracts - if: matrix.tests == 'contract' || matrix.tests == 'tools' || matrix.tests == 'all' + if: matrix.tests == 'contract' || matrix.tests == 'integration' || matrix.tests == 'tools' || matrix.tests == 'all' working-directory: vendor/codex-contracts-eth env: MSYS2_PATH_TYPE: inherit @@ -77,6 +77,10 @@ jobs: ## Part 3 Tests ## - name: Integration tests if: matrix.tests == 'integration' || matrix.tests == 'all' + run: make -j${ncpu} ENABLE_PARALLEL_TESTS=0 testIntegration + + - name: Parallel integration tests + if: matrix.tests == 'integration-parallel' run: make -j${ncpu} DEBUG_CODEXNODES=1 DEBUG_TESTHARNESS=1 DEBUG_UPDATES=1 testIntegration - name: Upload integration tests log files diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 556d5cb222..fcd6e2a020 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,9 +27,9 @@ jobs: uses: fabiocaccamo/create-matrix-action@v5 with: matrix: | - os {linux}, cpu {amd64}, builder {runner-node-01-linux-02-eu-hel1}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {amd64}, builder {macos-14-large}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {windows}, cpu {amd64}, builder {windows-latest-amd64-32vcpu}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} + os {linux}, cpu {amd64}, builder {runner-node-01-linux-03-eu-hel1}, tests {integration-parallel}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {amd64}, builder {macos-14-large}, tests {integration-parallel}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {windows}, cpu {amd64}, builder {windows-latest-amd64-32vcpu}, tests {integration-parallel}, nim_version {${{ env.nim_version }}}, shell {msys2} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} diff --git a/Makefile b/Makefile index d1e2ac161a..5cdea52446 100644 --- a/Makefile +++ b/Makefile @@ -156,6 +156,9 @@ endif ifdef TEST_TIMEOUT TEST_PARAMS := $(TEST_PARAMS) -d:TestTimeout=$(TEST_TIMEOUT) endif +ifdef ENABLE_PARALLEL_TESTS + TEST_PARAMS := $(TEST_PARAMS) -d:EnableParallelTests=$(ENABLE_PARALLEL_TESTS) +endif # Builds and runs the integration tests testIntegration: | build deps diff --git a/build.nims b/build.nims index 38ac11d1cf..e2581ceb0c 100644 --- a/build.nims +++ b/build.nims @@ -55,6 +55,7 @@ task testIntegration, "Run integration tests": for i in 2 ..< paramCount(): if "DebugTestHarness" in paramStr(i) and truthy paramStr(i).split('=')[1]: testParams = "-d:chronicles_log_level=TRACE -d:chronicles_sinks=textlines[stdout]" + break test "testIntegration", params = testParams # use params to enable logging from the integration test executable # test "testIntegration", params = "-d:chronicles_sinks=textlines[notimestamps,stdout],textlines[dynamic] " & diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 90eb463c82..108ec7f50c 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -37,6 +37,8 @@ const ShowContinuousStatusUpdates {.booldefine.} = false # Timeout duration (in mimutes) for EACH integration test file. const TestTimeout {.intdefine.} = 60 +const EnableParallelTests {.booldefine.} = true + proc run() {.async.} = when DebugTestHarness and enabledLogLevel != LogLevel.TRACE: styledEcho bgWhite, @@ -81,4 +83,17 @@ proc run() {.async.} = if not wasSuccessful: quit(1) # indicate with a non-zero exit code that the tests failed -waitFor run() +when EnableParallelTests: + waitFor run() +else: + # run tests serially + import ./integration/testcli + import ./integration/testrestapi + import ./integration/testupdownload + import ./integration/testsales + import ./integration/testpurchasing + import ./integration/testblockexpiration + import ./integration/testmarketplace + import ./integration/testproofs + import ./integration/testvalidator + import ./integration/testecbug From 92ca6de95bd34dff4de12be27065f2096f843259 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 4 Feb 2025 12:35:15 +1100 Subject: [PATCH 069/178] fix: hardhot not being stopped when test times out --- tests/integration/testmanager.nim | 114 ++++++++++++++++-------------- 1 file changed, 59 insertions(+), 55 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index d9794655b9..99a8779b07 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -109,6 +109,12 @@ template echoStyled(args: varargs[untyped]) = # no need to re-raise this, as it'll eventually have to be logged only error "failed to print to terminal", error = parent.msg +template ignoreCancelled(body) = + try: + body + except CancelledError: + discard + proc new*( _: type TestManager, configs: seq[IntegrationTestConfig], @@ -364,6 +370,24 @@ proc teardown( test.manager.hardhats.keepItIf(it != hardhat) +proc untilTimeout( + fut: FutureBase, timeout: Duration +): Future[bool] {.async: (raises: [CancelledError]).} = + # workaround for withTimeout, which did not work correctly + let timer = sleepAsync(timeout) + try: + let winner = await race(fut, timer) + return winner.id == fut.id + except CancelledError as e: + # race does not cancel its futures when it's cancelled + if not fut.isNil and not fut.finished: + await fut.cancelAndWait() + if not timer.isNil and not timer.finished: + await timer.cancelAndWait() + raise e + except ValueError as e: + error "failed to wait for timeout", error = e.msg + proc start(test: IntegrationTest) {.async: (raises: []).} = logScope: config = test.config @@ -375,7 +399,7 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = var hardhat = none Hardhat - try: + ignoreCancelled: try: hardhat = await test.setup() except TestManagerError as e: @@ -391,13 +415,38 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = test.process = execCommandEx(command = test.command, timeout = test.manager.testTimeout) - let output = await test.process # waits on waitForExit - test.output = success(output) - - if output.status != 0: - test.status = IntegrationTestStatus.Failed + let completedBeforeTimeout = + # untilTimeout will cancel its underlying futures for us so no need to + # manually cancel them when cancelled + await test.process.untilTimeout(test.manager.testTimeout) + + if completedBeforeTimeout: + let output = await test.process # should raise if there's an error + test.output = success(output) + if output.status != 0: + test.status = IntegrationTestStatus.Failed + else: + test.status = IntegrationTestStatus.Ok else: - test.status = IntegrationTestStatus.Ok + test.timeEnd = some Moment.now() + error "Test timed out, check for zombie codex process", + name = test.config.name, duration = test.duration + let e = newException( + AsyncProcessTimeoutError, "Test did not complete before elapsed timeout" + ) + test.output = CommandExResponse.failure(e) + test.status = IntegrationTestStatus.Timeout + + if not test.process.isNil and not test.process.finished: + # cancel the process future, but the process itself may still be + # running if the procedure was cancelled or the test timed out + await test.process.cancelAndWait() + + await test.teardown(hardhat) + + test.timeEnd = some Moment.now() + if test.status == IntegrationTestStatus.Ok: + info "Test completed", name = test.config.name, duration = test.duration except AsyncProcessTimeoutError as e: test.timeEnd = some Moment.now() error "Test timed out", name = test.config.name, duration = test.duration @@ -409,16 +458,8 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = test.output = CommandExResponse.failure(e) test.status = IntegrationTestStatus.Error - await test.teardown(hardhat) - except CancelledError: - discard # start is asyncSpawned, do not propagate - - test.timeEnd = some Moment.now() - if test.status == IntegrationTestStatus.Ok: - info "Test completed", name = test.config.name, duration = test.duration - proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = - try: + ignoreCancelled: while true: let sleepDuration = if manager.duration < 5.minutes: 30.seconds else: 1.minutes @@ -434,48 +475,11 @@ proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = echo "" await sleepAsync(sleepDuration) - except CancelledError as e: - discard - -proc untilTimeout( - fut: Future[void], timeout: Duration -): Future[bool] {.async: (raises: [CancelledError]).} = - # workaround for withTimeout, which did not work correctly - let timer = sleepAsync(timeout) - try: - let winner = await race(fut, timer) - return winner.id == fut.id - except CancelledError as e: - # race does not cancel its futures when it's cancelled - if not fut.isNil and not fut.finished: - await fut.cancelAndWait() - if not timer.isNil and not timer.finished: - await timer.cancelAndWait() - raise e - except ValueError as e: - error "failed to wait for timeout", error = e.msg proc run(test: IntegrationTest) {.async: (raises: []).} = - try: - let futStart = test.start() - let completedBeforeTimeout = await futStart.untilTimeout(test.manager.testTimeout) - if not completedBeforeTimeout: - test.timeEnd = some Moment.now() - error "Test timed out", name = test.config.name, duration = test.duration - let e = newException( - AsyncProcessTimeoutError, "Test did not complete before elapsed timeout" - ) - test.output = CommandExResponse.failure(e) - test.status = IntegrationTestStatus.Timeout - - if not futStart.finished: - await futStart.cancelAndWait() - + ignoreCancelled: + await test.start() test.printResult() - except CancelledError: - # untilTimeout will cancel its underlying futures for us so no need to - # manually cancel them here - discard # do not propagate due to asyncSpawn proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = var testFutures: seq[Future[void]] From 29df100e934427a4148a6a33eb5535ad03d50619 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:17:43 +1100 Subject: [PATCH 070/178] cancel processes soon Windows really does not like to terminate processes, so if we try to cancel the process, we will hang in Windows. --- tests/integration/testmanager.nim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 99a8779b07..cab03eccf8 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -440,7 +440,8 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = if not test.process.isNil and not test.process.finished: # cancel the process future, but the process itself may still be # running if the procedure was cancelled or the test timed out - await test.process.cancelAndWait() + test.process.cancelSoon() + trace "process future will cancel soon" await test.teardown(hardhat) @@ -594,7 +595,8 @@ proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = for test in manager.tests: if not test.process.isNil and not test.process.finished: - await test.process.cancelAndWait() + # windows does not like cancelling processes, so waiting is not an option + test.process.cancelSoon() for hardhat in manager.hardhats: try: From 25ce97e81e5eab1fcc1c5793d14c8cc71c647223 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 5 Feb 2025 18:31:40 +1100 Subject: [PATCH 071/178] update Make flag to simply debug DEBUG -> enables DebugCodexNodes, DebugTestHarness, and ShowContinuousStatusUpdates DEBUG_HARDHAT -> enables DebugHardhat PARALLEL -> enables EnableParallelTests Additionally, when DEBUG is enabled, all integration tests debug configs are enabled for Codex nodes, the Codex node output is printed with the test output (not interleaved), and the Codex node output is logged to file in `tests/integrations/logs/__IntegrationTests////_.log`. When DEBUG_HARDHAT is enabled, all hardhat output is printed with the test output (not interleaved), and the output is also written to a log file in `tests/integrations/logs/__IntegrationTests//hardhat.log --- .github/workflows/ci-reusable.yml | 2 +- Makefile | 16 ++---- tests/integration/multinodes.nim | 36 ++++-------- tests/integration/testcli.nim | 43 ++++++++++++-- tests/integration/testmanager.nim | 94 ++++++++++++++++++++++++------- tests/integration/utils.nim | 26 ++++++++- tests/testIntegration.nim | 24 +------- 7 files changed, 152 insertions(+), 89 deletions(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index 1de7bdf5f9..ec846d17de 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -81,7 +81,7 @@ jobs: - name: Parallel integration tests if: matrix.tests == 'integration-parallel' - run: make -j${ncpu} DEBUG_CODEXNODES=1 DEBUG_TESTHARNESS=1 DEBUG_UPDATES=1 testIntegration + run: make -j${ncpu} DEBUG=1 testIntegration - name: Upload integration tests log files uses: actions/upload-artifact@v4 diff --git a/Makefile b/Makefile index 5cdea52446..32f9671d87 100644 --- a/Makefile +++ b/Makefile @@ -141,23 +141,19 @@ testContracts: | build deps $(ENV_SCRIPT) nim testContracts $(NIM_PARAMS) --define:ws_resubscribe=240 build.nims TEST_PARAMS := -ifdef DEBUG_TESTHARNESS - TEST_PARAMS := $(TEST_PARAMS) -d:DebugTestHarness=$(DEBUG_TESTHARNESS) +ifdef DEBUG + TEST_PARAMS := $(TEST_PARAMS) -d:DebugTestHarness=$(DEBUG) + TEST_PARAMS := $(TEST_PARAMS) -d:DebugCodexNodes=$(DEBUG) + TEST_PARAMS := $(TEST_PARAMS) -d:ShowContinuousStatusUpdates=$(DEBUG) endif ifdef DEBUG_HARDHAT TEST_PARAMS := $(TEST_PARAMS) -d:DebugHardhat=$(DEBUG_HARDHAT) endif -ifdef DEBUG_CODEXNODES # true by default - TEST_PARAMS := $(TEST_PARAMS) -d:DebugCodexNodes=$(DEBUG_CODEXNODES) -endif -ifdef DEBUG_UPDATES - TEST_PARAMS := $(TEST_PARAMS) -d:ShowContinuousStatusUpdates=$(DEBUG_UPDATES) -endif ifdef TEST_TIMEOUT TEST_PARAMS := $(TEST_PARAMS) -d:TestTimeout=$(TEST_TIMEOUT) endif -ifdef ENABLE_PARALLEL_TESTS - TEST_PARAMS := $(TEST_PARAMS) -d:EnableParallelTests=$(ENABLE_PARALLEL_TESTS) +ifdef PARALLEL + TEST_PARAMS := $(TEST_PARAMS) -d:EnableParallelTests=$(PARALLEL) endif # Builds and runs the integration tests diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 3733e97abe..c11f61c500 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -42,6 +42,8 @@ const HardhatPort {.intdefine.}: int = 8545 const CodexApiPort {.intdefine.}: int = 8080 const CodexDiscPort {.intdefine.}: int = 8090 const TestId {.strdefine.}: string = "TestId" +const DebugCodexNodes {.booldefine.}: bool = false +const LogsDir {.strdefine.}: string = "" proc raiseMultiNodeSuiteError(msg: string) = raise newException(MultiNodeSuiteError, msg) @@ -89,29 +91,6 @@ template multinodesuite*(name: string, body: untyped) = test tname: tbody - proc sanitize(pathSegment: string): string = - var sanitized = pathSegment - for invalid in invalidFilenameChars.items: - sanitized = sanitized.replace(invalid, '_').replace(' ', '_') - sanitized - - proc getLogFile(role: Role, index: ?int): string = - # create log file path, format: - # tests/integration/logs/ //_.log - - var logDir = - currentSourcePath.parentDir() / "logs" / sanitize($starttime & "__" & name) / - sanitize($currentTestName) - createDir(logDir) - - var fn = $role - if idx =? index: - fn &= "_" & $idx - fn &= ".log" - - let fileName = logDir / fn - return fileName - proc updatePort(url: var string, port: int) = let parts = url.split(':') url = @[parts[0], parts[1], $port].join(":") @@ -121,7 +100,8 @@ template multinodesuite*(name: string, body: untyped) = ): Future[NodeProcess] {.async.} = var args: seq[string] = @[] if config.logFile: - let updatedLogFile = getLogFile(role, none int) + let updatedLogFile = + getLogFile(LogsDir, starttime, name, currentTestName, $role, none int) args.add "--log-file=" & updatedLogFile let port = await nextFreePort(lastUsedHardhatPort) @@ -151,10 +131,14 @@ template multinodesuite*(name: string, body: untyped) = let datadir = getTempDirName(starttime, role, roleIdx) try: - if config.logFile.isSome: - let updatedLogFile = getLogFile(role, some roleIdx) + if config.logFile.isSome or DebugCodexNodes: + let updatedLogFile = + getLogFile(LogsDir, starttime, name, currentTestName, $role, some roleIdx) config.withLogFile(updatedLogFile) + if DebugCodexNodes: + config.debugEnabled = true + let apiPort = await nextFreePort(lastUsedCodexApiPort + nodeIdx) let discPort = await nextFreePort(lastUsedCodexDiscPort + nodeIdx) config.addCliOption("--api-port", $apiPort) diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index eaaa569b3c..0ea4aca997 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -1,4 +1,5 @@ import std/tempfiles +import std/times import codex/conf import codex/utils/fileutils import ../asynctest @@ -9,22 +10,52 @@ import ./utils import ../examples const HardhatPort {.intdefine.}: int = 8545 +const CodexApiPort {.intdefine.}: int = 8080 +const CodexDiscPort {.intdefine.}: int = 8090 +const DebugCodexNodes {.booldefine.}: bool = false +const LogsDir {.strdefine.}: string = "" asyncchecksuite "Command line interface": + let startTime = now().format("yyyy-MM-dd'_'HH:mm:ss") let key = "4242424242424242424242424242424242424242424242424242424242424242" - var nodeCount = -1 - proc startCodex(args: seq[string]): Future[CodexProcess] {.async.} = - return await CodexProcess.startNode(args, false, "cli-test-node") + 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] = + when DebugCodexNodes: + return args.concat @[ + "--log-file=" & + getLogFile( + LogsDir, + startTime, + "Command line interface", + currentTestName, + "Client", + some nodeCount mod testCount, + ) + ] + else: + 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(8080 + nodeCount)), - "--disc-port=" & $(await nextFreePort(8090 + nodeCount)), + "--api-port=" & $(await nextFreePort(CodexApiPort + nodeCount)), + "--disc-port=" & $(await nextFreePort(CodexDiscPort + nodeCount)), ] ), - debug = false, + debug = DebugCodexNodes, "cli-test-node", ) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index cab03eccf8..4ce5409887 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -1,6 +1,7 @@ import std/os import std/strformat import std/terminal +from std/times import fromUnix, format, now from std/unicode import toUpper import std/unittest import pkg/chronos @@ -38,6 +39,7 @@ type # Shows test status updates at regular time intervals. Useful for running # locally while attended. Set to false for unattended runs, eg CI. showContinuousStatusUpdates: bool + logsDir: string timeStart: ?Moment timeEnd: ?Moment codexPortLock: AsyncLock @@ -73,6 +75,7 @@ type testId: string # when used in datadir path, prevents data dir clashes status: IntegrationTestStatus command: string + logsDir: string TestManagerError* = object of CatchableError @@ -194,6 +197,8 @@ proc startHardhat( args.add("--port") args.add($port) + if test.manager.debugHardhat: + args.add("--log-file=" & test.logsDir / "hardhat.log") trace "starting hardhat process on port ", port try: @@ -255,9 +260,9 @@ proc printResult( of IntegrationTestStatus.Failed: if output =? test.output: if printStdErr: #manager.debugTestHarness - test.printOutputMarker(MarkerPosition.Start, "test harness errors (stderr)") + test.printOutputMarker(MarkerPosition.Start, "test file errors (stderr)") echo output.stdError - test.printOutputMarker(MarkerPosition.Finish, "test harness errors (stderr)") + test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") if printStdOut: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") echo output.stdOutput @@ -286,21 +291,25 @@ proc printStart(test: IntegrationTest) = proc buildCommand( test: IntegrationTest, hardhatPort: ?int ): Future[string] {.async: (raises: [CancelledError, TestManagerError]).} = - let logging = - if not test.manager.debugTestHarness: - "" - else: + var logging = string.none + if test.manager.debugTestHarness: + #!fmt: off + logging = some( "-d:chronicles_log_level=TRACE " & - "-d:chronicles_disabled_topics=websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT " & - "-d:chronicles_default_output_device=stdout " & "-d:chronicles_sinks=textlines" + "-d:chronicles_disabled_topics=websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT " & + "-d:chronicles_default_output_device=stdout " & + "-d:chronicles_sinks=textlines") + #!fmt: on - let strHardhatPort = - if not test.config.startHardhat: - "" - else: - without port =? hardhatPort: - raiseTestManagerError "hardhatPort required when 'config.startHardhat' is true" - "-d:HardhatPort=" & $port + var hhPort = string.none + if test.config.startHardhat: + without port =? hardhatPort: + raiseTestManagerError "hardhatPort required when 'config.startHardhat' is true" + hhPort = some "-d:HardhatPort=" & $port + + var logDir = string.none + if test.manager.debugCodexNodes: + logDir = some "-d:LogsDir=" & test.logsDir var testFile: string try: @@ -324,12 +333,25 @@ proc buildCommand( withLock(test.manager.hardhatPortLock): try: return - "nim c " & &"-d:CodexApiPort={apiPort} " & &"-d:CodexDiscPort={discPort} " & - &"{strHardhatPort} " & &"-d:TestId={test.testId} " & &"{logging} " & - "--verbosity:0 " & "--hints:off " & "-d:release " & "-r " & &"{testFile}" + #!fmt: off + "nim c " & + &"-d:CodexApiPort={apiPort} " & + &"-d:CodexDiscPort={discPort} " & + &"-d:DebugCodexNodes={test.manager.debugCodexNodes} " & + &"-d:DebugHardhat={test.manager.debugHardhat} " & + (logDir |? "") & " " & + (hhPort |? "") & " " & + &"-d:TestId={test.testId} " & + (logging |? "") & " " & + "--verbosity:0 " & + "--hints:off " & + "-d:release " & + "-r " & + &"{testFile}" + #!fmt: on except ValueError as parent: raiseTestManagerError "bad command --\n" & ", apiPort: " & $apiPort & - ", discPort: " & $discPort & ", logging: " & logging & ", testFile: " & + ", discPort: " & $discPort & ", logging: " & logging |? "" & ", testFile: " & testFile & ", error: " & parent.msg, parent proc setup( @@ -394,6 +416,13 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = trace "Running test" + if test.manager.debugCodexNodes: + test.logsDir = test.manager.logsDir / sanitize(test.config.name) + try: + createDir(test.logsDir) + except CatchableError as e: + error "failed to create test log dir", logDir = test.logsDir, error = e.msg + test.timeStart = some Moment.now() test.status = IntegrationTestStatus.Running @@ -501,7 +530,7 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = asyncSpawn futRun try: - # if runTests is cancelled, await allFutures will be cancelled, but allFutures + # if runTests is cancelled, await allFutures will be cancelled, but allFutures # does not propagate the cancellation to the futures it's waiting on, so we # need to cancel them here await allFutures testFutures @@ -581,6 +610,31 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].} = proc start*( manager: TestManager ) {.async: (raises: [CancelledError, TestManagerError]).} = + try: + if manager.debugCodexNodes: + let startTime = now().format("yyyy-MM-dd'_'HH:mm:ss") + let logsDir = + currentSourcePath.parentDir() / "logs" / + sanitize(startTime & "__IntegrationTests") + createDir(logsDir) + manager.logsDir = logsDir + #!fmt: off + echoStyled bgWhite, fgBlack, styleBright, + "\n\n ", + styleUnderscore, + "ℹ️ LOGS AVAILABLE ℹ️\n\n", + resetStyle, bgWhite, fgBlack, styleBright, + """ Logs for this run will be available at:""", + resetStyle, bgWhite, fgBlack, + &"\n\n {logsDir}\n\n", + resetStyle, bgWhite, fgBlack, styleBright, + " NOTE: For CI runs, logs will be attached as artefacts\n" + #!fmt: on + except IOError as e: + raiseTestManagerError "failed to create hardhat log directory: " & e.msg, e + except OSError as e: + raiseTestManagerError "failed to create hardhat log directory: " & e.msg, e + if manager.showContinuousStatusUpdates: let fut = manager.continuallyShowUpdates() manager.trackedFutures.track fut diff --git a/tests/integration/utils.nim b/tests/integration/utils.nim index a2fa38313b..bcdff4ed94 100644 --- a/tests/integration/utils.nim +++ b/tests/integration/utils.nim @@ -1,8 +1,11 @@ +import std/os import pkg/chronos import pkg/codex/logutils +{.push raises: [].} + proc nextFreePort*(startPort: int): Future[int] {.async: (raises: [CancelledError]).} = - proc client(server: StreamServer, transp: StreamTransport) {.async.} = + proc client(server: StreamServer, transp: StreamTransport) {.async: (raises: []).} = await transp.closeWait() var port = startPort @@ -29,5 +32,22 @@ proc sanitize*(pathSegment: string): string = sanitized = sanitized.replace(invalid, '_').replace(' ', '_') sanitized -proc getTempDirName*(starttime: string, role: Role, roleIdx: int): string = - getTempDir() / "Codex" / sanitize(TestId) / sanitize($starttime) / sanitize($role & "_" & $roleIdx) +proc getLogFile*( + logDir, startTime, suiteName, testName, role: string, index = int.none +): string {.raises: [IOError, OSError].} = + let logsDir = + if logDir == "": + currentSourcePath.parentDir() / "logs" / sanitize(startTime & "__" & suiteName) / + sanitize(testName) + else: + logDir / sanitize(suiteName) / sanitize(testName) + + createDir(logsDir) + + var fn = $role + if idx =? index: + fn &= "_" & $idx + fn &= ".log" + + let fileName = logsDir / fn + return fileName diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 108ec7f50c..48e2ec456f 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -30,7 +30,7 @@ const DebugHardhat {.booldefine.} = false # Echoes stdout from the integration test file process. Codex process logs can # also be output if a test uses a multinodesuite, requires CodexConfig.debug # to be enabled -const DebugCodexNodes {.booldefine.} = true +const DebugCodexNodes {.booldefine.} = false # Shows test status updates at time intervals. Useful for running locally with # active terminal interaction. Set to false for unattended runs, eg CI. const ShowContinuousStatusUpdates {.booldefine.} = false @@ -40,28 +40,6 @@ const TestTimeout {.intdefine.} = 60 const EnableParallelTests {.booldefine.} = true proc run() {.async.} = - when DebugTestHarness and enabledLogLevel != LogLevel.TRACE: - styledEcho bgWhite, - fgBlack, styleBright, "\n\n ", styleUnderscore, - "ℹ️ ADDITIONAL LOGGING AVAILABLE ℹ️\n\n", resetStyle, bgWhite, fgBlack, - styleBright, - """ - More integration test harness logs available by running with - -d:chronicles_log_level=TRACE, eg:""", - resetStyle, bgWhite, fgBlack, - "\n\n nim c -d:chronicles_log_level=TRACE -r ./testIntegration.nim\n\n" - - when DebugCodexNodes: - styledEcho bgWhite, - fgBlack, styleBright, "\n\n ", styleUnderscore, - "⚠️ ENABLE CODEX LOGGING ⚠️\n\n", resetStyle, bgWhite, fgBlack, - styleBright, - """ - For integration test suites that are multinodesuites, or for - tests launching a CodexProcess, ensure that CodexConfig.debug - is enabled to see chronicles logs. - """ - let manager = TestManager.new( configs = TestConfigs, DebugTestHarness, From 533385608326c3174b563609d67f7fb241c74cf1 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Feb 2025 16:34:42 +1100 Subject: [PATCH 072/178] add test name to datadir path avoids reusing datadirs between tests --- tests/integration/multinodes.nim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index c11f61c500..287d78818b 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -128,7 +128,9 @@ template multinodesuite*(name: string, body: untyped) = raiseMultiNodeSuiteError "Cannot start node at nodeIdx " & $nodeIdx & ", not enough eth accounts." - let datadir = getTempDirName(starttime, role, roleIdx) + let datadir = + getTempDir() / "Codex" / sanitize(TestId) / sanitize(currentTestName) / + sanitize($starttime) / sanitize($role & "_" & $roleIdx) try: if config.logFile.isSome or DebugCodexNodes: From aa6678b8ffd1c91fcf651e14485642f3e8112689 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Feb 2025 16:53:25 +1100 Subject: [PATCH 073/178] lock codex port selection in multinodesuites Codex api/disc ports were clashing in windows because `lastUsedCodexApiPort` and `lastUsedCodeexDiscPort` were not locked when read and written, while client and provider nodes were started concurrently (async). --- tests/integration/multinodes.nim | 33 +++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 287d78818b..fbca5f6c28 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -45,8 +45,21 @@ const TestId {.strdefine.}: string = "TestId" const DebugCodexNodes {.booldefine.}: bool = false const LogsDir {.strdefine.}: string = "" -proc raiseMultiNodeSuiteError(msg: string) = - raise newException(MultiNodeSuiteError, msg) +proc raiseMultiNodeSuiteError(msg: string, parent: ref CatchableError = nil) = + raise newException(MultiNodeSuiteError, msg, parent) + +template withLock(lock: AsyncLock, body: untyped) = + if lock.isNil: + lock = newAsyncLock() + + await lock.acquire() + try: + body + finally: + try: + lock.release() + except AsyncLockError as parent: + raiseMultiNodeSuiteError "lock error", parent @@ -84,6 +97,7 @@ template multinodesuite*(name: string, body: untyped) = var lastUsedHardhatPort = HardhatPort var lastUsedCodexApiPort = CodexApiPort var lastUsedCodexDiscPort = CodexDiscPort + var codexPortLock: AsyncLock template test(tname, startNodeConfigs, tbody) = currentTestName = tname @@ -140,13 +154,14 @@ template multinodesuite*(name: string, body: untyped) = if DebugCodexNodes: config.debugEnabled = true - - let apiPort = await nextFreePort(lastUsedCodexApiPort + nodeIdx) - let discPort = await nextFreePort(lastUsedCodexDiscPort + nodeIdx) - config.addCliOption("--api-port", $apiPort) - config.addCliOption("--disc-port", $discPort) - lastUsedCodexApiPort = apiPort - lastUsedCodexDiscPort = discPort + var apiPort, discPort: int + withLock(codexPortLock): + apiPort = await nextFreePort(lastUsedCodexApiPort + nodeIdx) + discPort = await nextFreePort(lastUsedCodexDiscPort + nodeIdx) + config.addCliOption("--api-port", $apiPort) + config.addCliOption("--disc-port", $discPort) + lastUsedCodexApiPort = apiPort + lastUsedCodexDiscPort = discPort for bootstrapNode in bootstrapNodes: config.addCliOption("--bootstrap-node", bootstrapNode) From c59fa9f1e5852956b090c3d764794ccef79d1e14 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Feb 2025 17:50:33 +1100 Subject: [PATCH 074/178] increase port gap by 1000 to avoid clashes in windows --- tests/integration/testmanager.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 4ce5409887..928445e6ec 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -325,9 +325,9 @@ proc buildCommand( # cannot rely on `nextFreePort` in multinodes entirely as there could be a # concurrency issue where the port is determined free in mulitiple tests and # then there is a clash during the run. - let apiPort = await nextFreePort(test.manager.lastCodexApiPort + 100) + let apiPort = await nextFreePort(test.manager.lastCodexApiPort + 1000) test.manager.lastCodexApiPort = apiPort - let discPort = await nextFreePort(test.manager.lastCodexDiscPort + 100) + let discPort = await nextFreePort(test.manager.lastCodexDiscPort + 1000) test.manager.lastCodexDiscPort = discPort withLock(test.manager.hardhatPortLock): From cddb407ddcfa2478f7c5b793450de77e48ffeca8 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:07:33 +1100 Subject: [PATCH 075/178] clean up --- .github/workflows/ci-reusable.yml | 2 +- tests/integration/testmanager.nim | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index ec846d17de..cb66f5b275 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -77,7 +77,7 @@ jobs: ## Part 3 Tests ## - name: Integration tests if: matrix.tests == 'integration' || matrix.tests == 'all' - run: make -j${ncpu} ENABLE_PARALLEL_TESTS=0 testIntegration + run: make -j${ncpu} PARALLEL=0 testIntegration - name: Parallel integration tests if: matrix.tests == 'integration-parallel' diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 928445e6ec..0a75dafbe8 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -320,11 +320,12 @@ proc buildCommand( raiseTestManagerError "bad file name, testFile: " & test.config.testFile, parent withLock(test.manager.codexPortLock): - # Increase the port by 100 to allow each test to run 100 codex nodes + # Increase the port by 1000 to allow each test to run 1000 codex nodes # (clients, SPs, validators) giving a good chance the port will be free. We # cannot rely on `nextFreePort` in multinodes entirely as there could be a # concurrency issue where the port is determined free in mulitiple tests and - # then there is a clash during the run. + # then there is a clash during the run. Windows, in particular, does not + # like giving up ports. let apiPort = await nextFreePort(test.manager.lastCodexApiPort + 1000) test.manager.lastCodexApiPort = apiPort let discPort = await nextFreePort(test.manager.lastCodexDiscPort + 1000) From 22cdacb0feb5663912793a3d060ff6272c9940e8 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:07:50 +1100 Subject: [PATCH 076/178] Allow debug runs from the github UI --- .github/workflows/ci-reusable.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index cb66f5b275..a22c23b59a 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -81,7 +81,7 @@ jobs: - name: Parallel integration tests if: matrix.tests == 'integration-parallel' - run: make -j${ncpu} DEBUG=1 testIntegration + run: make -j${ncpu} DEBUG=${{ runner.debug }} testIntegration - name: Upload integration tests log files uses: actions/upload-artifact@v4 From 23875b875d59224d7867162f12e3b816b78bfab4 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:13:17 +1100 Subject: [PATCH 077/178] run npm install for parallel tests in ci --- .github/workflows/ci-reusable.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index a22c23b59a..4941917dcd 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -54,7 +54,7 @@ jobs: node-version: 20 - name: Install Ethereum node dependencies - if: matrix.tests == 'contract' || matrix.tests == 'integration' || matrix.tests == 'tools' || matrix.tests == 'all' + if: matrix.tests == 'contract' || matrix.tests == 'integration' || matrix.tests == 'integration-parallel' || matrix.tests == 'tools' || matrix.tests == 'all' working-directory: vendor/codex-contracts-eth env: MSYS2_PATH_TYPE: inherit From 8257ec29b89037728252ea9711d8c7b71273986f Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 7 Feb 2025 11:49:27 +1100 Subject: [PATCH 078/178] CI: enable artefact upload for parallel tests --- .github/workflows/ci-reusable.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index 4941917dcd..b1249eef79 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -85,7 +85,7 @@ jobs: - name: Upload integration tests log files uses: actions/upload-artifact@v4 - if: (matrix.tests == 'integration' || matrix.tests == 'all') && always() + if: (matrix.tests == 'integration' || matrix.tests == 'integration-parallel' || matrix.tests == 'all') && always() with: name: ${{ matrix.os }}-${{ matrix.cpu }}-${{ matrix.nim_version }}-integration-tests-logs path: tests/integration/logs/ From c3558e1e0419406f683837238f8d978160eff9e4 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 20 Feb 2025 11:50:16 +1100 Subject: [PATCH 079/178] formatting --- tests/integration/hardhatprocess.nim | 11 +++-------- tests/integration/nodeprocess.nim | 17 ++++++++--------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index 51967f5ca0..52af0810f3 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -36,10 +36,8 @@ method workingDir(node: HardhatProcess): string = return currentSourcePath() / ".." / ".." / ".." / "vendor" / "codex-contracts-eth" method executable(node: HardhatProcess): string = - return "node_modules" / ".bin" / (when defined(windows): - "hardhat.cmd" - else: - "hardhat") + return + "node_modules" / ".bin" / (when defined(windows): "hardhat.cmd" else: "hardhat") method startedOutput(node: HardhatProcess): string = return "Started HTTP and WebSocket JSON-RPC server at" @@ -80,10 +78,7 @@ method start*( let poptions = node.processOptions + {AsyncProcessOption.StdErrToStdOut} let args = @["node", "--export", "deployment-localhost.json"].concat(node.arguments) trace "starting node", - args, - executable, - workingDir = node.workingDir, - processOptions = poptions + args, executable, workingDir = node.workingDir, processOptions = poptions try: node.process = await startProcess( diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 3fc020a4a6..e29c581194 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -14,7 +14,7 @@ import ./codexclient export codexclient export chronicles -{.push raises:[].} +{.push raises: [].} logScope: topics = "integration testing node process" @@ -44,9 +44,7 @@ method processOptions(node: NodeProcess): set[AsyncProcessOption] {.base, gcsafe method outputLineEndings(node: NodeProcess): string {.base, gcsafe.} = raiseAssert "not implemented" -method onOutputLineCaptured( - node: NodeProcess, line: string -) {.base, gcsafe.} = +method onOutputLineCaptured(node: NodeProcess, line: string) {.base, gcsafe.} = raiseAssert "not implemented" method start*(node: NodeProcess) {.base, async.} = @@ -126,10 +124,9 @@ method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = if not node.process.isNil: trace "terminating node process..." try: - let exitCode = await node.process.terminateAndWaitForExit(2.seconds) - if exitCode > 0 and - exitCode != 143 and # 143 = SIGTERM (initiated above) - exitCode != expectedErrCode: + let exitCode = await node.process.terminateAndWaitForExit(2.seconds) + if exitCode > 0 and exitCode != 143 and # 143 = SIGTERM (initiated above) + exitCode != expectedErrCode: error "process exited with a non-zero exit code", exitCode trace "node stopped", exitCode except CancelledError as error: @@ -139,7 +136,8 @@ method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = let forcedExitCode = await node.process.killAndWaitForExit(3.seconds) trace "node process forcibly killed with exit code: ", exitCode = forcedExitCode except CatchableError as e: - error "failed to kill node process in time, it will be killed when the parent process exits", error = e.msg + error "failed to kill node process in time, it will be killed when the parent process exits", + error = e.msg writeStackTrace() finally: proc closeProcessStreams() {.async: (raises: []).} = @@ -147,6 +145,7 @@ method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = await node.process.closeWait() node.process = nil trace "node process' streams closed" + asyncSpawn closeProcessStreams() proc waitUntilOutput*(node: NodeProcess, output: string) {.async.} = From 592e7c1e27f19afb631cc199b964748103fb4ca0 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 21 Feb 2025 12:18:35 +1100 Subject: [PATCH 080/178] bump chronos to 4.0.4 potentially fixes an issue on macos where process exit codes were reported -1 --- vendor/nim-chronos | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/nim-chronos b/vendor/nim-chronos index c04576d829..0646c444fc 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit c04576d829b8a0a1b12baaa8bc92037501b3a4a0 +Subproject commit 0646c444fce7c7ed08ef6f2c9a7abfd172ffe655 From fb2e3436f63ade64bc6b9bab144e29e311a01ebe Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Feb 2025 17:29:44 +1100 Subject: [PATCH 081/178] Add proper async exception tracking to multinodesuite --- tests/integration/codexprocess.nim | 2 +- tests/integration/hardhatprocess.nim | 6 +- tests/integration/multinodes.nim | 200 +++++++++++++++++++-------- tests/integration/nodeprocess.nim | 33 +++-- 4 files changed, 165 insertions(+), 76 deletions(-) diff --git a/tests/integration/codexprocess.nim b/tests/integration/codexprocess.nim index 2724d729be..1becc909cd 100644 --- a/tests/integration/codexprocess.nim +++ b/tests/integration/codexprocess.nim @@ -85,7 +85,7 @@ proc client*(node: CodexProcess): CodexClient {.raises: [CodexProcessError].} = node.client = some client return client -method stop*(node: CodexProcess) {.async.} = +method stop*(node: CodexProcess) {.async: (raises: []).} = logScope: nodeName = node.name diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index 52af0810f3..bc52d780b0 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -101,7 +101,7 @@ proc startNode*( debug: string | bool = false, name: string, onOutputLineCaptured: OnOutputLineCaptured = nil, -): Future[HardhatProcess] {.async.} = +): Future[HardhatProcess] {.async: (raises: [CancelledError, NodeProcessError]).} = logScope: nodeName = name @@ -132,7 +132,7 @@ proc startNode*( return hardhat -method onOutputLineCaptured(node: HardhatProcess, line: string) {.raises: [].} = +method onOutputLineCaptured(node: HardhatProcess, line: string) = logScope: nodeName = node.name @@ -147,7 +147,7 @@ method onOutputLineCaptured(node: HardhatProcess, line: string) {.raises: [].} = discard logFile.closeFile() node.logFile = none IoHandle -method stop*(node: HardhatProcess) {.async.} = +method stop*(node: HardhatProcess) {.async: (raises: []).} = # terminate the process await procCall NodeProcess(node).stop() diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index fbca5f6c28..d047617aa0 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -1,3 +1,4 @@ +import std/httpclient import std/os import std/sequtils import std/strutils @@ -25,6 +26,8 @@ export hardhatconfig export codexconfig export nodeconfigs +{.push raises: [].} + type RunningNode* = ref object role*: Role @@ -37,6 +40,7 @@ type Hardhat MultiNodeSuiteError = object of CatchableError + SuiteTimeoutError = object of MultiNodeSuiteError const HardhatPort {.intdefine.}: int = 8545 const CodexApiPort {.intdefine.}: int = 8080 @@ -45,7 +49,9 @@ const TestId {.strdefine.}: string = "TestId" const DebugCodexNodes {.booldefine.}: bool = false const LogsDir {.strdefine.}: string = "" -proc raiseMultiNodeSuiteError(msg: string, parent: ref CatchableError = nil) = +proc raiseMultiNodeSuiteError( + msg: string, parent: ref CatchableError = nil +) {.raises: [MultiNodeSuiteError].} = raise newException(MultiNodeSuiteError, msg, parent) template withLock(lock: AsyncLock, body: untyped) = @@ -98,6 +104,7 @@ template multinodesuite*(name: string, body: untyped) = var lastUsedCodexApiPort = CodexApiPort var lastUsedCodexDiscPort = CodexDiscPort var codexPortLock: AsyncLock + var futTimeout: Future[void] template test(tname, startNodeConfigs, tbody) = currentTestName = tname @@ -111,12 +118,25 @@ template multinodesuite*(name: string, body: untyped) = proc newHardhatProcess( config: HardhatConfig, role: Role - ): Future[NodeProcess] {.async.} = + ): Future[NodeProcess] {.async: (raises: [MultiNodeSuiteError, CancelledError]).} = var args: seq[string] = @[] if config.logFile: - let updatedLogFile = - getLogFile(LogsDir, starttime, name, currentTestName, $role, none int) - args.add "--log-file=" & updatedLogFile + try: + let updatedLogFile = + getLogFile(LogsDir, starttime, name, currentTestName, $role, none int) + args.add "--log-file=" & updatedLogFile + except IOError as e: + raiseMultiNodeSuiteError( + "failed to start hardhat because logfile path could not be obtained: " & + e.msg, + e, + ) + except OSError as e: + raiseMultiNodeSuiteError( + "failed to start hardhat because logfile path could not be obtained: " & + e.msg, + e, + ) let port = await nextFreePort(lastUsedHardhatPort) jsonRpcProviderUrl.updatePort(port) @@ -134,7 +154,7 @@ template multinodesuite*(name: string, body: untyped) = proc newCodexProcess( roleIdx: int, conf: CodexConfig, role: Role - ): Future[NodeProcess] {.async.} = + ): Future[NodeProcess] {.async: (raises: [MultiNodeSuiteError, CancelledError]).} = let nodeIdx = running.len var config = conf @@ -148,9 +168,22 @@ template multinodesuite*(name: string, body: untyped) = try: if config.logFile.isSome or DebugCodexNodes: - let updatedLogFile = - getLogFile(LogsDir, starttime, name, currentTestName, $role, some roleIdx) - config.withLogFile(updatedLogFile) + try: + let updatedLogFile = + getLogFile(LogsDir, starttime, name, currentTestName, $role, some roleIdx) + config.withLogFile(updatedLogFile) + except IOError as e: + raiseMultiNodeSuiteError( + "failed to start " & $role & + " because logfile path could not be obtained: " & e.msg, + e, + ) + except OSError as e: + raiseMultiNodeSuiteError( + "failed to start " & $role & + " because logfile path could not be obtained: " & e.msg, + e, + ) if DebugCodexNodes: config.debugEnabled = true @@ -172,17 +205,17 @@ template multinodesuite*(name: string, body: untyped) = except CodexConfigError as e: raiseMultiNodeSuiteError "invalid cli option, error: " & e.msg - let node = await CodexProcess.startNode( - config.cliArgs, config.debugEnabled, $role & $roleIdx - ) - try: + let node = await CodexProcess.startNode( + config.cliArgs, config.debugEnabled, $role & $roleIdx + ) await node.waitUntilStarted() trace "node started", nodeName = $role & $roleIdx + return node + except CodexConfigError as e: + raiseMultiNodeSuiteError "failed to get cli args from config: " & e.msg, e except NodeProcessError as e: - raiseMultiNodeSuiteError "node not started, error: " & e.msg - - return node + raiseMultiNodeSuiteError "node not started, error: " & e.msg, e proc hardhat(): HardhatProcess = for r in running: @@ -208,7 +241,9 @@ template multinodesuite*(name: string, body: untyped) = if r.role == Role.Validator: CodexProcess(r.node) - proc startHardhatNode(config: HardhatConfig): Future[NodeProcess] {.async.} = + proc startHardhatNode( + config: HardhatConfig + ): Future[NodeProcess] {.async: (raises: [MultiNodeSuiteError, CancelledError]).} = return await newHardhatProcess(config, Role.Hardhat) proc startClientNode(conf: CodexConfig): Future[NodeProcess] {.async.} = @@ -220,44 +255,63 @@ template multinodesuite*(name: string, body: untyped) = ) return await newCodexProcess(clientIdx, config, Role.Client) - proc startProviderNode(conf: CodexConfig): Future[NodeProcess] {.async.} = - let providerIdx = providers().len - var config = conf - config.addCliOption(StartUpCmd.persistence, "--eth-provider", jsonRpcProviderUrl) - config.addCliOption( - StartUpCmd.persistence, "--eth-account", $accounts[running.len] - ) - config.addCliOption( - PersistenceCmd.prover, "--circom-r1cs", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.r1cs", - ) - config.addCliOption( - PersistenceCmd.prover, "--circom-wasm", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.wasm", - ) - config.addCliOption( - PersistenceCmd.prover, "--circom-zkey", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.zkey", - ) - - return await newCodexProcess(providerIdx, config, Role.Provider) - - proc startValidatorNode(conf: CodexConfig): Future[NodeProcess] {.async.} = - let validatorIdx = validators().len - var config = conf - config.addCliOption(StartUpCmd.persistence, "--eth-provider", jsonRpcProviderUrl) - config.addCliOption( - StartUpCmd.persistence, "--eth-account", $accounts[running.len] - ) - config.addCliOption(StartUpCmd.persistence, "--validator") + proc startProviderNode( + conf: CodexConfig + ): Future[NodeProcess] {.async: (raises: [MultiNodeSuiteError, CancelledError]).} = + try: + let providerIdx = providers().len + var config = conf + config.addCliOption( + StartUpCmd.persistence, "--eth-provider", jsonRpcProviderUrl + ) + config.addCliOption( + StartUpCmd.persistence, "--eth-account", $accounts[running.len] + ) + config.addCliOption( + PersistenceCmd.prover, "--circom-r1cs", + "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.r1cs", + ) + config.addCliOption( + PersistenceCmd.prover, "--circom-wasm", + "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.wasm", + ) + config.addCliOption( + PersistenceCmd.prover, "--circom-zkey", + "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.zkey", + ) + + return await newCodexProcess(providerIdx, config, Role.Provider) + except CodexConfigError as e: + raiseMultiNodeSuiteError "Failed to start codex node, error adding cli options: " & + e.msg, e - return await newCodexProcess(validatorIdx, config, Role.Validator) + proc startValidatorNode( + conf: CodexConfig + ): Future[NodeProcess] {.async: (raises: [MultiNodeSuiteError, CancelledError]).} = + try: + let validatorIdx = validators().len + var config = conf + config.addCliOption( + StartUpCmd.persistence, "--eth-provider", jsonRpcProviderUrl + ) + config.addCliOption( + StartUpCmd.persistence, "--eth-account", $accounts[running.len] + ) + config.addCliOption(StartUpCmd.persistence, "--validator") + + return await newCodexProcess(validatorIdx, config, Role.Validator) + except CodexConfigError as e: + raiseMultiNodeSuiteError "Failed to start validator node, error adding cli options: " & + e.msg, e - proc teardownImpl() {.async.} = + proc teardownImpl() {.async: (raises: []).} = for nodes in @[validators(), clients(), providers()]: for node in nodes: await node.stop() # also stops rest client - node.removeDataDir() + try: + node.removeDataDir() + except CodexProcessError as e: + error "Failed to remove data dir during teardown", error = e.msg # if hardhat was started in the test, kill the node # otherwise revert the snapshot taken in the test setup @@ -265,7 +319,10 @@ template multinodesuite*(name: string, body: untyped) = if not hardhat.isNil: await hardhat.stop() else: - discard await send(ethProvider, "evm_revert", @[snapshot]) + try: + discard await noCancel send(ethProvider, "evm_revert", @[snapshot]) + except ProviderError as e: + error "Failed to revert hardhat state during teardown", error = e.msg await ethProvider.close() @@ -274,6 +331,8 @@ template multinodesuite*(name: string, body: untyped) = template failAndTeardownOnError(message: string, tryBody: untyped) = try: tryBody + except CancelledError as e: + raise e except CatchableError as er: fatal message, error = er.msg echo "[FATAL] ", message, ": ", er.msg @@ -285,18 +344,35 @@ template multinodesuite*(name: string, body: untyped) = proc updateBootstrapNodes( node: CodexProcess - ): Future[void] {.async: (raises: [CatchableError]).} = - without ninfo =? await node.client.info(): - # raise CatchableError instead of Defect (with .get or !) so we - # can gracefully shutdown and prevent zombies - raiseMultiNodeSuiteError "Failed to get node info" - bootstrapNodes.add ninfo["spr"].getStr() + ): Future[void] {.async: (raises: [MultiNodeSuiteError]).} = + try: + without ninfo =? await node.client.info(): + # raise CatchableError instead of Defect (with .get or !) so we + # can gracefully shutdown and prevent zombies + raiseMultiNodeSuiteError "Failed to get node info" + bootstrapNodes.add ninfo["spr"].getStr() + except CatchableError as e: + raiseMultiNodeSuiteError "Failed to get node info: " & e.msg, e + + setupAll: + proc raiseOnTimeout() {.async: (raises: [CancelledError, SuiteTimeoutError]).} = + await sleepAsync(chronos.seconds(10)) + raise newException(SuiteTimeoutError, "suite timed out") + + failAndTeardownOnError "suite timed out": + futTimeout = raiseOnTimeout() + + teardownAll: + await futTimeout.cancelAndWait() setup: if var conf =? nodeConfigs.hardhat: try: - let node = await startHardhatNode(conf) + let node = await noCancel startHardhatNode(conf) running.add RunningNode(role: Role.Hardhat, node: node) + except CancelledError as e: + # should not happen because of noCancel, but added for clarity + raise e except CatchableError as e: echo "failed to start hardhat node" fail() @@ -312,6 +388,8 @@ template multinodesuite*(name: string, body: untyped) = if nodeConfigs.hardhat.isNone: snapshot = await send(ethProvider, "evm_snapshot") accounts = await ethProvider.listAccounts() + except CancelledError as e: + raise e except CatchableError as e: echo "Hardhat not running. Run hardhat manually " & "before executing tests, or include a " & "HardhatConfig in the test setup." @@ -321,21 +399,21 @@ template multinodesuite*(name: string, body: untyped) = if var clients =? nodeConfigs.clients: failAndTeardownOnError "failed to start client nodes": for config in clients.configs: - let node = await startClientNode(config) + let node = await noCancel startClientNode(config) running.add RunningNode(role: Role.Client, node: node) await CodexProcess(node).updateBootstrapNodes() if var providers =? nodeConfigs.providers: failAndTeardownOnError "failed to start provider nodes": for config in providers.configs.mitems: - let node = await startProviderNode(config) + let node = await noCancel startProviderNode(config) running.add RunningNode(role: Role.Provider, node: node) await CodexProcess(node).updateBootstrapNodes() if var validators =? nodeConfigs.validators: failAndTeardownOnError "failed to start validator nodes": for config in validators.configs.mitems: - let node = await startValidatorNode(config) + let node = await noCancel startValidatorNode(config) running.add RunningNode(role: Role.Validator, node: node) # ensure that we have a recent block with a fresh timestamp diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index e29c581194..ba27517f66 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -47,7 +47,7 @@ method outputLineEndings(node: NodeProcess): string {.base, gcsafe.} = method onOutputLineCaptured(node: NodeProcess, line: string) {.base, gcsafe.} = raiseAssert "not implemented" -method start*(node: NodeProcess) {.base, async.} = +method start*(node: NodeProcess) {.base, async: (raises: [CancelledError]).} = logScope: nodeName = node.name @@ -104,7 +104,7 @@ proc captureOutput( proc startNode*[T: NodeProcess]( _: type T, args: seq[string], debug: string | bool = false, name: string -): Future[T] {.async.} = +): Future[T] {.async: (raises: [CancelledError]).} = ## Starts a Codex Node with the specified arguments. ## Set debug to 'true' to see output of the node. let node = T( @@ -116,7 +116,9 @@ proc startNode*[T: NodeProcess]( await node.start() return node -method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = +method stop*( + node: NodeProcess, expectedErrCode: int = -1 +) {.base, async: (raises: []).} = logScope: nodeName = node.name @@ -124,16 +126,14 @@ method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = if not node.process.isNil: trace "terminating node process..." try: - let exitCode = await node.process.terminateAndWaitForExit(2.seconds) + let exitCode = await noCancel node.process.terminateAndWaitForExit(2.seconds) if exitCode > 0 and exitCode != 143 and # 143 = SIGTERM (initiated above) exitCode != expectedErrCode: error "process exited with a non-zero exit code", exitCode trace "node stopped", exitCode - except CancelledError as error: - raise error except CatchableError: try: - let forcedExitCode = await node.process.killAndWaitForExit(3.seconds) + let forcedExitCode = await noCancel node.process.killAndWaitForExit(3.seconds) trace "node process forcibly killed with exit code: ", exitCode = forcedExitCode except CatchableError as e: error "failed to kill node process in time, it will be killed when the parent process exits", @@ -148,7 +148,9 @@ method stop*(node: NodeProcess, expectedErrCode: int = -1) {.base, async.} = asyncSpawn closeProcessStreams() -proc waitUntilOutput*(node: NodeProcess, output: string) {.async.} = +proc waitUntilOutput*( + node: NodeProcess, output: string +) {.async: (raises: [CancelledError, AsyncTimeoutError]).} = logScope: nodeName = node.name @@ -158,9 +160,18 @@ proc waitUntilOutput*(node: NodeProcess, output: string) {.async.} = let fut = node.captureOutput(output, started) node.trackedFutures.track(fut) asyncSpawn fut - await started.wait(60.seconds) # allow enough time for proof generation - -proc waitUntilStarted*(node: NodeProcess) {.async.} = + try: + await started.wait(60.seconds) # allow enough time for proof generation + except AsyncTimeoutError as e: + raise e + except CancelledError as e: + raise e + except CatchableError as e: # unsure where this originates from + error "unexpected error occurred waiting for node output", error = e.msg + +proc waitUntilStarted*( + node: NodeProcess +) {.async: (raises: [CancelledError, NodeProcessError]).} = logScope: nodeName = node.name From bc5fdd49be22b79e9ee94f5c06b10a76142c905c Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 28 Feb 2025 15:25:41 +1100 Subject: [PATCH 082/178] run tests async from start so that stop can cancel all tracked futures --- tests/integration/testmanager.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 0a75dafbe8..f9b7551484 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -641,7 +641,10 @@ proc start*( manager.trackedFutures.track fut asyncSpawn fut - await manager.runTests() + let futRunTests = manager.runTests() + manager.trackedFutures.track futRunTests + + await futRunTests manager.printResult() From 72d29311838cf646c2b741623df6751f50325710 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 28 Feb 2025 22:42:01 +1100 Subject: [PATCH 083/178] Refactor process launch Refactor to keep a process handle so that the processes can be stopped on timeout. --- tests/integration/nodeprocess.nim | 4 +- tests/integration/testmanager.nim | 248 ++++++++++++++++++++---------- tests/testIntegration.nim | 19 ++- 3 files changed, 179 insertions(+), 92 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index ba27517f66..3257bbfc12 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -129,14 +129,14 @@ method stop*( let exitCode = await noCancel node.process.terminateAndWaitForExit(2.seconds) if exitCode > 0 and exitCode != 143 and # 143 = SIGTERM (initiated above) exitCode != expectedErrCode: - error "process exited with a non-zero exit code", exitCode + warn "process exited with a non-zero exit code", exitCode trace "node stopped", exitCode except CatchableError: try: let forcedExitCode = await noCancel node.process.killAndWaitForExit(3.seconds) trace "node process forcibly killed with exit code: ", exitCode = forcedExitCode except CatchableError as e: - error "failed to kill node process in time, it will be killed when the parent process exits", + warn "failed to kill node process in time, it will be killed when the parent process exits", error = e.msg writeStackTrace() finally: diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index f9b7551484..843f06dd9b 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -66,17 +66,23 @@ type IntegrationTest = ref object manager: TestManager config: IntegrationTestConfig - process: Future[CommandExResponse].Raising( - [AsyncProcessError, AsyncProcessTimeoutError, CancelledError] - ) + # process: Future[CommandExResponse].Raising( + # [AsyncProcessError, AsyncProcessTimeoutError, CancelledError] + # ) + process: AsyncProcessRef timeStart: ?Moment timeEnd: ?Moment - output: ?!CommandExResponse + output: ?!TestOutput testId: string # when used in datadir path, prevents data dir clashes status: IntegrationTestStatus command: string logsDir: string + TestOutput = ref object + stdOut*: string + stdErr*: string + exitCode*: ?int + TestManagerError* = object of CatchableError Border {.pure.} = enum @@ -261,23 +267,23 @@ proc printResult( if output =? test.output: if printStdErr: #manager.debugTestHarness test.printOutputMarker(MarkerPosition.Start, "test file errors (stderr)") - echo output.stdError + echo output.stdErr test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") - if printStdOut: - test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOutput - test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") + # if printStdOut: + test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") + echo output.stdOut + test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgRed) of IntegrationTestStatus.Timeout: if printStdOut and output =? test.output: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOutput + echo output.stdOut test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgYellow) of IntegrationTestStatus.Ok: if printStdOut and output =? test.output: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOutput + echo output.stdOut test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgGreen) @@ -394,26 +400,35 @@ proc teardown( test.manager.hardhats.keepItIf(it != hardhat) proc untilTimeout( - fut: FutureBase, timeout: Duration -): Future[bool] {.async: (raises: [CancelledError]).} = - # workaround for withTimeout, which did not work correctly + fut: InternalRaisesFuture, timeout: Duration +): Future[void] {.async: (raises: [CancelledError, AsyncTimeoutError]).} = + ## Returns a Future that completes when either fut finishes or timeout elapses, + ## or if they finish at the same time. If timeout elapses, an AsyncTimeoutError + ## is raised. If fut fails, its error is raised. + let timer = sleepAsync(timeout) - try: - let winner = await race(fut, timer) - return winner.id == fut.id - except CancelledError as e: + defer: + # called even when exception raised # race does not cancel its futures when it's cancelled - if not fut.isNil and not fut.finished: - await fut.cancelAndWait() - if not timer.isNil and not timer.finished: - await timer.cancelAndWait() - raise e + await fut.cancelAndWait() + await timer.cancelAndWait() + + try: + discard await race(fut, timer) except ValueError as e: - error "failed to wait for timeout", error = e.msg + raiseAssert "should not happen" + + if fut.finished(): # or fut and timer both finished simultaneously + if fut.failed(): + await fut # raise fut error + return # unreachable, for readability + else: # timeout + raise newException(AsyncTimeoutError, "Timed out") proc start(test: IntegrationTest) {.async: (raises: []).} = logScope: - config = test.config + name = test.config.name + duration = test.duration trace "Running test" @@ -422,6 +437,9 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = try: createDir(test.logsDir) except CatchableError as e: + test.timeEnd = some Moment.now() + test.status = IntegrationTestStatus.Error + test.output = TestOutput.failure(e) error "failed to create test log dir", logDir = test.logsDir, error = e.msg test.timeStart = some Moment.now() @@ -433,61 +451,104 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = try: hardhat = await test.setup() except TestManagerError as e: - error "Failed to start hardhat and build command", error = e.msg test.timeEnd = some Moment.now() test.status = IntegrationTestStatus.Error - test.output = CommandExResponse.failure(e) + test.output = TestOutput.failure(e) + error "Failed to start hardhat and build command", error = e.msg return + trace "Starting parallel integration test", + command = test.command, timeout = test.manager.testTimeout + test.printStart() try: - trace "Starting parallel integration test", command = test.command - test.printStart() - test.process = - execCommandEx(command = test.command, timeout = test.manager.testTimeout) - - let completedBeforeTimeout = - # untilTimeout will cancel its underlying futures for us so no need to - # manually cancel them when cancelled - await test.process.untilTimeout(test.manager.testTimeout) - - if completedBeforeTimeout: - let output = await test.process # should raise if there's an error - test.output = success(output) - if output.status != 0: - test.status = IntegrationTestStatus.Failed - else: - test.status = IntegrationTestStatus.Ok - else: - test.timeEnd = some Moment.now() - error "Test timed out, check for zombie codex process", - name = test.config.name, duration = test.duration - let e = newException( - AsyncProcessTimeoutError, "Test did not complete before elapsed timeout" - ) - test.output = CommandExResponse.failure(e) - test.status = IntegrationTestStatus.Timeout - - if not test.process.isNil and not test.process.finished: - # cancel the process future, but the process itself may still be - # running if the procedure was cancelled or the test timed out - test.process.cancelSoon() - trace "process future will cancel soon" - - await test.teardown(hardhat) + test.process = await startProcess( + command = test.command, + # arguments = test.command.split(" "), + options = {AsyncProcessOption.EvalCommand}, + stdoutHandle = AsyncProcess.Pipe, + stderrHandle = AsyncProcess.Pipe, + ) + except AsyncProcessError as e: + test.timeEnd = some Moment.now() + error "Failed to start test process", error = e.msg + test.output = TestOutput.failure(e) + test.status = IntegrationTestStatus.Error + return + defer: + trace "Tearing down test" + await noCancel test.teardown(hardhat) test.timeEnd = some Moment.now() if test.status == IntegrationTestStatus.Ok: info "Test completed", name = test.config.name, duration = test.duration - except AsyncProcessTimeoutError as e: - test.timeEnd = some Moment.now() - error "Test timed out", name = test.config.name, duration = test.duration - test.output = CommandExResponse.failure(e) - test.status = IntegrationTestStatus.Timeout - except AsyncProcessError as e: + + if not test.process.isNil: + if test.process.running |? false: + var output = test.output.expect("should have output value") + trace "Terminating test process" + try: + output.exitCode = + some (await noCancel test.process.terminateAndWaitForExit(500.millis)) + test.output = success output + except AsyncProcessError, AsyncProcessTimeoutError: + warn "Test process failed to terminate, check for zombies" + + await test.process.closeWait() + + let outputReader = test.process.stdoutStream.read() + let errorReader = test.process.stderrStream.read() + + var output = TestOutput.new() + test.output = success(output) + output.exitCode = + try: + some (await test.process.waitForExit(test.manager.testTimeout)) + except AsyncProcessTimeoutError as e: + test.timeEnd = some Moment.now() + test.status = IntegrationTestStatus.Timeout + error "Test process failed to exit before timeout", + timeout = test.manager.testTimeout + return + except AsyncProcessError as e: + test.timeEnd = some Moment.now() + test.status = IntegrationTestStatus.Error + test.output = TestOutput.failure(e) + error "Test failed to complete", error = e.msg + return + + test.status = + if output.exitCode == some QuitSuccess: + IntegrationTestStatus.Ok + else: + IntegrationTestStatus.Failed + + try: + output.stdOut = string.fromBytes(await outputReader) + output.stdErr = string.fromBytes(await errorReader) + except AsyncStreamError as e: test.timeEnd = some Moment.now() - error "Test failed to complete", name = test.config.name, duration = test.duration - test.output = CommandExResponse.failure(e) + error "Failed to read test process output stream", error = e.msg + test.output = TestOutput.failure(e) test.status = IntegrationTestStatus.Error + return + + # let processRunning = test.process.waitForExit(test.manager.testTimeout) + # trace "Running test until timeout", timeout = test.manager.testTimeout + # let completedBeforeTimeout = + # await processRunning.withTimeout(test.manager.testTimeout) + + # if completedBeforeTimeout: + + # else: # timed out + # test.timeEnd = some Moment.now() + # test.status = IntegrationTestStatus.Timeout + # error "Test timed out, terminating process" + # process will be terminated in defer + + # try: + # output.exitCode = some(await test.process.terminateAndWaitForExit(100.millis)) + # except AsyncProcessError, AsyncProcessTimeoutError: + # warn "Test process failed to terminate, check for zombies" proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = ignoreCancelled: @@ -509,7 +570,18 @@ proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = proc run(test: IntegrationTest) {.async: (raises: []).} = ignoreCancelled: - await test.start() + let futStart = test.start() + # await futStart + + try: + await futStart.untilTimeout(test.manager.testTimeout) + except AsyncTimeoutError: + # if output =? test.output and output.exitCode.isNone: # timeout + error "Test timed out" + test.timeEnd = some Moment.now() + test.status = IntegrationTestStatus.Timeout + # await futStart.cancelAndWait() + test.printResult() proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = @@ -527,18 +599,12 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = let futRun = test.run() testFutures.add futRun - # may be overkill, but ensure no exceptions are missed - asyncSpawn futRun - try: - # if runTests is cancelled, await allFutures will be cancelled, but allFutures - # does not propagate the cancellation to the futures it's waiting on, so we - # need to cancel them here - await allFutures testFutures - except CancelledError as e: + defer: for fut in testFutures: - if not fut.isNil and not fut.finished: - await fut.cancelAndWait() + await fut.cancelAndWait() + + await allFutures testFutures manager.timeEnd = some Moment.now() @@ -649,16 +715,28 @@ proc start*( manager.printResult() proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = + trace "[stop] START canelling tracked" await manager.trackedFutures.cancelTracked() + trace "[stop] DONE cancelling tracked" + trace "[stop] stopping running processes" for test in manager.tests: - if not test.process.isNil and not test.process.finished: - # windows does not like cancelling processes, so waiting is not an option - test.process.cancelSoon() - + if not test.process.isNil and test.process.running |? false: + try: + trace "[stop] terminating process", name = test.config.name + discard await test.process.terminateAndWaitForExit(100.millis) + except AsyncProcessError, AsyncProcessTimeoutError: + warn "Test process failed to terminate, ignoring...", name = test.config.name + finally: + await test.process.closeWait() + + trace "[stop] stopping hardhats" for hardhat in manager.hardhats: try: + trace "[stop] stopping hardhat" if not hardhat.process.isNil: - await hardhat.process.stop() + await noCancel hardhat.process.stop() except CatchableError as e: trace "failed to stop hardhat node", error = e.msg + + trace "[stop] done stopping hardhats" diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 48e2ec456f..c70dcdecb5 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -39,7 +39,7 @@ const TestTimeout {.intdefine.} = 60 const EnableParallelTests {.booldefine.} = true -proc run() {.async.} = +proc run(): Future[bool] {.async: (raises: []).} = let manager = TestManager.new( configs = TestConfigs, DebugTestHarness, @@ -51,18 +51,27 @@ proc run() {.async.} = try: trace "starting test manager" await manager.start() + except TestManagerError as e: + error "Failed to run test manager", error = e.msg + return false + except CancelledError: + return finally: trace "stopping test manager" - await manager.stop() + await noCancel manager.stop() + trace "test manager stopped" without wasSuccessful =? manager.allTestsPassed, error: raiseAssert "Failed to get test status: " & error.msg - if not wasSuccessful: - quit(1) # indicate with a non-zero exit code that the tests failed + return wasSuccessful when EnableParallelTests: - waitFor run() + let wasSuccessful = waitFor run() + trace "[testIntegration] wasSuccessful", wasSuccessful + trace "[testIntegration] AFTER run" + if not wasSuccessful: + quit(QuitFailure) # indicate with a non-zero exit code that the tests failed else: # run tests serially import ./integration/testcli From 40c243a0801b6fd48d9010c1277eff7b46ae2af7 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:54:43 +1100 Subject: [PATCH 084/178] Colorise stdout from test runs Adds terminal colour to [OK], [FAILED], and [Suite] # Conflicts: # tests/integration/testmanager.nim --- tests/integration/testmanager.nim | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 843f06dd9b..7d415e9f5b 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -246,6 +246,15 @@ proc printOutputMarker(test: IntegrationTest, position: MarkerPosition, msg: str if position == MarkerPosition.Finish: echo "" +proc colorise(output: string): string = + proc setColour(text: string, colour: ForegroundColor): string = + &"{ansiForegroundColorCode(colour, true)}{text}{ansiResetCode}" + + let replacements = @[("[OK]", fgGreen), ("[FAILED]", fgRed), ("[Suite]", fgBlue)] + result = output + for (text, colour) in replacements: + result = result.replace(text, text.setColour(colour)) + proc printResult( test: IntegrationTest, printStdOut = test.manager.debugCodexNodes, @@ -271,19 +280,19 @@ proc printResult( test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") # if printStdOut: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOut + echo output.stdOut.colorise test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgRed) of IntegrationTestStatus.Timeout: if printStdOut and output =? test.output: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOut + echo output.stdOut.colorise test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgYellow) of IntegrationTestStatus.Ok: if printStdOut and output =? test.output: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOut + echo output.stdOut.colorise test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgGreen) From 494a3b9244a62d996b6db78e5a3bedfc9c1f87b8 Mon Sep 17 00:00:00 2001 From: Slava <20563034+veaceslavdoina@users.noreply.github.com> Date: Fri, 21 Feb 2025 18:23:08 +0200 Subject: [PATCH 085/178] ci: check runner for parallel integration tests and use value from vars --- .github/workflows/ci-reusable.yml | 52 ++++++++++++++++++++++++++----- .github/workflows/ci.yml | 19 ++++++++--- 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index b1249eef79..0fbc7e37af 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -43,6 +43,46 @@ jobs: nim_version: ${{ matrix.nim_version }} coverage: false + - name: Check runner resources for parallel integration tests + run: | + echo "Determining runner" + case "${{ matrix.os }}" in + linux) CPU=$(nproc --all) + RAM=$(awk '/MemTotal/ {print int($2 / 1024 / 1024 + 0.5)}' /proc/meminfo) + ;; + macos) CPU=$(sysctl -n hw.ncpu) + RAM=$(sysctl -n hw.memsize | awk '{print $0/1073741824}') + sysctl -n hw.ncpu + ;; + windows) CPU=$NUMBER_OF_PROCESSORS + RAM=$(systeminfo | awk '/Total Physical Memory:/ { gsub(/,/,"."); print int($4 + 0.5) }') + ;; + *) CPU=2 + RAM=8 + echo "Unknown runner" + ;; + esac + echo "CPU=${CPU}" >> $GITHUB_ENV + echo "RAM=${RAM}" >> $GITHUB_ENV + echo "TYPE=${RUNNER_ENVIRONMENT}" >> $GITHUB_ENV + + # Set PARALLEL=1 if the runner has enough resources + if [[ ("${{ matrix.os }}" == "linux" || "${{ matrix.os }}" == "windows") && "${CPU}" -ge 16 ]]; then + echo "PARALLEL=1" >> $GITHUB_ENV + elif [[ "${{ matrix.os }}" == "macos" && "${CPU}" -ge 6 ]]; then + echo "PARALLEL=1" >> $GITHUB_ENV + else + echo "PARALLEL=0" >> $GITHUB_ENV + fi + + - name: Show runner information + run: | + echo "OS: ${{ matrix.os }}" + echo "CPU: ${{ env.CPU }}" + echo "RAM: ${{ env.RAM }} GB" + echo "TYPE: ${{ env.TYPE }}" + echo "PARALLEL: ${{ env.PARALLEL }}" + ## Part 1 Tests ## - name: Unit tests if: matrix.tests == 'unittest' || matrix.tests == 'all' @@ -54,7 +94,7 @@ jobs: node-version: 20 - name: Install Ethereum node dependencies - if: matrix.tests == 'contract' || matrix.tests == 'integration' || matrix.tests == 'integration-parallel' || matrix.tests == 'tools' || matrix.tests == 'all' + if: matrix.tests == 'contract' || matrix.tests == 'integration' || matrix.tests == 'tools' || matrix.tests == 'all' working-directory: vendor/codex-contracts-eth env: MSYS2_PATH_TYPE: inherit @@ -77,17 +117,13 @@ jobs: ## Part 3 Tests ## - name: Integration tests if: matrix.tests == 'integration' || matrix.tests == 'all' - run: make -j${ncpu} PARALLEL=0 testIntegration - - - name: Parallel integration tests - if: matrix.tests == 'integration-parallel' - run: make -j${ncpu} DEBUG=${{ runner.debug }} testIntegration + run: make -j${ncpu} PARALLEL=${{ env.PARALLEL }} DEBUG=${{ runner.debug }} testIntegration - name: Upload integration tests log files uses: actions/upload-artifact@v4 - if: (matrix.tests == 'integration' || matrix.tests == 'integration-parallel' || matrix.tests == 'all') && always() + if: (matrix.tests == 'integration' || matrix.tests == 'all') && always() with: - name: ${{ matrix.os }}-${{ matrix.cpu }}-${{ matrix.nim_version }}-integration-tests-logs + name: ${{ matrix.os }}-${{ matrix.cpu }}-${{ matrix.nim_version }}-${{ matrix.tests }}-tests-logs path: tests/integration/logs/ retention-days: 1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fcd6e2a020..74875a0233 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,10 @@ on: env: cache_nonce: 0 # Allows for easily busting actions/cache caches nim_version: v2.2.4 + builder_integration_from_vars: true + builder_integration_linux: runner-node-01-linux-03-eu-hel1 + builder_integration_macos: macos-14-large + builder_integration_windows: windows-latest-amd64-32vcpu concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} @@ -17,20 +21,27 @@ concurrency: jobs: matrix: + name: Compute matrix runs-on: ubuntu-latest outputs: matrix: ${{ steps.matrix.outputs.matrix }} cache_nonce: ${{ env.cache_nonce }} steps: + - name: Compute builders + if: ${{ env.builder_integration_from_vars == 'true' }} + run: | + if [[ -n "${{ vars.builder_integration_linux }}" ]]; then echo "builder_integration_linux=${{ vars.builder_integration_linux }}"; fi >> $GITHUB_ENV + if [[ -n "${{ vars.builder_integration_macos }}" ]]; then echo "builder_integration_macos=${{ vars.builder_integration_macos }}"; fi >> $GITHUB_ENV + if [[ -n "${{ vars.builder_integration_windows }}" ]]; then echo "builder_integration_windows=${{ vars.builder_integration_windows }}"; fi >> $GITHUB_ENV + - name: Compute matrix id: matrix uses: fabiocaccamo/create-matrix-action@v5 with: matrix: | - os {linux}, cpu {amd64}, builder {runner-node-01-linux-03-eu-hel1}, tests {integration-parallel}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {amd64}, builder {macos-14-large}, tests {integration-parallel}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {windows}, cpu {amd64}, builder {windows-latest-amd64-32vcpu}, tests {integration-parallel}, nim_version {${{ env.nim_version }}}, shell {msys2} - + os {linux}, cpu {amd64}, builder {${{ env.builder_integration_linux }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {amd64}, builder {${{ env.builder_integration_macos }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {windows}, cpu {amd64}, builder {${{ env.builder_integration_windows }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} From b9e3e07dc1e9b4df5574ea7bca9d0deaf00eae38 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 4 Mar 2025 13:05:03 +1100 Subject: [PATCH 086/178] filter out log topics that are making too much noise - set disabled topics during codex compilation due to lack of support for disabling chronicles topics at runtime in codex - ensure that TRACE logs are set for nodes running in multinodesuite when DebugCodexNodes is set - add TRACE loglevel to testcli --- build.nims | 4 ++-- codex/logutils.nim | 3 +++ tests/integration/multinodes.nim | 2 ++ tests/integration/testcli.nim | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/build.nims b/build.nims index e2581ceb0c..14ffeb7da9 100644 --- a/build.nims +++ b/build.nims @@ -50,7 +50,7 @@ task testContracts, "Build & run Codex Contract tests": task testIntegration, "Run integration tests": buildBinary "codex", params = - "-d:chronicles_runtime_filtering -d:chronicles_log_level=TRACE -d:codex_enable_proof_failures=true" + "-d:chronicles_runtime_filtering -d:chronicles_log_level=TRACE -d:chronicles_disabled_topics=JSONRPC-HTTP-CLIENT,websock,libp2p,discv5 -d:codex_enable_proof_failures=true" var testParams = "" for i in 2 ..< paramCount(): if "DebugTestHarness" in paramStr(i) and truthy paramStr(i).split('=')[1]: @@ -59,7 +59,7 @@ task testIntegration, "Run integration tests": test "testIntegration", params = testParams # use params to enable logging from the integration test executable # test "testIntegration", params = "-d:chronicles_sinks=textlines[notimestamps,stdout],textlines[dynamic] " & - # "-d:chronicles_enabled_topics:integration:TRACE" + # "-d:chronicles_enabled_topics:integration:TRACE" task build, "build codex binary": codexTask() diff --git a/codex/logutils.nim b/codex/logutils.nim index e9604aba38..0d10b0fbbb 100644 --- a/codex/logutils.nim +++ b/codex/logutils.nim @@ -92,6 +92,7 @@ import std/sugar import std/typetraits import pkg/chronicles except toJson, `%` +from pkg/chronos import TransportAddress from pkg/libp2p import Cid, MultiAddress, `$` import pkg/questionable import pkg/questionable/results @@ -255,3 +256,5 @@ formatIt(LogFormat.textLines, array[32, byte]): it.short0xHexLog formatIt(LogFormat.json, array[32, byte]): it.to0xHex +formatIt(TransportAddress): + $it diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index d047617aa0..269eb6d178 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -187,6 +187,8 @@ template multinodesuite*(name: string, body: untyped) = if DebugCodexNodes: config.debugEnabled = true + config.addCliOption("--log-level", $LogLevel.TRACE) + var apiPort, discPort: int withLock(codexPortLock): apiPort = await nextFreePort(lastUsedCodexApiPort + nodeIdx) diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index 0ea4aca997..f768e84fb0 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -40,7 +40,8 @@ asyncchecksuite "Command line interface": currentTestName, "Client", some nodeCount mod testCount, - ) + ), + "--log-level=" & $LogLevel.TRACE, ] else: return args From 595e1d3fdbcf647f3c81cf8dbb83b308d5325911 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 4 Mar 2025 13:11:38 +1100 Subject: [PATCH 087/178] Ensure started tests are torn down properly on timeout --- tests/integration/multinodes.nim | 11 +- tests/integration/testmanager.nim | 182 +++++++++++++++--------------- tests/testIntegration.nim | 45 ++++---- 3 files changed, 120 insertions(+), 118 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 269eb6d178..3e3b21be1e 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -334,7 +334,11 @@ template multinodesuite*(name: string, body: untyped) = try: tryBody except CancelledError as e: - raise e + await teardownImpl() + when declared(teardownAllIMPL): + teardownAllIMPL() + fail() + quit(1) except CatchableError as er: fatal message, error = er.msg echo "[FATAL] ", message, ": ", er.msg @@ -372,10 +376,7 @@ template multinodesuite*(name: string, body: untyped) = try: let node = await noCancel startHardhatNode(conf) running.add RunningNode(role: Role.Hardhat, node: node) - except CancelledError as e: - # should not happen because of noCancel, but added for clarity - raise e - except CatchableError as e: + except CatchableError as e: # CancelledError not raised due to noCancel echo "failed to start hardhat node" fail() quit(1) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 7d415e9f5b..f938cdabcd 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -274,14 +274,14 @@ proc printResult( test.printOutputMarker(MarkerPosition.Finish, "test harness errors") of IntegrationTestStatus.Failed: if output =? test.output: - if printStdErr: #manager.debugTestHarness + if printStdErr: test.printOutputMarker(MarkerPosition.Start, "test file errors (stderr)") echo output.stdErr test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") - # if printStdOut: - test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOut.colorise - test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") + if printStdOut: + test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") + echo output.stdOut.colorise + test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgRed) of IntegrationTestStatus.Timeout: if printStdOut and output =? test.output: @@ -386,27 +386,65 @@ proc setup( return hardhat -proc teardown( - test: IntegrationTest, hardhat: ?Hardhat -) {.async: (raises: [CancelledError]).} = - if test.config.startHardhat and hardhat =? hardhat and not hardhat.process.isNil: +proc teardownHardhat(test: IntegrationTest, hardhat: Hardhat) {.async: (raises: []).} = + try: + trace "Stopping hardhat", name = test.config.name + await noCancel hardhat.process.stop() + trace "Hardhat stopped", name = test.config.name + except CatchableError as e: # CancelledError not raised due to noCancel + warn "Failed to stop hardhat node, continuing", + error = e.msg, test = test.config.name + + if test.manager.debugHardhat: + test.printOutputMarker(MarkerPosition.Start, "Hardhat stdout") + for line in hardhat.output: + echo line + test.printOutputMarker(MarkerPosition.Finish, "Hardhat stdout") + + test.manager.hardhats.keepItIf(it != hardhat) + +proc teardownTest( + test: IntegrationTest, + stdOutStream, stdErrStream: + Future[seq[byte]].Raising([CancelledError, AsyncStreamError]), +) {.async: (raises: []).} = + test.timeEnd = some Moment.now() + if test.status == IntegrationTestStatus.Ok: + info "Test completed", name = test.config.name, duration = test.duration + + if not test.process.isNil: + var output = test.output.expect("should have output value") + if test.process.running |? false: + try: + output.exitCode = + some (await noCancel test.process.terminateAndWaitForExit(500.millis)) + trace "Test process terminated", exitCode = output.exitCode + except AsyncProcessError, AsyncProcessTimeoutError: + warn "Test process failed to terminate, check for zombies" + try: - trace "Stopping hardhat", name = test.config.name - await hardhat.process.stop() - trace "Hardhat stopped", name = test.config.name - except CancelledError as e: - raise e - except CatchableError as e: - warn "Failed to stop hardhat node, continuing", - error = e.msg, test = test.config.name + output.stdOut = string.fromBytes(await noCancel stdOutStream) + output.stdErr = string.fromBytes(await noCancel stdErrStream) + test.output = success output + except AsyncStreamError as e: + test.timeEnd = some Moment.now() + error "Failed to read test process output stream", error = e.msg + test.output = TestOutput.failure(e) + test.status = IntegrationTestStatus.Error - if test.manager.debugHardhat: - test.printOutputMarker(MarkerPosition.Start, "Hardhat stdout") - for line in hardhat.output: - echo line - test.printOutputMarker(MarkerPosition.Finish, "Hardhat stdout") + await test.process.closeWait() + trace "Test process output streams closed" + +proc teardown( + test: IntegrationTest, + hardhat: ?Hardhat, + stdOutStream, stdErrStream: + Future[seq[byte]].Raising([CancelledError, AsyncStreamError]), +) {.async: (raises: []).} = + if test.config.startHardhat and hardhat =? hardhat and not hardhat.process.isNil: + await test.teardownHardhat(hardhat) - test.manager.hardhats.keepItIf(it != hardhat) + await test.teardownTest(stdOutStream, stdErrStream) proc untilTimeout( fut: InternalRaisesFuture, timeout: Duration @@ -417,8 +455,9 @@ proc untilTimeout( let timer = sleepAsync(timeout) defer: - # called even when exception raised - # race does not cancel its futures when it's cancelled + # Called even when exception raised, including CancelledError. `race` does + # not cancel its futures when it's cancelled, so cancel here, which is ok + # even if they're already completed. await fut.cancelAndWait() await timer.cancelAndWait() @@ -446,10 +485,12 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = try: createDir(test.logsDir) except CatchableError as e: + test.timeStart = some Moment.now() test.timeEnd = some Moment.now() test.status = IntegrationTestStatus.Error test.output = TestOutput.failure(e) error "failed to create test log dir", logDir = test.logsDir, error = e.msg + return test.timeStart = some Moment.now() test.status = IntegrationTestStatus.Running @@ -484,31 +525,18 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = test.status = IntegrationTestStatus.Error return - defer: - trace "Tearing down test" - await noCancel test.teardown(hardhat) - test.timeEnd = some Moment.now() - if test.status == IntegrationTestStatus.Ok: - info "Test completed", name = test.config.name, duration = test.duration - - if not test.process.isNil: - if test.process.running |? false: - var output = test.output.expect("should have output value") - trace "Terminating test process" - try: - output.exitCode = - some (await noCancel test.process.terminateAndWaitForExit(500.millis)) - test.output = success output - except AsyncProcessError, AsyncProcessTimeoutError: - warn "Test process failed to terminate, check for zombies" - - await test.process.closeWait() - + var output = TestOutput.new() + test.output = success(output) let outputReader = test.process.stdoutStream.read() let errorReader = test.process.stderrStream.read() - var output = TestOutput.new() - test.output = success(output) + defer: + # called at the end of successful runs but also when `start` is cancelled + # (from `untilTimeout`) due to a timeout. This defer runs first before + # `untilTimeout` exceptions are handled in `run` + await test.teardown(hardhat, outputReader, errorReader) + # doesn't raise CancelledError, so noCancel not needed + output.exitCode = try: some (await test.process.waitForExit(test.manager.testTimeout)) @@ -531,34 +559,6 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = else: IntegrationTestStatus.Failed - try: - output.stdOut = string.fromBytes(await outputReader) - output.stdErr = string.fromBytes(await errorReader) - except AsyncStreamError as e: - test.timeEnd = some Moment.now() - error "Failed to read test process output stream", error = e.msg - test.output = TestOutput.failure(e) - test.status = IntegrationTestStatus.Error - return - - # let processRunning = test.process.waitForExit(test.manager.testTimeout) - # trace "Running test until timeout", timeout = test.manager.testTimeout - # let completedBeforeTimeout = - # await processRunning.withTimeout(test.manager.testTimeout) - - # if completedBeforeTimeout: - - # else: # timed out - # test.timeEnd = some Moment.now() - # test.status = IntegrationTestStatus.Timeout - # error "Test timed out, terminating process" - # process will be terminated in defer - - # try: - # output.exitCode = some(await test.process.terminateAndWaitForExit(100.millis)) - # except AsyncProcessError, AsyncProcessTimeoutError: - # warn "Test process failed to terminate, check for zombies" - proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = ignoreCancelled: while true: @@ -570,7 +570,7 @@ proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = bgWhite, fgBlack, &"Integration tests status after {manager.duration}" for test in manager.tests: - test.printResult(false, false) + test.printSummary() if manager.tests.len > 0: echo "" @@ -585,13 +585,16 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = try: await futStart.untilTimeout(test.manager.testTimeout) except AsyncTimeoutError: - # if output =? test.output and output.exitCode.isNone: # timeout error "Test timed out" test.timeEnd = some Moment.now() test.status = IntegrationTestStatus.Timeout - # await futStart.cancelAndWait() + # futStart will be cancelled by untilTimeout and that will run the + # teardown procedure (in defer) - test.printResult() + test.printResult( + printStdOut = test.status != IntegrationTestStatus.Ok, + printStdErr = test.status == IntegrationTestStatus.Error, + ) proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = var testFutures: seq[Future[void]] @@ -647,7 +650,7 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].} = # because debug output can really make things hard to read, show a nice # summary of test results if showSummary: - test.printResult(false, false) + test.printSummary() # estimated time saved as serial execution with a single hardhat instance # incurs less overhead @@ -723,29 +726,26 @@ proc start*( manager.printResult() -proc stop*(manager: TestManager) {.async: (raises: [CancelledError]).} = - trace "[stop] START canelling tracked" +proc stop*(manager: TestManager) {.async: (raises: []).} = await manager.trackedFutures.cancelTracked() - trace "[stop] DONE cancelling tracked" - trace "[stop] stopping running processes" for test in manager.tests: - if not test.process.isNil and test.process.running |? false: + if not test.process.isNil: try: - trace "[stop] terminating process", name = test.config.name - discard await test.process.terminateAndWaitForExit(100.millis) + if test.process.running |? false: + discard await noCancel test.process.terminateAndWaitForExit(100.millis) + trace "Terminated running test process", name = test.config.name except AsyncProcessError, AsyncProcessTimeoutError: warn "Test process failed to terminate, ignoring...", name = test.config.name finally: - await test.process.closeWait() + trace "Closing test process' streams", name = test.config.name + await noCancel test.process.closeWait() - trace "[stop] stopping hardhats" for hardhat in manager.hardhats: try: - trace "[stop] stopping hardhat" if not hardhat.process.isNil: await noCancel hardhat.process.stop() + trace "Terminated running hardhat process" except CatchableError as e: trace "failed to stop hardhat node", error = e.msg - trace "[stop] done stopping hardhats" diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index c70dcdecb5..89b9a21773 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -55,32 +55,33 @@ proc run(): Future[bool] {.async: (raises: []).} = error "Failed to run test manager", error = e.msg return false except CancelledError: - return + return false finally: - trace "stopping test manager" - await noCancel manager.stop() - trace "test manager stopped" + trace "Stopping test manager" + await manager.stop() + trace "Test manager stopped" without wasSuccessful =? manager.allTestsPassed, error: raiseAssert "Failed to get test status: " & error.msg return wasSuccessful -when EnableParallelTests: - let wasSuccessful = waitFor run() - trace "[testIntegration] wasSuccessful", wasSuccessful - trace "[testIntegration] AFTER run" - if not wasSuccessful: - quit(QuitFailure) # indicate with a non-zero exit code that the tests failed -else: - # run tests serially - import ./integration/testcli - import ./integration/testrestapi - import ./integration/testupdownload - import ./integration/testsales - import ./integration/testpurchasing - import ./integration/testblockexpiration - import ./integration/testmarketplace - import ./integration/testproofs - import ./integration/testvalidator - import ./integration/testecbug +when isMainModule: + when EnableParallelTests: + let wasSuccessful = waitFor run() + if wasSuccessful: + quit(QuitSuccess) + else: + quit(QuitFailure) # indicate with a non-zero exit code that the tests failed + else: + # run tests serially + import ./integration/testcli + import ./integration/testrestapi + import ./integration/testupdownload + import ./integration/testsales + import ./integration/testpurchasing + import ./integration/testblockexpiration + import ./integration/testmarketplace + import ./integration/testproofs + import ./integration/testvalidator + import ./integration/testecbug From 0a4369d0cdc037c2e33cec63a146efa231f295d8 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:16:07 +1100 Subject: [PATCH 088/178] enable more logging to file - test harness chronicles logs to log file - test process stdout and stderr to log file for each integration test file Note: does not work when DEBUG=1 is not present in make command --- build.nims | 3 +- tests/integration/hardhatprocess.nim | 3 +- tests/integration/nodeprocess.nim | 5 +- tests/integration/testmanager.nim | 72 ++++++++++++++++------------ tests/integration/utils.nim | 13 +++++ tests/testIntegration.nim | 60 ++++++++++++++++++++++- 6 files changed, 117 insertions(+), 39 deletions(-) diff --git a/build.nims b/build.nims index 14ffeb7da9..d17283ebbc 100644 --- a/build.nims +++ b/build.nims @@ -54,7 +54,8 @@ task testIntegration, "Run integration tests": var testParams = "" for i in 2 ..< paramCount(): if "DebugTestHarness" in paramStr(i) and truthy paramStr(i).split('=')[1]: - testParams = "-d:chronicles_log_level=TRACE -d:chronicles_sinks=textlines[stdout]" + testParams = + "-d:chronicles_log_level=TRACE -d:chronicles_sinks=textlines[dynamic],json[dynamic],textlines[dynamic]" break test "testIntegration", params = testParams # use params to enable logging from the integration test executable diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index bc52d780b0..c8e0683598 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -77,8 +77,7 @@ method start*( let poptions = node.processOptions + {AsyncProcessOption.StdErrToStdOut} let args = @["node", "--export", "deployment-localhost.json"].concat(node.arguments) - trace "starting node", - args, executable, workingDir = node.workingDir, processOptions = poptions + trace "starting node", args, executable, workingDir = node.workingDir try: node.process = await startProcess( diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 3257bbfc12..e0a7413f7f 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -53,10 +53,7 @@ method start*(node: NodeProcess) {.base, async: (raises: [CancelledError]).} = let poptions = node.processOptions + {AsyncProcessOption.StdErrToStdOut} trace "starting node", - args = node.arguments, - executable = node.executable, - workingDir = node.workingDir, - processOptions = poptions + args = node.arguments, executable = node.executable, workingDir = node.workingDir try: if node.debug: diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index f938cdabcd..5e42f80040 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -6,6 +6,7 @@ from std/unicode import toUpper import std/unittest import pkg/chronos import pkg/chronos/asyncproc +import pkg/codex/conf import pkg/codex/logutils import pkg/codex/utils/trackedfutures import pkg/questionable @@ -66,9 +67,6 @@ type IntegrationTest = ref object manager: TestManager config: IntegrationTestConfig - # process: Future[CommandExResponse].Raising( - # [AsyncProcessError, AsyncProcessTimeoutError, CancelledError] - # ) process: AsyncProcessRef timeStart: ?Moment timeEnd: ?Moment @@ -124,9 +122,19 @@ template ignoreCancelled(body) = except CancelledError: discard +func logFile*(_: type TestManager, dir: string): string = + dir / "TestHarness.log" + +func logFile(manager: TestManager): string = + TestManager.logFile(manager.logsDir) + +func logFile(test: IntegrationTest, fileName: string): string = + test.logsDir / fileName + proc new*( _: type TestManager, configs: seq[IntegrationTestConfig], + logsDir: string, debugTestHarness = false, debugHardhat = false, debugCodexNodes = false, @@ -144,6 +152,7 @@ proc new*( showContinuousStatusUpdates: showContinuousStatusUpdates, testTimeout: testTimeout, trackedFutures: TrackedFutures.new(), + logsDir: logsDir, ) func init*( @@ -409,8 +418,6 @@ proc teardownTest( Future[seq[byte]].Raising([CancelledError, AsyncStreamError]), ) {.async: (raises: []).} = test.timeEnd = some Moment.now() - if test.status == IntegrationTestStatus.Ok: - info "Test completed", name = test.config.name, duration = test.duration if not test.process.isNil: var output = test.output.expect("should have output value") @@ -426,6 +433,11 @@ proc teardownTest( output.stdOut = string.fromBytes(await noCancel stdOutStream) output.stdErr = string.fromBytes(await noCancel stdErrStream) test.output = success output + test.logFile("stdout.log").appendFile(output.stdOut.stripAnsi) + if test.status == IntegrationTestStatus.Error: + test.logFile("stderr.log").appendFile(output.stdErr.stripAnsi) + except IOError as e: + warn "Failed to write test stdout and stderr to file", error = e.msg except AsyncStreamError as e: test.timeEnd = some Moment.now() error "Failed to read test process output stream", error = e.msg @@ -595,6 +607,25 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = printStdOut = test.status != IntegrationTestStatus.Ok, printStdErr = test.status == IntegrationTestStatus.Error, ) + logScope: + name = test.config.name + duration = test.duration + + case test.status + of IntegrationTestStatus.New: + raiseAssert "Test has completed, but is in the New state" + of IntegrationTestStatus.Running: + raiseAssert "Test has completed, but is in the Running state" + of IntegrationTestStatus.Error: + error "Test errored", + error = test.output.errorOption .? msg, + stack = test.output.errorOption .? getStackTrace() + of IntegrationTestStatus.Failed: + error "Test failed" + of IntegrationTestStatus.Timeout: + error "Test timed out" + of IntegrationTestStatus.Ok: + notice "Test passed" proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = var testFutures: seq[Future[void]] @@ -603,6 +634,7 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = echoStyled styleBright, bgWhite, fgBlack, "\n[Integration Test Manager] Starting parallel integration tests" + notice "[Integration Test Manager] Starting parallel integration tests" for config in manager.configs: var test = @@ -685,35 +717,14 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].} = resetStyle, " |" echo "▢=====================================================================▢" + notice "INTEGRATION TEST SUMMARY", + totalTime = manager.duration, + timeSavedEst = &"{relativeTimeSaved}%", + passing = &"{successes} / {manager.tests.len}" proc start*( manager: TestManager ) {.async: (raises: [CancelledError, TestManagerError]).} = - try: - if manager.debugCodexNodes: - let startTime = now().format("yyyy-MM-dd'_'HH:mm:ss") - let logsDir = - currentSourcePath.parentDir() / "logs" / - sanitize(startTime & "__IntegrationTests") - createDir(logsDir) - manager.logsDir = logsDir - #!fmt: off - echoStyled bgWhite, fgBlack, styleBright, - "\n\n ", - styleUnderscore, - "ℹ️ LOGS AVAILABLE ℹ️\n\n", - resetStyle, bgWhite, fgBlack, styleBright, - """ Logs for this run will be available at:""", - resetStyle, bgWhite, fgBlack, - &"\n\n {logsDir}\n\n", - resetStyle, bgWhite, fgBlack, styleBright, - " NOTE: For CI runs, logs will be attached as artefacts\n" - #!fmt: on - except IOError as e: - raiseTestManagerError "failed to create hardhat log directory: " & e.msg, e - except OSError as e: - raiseTestManagerError "failed to create hardhat log directory: " & e.msg, e - if manager.showContinuousStatusUpdates: let fut = manager.continuallyShowUpdates() manager.trackedFutures.track fut @@ -748,4 +759,3 @@ proc stop*(manager: TestManager) {.async: (raises: []).} = trace "Terminated running hardhat process" except CatchableError as e: trace "failed to stop hardhat node", error = e.msg - diff --git a/tests/integration/utils.nim b/tests/integration/utils.nim index bcdff4ed94..4ce8fcdaf6 100644 --- a/tests/integration/utils.nim +++ b/tests/integration/utils.nim @@ -51,3 +51,16 @@ proc getLogFile*( let fileName = logsDir / fn return fileName + +proc appendFile*(filename: string, content: string) {.raises: [IOError].} = + ## Opens a file named `filename` for writing. Then writes the + ## `content` completely to the file and closes the file afterwards. + ## Raises an IO exception in case of an error. + var f: File + try: + f = open(filename, fmAppend) + f.write(content) + except IOError as e: + raise newException(IOError, "cannot open and write " & filename & ": " & e.msg) + finally: + close(f) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 89b9a21773..49b0f3a9ef 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -34,14 +34,72 @@ const DebugCodexNodes {.booldefine.} = false # Shows test status updates at time intervals. Useful for running locally with # active terminal interaction. Set to false for unattended runs, eg CI. const ShowContinuousStatusUpdates {.booldefine.} = false -# Timeout duration (in mimutes) for EACH integration test file. +# Timeout duration (in minutes) for EACH integration test file. const TestTimeout {.intdefine.} = 60 const EnableParallelTests {.booldefine.} = true +proc setupLogging(logFile: string, debugTestHarness: bool) = + when defaultChroniclesStream.outputs.type.arity != 3: + raiseAssert "Logging configuration options not enabled in the current build" + else: + proc writeAndFlush(f: File, msg: LogOutputStr) = + try: + f.write(msg) + f.flushFile() + except IOError as err: + logLoggingFailure(cstring(msg), err) + + proc noOutput(logLevel: LogLevel, msg: LogOutputStr) = + discard + + proc stdoutFlush(logLevel: LogLevel, msg: LogOutputStr) = + writeAndFlush(stdout, msg) + + proc fileFlush(logLevel: LogLevel, msg: LogOutputStr) = + try: + logFile.appendFile(stripAnsi(msg)) + except IOError as error: + fatal "Failed to write to log file", error = error.msg # error = error.ioErrorMsg + raiseAssert "Could not write to test manager log file: " & error.msg + + defaultChroniclesStream.outputs[0].writer = stdoutFlush + defaultChroniclesStream.outputs[1].writer = noOutput + if debugTestHarness: + defaultChroniclesStream.outputs[2].writer = fileFlush + else: + defaultChroniclesStream.outputs[2].writer = noOutput + proc run(): Future[bool] {.async: (raises: []).} = + let startTime = now().format("yyyy-MM-dd'_'HH:mm:ss") + let logsDir = + currentSourcePath.parentDir() / "integration" / "logs" / + sanitize(startTime & "__IntegrationTests") + try: + if DebugTestHarness or DebugHardhat or DebugCodexNodes: + createDir(logsDir) + #!fmt: off + styledEcho bgWhite, fgBlack, styleBright, + "\n\n ", + styleUnderscore, + "ℹ️ LOGS AVAILABLE ℹ️\n\n", + resetStyle, bgWhite, fgBlack, styleBright, + """ Logs for this run will be available at:""", + resetStyle, bgWhite, fgBlack, + &"\n\n {logsDir}\n\n", + resetStyle, bgWhite, fgBlack, styleBright, + " NOTE: For CI runs, logs will be attached as artefacts\n" + #!fmt: on + except IOError as e: + raiseAssert "Failed to create log directory and echo log message: " & e.msg + except OSError as e: + raiseAssert "Failed to create log directory and echo log message: " & e.msg + + setupLogging(TestManager.logFile(logsDir), DebugTestHarness) + let manager = TestManager.new( configs = TestConfigs, + logsDir, DebugTestHarness, DebugHardhat, DebugCodexNodes, From eb77643405f1e0afc6f27ed21d2f7136051b4c26 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Mar 2025 15:49:08 +1100 Subject: [PATCH 089/178] refactor: debug and logging - Move test manager values to config object - Increase codex port separation (between api and disc ports) in an attempt to prevent overlap across tests (ie Test1: api=8000(tcp), disc=9000(udp), and Test2: api=9000(tcp), disc=10000(udp)) - print stderr when exitcode == 1 if there's < 3 lines of stdout - Logging: - Always write test manager harness chronicles logs to file, ie testmanager.chronicles.log in the root of the `integration/logs/` dir - Always write individual test stdout to file, ie `.stdout.log` in the root of the `integration/logs//` dir - On error, print stderr to screen and write stderr to file. Or on failure, if stdout is sufficiently short, write stderr to screen and file in `integration/logs///.stderr.log` - When debugging, ie DebugCodexNodes == true - Removes DebugTestHarness from controlling anything other than printing chronicles output from the testmanager to the terminal - Now, if DebugCodexNodes is set to true: - Codex node (chronicles) output for multinodesuite tests is logged to file, eg `integration/logs////_.log` - Codex chronicles output is logged to stdout, which also written to file (see above) --- build.nims | 7 +- tests/integration/multinodes.nim | 19 ++-- tests/integration/testecbug.nim | 5 +- tests/integration/testmanager.nim | 168 +++++++++++++--------------- tests/integration/testvalidator.nim | 14 ++- tests/testIntegration.nim | 70 +++++------- 6 files changed, 127 insertions(+), 156 deletions(-) diff --git a/build.nims b/build.nims index d17283ebbc..69596e011a 100644 --- a/build.nims +++ b/build.nims @@ -51,12 +51,13 @@ task testIntegration, "Run integration tests": buildBinary "codex", params = "-d:chronicles_runtime_filtering -d:chronicles_log_level=TRACE -d:chronicles_disabled_topics=JSONRPC-HTTP-CLIENT,websock,libp2p,discv5 -d:codex_enable_proof_failures=true" - var testParams = "" + var sinks = @["textlines[nocolors,file]"] for i in 2 ..< paramCount(): if "DebugTestHarness" in paramStr(i) and truthy paramStr(i).split('=')[1]: - testParams = - "-d:chronicles_log_level=TRACE -d:chronicles_sinks=textlines[dynamic],json[dynamic],textlines[dynamic]" + sinks.add "textlines[stdout]" break + var testParams = + "-d:chronicles_log_level=TRACE -d:chronicles_sinks=\"" & sinks.join(",") & "\"" test "testIntegration", params = testParams # use params to enable logging from the integration test executable # test "testIntegration", params = "-d:chronicles_sinks=textlines[notimestamps,stdout],textlines[dynamic] " & diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 3e3b21be1e..8cb0710f59 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -104,7 +104,6 @@ template multinodesuite*(name: string, body: untyped) = var lastUsedCodexApiPort = CodexApiPort var lastUsedCodexDiscPort = CodexDiscPort var codexPortLock: AsyncLock - var futTimeout: Future[void] template test(tname, startNodeConfigs, tbody) = currentTestName = tname @@ -186,7 +185,6 @@ template multinodesuite*(name: string, body: untyped) = ) if DebugCodexNodes: - config.debugEnabled = true config.addCliOption("--log-level", $LogLevel.TRACE) var apiPort, discPort: int @@ -361,15 +359,14 @@ template multinodesuite*(name: string, body: untyped) = raiseMultiNodeSuiteError "Failed to get node info: " & e.msg, e setupAll: - proc raiseOnTimeout() {.async: (raises: [CancelledError, SuiteTimeoutError]).} = - await sleepAsync(chronos.seconds(10)) - raise newException(SuiteTimeoutError, "suite timed out") - - failAndTeardownOnError "suite timed out": - futTimeout = raiseOnTimeout() - - teardownAll: - await futTimeout.cancelAndWait() + # When this file is run with `-d:chronicles_sinks=textlines[file]`, we + # need to set the log file path at runtime, otherwise chronicles didn't seem to + # create a log file even when using an absolute path + when defaultChroniclesStream.outputs is (FileOutput,) and LogsDir.len > 0: + let logFile = + LogsDir / sanitize(getAppFilename().extractFilename & ".chronicles.log") + let success = defaultChroniclesStream.outputs[0].open(logFile, fmAppend) + doAssert success, "Failed to open log file: " & logFile setup: if var conf =? nodeConfigs.hardhat: diff --git a/tests/integration/testecbug.nim b/tests/integration/testecbug.nim index 6b86fd29a5..be15219715 100644 --- a/tests/integration/testecbug.nim +++ b/tests/integration/testecbug.nim @@ -10,9 +10,10 @@ marketplacesuite "Bug #821 - node crashes during erasure coding": clients: CodexConfigs .init(nodes = 1) # .debug() # uncomment to enable console log output.debug() - .withLogFile() + # .withLogFile() # uncomment to output log file to tests/integration/logs/ //_.log - .withLogTopics("node", "erasure", "marketplace").some, + # .withLogTopics("node", "erasure", "marketplace") + .some, providers: CodexConfigs.init(nodes = 0).some, ): let diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 5e42f80040..365f7c8f82 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -21,32 +21,31 @@ type output: seq[string] port: int + TestManagerConfig* = object # Echoes stdout from Hardhat process + debugHardhat*: bool + # Echoes stdout from the integration test file process. Codex process logs + # can also be output if a test uses a multinodesuite, requires + # CodexConfig.debug to be enabled + debugCodexNodes*: bool + # Shows test status updates at regular time intervals. Useful for running + # locally while attended. Set to false for unattended runs, eg CI. + showContinuousStatusUpdates*: bool + logsDir*: string + testTimeout*: Duration # individual test timeout + TestManager* = ref object - configs: seq[IntegrationTestConfig] + config: TestManagerConfig + testConfigs: seq[IntegrationTestConfig] tests: seq[IntegrationTest] hardhats: seq[Hardhat] lastHardhatPort: int lastCodexApiPort: int lastCodexDiscPort: int - # Echoes stderr if there's a test failure (eg test failed, compilation - # error) or error (eg test manager error) - debugTestHarness: bool - # Echoes stdout from Hardhat process - debugHardhat: bool - # Echoes stdout from the integration test file process. Codex process logs - # can also be output if a test uses a multinodesuite, requires - # CodexConfig.debug to be enabled - debugCodexNodes: bool - # Shows test status updates at regular time intervals. Useful for running - # locally while attended. Set to false for unattended runs, eg CI. - showContinuousStatusUpdates: bool - logsDir: string timeStart: ?Moment timeEnd: ?Moment codexPortLock: AsyncLock hardhatPortLock: AsyncLock hardhatProcessLock: AsyncLock - testTimeout: Duration # individual test timeout trackedFutures: TrackedFutures IntegrationTestConfig* = object @@ -123,36 +122,34 @@ template ignoreCancelled(body) = discard func logFile*(_: type TestManager, dir: string): string = - dir / "TestHarness.log" + dir / "testmanager.chronicles.log" func logFile(manager: TestManager): string = - TestManager.logFile(manager.logsDir) + TestManager.logFile(manager.config.logsDir) func logFile(test: IntegrationTest, fileName: string): string = - test.logsDir / fileName + let testName = sanitize(test.config.name) + test.logsDir / &"{testName}.{fileName}" + +func isErrorLike(output: ?!TestOutput): bool = + # Three lines is an arbitrary number, however it takes into account the + # "LevelDB already build" line and blank line that is output to stdout. This + # typically means that the exitCode == 1 (test failed) and if stdout is short, + # we're dealing with an error + o =? output and o.stdOut.countLines() < 3 proc new*( _: type TestManager, - configs: seq[IntegrationTestConfig], - logsDir: string, - debugTestHarness = false, - debugHardhat = false, - debugCodexNodes = false, - showContinuousStatusUpdates = false, - testTimeout = 60.minutes, + config: TestManagerConfig, + testConfigs: seq[IntegrationTestConfig], ): TestManager = TestManager( - configs: configs, + config: config, + testConfigs: testConfigs, lastHardhatPort: 8545, lastCodexApiPort: 8000, - lastCodexDiscPort: 9000, - debugTestHarness: debugTestHarness, - debugHardhat: debugHardhat, - debugCodexNodes: debugCodexNodes, - showContinuousStatusUpdates: showContinuousStatusUpdates, - testTimeout: testTimeout, + lastCodexDiscPort: 18000, # keep separated by 10000 to minimise overlap trackedFutures: TrackedFutures.new(), - logsDir: logsDir, ) func init*( @@ -212,7 +209,7 @@ proc startHardhat( args.add("--port") args.add($port) - if test.manager.debugHardhat: + if test.manager.config.debugHardhat: args.add("--log-file=" & test.logsDir / "hardhat.log") trace "starting hardhat process on port ", port @@ -264,11 +261,7 @@ proc colorise(output: string): string = for (text, colour) in replacements: result = result.replace(text, text.setColour(colour)) -proc printResult( - test: IntegrationTest, - printStdOut = test.manager.debugCodexNodes, - printStdErr = test.manager.debugTestHarness, -) = +proc printResult(test: IntegrationTest, printStdOut, printStdErr: bool) = case test.status of IntegrationTestStatus.New: test.printResult(fgBlue) @@ -281,12 +274,17 @@ proc printResult( echo "Error during test execution: ", error.msg echo "Stacktrace: ", error.getStackTrace() test.printOutputMarker(MarkerPosition.Finish, "test harness errors") - of IntegrationTestStatus.Failed: if output =? test.output: if printStdErr: test.printOutputMarker(MarkerPosition.Start, "test file errors (stderr)") echo output.stdErr test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") + of IntegrationTestStatus.Failed: + if output =? test.output: + if printStdErr or test.output.isErrorLike: + test.printOutputMarker(MarkerPosition.Start, "test file errors (stderr)") + echo output.stdErr + test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") if printStdOut: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") echo output.stdOut.colorise @@ -315,26 +313,12 @@ proc printStart(test: IntegrationTest) = proc buildCommand( test: IntegrationTest, hardhatPort: ?int ): Future[string] {.async: (raises: [CancelledError, TestManagerError]).} = - var logging = string.none - if test.manager.debugTestHarness: - #!fmt: off - logging = some( - "-d:chronicles_log_level=TRACE " & - "-d:chronicles_disabled_topics=websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT " & - "-d:chronicles_default_output_device=stdout " & - "-d:chronicles_sinks=textlines") - #!fmt: on - var hhPort = string.none if test.config.startHardhat: without port =? hardhatPort: raiseTestManagerError "hardhatPort required when 'config.startHardhat' is true" hhPort = some "-d:HardhatPort=" & $port - var logDir = string.none - if test.manager.debugCodexNodes: - logDir = some "-d:LogsDir=" & test.logsDir - var testFile: string try: testFile = absolutePath( @@ -362,12 +346,16 @@ proc buildCommand( "nim c " & &"-d:CodexApiPort={apiPort} " & &"-d:CodexDiscPort={discPort} " & - &"-d:DebugCodexNodes={test.manager.debugCodexNodes} " & - &"-d:DebugHardhat={test.manager.debugHardhat} " & - (logDir |? "") & " " & + &"-d:DebugCodexNodes={test.manager.config.debugCodexNodes} " & + &"-d:DebugHardhat={test.manager.config.debugHardhat} " & + &"-d:LogsDir={test.logsDir} " & (hhPort |? "") & " " & &"-d:TestId={test.testId} " & - (logging |? "") & " " & + # Log multinodes chronicles logs to file. If DebugCodexNodes is also + # enabled, the chronicles output will also get logged to stdout. + "-d:chronicles_log_level=TRACE " & + "-d:chronicles_disabled_topics=websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT " & + "-d:chronicles_sinks=textlines[nocolors,file] " & "--verbosity:0 " & "--hints:off " & "-d:release " & @@ -376,8 +364,8 @@ proc buildCommand( #!fmt: on except ValueError as parent: raiseTestManagerError "bad command --\n" & ", apiPort: " & $apiPort & - ", discPort: " & $discPort & ", logging: " & logging |? "" & ", testFile: " & - testFile & ", error: " & parent.msg, parent + ", discPort: " & $discPort & ", testFile: " & testFile & ", error: " & + parent.msg, parent proc setup( test: IntegrationTest @@ -404,7 +392,7 @@ proc teardownHardhat(test: IntegrationTest, hardhat: Hardhat) {.async: (raises: warn "Failed to stop hardhat node, continuing", error = e.msg, test = test.config.name - if test.manager.debugHardhat: + if test.manager.config.debugHardhat: test.printOutputMarker(MarkerPosition.Start, "Hardhat stdout") for line in hardhat.output: echo line @@ -434,7 +422,7 @@ proc teardownTest( output.stdErr = string.fromBytes(await noCancel stdErrStream) test.output = success output test.logFile("stdout.log").appendFile(output.stdOut.stripAnsi) - if test.status == IntegrationTestStatus.Error: + if test.status == IntegrationTestStatus.Error or test.output.isErrorLike: test.logFile("stderr.log").appendFile(output.stdErr.stripAnsi) except IOError as e: warn "Failed to write test stdout and stderr to file", error = e.msg @@ -492,17 +480,17 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = trace "Running test" - if test.manager.debugCodexNodes: - test.logsDir = test.manager.logsDir / sanitize(test.config.name) - try: - createDir(test.logsDir) - except CatchableError as e: - test.timeStart = some Moment.now() - test.timeEnd = some Moment.now() - test.status = IntegrationTestStatus.Error - test.output = TestOutput.failure(e) - error "failed to create test log dir", logDir = test.logsDir, error = e.msg - return + # if test.manager.config.debugCodexNodes: + test.logsDir = test.manager.config.logsDir / sanitize(test.config.name) + try: + createDir(test.logsDir) + except CatchableError as e: + test.timeStart = some Moment.now() + test.timeEnd = some Moment.now() + test.status = IntegrationTestStatus.Error + test.output = TestOutput.failure(e) + error "failed to create test log dir", logDir = test.logsDir, error = e.msg + return test.timeStart = some Moment.now() test.status = IntegrationTestStatus.Running @@ -520,7 +508,7 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = return trace "Starting parallel integration test", - command = test.command, timeout = test.manager.testTimeout + command = test.command, timeout = test.manager.config.testTimeout test.printStart() try: test.process = await startProcess( @@ -551,12 +539,12 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = output.exitCode = try: - some (await test.process.waitForExit(test.manager.testTimeout)) + some (await test.process.waitForExit(test.manager.config.testTimeout)) except AsyncProcessTimeoutError as e: test.timeEnd = some Moment.now() test.status = IntegrationTestStatus.Timeout error "Test process failed to exit before timeout", - timeout = test.manager.testTimeout + timeout = test.manager.config.testTimeout return except AsyncProcessError as e: test.timeEnd = some Moment.now() @@ -568,8 +556,10 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = test.status = if output.exitCode == some QuitSuccess: IntegrationTestStatus.Ok - else: + elif output.exitCode == some QuitFailure: IntegrationTestStatus.Failed + else: + IntegrationTestStatus.Error proc continuallyShowUpdates(manager: TestManager) {.async: (raises: []).} = ignoreCancelled: @@ -595,7 +585,7 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = # await futStart try: - await futStart.untilTimeout(test.manager.testTimeout) + await futStart.untilTimeout(test.manager.config.testTimeout) except AsyncTimeoutError: error "Test timed out" test.timeEnd = some Moment.now() @@ -618,10 +608,11 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = raiseAssert "Test has completed, but is in the Running state" of IntegrationTestStatus.Error: error "Test errored", + exitCode = test.output.option .? exitCode, error = test.output.errorOption .? msg, stack = test.output.errorOption .? getStackTrace() of IntegrationTestStatus.Failed: - error "Test failed" + error "Test failed", exitCode = test.output.option .? exitCode of IntegrationTestStatus.Timeout: error "Test timed out" of IntegrationTestStatus.Ok: @@ -634,9 +625,10 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = echoStyled styleBright, bgWhite, fgBlack, "\n[Integration Test Manager] Starting parallel integration tests" - notice "[Integration Test Manager] Starting parallel integration tests" + notice "[Integration Test Manager] Starting parallel integration tests", + config = manager.config - for config in manager.configs: + for config in manager.testConfigs: var test = IntegrationTest(manager: manager, config: config, testId: $uint16.example) manager.tests.add test @@ -667,13 +659,8 @@ proc withBorder( proc printResult(manager: TestManager) {.raises: [TestManagerError].} = var successes = 0 var totalDurationSerial: Duration - let showSummary = - manager.debugCodexNodes or manager.debugHardhat or manager.debugTestHarness - - if showSummary: - echo "" - echoStyled styleBright, - styleUnderscore, bgWhite, fgBlack, &"INTEGRATION TESTS RESULT" + echo "" + echoStyled styleBright, styleUnderscore, bgWhite, fgBlack, &"INTEGRATION TESTS RESULT" for test in manager.tests: totalDurationSerial += test.duration @@ -681,8 +668,7 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].} = inc successes # because debug output can really make things hard to read, show a nice # summary of test results - if showSummary: - test.printSummary() + test.printSummary() # estimated time saved as serial execution with a single hardhat instance # incurs less overhead @@ -725,7 +711,7 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].} = proc start*( manager: TestManager ) {.async: (raises: [CancelledError, TestManagerError]).} = - if manager.showContinuousStatusUpdates: + if manager.config.showContinuousStatusUpdates: let fut = manager.continuallyShowUpdates() manager.trackedFutures.track fut asyncSpawn fut diff --git a/tests/integration/testvalidator.nim b/tests/integration/testvalidator.nim index 0d1a50e808..4339bdbb7a 100644 --- a/tests/integration/testvalidator.nim +++ b/tests/integration/testvalidator.nim @@ -64,9 +64,10 @@ marketplacesuite "Validation": clients: CodexConfigs .init(nodes = 1) # .debug() # uncomment to enable console log output - .withLogFile() + # .withLogFile() # uncomment to output log file to tests/integration/logs/ //_.log - .withLogTopics("purchases", "onchain").some, + # .withLogTopics("purchases", "onchain") + .some, providers: CodexConfigs .init(nodes = 1) .withSimulateProofFailures(idx = 0, failEveryNProofs = 1) @@ -80,9 +81,9 @@ marketplacesuite "Validation": .withValidationGroupIndex(idx = 0, groupIndex = 0) .withValidationGroupIndex(idx = 1, groupIndex = 1) # .debug() # uncomment to enable console log output - .withLogFile() + # .withLogFile() # uncomment to output log file to tests/integration/logs/ //_.log - .withLogTopics("validator") + # .withLogTopics("validator") # each topic as a separate string argument .some, ): @@ -145,9 +146,10 @@ marketplacesuite "Validation": clients: CodexConfigs .init(nodes = 1) # .debug() # uncomment to enable console log output - .withLogFile() + # .withLogFile() # uncomment to output log file to tests/integration/logs/ //_.log - .withLogTopics("purchases", "onchain").some, + # .withLogTopics("purchases", "onchain") + .some, providers: CodexConfigs .init(nodes = 1) .withSimulateProofFailures(idx = 0, failEveryNProofs = 1) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 49b0f3a9ef..5c95244fc3 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -1,9 +1,17 @@ +import std/os +import std/strformat import std/terminal +from std/times import format, now +import std/terminal +import std/typetraits import pkg/chronos +import pkg/codex/conf import pkg/codex/logutils import ./integration/testmanager +import ./integration/utils {.warning[UnusedImport]: off.} +{.push raises: [].} const TestConfigs = @[ @@ -22,9 +30,6 @@ const TestConfigs = ), ] -# Echoes stderr if there's a test failure (eg test failed, compilation error) -# or error (eg test manager error) -const DebugTestHarness {.booldefine.} = false # Echoes stdout from Hardhat process const DebugHardhat {.booldefine.} = false # Echoes stdout from the integration test file process. Codex process logs can @@ -39,44 +44,22 @@ const TestTimeout {.intdefine.} = 60 const EnableParallelTests {.booldefine.} = true -proc setupLogging(logFile: string, debugTestHarness: bool) = - when defaultChroniclesStream.outputs.type.arity != 3: - raiseAssert "Logging configuration options not enabled in the current build" - else: - proc writeAndFlush(f: File, msg: LogOutputStr) = - try: - f.write(msg) - f.flushFile() - except IOError as err: - logLoggingFailure(cstring(msg), err) - - proc noOutput(logLevel: LogLevel, msg: LogOutputStr) = - discard - - proc stdoutFlush(logLevel: LogLevel, msg: LogOutputStr) = - writeAndFlush(stdout, msg) +proc setupLogging(logFile: string) = - proc fileFlush(logLevel: LogLevel, msg: LogOutputStr) = - try: - logFile.appendFile(stripAnsi(msg)) - except IOError as error: - fatal "Failed to write to log file", error = error.msg # error = error.ioErrorMsg - raiseAssert "Could not write to test manager log file: " & error.msg - - defaultChroniclesStream.outputs[0].writer = stdoutFlush - defaultChroniclesStream.outputs[1].writer = noOutput - if debugTestHarness: - defaultChroniclesStream.outputs[2].writer = fileFlush - else: - defaultChroniclesStream.outputs[2].writer = noOutput + try: + let success = defaultChroniclesStream.outputs[0].open(logFile, fmAppend) + doAssert success, "Failed to open log file: " & logFile + except IOError, OSError: + let error = getCurrentException() + fatal "Failed to open log file", error = error.msg + raiseAssert "Could not open test manager log file: " & error.msg proc run(): Future[bool] {.async: (raises: []).} = - let startTime = now().format("yyyy-MM-dd'_'HH:mm:ss") + let startTime = now().format("yyyy-MM-dd'_'HH-mm-ss") let logsDir = currentSourcePath.parentDir() / "integration" / "logs" / - sanitize(startTime & "__IntegrationTests") + sanitize(startTime & "-IntegrationTests") try: - if DebugTestHarness or DebugHardhat or DebugCodexNodes: createDir(logsDir) #!fmt: off styledEcho bgWhite, fgBlack, styleBright, @@ -95,16 +78,17 @@ proc run(): Future[bool] {.async: (raises: []).} = except OSError as e: raiseAssert "Failed to create log directory and echo log message: " & e.msg - setupLogging(TestManager.logFile(logsDir), DebugTestHarness) + setupLogging(TestManager.logFile(logsDir)) let manager = TestManager.new( - configs = TestConfigs, - logsDir, - DebugTestHarness, - DebugHardhat, - DebugCodexNodes, - ShowContinuousStatusUpdates, - TestTimeout.minutes, + config = TestManagerConfig( + debugHardhat: DebugHardhat, + debugCodexNodes: DebugCodexNodes, + showContinuousStatusUpdates: ShowContinuousStatusUpdates, + logsDir: logsDir, + testTimeout: TestTimeout.minutes, + ), + testConfigs = TestConfigs, ) try: trace "starting test manager" From 357840db4d43294a66912899892bdd57af75e0a2 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Mar 2025 17:27:00 +1100 Subject: [PATCH 090/178] Fix process hanging after restart --- tests/integration/codexprocess.nim | 23 +++++++++++++++++++++++ tests/integration/nodeprocess.nim | 13 +++++-------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/tests/integration/codexprocess.nim b/tests/integration/codexprocess.nim index 1becc909cd..18a3ea41ee 100644 --- a/tests/integration/codexprocess.nim +++ b/tests/integration/codexprocess.nim @@ -7,6 +7,7 @@ import pkg/ethers import pkg/libp2p import std/os import std/strutils +import std/times import codex/conf import ./codexclient import ./nodeprocess @@ -78,6 +79,9 @@ proc apiUrl*(node: CodexProcess): string {.raises: [CodexProcessError].} = let config = node.config return "http://" & config.apiBindAddress & ":" & $config.apiPort & "/api/codex/v1" +proc logFile*(node: CodexProcess): ?string {.raises: [CodexProcessError].} = + node.config.logFile + proc client*(node: CodexProcess): CodexClient {.raises: [CodexProcessError].} = if client =? node.client: return client @@ -85,6 +89,25 @@ proc client*(node: CodexProcess): CodexClient {.raises: [CodexProcessError].} = node.client = some client return client +proc updateLogFile(node: CodexProcess, newLogFile: string) = + for arg in node.arguments.mitems: + if arg.startsWith("--log-file="): + arg = "--log-file=" & newLogFile + break + +method restart*(node: CodexProcess) {.async.} = + trace "restarting codex" + await node.stop() + if logFile =? node.logFile: + # chronicles truncates the existing log file on start, so changed the log + # file cli param to create a new one + node.updateLogFile( + logFile & "_restartedAt_" & now().format("yyyy-MM-dd'_'HH-mm-ss") & ".log" + ) + await node.start() + await node.waitUntilStarted() + trace "codex process restarted" + method stop*(node: CodexProcess) {.async: (raises: []).} = logScope: nodeName = node.name diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index e0a7413f7f..8c86df3bf2 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -137,13 +137,10 @@ method stop*( error = e.msg writeStackTrace() finally: - proc closeProcessStreams() {.async: (raises: []).} = - trace "closing node process' streams" - await node.process.closeWait() - node.process = nil - trace "node process' streams closed" - - asyncSpawn closeProcessStreams() + trace "closing node process' streams" + await node.process.closeWait() + node.process = nil + trace "node process' streams closed" proc waitUntilOutput*( node: NodeProcess, output: string @@ -184,7 +181,7 @@ proc waitUntilStarted*( raise newException(NodeProcessError, "node did not output '" & node.startedOutput & "'") -proc restart*(node: NodeProcess) {.async.} = +method restart*(node: NodeProcess) {.base, async.} = await node.stop() await node.start() await node.waitUntilStarted() From e648954eeab32254a5b13519f541936836aa9f32 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Mar 2025 17:33:40 +1100 Subject: [PATCH 091/178] formatting --- tests/integration/testecbug.nim | 13 ++++++------- tests/integration/testvalidator.nim | 26 ++++++++++++-------------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/tests/integration/testecbug.nim b/tests/integration/testecbug.nim index be15219715..855da37afd 100644 --- a/tests/integration/testecbug.nim +++ b/tests/integration/testecbug.nim @@ -7,13 +7,12 @@ import ./hardhatconfig marketplacesuite "Bug #821 - node crashes during erasure coding": test "should be able to create storage request and download dataset", NodeConfigs( - clients: CodexConfigs - .init(nodes = 1) - # .debug() # uncomment to enable console log output.debug() - # .withLogFile() - # uncomment to output log file to tests/integration/logs/ //_.log - # .withLogTopics("node", "erasure", "marketplace") - .some, + clients: CodexConfigs.init(nodes = 1) + # .debug() # uncomment to enable console log output.debug() + # .withLogFile() + # uncomment to output log file to tests/integration/logs/ //_.log + # .withLogTopics("node", "erasure", "marketplace") + .some, providers: CodexConfigs.init(nodes = 0).some, ): let diff --git a/tests/integration/testvalidator.nim b/tests/integration/testvalidator.nim index 4339bdbb7a..222f1ba79e 100644 --- a/tests/integration/testvalidator.nim +++ b/tests/integration/testvalidator.nim @@ -61,13 +61,12 @@ marketplacesuite "Validation": NodeConfigs( # Uncomment to start Hardhat automatically, typically so logs can be inspected locally hardhat: HardhatConfig.none, - clients: CodexConfigs - .init(nodes = 1) - # .debug() # uncomment to enable console log output - # .withLogFile() - # uncomment to output log file to tests/integration/logs/ //_.log - # .withLogTopics("purchases", "onchain") - .some, + clients: CodexConfigs.init(nodes = 1) + # .debug() # uncomment to enable console log output + # .withLogFile() + # uncomment to output log file to tests/integration/logs/ //_.log + # .withLogTopics("purchases", "onchain") + .some, providers: CodexConfigs .init(nodes = 1) .withSimulateProofFailures(idx = 0, failEveryNProofs = 1) @@ -143,13 +142,12 @@ marketplacesuite "Validation": NodeConfigs( # Uncomment to start Hardhat automatically, typically so logs can be inspected locally hardhat: HardhatConfig.none, - clients: CodexConfigs - .init(nodes = 1) - # .debug() # uncomment to enable console log output - # .withLogFile() - # uncomment to output log file to tests/integration/logs/ //_.log - # .withLogTopics("purchases", "onchain") - .some, + clients: CodexConfigs.init(nodes = 1) + # .debug() # uncomment to enable console log output + # .withLogFile() + # uncomment to output log file to tests/integration/logs/ //_.log + # .withLogTopics("purchases", "onchain") + .some, providers: CodexConfigs .init(nodes = 1) .withSimulateProofFailures(idx = 0, failEveryNProofs = 1) From 67719ee39583da3f0c28275bb38b6a8fcca341f5 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Mar 2025 17:40:48 +1100 Subject: [PATCH 092/178] formatting --- tests/testIntegration.nim | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 5c95244fc3..b9fc8050a2 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -45,7 +45,6 @@ const TestTimeout {.intdefine.} = 60 const EnableParallelTests {.booldefine.} = true proc setupLogging(logFile: string) = - try: let success = defaultChroniclesStream.outputs[0].open(logFile, fmAppend) doAssert success, "Failed to open log file: " & logFile @@ -60,18 +59,18 @@ proc run(): Future[bool] {.async: (raises: []).} = currentSourcePath.parentDir() / "integration" / "logs" / sanitize(startTime & "-IntegrationTests") try: - createDir(logsDir) - #!fmt: off - styledEcho bgWhite, fgBlack, styleBright, - "\n\n ", - styleUnderscore, - "ℹ️ LOGS AVAILABLE ℹ️\n\n", - resetStyle, bgWhite, fgBlack, styleBright, - """ Logs for this run will be available at:""", - resetStyle, bgWhite, fgBlack, - &"\n\n {logsDir}\n\n", - resetStyle, bgWhite, fgBlack, styleBright, - " NOTE: For CI runs, logs will be attached as artefacts\n" + createDir(logsDir) + #!fmt: off + styledEcho bgWhite, fgBlack, styleBright, + "\n\n ", + styleUnderscore, + "ℹ️ LOGS AVAILABLE ℹ️\n\n", + resetStyle, bgWhite, fgBlack, styleBright, + """ Logs for this run will be available at:""", + resetStyle, bgWhite, fgBlack, + &"\n\n {logsDir}\n\n", + resetStyle, bgWhite, fgBlack, styleBright, + " NOTE: For CI runs, logs will be attached as artefacts\n" #!fmt: on except IOError as e: raiseAssert "Failed to create log directory and echo log message: " & e.msg From f3901d13b159ade688d64549a07f14ee897945ab Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Mar 2025 20:11:33 +1100 Subject: [PATCH 093/178] Update NBS action.yml in CI --- .../actions/nimbus-build-system/action.yml | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/.github/actions/nimbus-build-system/action.yml b/.github/actions/nimbus-build-system/action.yml index 249d6fbad1..ddc44a6855 100644 --- a/.github/actions/nimbus-build-system/action.yml +++ b/.github/actions/nimbus-build-system/action.yml @@ -29,6 +29,7 @@ runs: shell: ${{ inputs.shell }} {0} run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs/ | sh -s -- --default-toolchain=${{ inputs.rust_version }} -y + echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" - name: APT (Linux amd64/arm64) if: inputs.os == 'linux' && (inputs.cpu == 'amd64' || inputs.cpu == 'arm64') @@ -89,7 +90,7 @@ runs: - name: Install gcc 14 on Linux # We don't want to install gcc 14 for coverage (Ubuntu 20.04) - if : ${{ inputs.os == 'linux' && inputs.coverage != 'true' }} + if : ${{ inputs.os == 'linux' && !inputs.coverage }} shell: ${{ inputs.shell }} {0} run: | # Skip for older Ubuntu versions @@ -108,9 +109,16 @@ runs: uses: hendrikmuhs/ccache-action@v1.2 with: create-symlink: true - key: ${{ inputs.os }}-${{ inputs.builder }}-${{ inputs.cpu }}-${{ inputs.tests }}-${{ inputs.nim_version }} + key: ${{ matrix.os }}-${{ matrix.builder }}-${{ matrix.cpu }}-${{ matrix.tests }}-${{ matrix.nim_version }} evict-old-files: 7d + - name: Add ccache to path on Linux/Mac + if: inputs.os == 'linux' || inputs.os == 'macos' + shell: ${{ inputs.shell }} {0} + run: | + echo "/usr/lib/ccache:/usr/local/opt/ccache/libexec" >> "$GITHUB_PATH" + echo "/usr/local/opt/ccache/libexec" >> "$GITHUB_PATH" + - name: Install ccache on Windows if: inputs.os == 'windows' uses: hendrikmuhs/ccache-action@v1.2 @@ -123,11 +131,11 @@ runs: shell: ${{ inputs.shell }} {0} run: | CCACHE_DIR=$(dirname $(which ccache))/ccached - mkdir ${CCACHE_DIR} - ln -s $(which ccache) ${CCACHE_DIR}/gcc.exe - ln -s $(which ccache) ${CCACHE_DIR}/g++.exe - ln -s $(which ccache) ${CCACHE_DIR}/cc.exe - ln -s $(which ccache) ${CCACHE_DIR}/c++.exe + mkdir -p ${CCACHE_DIR} + ln -sf $(which ccache) ${CCACHE_DIR}/gcc.exe + ln -sf $(which ccache) ${CCACHE_DIR}/g++.exe + ln -sf $(which ccache) ${CCACHE_DIR}/cc.exe + ln -sf $(which ccache) ${CCACHE_DIR}/c++.exe echo "export PATH=${CCACHE_DIR}:\$PATH" >> $HOME/.bash_profile # prefix path in MSYS2 - name: Derive environment variables @@ -208,7 +216,7 @@ runs: - name: Restore Nim toolchain binaries from cache id: nim-cache uses: actions/cache@v4 - if : ${{ inputs.coverage != 'true' }} + if : ${{ !inputs.coverage }} with: path: NimBinaries key: ${{ inputs.os }}-${{ inputs.cpu }}-nim-${{ inputs.nim_version }}-cache-${{ env.cache_nonce }}-${{ github.run_id }} @@ -231,4 +239,4 @@ runs: gcc --version make -j${ncpu} CI_CACHE=NimBinaries ${ARCH_OVERRIDE} QUICK_AND_DIRTY_COMPILER=1 update echo - ./env.sh nim --version + ./env.sh nim --version \ No newline at end of file From f4b78f048f827dfbaf1a922e0f7f5e6565616567 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 6 Mar 2025 20:50:41 +1100 Subject: [PATCH 094/178] CI yml fix for gcc-14 --- .github/actions/nimbus-build-system/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/nimbus-build-system/action.yml b/.github/actions/nimbus-build-system/action.yml index ddc44a6855..fe0aef66ed 100644 --- a/.github/actions/nimbus-build-system/action.yml +++ b/.github/actions/nimbus-build-system/action.yml @@ -90,7 +90,7 @@ runs: - name: Install gcc 14 on Linux # We don't want to install gcc 14 for coverage (Ubuntu 20.04) - if : ${{ inputs.os == 'linux' && !inputs.coverage }} + if: ${{ inputs.os == 'linux' && inputs.coverage != 'true' }} shell: ${{ inputs.shell }} {0} run: | # Skip for older Ubuntu versions @@ -216,7 +216,7 @@ runs: - name: Restore Nim toolchain binaries from cache id: nim-cache uses: actions/cache@v4 - if : ${{ !inputs.coverage }} + if: ${{ inputs.coverage != 'true' }} with: path: NimBinaries key: ${{ inputs.os }}-${{ inputs.cpu }}-nim-${{ inputs.nim_version }}-cache-${{ env.cache_nonce }}-${{ github.run_id }} From e7a9adab2143db0089ed93c146cb0c984ed271e1 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 7 Mar 2025 15:48:52 +1100 Subject: [PATCH 095/178] Add debugging and assertions after test run Mostly to debug in windows --- tests/integration/testmanager.nim | 36 +++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 365f7c8f82..781da30cbc 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -281,7 +281,7 @@ proc printResult(test: IntegrationTest, printStdOut, printStdErr: bool) = test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") of IntegrationTestStatus.Failed: if output =? test.output: - if printStdErr or test.output.isErrorLike: + if printStdErr: test.printOutputMarker(MarkerPosition.Start, "test file errors (stderr)") echo output.stdErr test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") @@ -405,6 +405,11 @@ proc teardownTest( stdOutStream, stdErrStream: Future[seq[byte]].Raising([CancelledError, AsyncStreamError]), ) {.async: (raises: []).} = + logScope: + test = test.config.name + + trace "Tearing down test" + test.timeEnd = some Moment.now() if not test.process.isNil: @@ -415,19 +420,27 @@ proc teardownTest( some (await noCancel test.process.terminateAndWaitForExit(500.millis)) trace "Test process terminated", exitCode = output.exitCode except AsyncProcessError, AsyncProcessTimeoutError: - warn "Test process failed to terminate, check for zombies" + let e = getCurrentException() + warn "Test process failed to terminate, check for zombies", error = e.msg try: + trace "Reading stdout and stderr streams" output.stdOut = string.fromBytes(await noCancel stdOutStream) output.stdErr = string.fromBytes(await noCancel stdErrStream) test.output = success output + + trace "Writing stdout and/or stderr streams to file", + stdoutFile = test.logFile("stdout.log"), + stdoutBytes = output.stdOut.len, + stderrFile = test.logFile("stderr.log"), + stderrBytes = output.stdErr.len test.logFile("stdout.log").appendFile(output.stdOut.stripAnsi) - if test.status == IntegrationTestStatus.Error or test.output.isErrorLike: + if test.status == IntegrationTestStatus.Error or + (test.status == IntegrationTestStatus.Failed and test.output.isErrorLike): test.logFile("stderr.log").appendFile(output.stdErr.stripAnsi) except IOError as e: - warn "Failed to write test stdout and stderr to file", error = e.msg + warn "Failed to write test stdout and/or stderr to file", error = e.msg except AsyncStreamError as e: - test.timeEnd = some Moment.now() error "Failed to read test process output stream", error = e.msg test.output = TestOutput.failure(e) test.status = IntegrationTestStatus.Error @@ -480,7 +493,6 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = trace "Running test" - # if test.manager.config.debugCodexNodes: test.logsDir = test.manager.config.logsDir / sanitize(test.config.name) try: createDir(test.logsDir) @@ -513,7 +525,6 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = try: test.process = await startProcess( command = test.command, - # arguments = test.command.split(" "), options = {AsyncProcessOption.EvalCommand}, stdoutHandle = AsyncProcess.Pipe, stderrHandle = AsyncProcess.Pipe, @@ -536,6 +547,12 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = # `untilTimeout` exceptions are handled in `run` await test.teardown(hardhat, outputReader, errorReader) # doesn't raise CancelledError, so noCancel not needed + doAssert test.status != IntegrationTestStatus.New and + test.status != IntegrationTestStatus.Running, + "Integration test is in the wrong state!" + doAssert test.timeEnd.isSome, "Integration test end time not set!" + doAssert (test.output.isOk and output =? test.output and output != nil) or + test.output.isErr, "Integration test output not set!" output.exitCode = try: @@ -587,7 +604,6 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = try: await futStart.untilTimeout(test.manager.config.testTimeout) except AsyncTimeoutError: - error "Test timed out" test.timeEnd = some Moment.now() test.status = IntegrationTestStatus.Timeout # futStart will be cancelled by untilTimeout and that will run the @@ -595,7 +611,9 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = test.printResult( printStdOut = test.status != IntegrationTestStatus.Ok, - printStdErr = test.status == IntegrationTestStatus.Error, + printStdErr = + test.status == IntegrationTestStatus.Error or + (test.status == IntegrationTestStatus.Failed and test.output.isErrorLike), ) logScope: name = test.config.name From 139aa6eef88ec03411e69555ba69fda06f976ac6 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 7 Mar 2025 16:25:16 +1100 Subject: [PATCH 096/178] readd prevention of hanging when closing process streams on windows --- tests/integration/nodeprocess.nim | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 8c86df3bf2..2852ea67bf 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -137,10 +137,19 @@ method stop*( error = e.msg writeStackTrace() finally: - trace "closing node process' streams" - await node.process.closeWait() - node.process = nil - trace "node process' streams closed" + proc closeProcessStreams() {.async: (raises: []).} = + trace "closing node process' streams" + await node.process.closeWait() + node.process = nil + trace "node process' streams closed" + + # windows will hang waiting to close process streams, so we can asyncspawn + # in the hopes that it will eventually close them without hanging the + # process + when defined(windows): + asyncSpawn closeProcessStreams() + else: + await closeProcessStreams() proc waitUntilOutput*( node: NodeProcess, output: string From fa772f7ac690660555b13d2348fcc35b8b8594ef Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 10 Mar 2025 11:22:37 +1100 Subject: [PATCH 097/178] re-raise CancelledError --- tests/integration/codexprocess.nim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/integration/codexprocess.nim b/tests/integration/codexprocess.nim index 18a3ea41ee..5045563bbf 100644 --- a/tests/integration/codexprocess.nim +++ b/tests/integration/codexprocess.nim @@ -35,6 +35,8 @@ proc raiseCodexProcessError( template convertError(msg, body: typed) = try: body + except CancelledError as e: + raise e except CatchableError as parent: raiseCodexProcessError(msg, parent) From 4da5c8c3726c415b8b11da3a46fc0795b106cceb Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 11 Mar 2025 17:53:38 +1100 Subject: [PATCH 098/178] do not re-raise CancelledError as convertError not used in async procs --- tests/integration/codexprocess.nim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/integration/codexprocess.nim b/tests/integration/codexprocess.nim index 5045563bbf..1a41a65872 100644 --- a/tests/integration/codexprocess.nim +++ b/tests/integration/codexprocess.nim @@ -33,10 +33,9 @@ proc raiseCodexProcessError( raise newException(CodexProcessError, msg & ": " & parent.msg, parent) template convertError(msg, body: typed) = + # Don't use this in an async proc, unless body does not raise CancelledError try: body - except CancelledError as e: - raise e except CatchableError as parent: raiseCodexProcessError(msg, parent) From f93112dc28b065d310a57a5d49b6c0148e5628f7 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 14 Mar 2025 16:56:34 +1100 Subject: [PATCH 099/178] Remove DebugCodexNodes - Codex nodes will log to file by default, so this parameter could be removed. - Add NoCodexLogFilters define, that unsets chronicles' topic filters when logging codex nodes chronicles logs to file --- Makefile | 4 +--- tests/integration/multinodes.nim | 28 +++++++++++++++------------- tests/integration/testcli.nim | 25 ++++++++++++++----------- tests/integration/testmanager.nim | 24 ++++++++++++++---------- tests/testIntegration.nim | 7 ++----- 5 files changed, 46 insertions(+), 42 deletions(-) diff --git a/Makefile b/Makefile index 32f9671d87..9e694b8fd1 100644 --- a/Makefile +++ b/Makefile @@ -143,10 +143,8 @@ testContracts: | build deps TEST_PARAMS := ifdef DEBUG TEST_PARAMS := $(TEST_PARAMS) -d:DebugTestHarness=$(DEBUG) - TEST_PARAMS := $(TEST_PARAMS) -d:DebugCodexNodes=$(DEBUG) + TEST_PARAMS := $(TEST_PARAMS) -d:NoCodexLogFilters=$(DEBUG) TEST_PARAMS := $(TEST_PARAMS) -d:ShowContinuousStatusUpdates=$(DEBUG) -endif -ifdef DEBUG_HARDHAT TEST_PARAMS := $(TEST_PARAMS) -d:DebugHardhat=$(DEBUG_HARDHAT) endif ifdef TEST_TIMEOUT diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 8cb0710f59..4df1354e67 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -46,8 +46,9 @@ const HardhatPort {.intdefine.}: int = 8545 const CodexApiPort {.intdefine.}: int = 8080 const CodexDiscPort {.intdefine.}: int = 8090 const TestId {.strdefine.}: string = "TestId" -const DebugCodexNodes {.booldefine.}: bool = false -const LogsDir {.strdefine.}: string = "" +const CodexLogToFile {.booldefine.}: bool = false +const CodexLogLevel {.strdefine.}: string = "" +const CodexLogsDir {.strdefine.}: string = "" proc raiseMultiNodeSuiteError( msg: string, parent: ref CatchableError = nil @@ -122,7 +123,7 @@ template multinodesuite*(name: string, body: untyped) = if config.logFile: try: let updatedLogFile = - getLogFile(LogsDir, starttime, name, currentTestName, $role, none int) + getLogFile(CodexLogsDir, starttime, name, currentTestName, $role, none int) args.add "--log-file=" & updatedLogFile except IOError as e: raiseMultiNodeSuiteError( @@ -166,10 +167,11 @@ template multinodesuite*(name: string, body: untyped) = sanitize($starttime) / sanitize($role & "_" & $roleIdx) try: - if config.logFile.isSome or DebugCodexNodes: + if config.logFile.isSome or CodexLogToFile: try: - let updatedLogFile = - getLogFile(LogsDir, starttime, name, currentTestName, $role, some roleIdx) + let updatedLogFile = getLogFile( + CodexLogsDir, starttime, name, currentTestName, $role, some roleIdx + ) config.withLogFile(updatedLogFile) except IOError as e: raiseMultiNodeSuiteError( @@ -183,9 +185,9 @@ template multinodesuite*(name: string, body: untyped) = " because logfile path could not be obtained: " & e.msg, e, ) - - if DebugCodexNodes: - config.addCliOption("--log-level", $LogLevel.TRACE) + # TODO: uncomment once HttpClient has been asyncified + # when CodexLogLevel != "": + # config.addCliOption("--log-level", CodexLogLevel) var apiPort, discPort: int withLock(codexPortLock): @@ -281,9 +283,9 @@ template multinodesuite*(name: string, body: untyped) = ) return await newCodexProcess(providerIdx, config, Role.Provider) - except CodexConfigError as e: + except CodexConfigError as exc: raiseMultiNodeSuiteError "Failed to start codex node, error adding cli options: " & - e.msg, e + exc.msg, exc proc startValidatorNode( conf: CodexConfig @@ -362,9 +364,9 @@ template multinodesuite*(name: string, body: untyped) = # When this file is run with `-d:chronicles_sinks=textlines[file]`, we # need to set the log file path at runtime, otherwise chronicles didn't seem to # create a log file even when using an absolute path - when defaultChroniclesStream.outputs is (FileOutput,) and LogsDir.len > 0: + when defaultChroniclesStream.outputs is (FileOutput,) and CodexLogsDir.len > 0: let logFile = - LogsDir / sanitize(getAppFilename().extractFilename & ".chronicles.log") + CodexLogsDir / sanitize(getAppFilename().extractFilename & ".chronicles.log") let success = defaultChroniclesStream.outputs[0].open(logFile, fmAppend) doAssert success, "Failed to open log file: " & logFile diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index f768e84fb0..4fd33378a2 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -12,8 +12,9 @@ import ../examples const HardhatPort {.intdefine.}: int = 8545 const CodexApiPort {.intdefine.}: int = 8080 const CodexDiscPort {.intdefine.}: int = 8090 -const DebugCodexNodes {.booldefine.}: bool = false -const LogsDir {.strdefine.}: string = "" +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") @@ -30,21 +31,23 @@ asyncchecksuite "Command line interface": tbody proc addLogFile(args: seq[string]): seq[string] = - when DebugCodexNodes: - return args.concat @[ + var args = args + when CodexLogToFile: + args.add( "--log-file=" & getLogFile( - LogsDir, + CodexLogsDir, startTime, "Command line interface", currentTestName, "Client", some nodeCount mod testCount, - ), - "--log-level=" & $LogLevel.TRACE, - ] - else: - return args + ) + ) + when CodexLogLevel != "": + args.add "--log-level=" & CodexLogLevel + + return args proc startCodex(arguments: seq[string]): Future[CodexProcess] {.async.} = inc nodeCount @@ -56,7 +59,7 @@ asyncchecksuite "Command line interface": "--disc-port=" & $(await nextFreePort(CodexDiscPort + nodeCount)), ] ), - debug = DebugCodexNodes, + debug = false, "cli-test-node", ) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 781da30cbc..cd00e10892 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -23,10 +23,9 @@ type TestManagerConfig* = object # Echoes stdout from Hardhat process debugHardhat*: bool - # Echoes stdout from the integration test file process. Codex process logs - # can also be output if a test uses a multinodesuite, requires - # CodexConfig.debug to be enabled - debugCodexNodes*: bool + # Shows all log topics at TRACE log level by disabling codex node output log + # topic filters, eg libp2p, websock, JSON RPC + noCodexLogFilters*: bool # Shows test status updates at regular time intervals. Useful for running # locally while attended. Set to false for unattended runs, eg CI. showContinuousStatusUpdates*: bool @@ -339,6 +338,12 @@ proc buildCommand( let discPort = await nextFreePort(test.manager.lastCodexDiscPort + 1000) test.manager.lastCodexDiscPort = discPort + let codexLogLevel = + if test.manager.config.noCodexLogFilters: + "TRACE" + else: + "TRACE;disabled:libp2p,websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT,discv5" + withLock(test.manager.hardhatPortLock): try: return @@ -346,15 +351,14 @@ proc buildCommand( "nim c " & &"-d:CodexApiPort={apiPort} " & &"-d:CodexDiscPort={discPort} " & - &"-d:DebugCodexNodes={test.manager.config.debugCodexNodes} " & - &"-d:DebugHardhat={test.manager.config.debugHardhat} " & - &"-d:LogsDir={test.logsDir} " & + &"-d:CodexLogsDir={test.logsDir} " & + &"-d:CodexLogLevel=\"{codexLogLevel}\" " & + &"-d:CodexLogToFile=true " & (hhPort |? "") & " " & &"-d:TestId={test.testId} " & - # Log multinodes chronicles logs to file. If DebugCodexNodes is also - # enabled, the chronicles output will also get logged to stdout. + # Log multinodes chronicles logs settings (log to file with no + # colours, and loglevel = TRACE). "-d:chronicles_log_level=TRACE " & - "-d:chronicles_disabled_topics=websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT " & "-d:chronicles_sinks=textlines[nocolors,file] " & "--verbosity:0 " & "--hints:off " & diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index b9fc8050a2..b83ffefada 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -32,10 +32,7 @@ const TestConfigs = # Echoes stdout from Hardhat process const DebugHardhat {.booldefine.} = false -# Echoes stdout from the integration test file process. Codex process logs can -# also be output if a test uses a multinodesuite, requires CodexConfig.debug -# to be enabled -const DebugCodexNodes {.booldefine.} = false +const NoCodexLogFilters {.booldefine.} = false # Shows test status updates at time intervals. Useful for running locally with # active terminal interaction. Set to false for unattended runs, eg CI. const ShowContinuousStatusUpdates {.booldefine.} = false @@ -82,7 +79,7 @@ proc run(): Future[bool] {.async: (raises: []).} = let manager = TestManager.new( config = TestManagerConfig( debugHardhat: DebugHardhat, - debugCodexNodes: DebugCodexNodes, + noCodexLogFilters: NoCodexLogFilters, showContinuousStatusUpdates: ShowContinuousStatusUpdates, logsDir: logsDir, testTimeout: TestTimeout.minutes, From 9d8dbee9aaaf31de11d2adc4c5bec48e23b63573 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 14 Mar 2025 16:57:22 +1100 Subject: [PATCH 100/178] ensure runTests doesn't raise CancelledError TrackedFutures now only accepts Futures that do not raise any exceptions --- tests/integration/testmanager.nim | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index cd00e10892..2bba3b0e73 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -640,7 +640,7 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = of IntegrationTestStatus.Ok: notice "Test passed" -proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = +proc runTests(manager: TestManager) {.async: (raises: []).} = var testFutures: seq[Future[void]] manager.timeStart = some Moment.now() @@ -658,14 +658,15 @@ proc runTests(manager: TestManager) {.async: (raises: [CancelledError]).} = let futRun = test.run() testFutures.add futRun - defer: + try: + await allFutures testFutures + manager.timeEnd = some Moment.now() + except CancelledError as e: + discard + finally: for fut in testFutures: await fut.cancelAndWait() - await allFutures testFutures - - manager.timeEnd = some Moment.now() - proc withBorder( msg: string, align = Align.Left, width = 67, borders = {Border.Left, Border.Right} ): string = From daa23f4ffbd09926f9a529141cabdafe47291071 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 17 Mar 2025 14:31:38 +1100 Subject: [PATCH 101/178] fix windows issue where reading stdout/stderr hangs forever --- tests/integration/testmanager.nim | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 2bba3b0e73..f16f241e8f 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -442,12 +442,17 @@ proc teardownTest( if test.status == IntegrationTestStatus.Error or (test.status == IntegrationTestStatus.Failed and test.output.isErrorLike): test.logFile("stderr.log").appendFile(output.stdErr.stripAnsi) + except AsyncTimeoutError: + error "Timeout waiting for stdout or stderr stream contents, nothing will be written to file" except IOError as e: warn "Failed to write test stdout and/or stderr to file", error = e.msg except AsyncStreamError as e: error "Failed to read test process output stream", error = e.msg test.output = TestOutput.failure(e) test.status = IntegrationTestStatus.Error + finally: + await stdOutStream.cancelAndWait() + await stdErrStream.cancelAndWait() await test.process.closeWait() trace "Test process output streams closed" From 6bef231297e065fbaf2451cea01aa52cd2811ac0 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 17 Mar 2025 14:42:55 +1100 Subject: [PATCH 102/178] Add wait to stdout/stderr stream future --- tests/integration/testmanager.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index f16f241e8f..6d7939edb7 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -429,8 +429,8 @@ proc teardownTest( try: trace "Reading stdout and stderr streams" - output.stdOut = string.fromBytes(await noCancel stdOutStream) - output.stdErr = string.fromBytes(await noCancel stdErrStream) + output.stdOut = string.fromBytes(await noCancel stdOutStream.wait(1.seconds)) + output.stdErr = string.fromBytes(await noCancel stdErrStream.wait(1.seconds)) test.output = success output trace "Writing stdout and/or stderr streams to file", From 3ec35dc788e11971cd6ff43d67ae9145a36a6390 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 17 Mar 2025 16:41:25 +1100 Subject: [PATCH 103/178] Remove debug from twonodesconfig --- tests/integration/twonodes.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/twonodes.nim b/tests/integration/twonodes.nim index 22fc614688..eeceb20d3f 100644 --- a/tests/integration/twonodes.nim +++ b/tests/integration/twonodes.nim @@ -12,7 +12,7 @@ export multinodes template twonodessuite*(name: string, body: untyped) = multinodesuite name: let twoNodesConfig {.inject, used.} = - NodeConfigs(clients: CodexConfigs.init(nodes = 2).debug().some) + NodeConfigs(clients: CodexConfigs.init(nodes = 2).some) var node1 {.inject, used.}: CodexProcess var node2 {.inject, used.}: CodexProcess From 4f2f000a93b8a32e88c944c56c86e16b583e2b26 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 18 Mar 2025 15:47:40 +1100 Subject: [PATCH 104/178] fix rebase on top of async http client change --- tests/integration/marketplacesuite.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/integration/marketplacesuite.nim b/tests/integration/marketplacesuite.nim index 1e09963b05..d8f9071541 100644 --- a/tests/integration/marketplacesuite.nim +++ b/tests/integration/marketplacesuite.nim @@ -60,7 +60,10 @@ template marketplacesuite*(name: string, body: untyped) = duration: uint64, collateralPerByte: UInt256, minPricePerBytePerSecond: UInt256, - ): Future[void] {.async: (raises: [CancelledError, HttpError, ConfigurationError]).} = + ): Future[void] {. + async: + (raises: [CancelledError, HttpError, ConfigurationError, CodexProcessError]) + .} = let totalCollateral = datasetSize.u256 * collateralPerByte # post availability to each provider for i in 0 ..< providers().len: From 9084dd7b14518aac4a6b2176a83cf671ae804d1f Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 18 Mar 2025 15:48:29 +1100 Subject: [PATCH 105/178] Move test assertions at end of start so that test.status can be set after timeout --- tests/integration/testmanager.nim | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 6d7939edb7..c587ec316b 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -421,7 +421,7 @@ proc teardownTest( if test.process.running |? false: try: output.exitCode = - some (await noCancel test.process.terminateAndWaitForExit(500.millis)) + some (await noCancel test.process.terminateAndWaitForExit(1.seconds)) trace "Test process terminated", exitCode = output.exitCode except AsyncProcessError, AsyncProcessTimeoutError: let e = getCurrentException() @@ -556,12 +556,6 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = # `untilTimeout` exceptions are handled in `run` await test.teardown(hardhat, outputReader, errorReader) # doesn't raise CancelledError, so noCancel not needed - doAssert test.status != IntegrationTestStatus.New and - test.status != IntegrationTestStatus.Running, - "Integration test is in the wrong state!" - doAssert test.timeEnd.isSome, "Integration test end time not set!" - doAssert (test.output.isOk and output =? test.output and output != nil) or - test.output.isErr, "Integration test output not set!" output.exitCode = try: @@ -628,6 +622,10 @@ proc run(test: IntegrationTest) {.async: (raises: []).} = name = test.config.name duration = test.duration + doAssert test.timeEnd.isSome, "Integration test end time not set!" + doAssert (test.output.isOk and output =? test.output and output != nil) or + test.output.isErr, "Integration test output not set!" + case test.status of IntegrationTestStatus.New: raiseAssert "Test has completed, but is in the New state" From a52a53ba525a90ecc20f83fab3a222c4d20ee5ce Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 18 Mar 2025 20:02:46 +1100 Subject: [PATCH 106/178] disable all logging to see if windows passes --- tests/integration/multinodes.nim | 20 ++++++++++---------- tests/integration/testmanager.nim | 8 ++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 4df1354e67..31833923a2 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -167,7 +167,7 @@ template multinodesuite*(name: string, body: untyped) = sanitize($starttime) / sanitize($role & "_" & $roleIdx) try: - if config.logFile.isSome or CodexLogToFile: + if config.logFile.isSome: # or CodexLogToFile: try: let updatedLogFile = getLogFile( CodexLogsDir, starttime, name, currentTestName, $role, some roleIdx @@ -360,15 +360,15 @@ template multinodesuite*(name: string, body: untyped) = except CatchableError as e: raiseMultiNodeSuiteError "Failed to get node info: " & e.msg, e - setupAll: - # When this file is run with `-d:chronicles_sinks=textlines[file]`, we - # need to set the log file path at runtime, otherwise chronicles didn't seem to - # create a log file even when using an absolute path - when defaultChroniclesStream.outputs is (FileOutput,) and CodexLogsDir.len > 0: - let logFile = - CodexLogsDir / sanitize(getAppFilename().extractFilename & ".chronicles.log") - let success = defaultChroniclesStream.outputs[0].open(logFile, fmAppend) - doAssert success, "Failed to open log file: " & logFile + # setupAll: + # # When this file is run with `-d:chronicles_sinks=textlines[file]`, we + # # need to set the log file path at runtime, otherwise chronicles didn't seem to + # # create a log file even when using an absolute path + # when defaultChroniclesStream.outputs is (FileOutput,) and CodexLogsDir.len > 0: + # let logFile = + # CodexLogsDir / sanitize(getAppFilename().extractFilename & ".chronicles.log") + # let success = defaultChroniclesStream.outputs[0].open(logFile, fmAppend) + # doAssert success, "Failed to open log file: " & logFile setup: if var conf =? nodeConfigs.hardhat: diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index c587ec316b..d63a3c97d2 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -438,10 +438,10 @@ proc teardownTest( stdoutBytes = output.stdOut.len, stderrFile = test.logFile("stderr.log"), stderrBytes = output.stdErr.len - test.logFile("stdout.log").appendFile(output.stdOut.stripAnsi) - if test.status == IntegrationTestStatus.Error or - (test.status == IntegrationTestStatus.Failed and test.output.isErrorLike): - test.logFile("stderr.log").appendFile(output.stdErr.stripAnsi) + # test.logFile("stdout.log").appendFile(output.stdOut.stripAnsi) + # if test.status == IntegrationTestStatus.Error or + # (test.status == IntegrationTestStatus.Failed and test.output.isErrorLike): + # test.logFile("stderr.log").appendFile(output.stdErr.stripAnsi) except AsyncTimeoutError: error "Timeout waiting for stdout or stderr stream contents, nothing will be written to file" except IOError as e: From a9b094ae86cf6abc6e38251a0253c0a2b42cd018 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 19 Mar 2025 12:57:48 +1100 Subject: [PATCH 107/178] reinstate logging after it also failed on windows and ci --- tests/integration/multinodes.nim | 20 ++++++++++---------- tests/integration/testmanager.nim | 8 ++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 31833923a2..4df1354e67 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -167,7 +167,7 @@ template multinodesuite*(name: string, body: untyped) = sanitize($starttime) / sanitize($role & "_" & $roleIdx) try: - if config.logFile.isSome: # or CodexLogToFile: + if config.logFile.isSome or CodexLogToFile: try: let updatedLogFile = getLogFile( CodexLogsDir, starttime, name, currentTestName, $role, some roleIdx @@ -360,15 +360,15 @@ template multinodesuite*(name: string, body: untyped) = except CatchableError as e: raiseMultiNodeSuiteError "Failed to get node info: " & e.msg, e - # setupAll: - # # When this file is run with `-d:chronicles_sinks=textlines[file]`, we - # # need to set the log file path at runtime, otherwise chronicles didn't seem to - # # create a log file even when using an absolute path - # when defaultChroniclesStream.outputs is (FileOutput,) and CodexLogsDir.len > 0: - # let logFile = - # CodexLogsDir / sanitize(getAppFilename().extractFilename & ".chronicles.log") - # let success = defaultChroniclesStream.outputs[0].open(logFile, fmAppend) - # doAssert success, "Failed to open log file: " & logFile + setupAll: + # When this file is run with `-d:chronicles_sinks=textlines[file]`, we + # need to set the log file path at runtime, otherwise chronicles didn't seem to + # create a log file even when using an absolute path + when defaultChroniclesStream.outputs is (FileOutput,) and CodexLogsDir.len > 0: + let logFile = + CodexLogsDir / sanitize(getAppFilename().extractFilename & ".chronicles.log") + let success = defaultChroniclesStream.outputs[0].open(logFile, fmAppend) + doAssert success, "Failed to open log file: " & logFile setup: if var conf =? nodeConfigs.hardhat: diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index d63a3c97d2..c587ec316b 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -438,10 +438,10 @@ proc teardownTest( stdoutBytes = output.stdOut.len, stderrFile = test.logFile("stderr.log"), stderrBytes = output.stdErr.len - # test.logFile("stdout.log").appendFile(output.stdOut.stripAnsi) - # if test.status == IntegrationTestStatus.Error or - # (test.status == IntegrationTestStatus.Failed and test.output.isErrorLike): - # test.logFile("stderr.log").appendFile(output.stdErr.stripAnsi) + test.logFile("stdout.log").appendFile(output.stdOut.stripAnsi) + if test.status == IntegrationTestStatus.Error or + (test.status == IntegrationTestStatus.Failed and test.output.isErrorLike): + test.logFile("stderr.log").appendFile(output.stdErr.stripAnsi) except AsyncTimeoutError: error "Timeout waiting for stdout or stderr stream contents, nothing will be written to file" except IOError as e: From 114a46afa2e6a202aa43049f6034589dfcb50bb5 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 19 Mar 2025 12:59:06 +1100 Subject: [PATCH 108/178] Continuously read from stdout/stderr to prevent buffers from filling --- tests/integration/nodeprocess.nim | 4 +- tests/integration/testmanager.nim | 95 ++++++++++++++++++------------- 2 files changed, 58 insertions(+), 41 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 2852ea67bf..0dabff7787 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -92,8 +92,8 @@ proc captureOutput( node.onOutputLineCaptured(line) - await sleepAsync(1.millis) - await sleepAsync(1.millis) + await sleepAsync(1.nanos) + await sleepAsync(1.nanos) except CancelledError: discard # do not propagate as captureOutput was asyncSpawned except AsyncStreamError as e: diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index c587ec316b..f2711b62f1 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -75,8 +75,8 @@ type logsDir: string TestOutput = ref object - stdOut*: string - stdErr*: string + stdOut*: seq[string] + stdErr*: seq[string] exitCode*: ?int TestManagerError* = object of CatchableError @@ -135,7 +135,7 @@ func isErrorLike(output: ?!TestOutput): bool = # "LevelDB already build" line and blank line that is output to stdout. This # typically means that the exitCode == 1 (test failed) and if stdout is short, # we're dealing with an error - o =? output and o.stdOut.countLines() < 3 + o =? output and o.stdOut.len < 3 proc new*( _: type TestManager, @@ -276,29 +276,29 @@ proc printResult(test: IntegrationTest, printStdOut, printStdErr: bool) = if output =? test.output: if printStdErr: test.printOutputMarker(MarkerPosition.Start, "test file errors (stderr)") - echo output.stdErr + echo output.stdErr.join("\n") test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") of IntegrationTestStatus.Failed: if output =? test.output: if printStdErr: test.printOutputMarker(MarkerPosition.Start, "test file errors (stderr)") - echo output.stdErr + echo output.stdErr.join("\n") test.printOutputMarker(MarkerPosition.Finish, "test file errors (stderr)") if printStdOut: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOut.colorise + echo output.stdOut.join("\n").colorise test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgRed) of IntegrationTestStatus.Timeout: if printStdOut and output =? test.output: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOut.colorise + echo output.stdOut.join("\n").colorise test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgYellow) of IntegrationTestStatus.Ok: if printStdOut and output =? test.output: test.printOutputMarker(MarkerPosition.Start, "codex node output (stdout)") - echo output.stdOut.colorise + echo output.stdOut.join("\n").colorise test.printOutputMarker(MarkerPosition.Finish, "codex node output (stdout)") test.printResult(fgGreen) @@ -404,11 +404,7 @@ proc teardownHardhat(test: IntegrationTest, hardhat: Hardhat) {.async: (raises: test.manager.hardhats.keepItIf(it != hardhat) -proc teardownTest( - test: IntegrationTest, - stdOutStream, stdErrStream: - Future[seq[byte]].Raising([CancelledError, AsyncStreamError]), -) {.async: (raises: []).} = +proc teardownTest(test: IntegrationTest) {.async: (raises: []).} = logScope: test = test.config.name @@ -428,20 +424,15 @@ proc teardownTest( warn "Test process failed to terminate, check for zombies", error = e.msg try: - trace "Reading stdout and stderr streams" - output.stdOut = string.fromBytes(await noCancel stdOutStream.wait(1.seconds)) - output.stdErr = string.fromBytes(await noCancel stdErrStream.wait(1.seconds)) - test.output = success output - trace "Writing stdout and/or stderr streams to file", stdoutFile = test.logFile("stdout.log"), - stdoutBytes = output.stdOut.len, + stdoutLines = output.stdOut.len, stderrFile = test.logFile("stderr.log"), - stderrBytes = output.stdErr.len - test.logFile("stdout.log").appendFile(output.stdOut.stripAnsi) + stderrLines = output.stdErr.len + test.logFile("stdout.log").appendFile(output.stdOut.join("\n").stripAnsi) if test.status == IntegrationTestStatus.Error or (test.status == IntegrationTestStatus.Failed and test.output.isErrorLike): - test.logFile("stderr.log").appendFile(output.stdErr.stripAnsi) + test.logFile("stderr.log").appendFile(output.stdErr.join("\n").stripAnsi) except AsyncTimeoutError: error "Timeout waiting for stdout or stderr stream contents, nothing will be written to file" except IOError as e: @@ -450,23 +441,15 @@ proc teardownTest( error "Failed to read test process output stream", error = e.msg test.output = TestOutput.failure(e) test.status = IntegrationTestStatus.Error - finally: - await stdOutStream.cancelAndWait() - await stdErrStream.cancelAndWait() await test.process.closeWait() trace "Test process output streams closed" -proc teardown( - test: IntegrationTest, - hardhat: ?Hardhat, - stdOutStream, stdErrStream: - Future[seq[byte]].Raising([CancelledError, AsyncStreamError]), -) {.async: (raises: []).} = +proc teardown(test: IntegrationTest, hardhat: ?Hardhat) {.async: (raises: []).} = if test.config.startHardhat and hardhat =? hardhat and not hardhat.process.isNil: await test.teardownHardhat(hardhat) - await test.teardownTest(stdOutStream, stdErrStream) + await test.teardownTest() proc untilTimeout( fut: InternalRaisesFuture, timeout: Duration @@ -495,6 +478,35 @@ proc untilTimeout( else: # timeout raise newException(AsyncTimeoutError, "Timed out") +proc captureOutput( + process: AsyncProcessRef, stream: AsyncStreamReader +): Future[seq[string]] {.async: (raises: [CancelledError]).} = + var output: seq[string] = @[] + try: + while process.running.option == some true: + while (let line = await stream.readLine(0, "\n"); line != ""): + output.add line + await sleepAsync(1.nanos) + await sleepAsync(1.nanos) + return output + except CancelledError as e: + raise e + except AsyncStreamError as e: + error "Error reading output stream", error = e.msg + +proc captureProcessOutput( + test: IntegrationTest +): Future[(seq[string], seq[string])] {.async: (raises: [CancelledError]).} = + logScope: + name = test.config.name + + trace "Reading stdout and stderr streams from test process" + + let futStdOut = test.process.captureOutput(test.process.stdoutStream) + let futStdErr = test.process.captureOutput(test.process.stderrStream) + await allFutures(futStdOut, futStdErr) + return (await futStdOut, await futStdErr) + proc start(test: IntegrationTest) {.async: (raises: []).} = logScope: name = test.config.name @@ -531,6 +543,7 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = trace "Starting parallel integration test", command = test.command, timeout = test.manager.config.testTimeout test.printStart() + try: test.process = await startProcess( command = test.command, @@ -545,17 +558,17 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = test.status = IntegrationTestStatus.Error return - var output = TestOutput.new() - test.output = success(output) - let outputReader = test.process.stdoutStream.read() - let errorReader = test.process.stderrStream.read() - + var futCaptureOutput: Future[(seq[string], seq[string])].Raising([]) defer: # called at the end of successful runs but also when `start` is cancelled # (from `untilTimeout`) due to a timeout. This defer runs first before # `untilTimeout` exceptions are handled in `run` - await test.teardown(hardhat, outputReader, errorReader) - # doesn't raise CancelledError, so noCancel not needed + await test.teardown(hardhat) # doesn't raise CancelledError, so noCancel not needed + await futCaptureOutput.cancelAndWait() + + var output = TestOutput.new() + test.output = success(output) + futCaptureOutput = noCancel test.captureProcessOutput() output.exitCode = try: @@ -573,6 +586,10 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = error "Test failed to complete", error = e.msg return + let (stdOut, stdErr) = await futCaptureOutput + output.stdOut = stdOut + output.stdErr = stdErr + test.status = if output.exitCode == some QuitSuccess: IntegrationTestStatus.Ok From 41eca535e48cc8de4c7d104767122d4f05bf0ccc Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 19 Mar 2025 15:15:18 +1100 Subject: [PATCH 109/178] Remove noCancel from captureProcessOutput call --- tests/integration/testmanager.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index f2711b62f1..156dcc0584 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -558,7 +558,7 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = test.status = IntegrationTestStatus.Error return - var futCaptureOutput: Future[(seq[string], seq[string])].Raising([]) + var futCaptureOutput: Future[(seq[string], seq[string])].Raising([CancelledError]) defer: # called at the end of successful runs but also when `start` is cancelled # (from `untilTimeout`) due to a timeout. This defer runs first before @@ -568,7 +568,7 @@ proc start(test: IntegrationTest) {.async: (raises: []).} = var output = TestOutput.new() test.output = success(output) - futCaptureOutput = noCancel test.captureProcessOutput() + futCaptureOutput = test.captureProcessOutput() output.exitCode = try: From a3db38d77973a8913f6a06052623b190bf65f9a6 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 19 Mar 2025 16:45:08 +1100 Subject: [PATCH 110/178] remove noCancel from node startup in multinodes --- tests/integration/multinodes.nim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 4df1354e67..99e90ca5db 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -401,21 +401,21 @@ template multinodesuite*(name: string, body: untyped) = if var clients =? nodeConfigs.clients: failAndTeardownOnError "failed to start client nodes": for config in clients.configs: - let node = await noCancel startClientNode(config) + let node = await startClientNode(config) running.add RunningNode(role: Role.Client, node: node) await CodexProcess(node).updateBootstrapNodes() if var providers =? nodeConfigs.providers: failAndTeardownOnError "failed to start provider nodes": for config in providers.configs.mitems: - let node = await noCancel startProviderNode(config) + let node = await startProviderNode(config) running.add RunningNode(role: Role.Provider, node: node) await CodexProcess(node).updateBootstrapNodes() if var validators =? nodeConfigs.validators: failAndTeardownOnError "failed to start validator nodes": for config in validators.configs.mitems: - let node = await noCancel startValidatorNode(config) + let node = await startValidatorNode(config) running.add RunningNode(role: Role.Validator, node: node) # ensure that we have a recent block with a fresh timestamp From a8c573e8aa35258b729f7eb532cec4a1b43c46c8 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 19 Mar 2025 16:45:28 +1100 Subject: [PATCH 111/178] unittest2 > unittest1 --- tests/asynctest.nim | 4 ++-- tests/helpers/trackers.nim | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/asynctest.nim b/tests/asynctest.nim index 4db8277fd0..7c6a4afda6 100644 --- a/tests/asynctest.nim +++ b/tests/asynctest.nim @@ -1,3 +1,3 @@ -import pkg/asynctest/chronos/unittest2 +import pkg/asynctest/chronos/unittest -export unittest2 +export unittest diff --git a/tests/helpers/trackers.nim b/tests/helpers/trackers.nim index 898053c266..ed8c56920d 100644 --- a/tests/helpers/trackers.nim +++ b/tests/helpers/trackers.nim @@ -1,5 +1,5 @@ import pkg/codex/streams/storestream -import pkg/unittest2 +import std/unittest # From lip2p/tests/helpers const trackerNames = [StoreStreamTrackerName] From e1cc23d4fdf0754495c311fcdef1daa8ab9cf465 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 19 Mar 2025 16:48:27 +1100 Subject: [PATCH 112/178] Add "starting test" log to multinodes logging output for context --- tests/integration/multinodes.nim | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 99e90ca5db..0931dc73ef 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -110,6 +110,7 @@ template multinodesuite*(name: string, body: untyped) = currentTestName = tname nodeConfigs = startNodeConfigs test tname: + trace "Starting test", name = tname, nodeConfigs tbody proc updatePort(url: var string, port: int) = From 817c2bc82d72f6090af6e17f002d32fa724b1f5f Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 20 Mar 2025 13:39:09 +1100 Subject: [PATCH 113/178] remove unneeded exception from start raises --- tests/integration/testmanager.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 156dcc0584..5a9a0f4600 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -699,7 +699,7 @@ proc withBorder( if borders.contains(Border.Right): result &= " |" -proc printResult(manager: TestManager) {.raises: [TestManagerError].} = +proc printResult(manager: TestManager) = var successes = 0 var totalDurationSerial: Duration echo "" @@ -753,7 +753,7 @@ proc printResult(manager: TestManager) {.raises: [TestManagerError].} = proc start*( manager: TestManager -) {.async: (raises: [CancelledError, TestManagerError]).} = +) {.async: (raises: [CancelledError]).} = if manager.config.showContinuousStatusUpdates: let fut = manager.continuallyShowUpdates() manager.trackedFutures.track fut From ac588b99cead54a52d22e9a8a87488c8416cb651 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 21 Mar 2025 11:23:21 +1100 Subject: [PATCH 114/178] write to stdout/stderr as the stream is read, rearrange node stop logging --- tests/integration/codexprocess.nim | 2 +- tests/integration/nodeprocess.nim | 2 +- tests/integration/testmanager.nim | 40 ++++++++++-------------------- 3 files changed, 15 insertions(+), 29 deletions(-) diff --git a/tests/integration/codexprocess.nim b/tests/integration/codexprocess.nim index 1a41a65872..4a0e1c6bcd 100644 --- a/tests/integration/codexprocess.nim +++ b/tests/integration/codexprocess.nim @@ -113,9 +113,9 @@ method stop*(node: CodexProcess) {.async: (raises: []).} = logScope: nodeName = node.name + trace "stopping codex client" await procCall NodeProcess(node).stop() - trace "stopping codex client" if client =? node.client: await client.close() node.client = none CodexClient diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 0dabff7787..fed42a0d25 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -127,7 +127,6 @@ method stop*( if exitCode > 0 and exitCode != 143 and # 143 = SIGTERM (initiated above) exitCode != expectedErrCode: warn "process exited with a non-zero exit code", exitCode - trace "node stopped", exitCode except CatchableError: try: let forcedExitCode = await noCancel node.process.killAndWaitForExit(3.seconds) @@ -150,6 +149,7 @@ method stop*( asyncSpawn closeProcessStreams() else: await closeProcessStreams() + trace "node stopped", exitCode proc waitUntilOutput*( node: NodeProcess, output: string diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 5a9a0f4600..764a25de04 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -415,6 +415,7 @@ proc teardownTest(test: IntegrationTest) {.async: (raises: []).} = if not test.process.isNil: var output = test.output.expect("should have output value") if test.process.running |? false: + trace "Test process still running, terminating..." try: output.exitCode = some (await noCancel test.process.terminateAndWaitForExit(1.seconds)) @@ -423,25 +424,6 @@ proc teardownTest(test: IntegrationTest) {.async: (raises: []).} = let e = getCurrentException() warn "Test process failed to terminate, check for zombies", error = e.msg - try: - trace "Writing stdout and/or stderr streams to file", - stdoutFile = test.logFile("stdout.log"), - stdoutLines = output.stdOut.len, - stderrFile = test.logFile("stderr.log"), - stderrLines = output.stdErr.len - test.logFile("stdout.log").appendFile(output.stdOut.join("\n").stripAnsi) - if test.status == IntegrationTestStatus.Error or - (test.status == IntegrationTestStatus.Failed and test.output.isErrorLike): - test.logFile("stderr.log").appendFile(output.stdErr.join("\n").stripAnsi) - except AsyncTimeoutError: - error "Timeout waiting for stdout or stderr stream contents, nothing will be written to file" - except IOError as e: - warn "Failed to write test stdout and/or stderr to file", error = e.msg - except AsyncStreamError as e: - error "Failed to read test process output stream", error = e.msg - test.output = TestOutput.failure(e) - test.status = IntegrationTestStatus.Error - await test.process.closeWait() trace "Test process output streams closed" @@ -479,14 +461,18 @@ proc untilTimeout( raise newException(AsyncTimeoutError, "Timed out") proc captureOutput( - process: AsyncProcessRef, stream: AsyncStreamReader + process: AsyncProcessRef, stream: AsyncStreamReader, filePath: string ): Future[seq[string]] {.async: (raises: [CancelledError]).} = var output: seq[string] = @[] try: while process.running.option == some true: while (let line = await stream.readLine(0, "\n"); line != ""): - output.add line - await sleepAsync(1.nanos) + try: + output.add line + filePath.appendFile(line.stripAnsi) + await sleepAsync(1.nanos) + except IOError as e: + warn "Failed to write test stdout and/or stderr to file", error = e.msg await sleepAsync(1.nanos) return output except CancelledError as e: @@ -502,8 +488,10 @@ proc captureProcessOutput( trace "Reading stdout and stderr streams from test process" - let futStdOut = test.process.captureOutput(test.process.stdoutStream) - let futStdErr = test.process.captureOutput(test.process.stderrStream) + let futStdOut = + test.process.captureOutput(test.process.stdoutStream, test.logFile("stdout.log")) + let futStdErr = + test.process.captureOutput(test.process.stderrStream, test.logFile("stderr.log")) await allFutures(futStdOut, futStdErr) return (await futStdOut, await futStdErr) @@ -751,9 +739,7 @@ proc printResult(manager: TestManager) = timeSavedEst = &"{relativeTimeSaved}%", passing = &"{successes} / {manager.tests.len}" -proc start*( - manager: TestManager -) {.async: (raises: [CancelledError]).} = +proc start*(manager: TestManager) {.async: (raises: [CancelledError]).} = if manager.config.showContinuousStatusUpdates: let fut = manager.continuallyShowUpdates() manager.trackedFutures.track fut From 84de0abf6782bf52318cb59905cc193ba5ac43d3 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 21 Mar 2025 11:37:02 +1100 Subject: [PATCH 115/178] fix compilation error --- tests/integration/nodeprocess.nim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index fed42a0d25..3e986d079f 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -122,8 +122,9 @@ method stop*( await node.trackedFutures.cancelTracked() if not node.process.isNil: trace "terminating node process..." + var exitCode = -1 try: - let exitCode = await noCancel node.process.terminateAndWaitForExit(2.seconds) + exitCode = await noCancel node.process.terminateAndWaitForExit(2.seconds) if exitCode > 0 and exitCode != 143 and # 143 = SIGTERM (initiated above) exitCode != expectedErrCode: warn "process exited with a non-zero exit code", exitCode From 3b51d24b097d0461c0c5f773ff0e0323d8cdbde7 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 21 Mar 2025 12:18:26 +1100 Subject: [PATCH 116/178] add new line to stdout/stderr logs when logging lines --- tests/integration/testmanager.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 764a25de04..a61d8fbaf2 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -469,7 +469,7 @@ proc captureOutput( while (let line = await stream.readLine(0, "\n"); line != ""): try: output.add line - filePath.appendFile(line.stripAnsi) + filePath.appendFile(line & "\n".stripAnsi) await sleepAsync(1.nanos) except IOError as e: warn "Failed to write test stdout and/or stderr to file", error = e.msg From 91570b46aeee24257c983495956302e2d03ea5da Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 21 Mar 2025 18:31:03 +1100 Subject: [PATCH 117/178] attempt to kill windows hardhat process Windows hangs when attempting to hardhat's process streams, so try to kill the process externally. TODO: This doesn't actually kill the process, as the pid given by chronos is an msys2 pid, and the command is used to kill a windows process. `ps -ef` in msys2 also doesn't show hardhat running as a process, so the only way to kill the process is to kill it with the windows pid. So we need to figure out a way to get a windows pid from the msys2 pid. --- tests/integration/nodeprocess.nim | 41 ++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 3e986d079f..e0136fcae5 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -5,6 +5,7 @@ import pkg/chronicles import pkg/chronos/asyncproc import pkg/libp2p import std/os +import std/strformat import std/strutils import codex/conf import codex/utils/exceptions @@ -78,11 +79,9 @@ proc captureOutput( trace "waiting for output", output - let stream = node.process.stdoutStream - try: while node.process.running.option == some true: - while (let line = await stream.readLine(0, node.outputLineEndings); line != ""): + while (let line = await node.process.stdoutStream.readLine(0, node.outputLineEndings); line != ""): if node.debug: # would be nice if chronicles could parse and display with colors echo line @@ -121,13 +120,14 @@ method stop*( await node.trackedFutures.cancelTracked() if not node.process.isNil: - trace "terminating node process..." - var exitCode = -1 + let processId = node.process.processId + trace "terminating node process...", processId try: - exitCode = await noCancel node.process.terminateAndWaitForExit(2.seconds) + let exitCode = await noCancel node.process.terminateAndWaitForExit(2.seconds) if exitCode > 0 and exitCode != 143 and # 143 = SIGTERM (initiated above) exitCode != expectedErrCode: warn "process exited with a non-zero exit code", exitCode + trace "node process terminated", exitCode except CatchableError: try: let forcedExitCode = await noCancel node.process.killAndWaitForExit(3.seconds) @@ -140,17 +140,34 @@ method stop*( proc closeProcessStreams() {.async: (raises: []).} = trace "closing node process' streams" await node.process.closeWait() - node.process = nil trace "node process' streams closed" - # windows will hang waiting to close process streams, so we can asyncspawn - # in the hopes that it will eventually close them without hanging the - # process + # Windows hangs when attempting to hardhat's process streams, + # so try to kill the process externally. + # TODO: Chronos gives us an msys2 processid, and this command is used + # to kill a windows processid, so we need to run a command to + # get the windows pid from the msys pid first. when defined(windows): - asyncSpawn closeProcessStreams() + if node.name.contains("hardhat"): + trace "killing process by id", processId + try: + let cmdResult = await execCommandEx(&"wmic process where processid={processid} delete") + if cmdResult.status > 0: + error "failed to kill process by id", processId, exitCode = cmdResult.status, error = cmdResult.stdError + else: + error "successfully killed process by id", processId, exitCode = cmdResult.status, output = cmdResult.stdOutput + except CancelledError as e: + discard + except AsyncProcessError as e: + error "Failed to kill process by id", processId, error = e.msg + else: + await closeProcessStreams() else: await closeProcessStreams() - trace "node stopped", exitCode + + node.process = nil + + trace "node stopped" proc waitUntilOutput*( node: NodeProcess, output: string From c16f8d38a2cea1063ce0901dbec4c9947aa702b2 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 21 Mar 2025 18:33:57 +1100 Subject: [PATCH 118/178] formatting --- tests/integration/nodeprocess.nim | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index e0136fcae5..40bfdd5c37 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -81,7 +81,11 @@ proc captureOutput( try: while node.process.running.option == some true: - while (let line = await node.process.stdoutStream.readLine(0, node.outputLineEndings); line != ""): + while ( + let line = await node.process.stdoutStream.readLine(0, node.outputLineEndings) + line != "" + ) + : if node.debug: # would be nice if chronicles could parse and display with colors echo line @@ -151,11 +155,14 @@ method stop*( if node.name.contains("hardhat"): trace "killing process by id", processId try: - let cmdResult = await execCommandEx(&"wmic process where processid={processid} delete") + let cmdResult = + await execCommandEx(&"wmic process where processid={processid} delete") if cmdResult.status > 0: - error "failed to kill process by id", processId, exitCode = cmdResult.status, error = cmdResult.stdError + error "failed to kill process by id", + processId, exitCode = cmdResult.status, error = cmdResult.stdError else: - error "successfully killed process by id", processId, exitCode = cmdResult.status, output = cmdResult.stdOutput + error "successfully killed process by id", + processId, exitCode = cmdResult.status, output = cmdResult.stdOutput except CancelledError as e: discard except AsyncProcessError as e: @@ -166,7 +173,7 @@ method stop*( await closeProcessStreams() node.process = nil - + trace "node stopped" proc waitUntilOutput*( From 90055226339f3aa408a28a9a5caf739f99247e18 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Fri, 21 Mar 2025 14:14:48 +0100 Subject: [PATCH 119/178] Reduce the number of requests for asserts in tests --- tests/helpers.nim | 11 +++++++++++ tests/integration/testmarketplace.nim | 13 +++++++------ tests/integration/testproofs.nim | 5 +++-- tests/integration/testsales.nim | 3 ++- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/tests/helpers.nim b/tests/helpers.nim index b48b787edd..4b55646932 100644 --- a/tests/helpers.nim +++ b/tests/helpers.nim @@ -35,3 +35,14 @@ proc allFuturesThrowing*[T, E]( # https://github.com/nim-lang/Nim/issues/23432 futs: varargs[InternalRaisesFuture[T, E]] ): Future[void] = allFuturesThrowing(futs.mapIt(FutureBase(it))) + +template safeEventually*(expression: untyped, waitingTime = 250, timeout = 5000): bool = + proc safeEventually(): Future[bool] {.async.} = + let endTime = getTime() + initDuration(milliseconds = timeout) + while not expression: + if endTime < getTime(): + return false + await sleepAsync(waitingTime) + return true + + await safeEventually() diff --git a/tests/integration/testmarketplace.nim b/tests/integration/testmarketplace.nim index d66e76133c..e06b012183 100644 --- a/tests/integration/testmarketplace.nim +++ b/tests/integration/testmarketplace.nim @@ -6,6 +6,7 @@ import ../contracts/deployment import ./marketplacesuite import ./twonodes import ./nodeconfigs +from ../helpers import safeEventually marketplacesuite "Marketplace": let marketplaceConfig = NodeConfigs( @@ -61,7 +62,7 @@ marketplacesuite "Marketplace": tolerance = ecTolerance, ) - check eventually( + check safeEventually( await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 ) let purchase = (await client.getPurchase(id)).get @@ -108,7 +109,7 @@ marketplacesuite "Marketplace": tolerance = ecTolerance, ) - check eventually( + check safeEventually( await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 ) let purchase = (await client.getPurchase(id)).get @@ -124,11 +125,11 @@ marketplacesuite "Marketplace": # Checking that the hosting node received reward for at least the time between let slotSize = slotSize(blocks, ecNodes, ecTolerance) let pricePerSlotPerSecond = minPricePerBytePerSecond * slotSize - check eventually (await token.balanceOf(hostAccount)) - startBalanceHost >= + check safeEventually (await token.balanceOf(hostAccount)) - startBalanceHost >= (duration - 5 * 60).u256 * pricePerSlotPerSecond * ecNodes.u256 # Checking that client node receives some funds back that were not used for the host nodes - check eventually( + check safeEventually( (await token.balanceOf(clientAccount)) - clientBalanceBeforeFinished > 0, timeout = 10 * 1000, # give client a bit of time to withdraw its funds ) @@ -298,12 +299,12 @@ marketplacesuite "Marketplace payouts": let slotSize = slotSize(blocks, ecNodes, ecTolerance) let pricePerSlotPerSecond = minPricePerBytePerSecond * slotSize - check eventually ( + check safeEventually ( let endBalanceProvider = (await token.balanceOf(provider.ethAccount)) endBalanceProvider > startBalanceProvider and endBalanceProvider < startBalanceProvider + expiry.u256 * pricePerSlotPerSecond ) - check eventually( + check safeEventually( ( let endBalanceClient = (await token.balanceOf(client.ethAccount)) let endBalanceProvider = (await token.balanceOf(provider.ethAccount)) diff --git a/tests/integration/testproofs.nim b/tests/integration/testproofs.nim index c49b7b6f63..c85c580ebf 100644 --- a/tests/integration/testproofs.nim +++ b/tests/integration/testproofs.nim @@ -7,6 +7,7 @@ import ../codex/helpers import ../examples import ./marketplacesuite import ./nodeconfigs +from ../helpers import safeEventually export logutils @@ -64,7 +65,7 @@ marketplacesuite "Hosts submit regular proofs": let slotSize = slotSize(blocks, ecNodes, ecTolerance) - check eventually( + check safeEventually( await client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000 ) @@ -140,7 +141,7 @@ marketplacesuite "Simulate invalid proofs": ) let requestId = (await client0.requestId(purchaseId)).get - check eventually( + check safeEventually( await client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000 ) diff --git a/tests/integration/testsales.nim b/tests/integration/testsales.nim index ef9999908e..d8ae9ce2ea 100644 --- a/tests/integration/testsales.nim +++ b/tests/integration/testsales.nim @@ -8,6 +8,7 @@ import ../contracts/time import ./codexconfig import ./codexclient import ./nodeconfigs +from ../helpers import safeEventually proc findItem[T](items: seq[T], item: T): ?!T = for tmp in items: @@ -141,7 +142,7 @@ multinodesuite "Sales": ) ).get - check eventually( + check safeEventually( await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 ) let updatedAvailability = From cb20b54213cdcc298727a16df077c18beff59a61 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 13:27:55 +1100 Subject: [PATCH 120/178] fix: forcefully kill windows hardhat processes after termination On windows, termination of hardhat processes would not actually kill the process, and then closing the process' streams would then hang the calling nim process. To get around this, the process is now killed externally using a script, winkillhardhat.sh. This script first queries open processes by inspecting the command line value of all "node.exe" processes, searching for "vendor/codex-contracts-eth" and for the port parameter it was started with. After querying, the process is killed using the `Stop-Process` powershell command (passing the pid of the windows process). --- tests/integration/codexprocess.nim | 5 + tests/integration/hardhatprocess.nim | 63 +++++++++++ tests/integration/nodeprocess.nim | 33 ------ tests/integration/scripts/winkillhardhat.sh | 110 ++++++++++++++++++++ 4 files changed, 178 insertions(+), 33 deletions(-) create mode 100644 tests/integration/scripts/winkillhardhat.sh diff --git a/tests/integration/codexprocess.nim b/tests/integration/codexprocess.nim index 4a0e1c6bcd..67adfae734 100644 --- a/tests/integration/codexprocess.nim +++ b/tests/integration/codexprocess.nim @@ -116,6 +116,11 @@ method stop*(node: CodexProcess) {.async: (raises: []).} = trace "stopping codex client" await procCall NodeProcess(node).stop() + if not node.process.isNil: + trace "closing node process' streams" + await node.process.closeWait() + trace "node process' streams closed" + if client =? node.client: await client.close() node.client = none CodexClient diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index c8e0683598..82d34fceff 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -94,6 +94,17 @@ method start*( HardhatProcessError, "failed to start hardhat process: " & parent.msg, parent ) +proc port(node: HardhatProcess): ?int = + var next = false + for arg in node.arguments: + # TODO: move to constructor + if next: + return parseInt(arg).catch.option + if arg.contains "--port": + next = true + + return none int + proc startNode*( _: type HardhatProcess, args: seq[string], @@ -108,6 +119,7 @@ proc startNode*( var arguments = newSeq[string]() for arg in args: + # TODO: move to constructor if arg.contains "--log-file=": logFilePath = arg.split("=")[1] else: @@ -126,6 +138,7 @@ proc startNode*( await hardhat.start() + # TODO: move to constructor if logFilePath != "": hardhat.logFile = some hardhat.openLogFile(logFilePath) @@ -146,13 +159,63 @@ method onOutputLineCaptured(node: HardhatProcess, line: string) = discard logFile.closeFile() node.logFile = none IoHandle +proc killHardhatByPort( + port: int +): Future[CommandExResponse] {. + async: ( + raises: [ + AsyncProcessError, AsyncProcessTimeoutError, CancelledError, ValueError, OSError + ] + ) +.} = + let path = splitFile(currentSourcePath()).dir / "scripts" / "winkillhardhat.sh" + let cmd = &"{absolutePath(path)} killvendorport {port}" + trace "Forcefully killing windows hardhat process", port, cmd + return await execCommandEx(cmd, timeout = 5.seconds) + +proc closeProcessStreams(node: HardhatProcess) {.async: (raises: []).} = + when not defined(windows): + if not node.process.isNil: + trace "closing node process' streams" + await node.process.closeWait() + trace "node process' streams closed" + else: + # Windows hangs when attempting to close hardhat's process streams, so try + # to kill the process externally. + without port =? node.port: + error "Failed to get port from Hardhat args" + return + try: + let cmdResult = await killHardhatByPort(port) + if cmdResult.status > 0: + error "Failed to forcefully kill windows hardhat process", + port, exitCode = cmdResult.status, stderr = cmdResult.stdError + else: + trace "Successfully killed windows hardhat process by force", + port, exitCode = cmdResult.status, stdout = cmdResult.stdOutput + except ValueError, OSError: + let eMsg = getCurrentExceptionMsg() + error "Failed to forcefully kill windows hardhat process, bad path to command", + error = eMsg + except CancelledError as e: + discard + except AsyncProcessError as e: + error "Failed to forcefully kill windows hardhat process", port, error = e.msg + except AsyncProcessTimeoutError as e: + error "Timeout while forcefully killing windows hardhat process", + port, error = e.msg + method stop*(node: HardhatProcess) {.async: (raises: []).} = # terminate the process await procCall NodeProcess(node).stop() + await node.closeProcessStreams() + if logFile =? node.logFile: trace "closing hardhat log file" discard logFile.closeFile() + node.process = nil + method removeDataDir*(node: HardhatProcess) = discard diff --git a/tests/integration/nodeprocess.nim b/tests/integration/nodeprocess.nim index 40bfdd5c37..827a4b0f61 100644 --- a/tests/integration/nodeprocess.nim +++ b/tests/integration/nodeprocess.nim @@ -140,39 +140,6 @@ method stop*( warn "failed to kill node process in time, it will be killed when the parent process exits", error = e.msg writeStackTrace() - finally: - proc closeProcessStreams() {.async: (raises: []).} = - trace "closing node process' streams" - await node.process.closeWait() - trace "node process' streams closed" - - # Windows hangs when attempting to hardhat's process streams, - # so try to kill the process externally. - # TODO: Chronos gives us an msys2 processid, and this command is used - # to kill a windows processid, so we need to run a command to - # get the windows pid from the msys pid first. - when defined(windows): - if node.name.contains("hardhat"): - trace "killing process by id", processId - try: - let cmdResult = - await execCommandEx(&"wmic process where processid={processid} delete") - if cmdResult.status > 0: - error "failed to kill process by id", - processId, exitCode = cmdResult.status, error = cmdResult.stdError - else: - error "successfully killed process by id", - processId, exitCode = cmdResult.status, output = cmdResult.stdOutput - except CancelledError as e: - discard - except AsyncProcessError as e: - error "Failed to kill process by id", processId, error = e.msg - else: - await closeProcessStreams() - else: - await closeProcessStreams() - - node.process = nil trace "node stopped" diff --git a/tests/integration/scripts/winkillhardhat.sh b/tests/integration/scripts/winkillhardhat.sh new file mode 100644 index 0000000000..32730d7d21 --- /dev/null +++ b/tests/integration/scripts/winkillhardhat.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +# List all node.exe processes with command line arguments +list_node_processes() { + powershell.exe -Command "Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Select-Object ProcessId, Name, CommandLine | Format-Table -AutoSize" +} + +# Find node processes containing vendor\codex-contracts-eth in command line +find_vendor_node_processes() { + echo "Looking for node processes with 'vendor\\codex-contracts-eth' in command line..." + powershell.exe -Command "Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match 'vendor\\\\codex-contracts-eth' } | Select-Object ProcessId, Name, CommandLine | Format-Table -AutoSize" +} + +# Find node processes running on a specific port +find_node_by_port() { + local port=$1 + echo "Looking for node processes running on port $port..." + powershell.exe -Command "Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match '--port $port' } | Select-Object ProcessId, Name, CommandLine | Format-Table -AutoSize" +} + +# Kill all node.exe processes containing vendor\codex-contracts-eth +kill_vendor_node_processes() { + echo "Finding and killing node.exe processes containing 'vendor\\codex-contracts-eth'..." + powershell.exe -Command " + \$processes = Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match 'vendor\\\\codex-contracts-eth' }; + if (\$processes) { + foreach (\$process in \$processes) { + Stop-Process -Id \$process.ProcessId -Force; + Write-Host \"Killed process \$(\$process.ProcessId)\"; + } + } else { + Write-Host \"No matching node.exe processes found\"; + } + " +} + +# Kill node.exe process running on a specific port +kill_node_by_port() { + local port=$1 + echo "Finding and killing node.exe process running on port $port..." + powershell.exe -Command " + \$processes = Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match '--port $port' }; + if (\$processes) { + foreach (\$process in \$processes) { + Stop-Process -Id \$process.ProcessId -Force; + Write-Host \"Killed process \$(\$process.ProcessId) running on port $port\"; + } + } else { + Write-Host \"No node.exe process found running on port $port\"; + } + " +} + +# Kill node.exe process with both vendor string and specific port +kill_vendor_node_by_port() { + local port=$1 + echo "Finding and killing node.exe process with 'vendor\\codex-contracts-eth' running on port $port..." + powershell.exe -Command " + \$processes = Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match 'vendor\\\\codex-contracts-eth' -and \$_.CommandLine -match '--port $port' }; + if (\$processes) { + foreach (\$process in \$processes) { + Stop-Process -Id \$process.ProcessId -Force; + Write-Host \"Killed process \$(\$process.ProcessId) running on port $port\"; + } + } else { + Write-Host \"No matching node.exe process found running on port $port\"; + } + " +} + +# Check if being run directly or sourced +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + # If run directly (not sourced), provide command line interface + case "$1" in + list) + list_node_processes + ;; + find) + find_vendor_node_processes + ;; + findport) + if [ -z "$2" ]; then + echo "Usage: $0 findport PORT_NUMBER" + exit 1 + fi + find_node_by_port "$2" + ;; + killall) + kill_vendor_node_processes + ;; + killport) + if [ -z "$2" ]; then + echo "Usage: $0 killport PORT_NUMBER" + exit 1 + fi + kill_node_by_port "$2" + ;; + killvendorport) + if [ -z "$2" ]; then + echo "Usage: $0 killvendorport PORT_NUMBER" + exit 1 + fi + kill_vendor_node_by_port "$2" + ;; + *) + echo "Usage: $0 {list|find|findport PORT|killall|killport PORT|killvendorport PORT}" + exit 1 + ;; + esac +fi \ No newline at end of file From 8b192df271efe25870167e7d93491cbaf77d9aa0 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 13:28:12 +1100 Subject: [PATCH 121/178] safeEventually > eventuallySafe --- tests/helpers.nim | 8 ++++---- tests/integration/testmarketplace.nim | 14 +++++++------- tests/integration/testproofs.nim | 6 +++--- tests/integration/testsales.nim | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/helpers.nim b/tests/helpers.nim index 4b55646932..429a30a7f0 100644 --- a/tests/helpers.nim +++ b/tests/helpers.nim @@ -36,13 +36,13 @@ proc allFuturesThrowing*[T, E]( # https://github.com/nim-lang/Nim/issues/23432 ): Future[void] = allFuturesThrowing(futs.mapIt(FutureBase(it))) -template safeEventually*(expression: untyped, waitingTime = 250, timeout = 5000): bool = - proc safeEventually(): Future[bool] {.async.} = +template eventuallySafe*(expression: untyped, timeout=5000, pollInterval=1000)): bool = + proc eventuallySafe(): Future[bool] {.async.} = let endTime = getTime() + initDuration(milliseconds = timeout) while not expression: if endTime < getTime(): return false - await sleepAsync(waitingTime) + await sleepAsync(pollInterval) return true - await safeEventually() + await eventuallySafe() diff --git a/tests/integration/testmarketplace.nim b/tests/integration/testmarketplace.nim index e06b012183..9c9c1618f3 100644 --- a/tests/integration/testmarketplace.nim +++ b/tests/integration/testmarketplace.nim @@ -6,7 +6,7 @@ import ../contracts/deployment import ./marketplacesuite import ./twonodes import ./nodeconfigs -from ../helpers import safeEventually +from ../helpers import eventuallySafe marketplacesuite "Marketplace": let marketplaceConfig = NodeConfigs( @@ -62,7 +62,7 @@ marketplacesuite "Marketplace": tolerance = ecTolerance, ) - check safeEventually( + check eventuallySafe( await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 ) let purchase = (await client.getPurchase(id)).get @@ -109,7 +109,7 @@ marketplacesuite "Marketplace": tolerance = ecTolerance, ) - check safeEventually( + check eventuallySafe( await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 ) let purchase = (await client.getPurchase(id)).get @@ -125,11 +125,11 @@ marketplacesuite "Marketplace": # Checking that the hosting node received reward for at least the time between let slotSize = slotSize(blocks, ecNodes, ecTolerance) let pricePerSlotPerSecond = minPricePerBytePerSecond * slotSize - check safeEventually (await token.balanceOf(hostAccount)) - startBalanceHost >= + check eventuallySafe (await token.balanceOf(hostAccount)) - startBalanceHost >= (duration - 5 * 60).u256 * pricePerSlotPerSecond * ecNodes.u256 # Checking that client node receives some funds back that were not used for the host nodes - check safeEventually( + check eventuallySafe( (await token.balanceOf(clientAccount)) - clientBalanceBeforeFinished > 0, timeout = 10 * 1000, # give client a bit of time to withdraw its funds ) @@ -299,12 +299,12 @@ marketplacesuite "Marketplace payouts": let slotSize = slotSize(blocks, ecNodes, ecTolerance) let pricePerSlotPerSecond = minPricePerBytePerSecond * slotSize - check safeEventually ( + check eventuallySafe ( let endBalanceProvider = (await token.balanceOf(provider.ethAccount)) endBalanceProvider > startBalanceProvider and endBalanceProvider < startBalanceProvider + expiry.u256 * pricePerSlotPerSecond ) - check safeEventually( + check eventuallySafe( ( let endBalanceClient = (await token.balanceOf(client.ethAccount)) let endBalanceProvider = (await token.balanceOf(provider.ethAccount)) diff --git a/tests/integration/testproofs.nim b/tests/integration/testproofs.nim index c85c580ebf..05e9901de3 100644 --- a/tests/integration/testproofs.nim +++ b/tests/integration/testproofs.nim @@ -7,7 +7,7 @@ import ../codex/helpers import ../examples import ./marketplacesuite import ./nodeconfigs -from ../helpers import safeEventually +from ../helpers import eventuallySafe export logutils @@ -65,7 +65,7 @@ marketplacesuite "Hosts submit regular proofs": let slotSize = slotSize(blocks, ecNodes, ecTolerance) - check safeEventually( + check eventuallySafe( await client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000 ) @@ -141,7 +141,7 @@ marketplacesuite "Simulate invalid proofs": ) let requestId = (await client0.requestId(purchaseId)).get - check safeEventually( + check eventuallySafe( await client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000 ) diff --git a/tests/integration/testsales.nim b/tests/integration/testsales.nim index d8ae9ce2ea..75b5bf1023 100644 --- a/tests/integration/testsales.nim +++ b/tests/integration/testsales.nim @@ -8,7 +8,7 @@ import ../contracts/time import ./codexconfig import ./codexclient import ./nodeconfigs -from ../helpers import safeEventually +from ../helpers import eventuallySafe proc findItem[T](items: seq[T], item: T): ?!T = for tmp in items: @@ -142,7 +142,7 @@ multinodesuite "Sales": ) ).get - check safeEventually( + check eventuallySafe( await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 ) let updatedAvailability = From 6e1e8a0e5e8856b9300c9fb7c090eef6ace57900 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 13:44:13 +1100 Subject: [PATCH 122/178] Remove new implementation of eventuallySafe by overidding the default params of eventually With this fix in, there is no need to use the asynctest update that sets longer defaults for eventually, so downgrade asynctest --- tests/helpers.nim | 16 ++++++---------- vendor/asynctest | 2 +- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/tests/helpers.nim b/tests/helpers.nim index 429a30a7f0..cff99e6025 100644 --- a/tests/helpers.nim +++ b/tests/helpers.nim @@ -4,6 +4,8 @@ import helpers/templeveldb import std/times import std/sequtils, chronos +import ./asynctest + export multisetup, trackers, templeveldb ### taken from libp2p errorhelpers.nim @@ -36,13 +38,7 @@ proc allFuturesThrowing*[T, E]( # https://github.com/nim-lang/Nim/issues/23432 ): Future[void] = allFuturesThrowing(futs.mapIt(FutureBase(it))) -template eventuallySafe*(expression: untyped, timeout=5000, pollInterval=1000)): bool = - proc eventuallySafe(): Future[bool] {.async.} = - let endTime = getTime() + initDuration(milliseconds = timeout) - while not expression: - if endTime < getTime(): - return false - await sleepAsync(pollInterval) - return true - - await eventuallySafe() +template eventuallySafe*( + expression: untyped, timeout = 5000, pollInterval = 1000 +): bool = + eventually(expression, timeout, pollInterval) diff --git a/vendor/asynctest b/vendor/asynctest index 73c08f77af..32df0f19d6 160000 --- a/vendor/asynctest +++ b/vendor/asynctest @@ -1 +1 @@ -Subproject commit 73c08f77afc5cc2a5628d00f915b97bf72f70c9b +Subproject commit 32df0f19d6e0e6f84c762cf8de7361ddb419f4ba From 88264beb80cf7d84dd0dcf632f53d45934ebffb0 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:08:05 +1100 Subject: [PATCH 123/178] fix makefile: DEBUG enables DebugHardhat --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9e694b8fd1..11361fae98 100644 --- a/Makefile +++ b/Makefile @@ -145,7 +145,7 @@ ifdef DEBUG TEST_PARAMS := $(TEST_PARAMS) -d:DebugTestHarness=$(DEBUG) TEST_PARAMS := $(TEST_PARAMS) -d:NoCodexLogFilters=$(DEBUG) TEST_PARAMS := $(TEST_PARAMS) -d:ShowContinuousStatusUpdates=$(DEBUG) - TEST_PARAMS := $(TEST_PARAMS) -d:DebugHardhat=$(DEBUG_HARDHAT) + TEST_PARAMS := $(TEST_PARAMS) -d:DebugHardhat=$(DEBUG) endif ifdef TEST_TIMEOUT TEST_PARAMS := $(TEST_PARAMS) -d:TestTimeout=$(TEST_TIMEOUT) From ebc71838b8cd3038127b5fdc759b257a8df30a24 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:09:20 +1100 Subject: [PATCH 124/178] re-enable debug logging in codex nodes Since the HttpClient now supports async, re-enable debug logging in the Codex nodes --- tests/integration/multinodes.nim | 6 +++--- tests/testIntegration.nim | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 0931dc73ef..a0a45b3bbf 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -186,9 +186,9 @@ template multinodesuite*(name: string, body: untyped) = " because logfile path could not be obtained: " & e.msg, e, ) - # TODO: uncomment once HttpClient has been asyncified - # when CodexLogLevel != "": - # config.addCliOption("--log-level", CodexLogLevel) + + when CodexLogLevel != "": + config.addCliOption("--log-level", CodexLogLevel) var apiPort, discPort: int withLock(codexPortLock): diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index b83ffefada..8220898fae 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -32,6 +32,7 @@ const TestConfigs = # Echoes stdout from Hardhat process const DebugHardhat {.booldefine.} = false +# When true, shows all TRACE logs in Codex nodes' chronicles logs const NoCodexLogFilters {.booldefine.} = false # Shows test status updates at time intervals. Useful for running locally with # active terminal interaction. Set to false for unattended runs, eg CI. From 660a0e27b5e9aec7b9eb1b8ee587620dce6b2c9d Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:40:13 +1100 Subject: [PATCH 125/178] Don't store hardhat logs in memory and do not print to term even if DebugHardhat=true Hardhat output is logged to file in hardhat.log for each test, and printing to screen is not necessarily needed as it is already logged to file and can create clutter in the output, so stop writing logging output to memory and writing to screen. --- tests/integration/testmanager.nim | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index a61d8fbaf2..6b10e94a29 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -18,7 +18,6 @@ import ../examples type Hardhat = ref object process: HardhatProcess - output: seq[string] port: int TestManagerConfig* = object # Echoes stdout from Hardhat process @@ -199,9 +198,6 @@ proc startHardhat( let hardhat = Hardhat.new() - proc onOutputLineCaptured(line: string) {.raises: [].} = - hardhat.output.add line - withLock(test.manager.hardhatPortLock): port = await nextFreePort(test.manager.lastHardhatPort + 1) test.manager.lastHardhatPort = port @@ -215,7 +211,7 @@ proc startHardhat( try: withLock(test.manager.hardhatProcessLock): let node = await HardhatProcess.startNode( - args, false, "hardhat for '" & test.config.name & "'", onOutputLineCaptured + args, false, "hardhat for '" & test.config.name & "'" ) hardhat.process = node hardhat.port = port @@ -224,11 +220,6 @@ proc startHardhat( except CancelledError as e: raise e except CatchableError as e: - if not hardhat.isNil: - test.printOutputMarker(MarkerPosition.Start, "hardhat stdout") - for line in hardhat.output: - echo line - test.printOutputMarker(MarkerPosition.Finish, "hardhat stdout") raiseTestManagerError "hardhat node failed to start: " & e.msg, e proc printResult(test: IntegrationTest, colour: ForegroundColor) = @@ -396,12 +387,6 @@ proc teardownHardhat(test: IntegrationTest, hardhat: Hardhat) {.async: (raises: warn "Failed to stop hardhat node, continuing", error = e.msg, test = test.config.name - if test.manager.config.debugHardhat: - test.printOutputMarker(MarkerPosition.Start, "Hardhat stdout") - for line in hardhat.output: - echo line - test.printOutputMarker(MarkerPosition.Finish, "Hardhat stdout") - test.manager.hardhats.keepItIf(it != hardhat) proc teardownTest(test: IntegrationTest) {.async: (raises: []).} = From e99dc1dc9cc54a4529c5f005117f5a03997092e6 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 17:20:59 +1100 Subject: [PATCH 126/178] Reinstate unittest > unittest2, move eventually to ./asynctest --- tests/asynctest.nim | 14 ++++++++++++-- tests/helpers.nim | 4 ---- tests/helpers/trackers.nim | 2 +- vendor/asynctest | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/tests/asynctest.nim b/tests/asynctest.nim index 7c6a4afda6..39492fa6fc 100644 --- a/tests/asynctest.nim +++ b/tests/asynctest.nim @@ -1,3 +1,13 @@ -import pkg/asynctest/chronos/unittest +import pkg/asynctest/chronos/unittest2 -export unittest +export unittest2 except eventually + +template eventually*(expression: untyped, timeout = 5000, pollInterval = 10): bool = + ## Fast defaults, do not use with HTTP connections! + eventually(expression, timeout, pollInterval) + +template eventuallySafe*( + expression: untyped, timeout = 5000, pollInterval = 1000 +): bool = + ## More sane defaults, for use with HTTP connections + eventually(expression, timeout = timeout, pollInterval = pollInterval) diff --git a/tests/helpers.nim b/tests/helpers.nim index cff99e6025..643581ff56 100644 --- a/tests/helpers.nim +++ b/tests/helpers.nim @@ -38,7 +38,3 @@ proc allFuturesThrowing*[T, E]( # https://github.com/nim-lang/Nim/issues/23432 ): Future[void] = allFuturesThrowing(futs.mapIt(FutureBase(it))) -template eventuallySafe*( - expression: untyped, timeout = 5000, pollInterval = 1000 -): bool = - eventually(expression, timeout, pollInterval) diff --git a/tests/helpers/trackers.nim b/tests/helpers/trackers.nim index ed8c56920d..898053c266 100644 --- a/tests/helpers/trackers.nim +++ b/tests/helpers/trackers.nim @@ -1,5 +1,5 @@ import pkg/codex/streams/storestream -import std/unittest +import pkg/unittest2 # From lip2p/tests/helpers const trackerNames = [StoreStreamTrackerName] diff --git a/vendor/asynctest b/vendor/asynctest index 32df0f19d6..73c08f77af 160000 --- a/vendor/asynctest +++ b/vendor/asynctest @@ -1 +1 @@ -Subproject commit 32df0f19d6e0e6f84c762cf8de7361ddb419f4ba +Subproject commit 73c08f77afc5cc2a5628d00f915b97bf72f70c9b From cff38a7eeed75f9c2fcda93f5ec816183d3fce57 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 19:39:38 +1100 Subject: [PATCH 127/178] force kill windows test processes In situations like timeouts, windows will hang when attempting to close the test process streams. In this case, we have to force kill the test process externally. This is the same process as force killing hardhat nodes after they are already terminated, but windows refuses hangs when closing their process streams. This commit creates a forceKillProcess utility that allows a process to be killed by its process name and matching commandline criteria, like TestId (for test process) or --port (for hardhat) --- tests/integration/hardhatprocess.nim | 17 +-- tests/integration/scripts/winkillhardhat.sh | 110 -------------------- tests/integration/scripts/winkillprocess.sh | 97 +++++++++++++++++ tests/integration/testmanager.nim | 37 ++++++- tests/integration/utils.nim | 16 +++ 5 files changed, 149 insertions(+), 128 deletions(-) delete mode 100644 tests/integration/scripts/winkillhardhat.sh create mode 100644 tests/integration/scripts/winkillprocess.sh diff --git a/tests/integration/hardhatprocess.nim b/tests/integration/hardhatprocess.nim index 82d34fceff..b00b04005e 100644 --- a/tests/integration/hardhatprocess.nim +++ b/tests/integration/hardhatprocess.nim @@ -14,6 +14,7 @@ import pkg/codex/conf import pkg/codex/utils/trackedfutures import ./codexclient import ./nodeprocess +import ./utils export codexclient export chronicles @@ -159,20 +160,6 @@ method onOutputLineCaptured(node: HardhatProcess, line: string) = discard logFile.closeFile() node.logFile = none IoHandle -proc killHardhatByPort( - port: int -): Future[CommandExResponse] {. - async: ( - raises: [ - AsyncProcessError, AsyncProcessTimeoutError, CancelledError, ValueError, OSError - ] - ) -.} = - let path = splitFile(currentSourcePath()).dir / "scripts" / "winkillhardhat.sh" - let cmd = &"{absolutePath(path)} killvendorport {port}" - trace "Forcefully killing windows hardhat process", port, cmd - return await execCommandEx(cmd, timeout = 5.seconds) - proc closeProcessStreams(node: HardhatProcess) {.async: (raises: []).} = when not defined(windows): if not node.process.isNil: @@ -186,7 +173,7 @@ proc closeProcessStreams(node: HardhatProcess) {.async: (raises: []).} = error "Failed to get port from Hardhat args" return try: - let cmdResult = await killHardhatByPort(port) + let cmdResult = await forceKillProcess("node.exe", &"--port {port}") if cmdResult.status > 0: error "Failed to forcefully kill windows hardhat process", port, exitCode = cmdResult.status, stderr = cmdResult.stdError diff --git a/tests/integration/scripts/winkillhardhat.sh b/tests/integration/scripts/winkillhardhat.sh deleted file mode 100644 index 32730d7d21..0000000000 --- a/tests/integration/scripts/winkillhardhat.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash - -# List all node.exe processes with command line arguments -list_node_processes() { - powershell.exe -Command "Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Select-Object ProcessId, Name, CommandLine | Format-Table -AutoSize" -} - -# Find node processes containing vendor\codex-contracts-eth in command line -find_vendor_node_processes() { - echo "Looking for node processes with 'vendor\\codex-contracts-eth' in command line..." - powershell.exe -Command "Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match 'vendor\\\\codex-contracts-eth' } | Select-Object ProcessId, Name, CommandLine | Format-Table -AutoSize" -} - -# Find node processes running on a specific port -find_node_by_port() { - local port=$1 - echo "Looking for node processes running on port $port..." - powershell.exe -Command "Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match '--port $port' } | Select-Object ProcessId, Name, CommandLine | Format-Table -AutoSize" -} - -# Kill all node.exe processes containing vendor\codex-contracts-eth -kill_vendor_node_processes() { - echo "Finding and killing node.exe processes containing 'vendor\\codex-contracts-eth'..." - powershell.exe -Command " - \$processes = Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match 'vendor\\\\codex-contracts-eth' }; - if (\$processes) { - foreach (\$process in \$processes) { - Stop-Process -Id \$process.ProcessId -Force; - Write-Host \"Killed process \$(\$process.ProcessId)\"; - } - } else { - Write-Host \"No matching node.exe processes found\"; - } - " -} - -# Kill node.exe process running on a specific port -kill_node_by_port() { - local port=$1 - echo "Finding and killing node.exe process running on port $port..." - powershell.exe -Command " - \$processes = Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match '--port $port' }; - if (\$processes) { - foreach (\$process in \$processes) { - Stop-Process -Id \$process.ProcessId -Force; - Write-Host \"Killed process \$(\$process.ProcessId) running on port $port\"; - } - } else { - Write-Host \"No node.exe process found running on port $port\"; - } - " -} - -# Kill node.exe process with both vendor string and specific port -kill_vendor_node_by_port() { - local port=$1 - echo "Finding and killing node.exe process with 'vendor\\codex-contracts-eth' running on port $port..." - powershell.exe -Command " - \$processes = Get-WmiObject Win32_Process -Filter \"name = 'node.exe'\" | Where-Object { \$_.CommandLine -match 'vendor\\\\codex-contracts-eth' -and \$_.CommandLine -match '--port $port' }; - if (\$processes) { - foreach (\$process in \$processes) { - Stop-Process -Id \$process.ProcessId -Force; - Write-Host \"Killed process \$(\$process.ProcessId) running on port $port\"; - } - } else { - Write-Host \"No matching node.exe process found running on port $port\"; - } - " -} - -# Check if being run directly or sourced -if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then - # If run directly (not sourced), provide command line interface - case "$1" in - list) - list_node_processes - ;; - find) - find_vendor_node_processes - ;; - findport) - if [ -z "$2" ]; then - echo "Usage: $0 findport PORT_NUMBER" - exit 1 - fi - find_node_by_port "$2" - ;; - killall) - kill_vendor_node_processes - ;; - killport) - if [ -z "$2" ]; then - echo "Usage: $0 killport PORT_NUMBER" - exit 1 - fi - kill_node_by_port "$2" - ;; - killvendorport) - if [ -z "$2" ]; then - echo "Usage: $0 killvendorport PORT_NUMBER" - exit 1 - fi - kill_vendor_node_by_port "$2" - ;; - *) - echo "Usage: $0 {list|find|findport PORT|killall|killport PORT|killvendorport PORT}" - exit 1 - ;; - esac -fi \ No newline at end of file diff --git a/tests/integration/scripts/winkillprocess.sh b/tests/integration/scripts/winkillprocess.sh new file mode 100644 index 0000000000..b5e58ab494 --- /dev/null +++ b/tests/integration/scripts/winkillprocess.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# List all processes with a specific name +list() { + local name=$1 + echo "Listing all processes named '$name'..." + powershell.exe -Command "Get-CimInstance Win32_Process -Filter \"name = '$name'\" | Select-Object ProcessId, Name, CommandLine | Format-Table -AutoSize" +} + +# Search for processes with a specific name and command line pattern +search() { + local name=$1 + local pattern=$2 + echo "Searching for '$name' processes with command line matching '$pattern'..." + powershell.exe -Command " + \$processes = Get-CimInstance Win32_Process -Filter \"name = '$name'\" | Where-Object { \$_.CommandLine -match '$pattern' }; + if (\$processes) { + \$processes | Select-Object ProcessId, Name, CommandLine | Format-Table -AutoSize; + } else { + Write-Host \"No matching '$name' processes found\"; + } + " +} + +# Kill all processes with a specific name +killall() { + local name=$1 + echo "Finding and killing all '$name' processes..." + powershell.exe -Command " + \$processes = Get-CimInstance Win32_Process -Filter \"name = '$name'\"; + if (\$processes) { + foreach (\$process in \$processes) { + Stop-Process -Id \$process.ProcessId -Force; + Write-Host \"Killed process \$(\$process.ProcessId)\"; + } + } else { + Write-Host \"No '$name' processes found\"; + } + " +} + +# Kill processes with a specific name and command line pattern +kill() { + local name=$1 + local pattern=$2 + echo "Finding and killing '$name' processes with command line matching '$pattern'..." + powershell.exe -Command " + \$processes = Get-CimInstance Win32_Process -Filter \"name = '$name'\" | Where-Object { \$_.CommandLine -match '$pattern' }; + if (\$processes) { + foreach (\$process in \$processes) { + Stop-Process -Id \$process.ProcessId -Force; + Write-Host \"Killed process \$(\$process.ProcessId)\"; + } + } else { + Write-Host \"No matching '$name' processes found\"; + } + " +} + +# Check if being run directly or sourced +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + # If run directly (not sourced), provide command line interface + case "$1" in + list) + if [ -z "$2" ]; then + echo "Usage: $0 list PROCESS_NAME" + exit 1 + fi + list "$2" + ;; + search) + if [ -z "$2" ] || [ -z "$3" ]; then + echo "Usage: $0 search PROCESS_NAME COMMANDLINE_PATTERN" + exit 1 + fi + search "$2" "$3" + ;; + killall) + if [ -z "$2" ]; then + echo "Usage: $0 killall PROCESS_NAME" + exit 1 + fi + killall "$2" + ;; + kill) + if [ -z "$2" ] || [ -z "$3" ]; then + echo "Usage: $0 kill PROCESS_NAME COMMANDLINE_PATTERN" + exit 1 + fi + kill "$2" "$3" + ;; + *) + echo "Usage: $0 {list PROCESS_NAME|search PROCESS_NAME COMMANDLINE_PATTERN|killall PROCESS_NAME|kill PROCESS_NAME COMMANDLINE_PATTERN}" + exit 1 + ;; + esac +fi diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 6b10e94a29..a41935a258 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -3,7 +3,6 @@ import std/strformat import std/terminal from std/times import fromUnix, format, now from std/unicode import toUpper -import std/unittest import pkg/chronos import pkg/chronos/asyncproc import pkg/codex/conf @@ -389,6 +388,38 @@ proc teardownHardhat(test: IntegrationTest, hardhat: Hardhat) {.async: (raises: test.manager.hardhats.keepItIf(it != hardhat) +proc closeProcessStreams(test: IntegrationTest) {.async: (raises: []).} = + logScope: + name = test.config.name + + when not defined(windows): + if not test.process.isNil: + trace "Closing test process' streams" + await test.process.closeWait() + trace "Test process' streams closed" + else: + # Windows hangs when attempting to close the test's process streams, so try + # to kill the process externally. + try: + let cmdResult = await test.forceKillProcess("nim.exe", &"-d:TestId {test.testId}") + if cmdResult.status > 0: + error "Failed to forcefully kill windows test process", + port, exitCode = cmdResult.status, stderr = cmdResult.stdError + else: + trace "Successfully killed windows test process by force", + port, exitCode = cmdResult.status, stdout = cmdResult.stdOutput + except ValueError, OSError: + let eMsg = getCurrentExceptionMsg() + error "Failed to forcefully kill windows test process, bad path to command", + error = eMsg + except CancelledError as e: + discard + except AsyncProcessError as e: + error "Failed to forcefully kill windows test process", port, error = e.msg + except AsyncProcessTimeoutError as e: + error "Timeout while forcefully killing windows test process", + port, error = e.msg + proc teardownTest(test: IntegrationTest) {.async: (raises: []).} = logScope: test = test.config.name @@ -409,8 +440,8 @@ proc teardownTest(test: IntegrationTest) {.async: (raises: []).} = let e = getCurrentException() warn "Test process failed to terminate, check for zombies", error = e.msg - await test.process.closeWait() - trace "Test process output streams closed" + await test.closeProcessStreams() + test.process = nil proc teardown(test: IntegrationTest, hardhat: ?Hardhat) {.async: (raises: []).} = if test.config.startHardhat and hardhat =? hardhat and not hardhat.process.isNil: diff --git a/tests/integration/utils.nim b/tests/integration/utils.nim index 4ce8fcdaf6..974ec7d654 100644 --- a/tests/integration/utils.nim +++ b/tests/integration/utils.nim @@ -1,5 +1,6 @@ import std/os import pkg/chronos +import pkg/chronos/asyncproc import pkg/codex/logutils {.push raises: [].} @@ -64,3 +65,18 @@ proc appendFile*(filename: string, content: string) {.raises: [IOError].} = raise newException(IOError, "cannot open and write " & filename & ": " & e.msg) finally: close(f) + +when defined(windows): + proc forceKillProcess( + processName, matchingCriteria: string + ): Future[CommandExResponse] {. + async: ( + raises: [ + AsyncProcessError, AsyncProcessTimeoutError, CancelledError, ValueError, OSError + ] + ) + .} = + let path = splitFile(currentSourcePath()).dir / "scripts" / "winkillprocess.sh" + let cmd = &"{absolutePath(path)} kill {processName} \"{matchingCriteria}\"" + trace "Forcefully killing windows process", processName, matchingCriteria, cmd + return await execCommandEx(cmd, timeout = 5.seconds) From 8fcd97738d4ff161fbbc90172daa16bdf09115fe Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 19:41:56 +1100 Subject: [PATCH 128/178] fix eventually symbol resolution Because `eventuallySafe` calls the symbol `eventually`, it should be declared before `proc eventually` is declared to avoid ambiguous symbol lookups. --- tests/asynctest.nim | 10 +++++----- tests/integration/testmarketplace.nim | 1 - tests/integration/testproofs.nim | 1 - tests/integration/testsales.nim | 1 - 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/asynctest.nim b/tests/asynctest.nim index 39492fa6fc..6f9d2d429f 100644 --- a/tests/asynctest.nim +++ b/tests/asynctest.nim @@ -2,12 +2,12 @@ import pkg/asynctest/chronos/unittest2 export unittest2 except eventually -template eventually*(expression: untyped, timeout = 5000, pollInterval = 10): bool = - ## Fast defaults, do not use with HTTP connections! - eventually(expression, timeout, pollInterval) - template eventuallySafe*( expression: untyped, timeout = 5000, pollInterval = 1000 ): bool = ## More sane defaults, for use with HTTP connections - eventually(expression, timeout = timeout, pollInterval = pollInterval) + eventually(expression, timeout, pollInterval) + +template eventually*(expression: untyped, timeout = 5000, pollInterval = 10): bool = + ## Fast defaults, do not use with HTTP connections! + eventually(expression, timeout, pollInterval) diff --git a/tests/integration/testmarketplace.nim b/tests/integration/testmarketplace.nim index 9c9c1618f3..f881a6aea1 100644 --- a/tests/integration/testmarketplace.nim +++ b/tests/integration/testmarketplace.nim @@ -6,7 +6,6 @@ import ../contracts/deployment import ./marketplacesuite import ./twonodes import ./nodeconfigs -from ../helpers import eventuallySafe marketplacesuite "Marketplace": let marketplaceConfig = NodeConfigs( diff --git a/tests/integration/testproofs.nim b/tests/integration/testproofs.nim index 05e9901de3..b8586fba90 100644 --- a/tests/integration/testproofs.nim +++ b/tests/integration/testproofs.nim @@ -7,7 +7,6 @@ import ../codex/helpers import ../examples import ./marketplacesuite import ./nodeconfigs -from ../helpers import eventuallySafe export logutils diff --git a/tests/integration/testsales.nim b/tests/integration/testsales.nim index 75b5bf1023..ce32a3ef41 100644 --- a/tests/integration/testsales.nim +++ b/tests/integration/testsales.nim @@ -8,7 +8,6 @@ import ../contracts/time import ./codexconfig import ./codexclient import ./nodeconfigs -from ../helpers import eventuallySafe proc findItem[T](items: seq[T], item: T): ?!T = for tmp in items: From 98a828e620dfc520516bdf8640eb7afdc9cbd0d3 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 19:56:52 +1100 Subject: [PATCH 129/178] fix compilation errors in windows --- tests/integration/testmanager.nim | 13 ++++++++----- tests/integration/utils.nim | 6 ++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index a41935a258..30c0502965 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -401,13 +401,15 @@ proc closeProcessStreams(test: IntegrationTest) {.async: (raises: []).} = # Windows hangs when attempting to close the test's process streams, so try # to kill the process externally. try: - let cmdResult = await test.forceKillProcess("nim.exe", &"-d:TestId {test.testId}") + let cmdResult = await forceKillProcess("nim.exe", &"-d:TestId {test.testId}") if cmdResult.status > 0: error "Failed to forcefully kill windows test process", - port, exitCode = cmdResult.status, stderr = cmdResult.stdError + testId = test.testId, exitCode = cmdResult.status, stderr = cmdResult.stdError else: trace "Successfully killed windows test process by force", - port, exitCode = cmdResult.status, stdout = cmdResult.stdOutput + testId = test.testId, + exitCode = cmdResult.status, + stdout = cmdResult.stdOutput except ValueError, OSError: let eMsg = getCurrentExceptionMsg() error "Failed to forcefully kill windows test process, bad path to command", @@ -415,10 +417,11 @@ proc closeProcessStreams(test: IntegrationTest) {.async: (raises: []).} = except CancelledError as e: discard except AsyncProcessError as e: - error "Failed to forcefully kill windows test process", port, error = e.msg + error "Failed to forcefully kill windows test process", + testId = test.testId, error = e.msg except AsyncProcessTimeoutError as e: error "Timeout while forcefully killing windows test process", - port, error = e.msg + testId = test.testId, error = e.msg proc teardownTest(test: IntegrationTest) {.async: (raises: []).} = logScope: diff --git a/tests/integration/utils.nim b/tests/integration/utils.nim index 974ec7d654..c30e9a11a2 100644 --- a/tests/integration/utils.nim +++ b/tests/integration/utils.nim @@ -1,4 +1,5 @@ import std/os +import std/strformat import pkg/chronos import pkg/chronos/asyncproc import pkg/codex/logutils @@ -67,12 +68,13 @@ proc appendFile*(filename: string, content: string) {.raises: [IOError].} = close(f) when defined(windows): - proc forceKillProcess( + proc forceKillProcess*( processName, matchingCriteria: string ): Future[CommandExResponse] {. async: ( raises: [ - AsyncProcessError, AsyncProcessTimeoutError, CancelledError, ValueError, OSError + AsyncProcessError, AsyncProcessTimeoutError, CancelledError, ValueError, + OSError, ] ) .} = From 9d605a554e2f7e598a5e19327b043b5fab67ce75 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Mon, 24 Mar 2025 20:09:36 +1100 Subject: [PATCH 130/178] formatting --- tests/helpers.nim | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/helpers.nim b/tests/helpers.nim index 643581ff56..bcac03c303 100644 --- a/tests/helpers.nim +++ b/tests/helpers.nim @@ -37,4 +37,3 @@ proc allFuturesThrowing*[T, E]( # https://github.com/nim-lang/Nim/issues/23432 futs: varargs[InternalRaisesFuture[T, E]] ): Future[void] = allFuturesThrowing(futs.mapIt(FutureBase(it))) - From b86f995ab0a460a3cfe284e4e40b03b7711afdfa Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 25 Mar 2025 10:18:33 +1100 Subject: [PATCH 131/178] re-enable all CI tests Also adds a condition such that a hardhat node is not started for parallel integration tests --- .github/workflows/ci-reusable.yml | 2 +- .github/workflows/ci.yml | 59 +++++++++++++++++++++++++------ 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci-reusable.yml b/.github/workflows/ci-reusable.yml index 0fbc7e37af..0be0ddb442 100644 --- a/.github/workflows/ci-reusable.yml +++ b/.github/workflows/ci-reusable.yml @@ -102,7 +102,7 @@ jobs: npm install - name: Run Ethereum node with Codex contracts - if: matrix.tests == 'contract' || matrix.tests == 'integration' || matrix.tests == 'tools' || matrix.tests == 'all' + if: matrix.tests == 'contract' || (matrix.tests == 'integration' && env.PARALLEL != 1) || matrix.tests == 'tools' || matrix.tests == 'all' working-directory: vendor/codex-contracts-eth env: MSYS2_PATH_TYPE: inherit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 74875a0233..17b4707fbf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,19 +39,19 @@ jobs: uses: fabiocaccamo/create-matrix-action@v5 with: matrix: | + os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {linux}, cpu {amd64}, builder {${{ env.builder_integration_linux }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {amd64}, builder {${{ env.builder_integration_macos }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {arm64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {arm64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {arm64}, builder {${{ env.builder_integration_macos }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {arm64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {windows}, cpu {amd64}, builder {windows-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {msys2} + os {windows}, cpu {amd64}, builder {windows-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {msys2} os {windows}, cpu {amd64}, builder {${{ env.builder_integration_windows }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} - # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - # os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - # os {macos}, cpu {arm64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - # os {macos}, cpu {arm64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - # os {macos}, cpu {arm64}, builder {macos-14}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - # os {macos}, cpu {arm64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - # os {windows}, cpu {amd64}, builder {windows-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {msys2} - # os {windows}, cpu {amd64}, builder {windows-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {msys2} - # os {windows}, cpu {amd64}, builder {windows-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {msys2} + os {windows}, cpu {amd64}, builder {windows-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {msys2} + build: needs: matrix uses: ./.github/workflows/ci-reusable.yml @@ -71,3 +71,40 @@ jobs: options: "codex/ tests/" fail: true suggest: true + + coverage: + # Force to stick to ubuntu 20.04 for coverage because + # lcov was updated to 2.x version in ubuntu-latest + # and cause a lot of issues. + # See https://github.com/linux-test-project/lcov/issues/238 + runs-on: ubuntu-20.04 + steps: + - name: Checkout sources + uses: actions/checkout@v4 + with: + submodules: recursive + ref: ${{ github.event.pull_request.head.sha }} + + - name: Setup Nimbus Build System + uses: ./.github/actions/nimbus-build-system + with: + os: linux + nim_version: ${{ env.nim_version }} + coverage: true + + - name: Generate coverage data + run: | + # make -j${ncpu} coverage + make -j${ncpu} coverage-script + shell: bash + + - name: Upload coverage data to Codecov + uses: codecov/codecov-action@v4 + with: + directory: ./coverage/ + fail_ci_if_error: true + files: ./coverage/coverage.f.info + flags: unittests + name: codecov-umbrella + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true From b8b93d79813182a37d96e0081ed80c42d3f46c58 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 25 Mar 2025 17:24:42 +1100 Subject: [PATCH 132/178] update after rebase --- tests/integration/multinodes.nim | 6 +----- tests/integration/utils.nim | 8 ++++++++ tests/testIntegration.nim | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index a0a45b3bbf..72afe5ae61 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -68,8 +68,6 @@ template withLock(lock: AsyncLock, body: untyped) = except AsyncLockError as parent: raiseMultiNodeSuiteError "lock error", parent - - template multinodesuite*(name: string, body: untyped) = asyncchecksuite name: # Following the problem described here: @@ -163,9 +161,7 @@ template multinodesuite*(name: string, body: untyped) = raiseMultiNodeSuiteError "Cannot start node at nodeIdx " & $nodeIdx & ", not enough eth accounts." - let datadir = - getTempDir() / "Codex" / sanitize(TestId) / sanitize(currentTestName) / - sanitize($starttime) / sanitize($role & "_" & $roleIdx) + let datadir = getDataDir(TestId, currentTestName, $starttime, $role, some roleIdx) try: if config.logFile.isSome or CodexLogToFile: diff --git a/tests/integration/utils.nim b/tests/integration/utils.nim index c30e9a11a2..3e522a0422 100644 --- a/tests/integration/utils.nim +++ b/tests/integration/utils.nim @@ -82,3 +82,11 @@ when defined(windows): let cmd = &"{absolutePath(path)} kill {processName} \"{matchingCriteria}\"" trace "Forcefully killing windows process", processName, matchingCriteria, cmd return await execCommandEx(cmd, timeout = 5.seconds) + +proc getDataDir*(testId, testName, startTime, role: string, index = int.none): string = + var suffix = role + if idx =? index: + suffix &= "_" & $idx + + getTempDir() / "Codex" / sanitize(testId) / sanitize(testName) / sanitize(startTime) / + sanitize(suffix) diff --git a/tests/testIntegration.nim b/tests/testIntegration.nim index 8220898fae..b225342706 100644 --- a/tests/testIntegration.nim +++ b/tests/testIntegration.nim @@ -124,3 +124,4 @@ when isMainModule: import ./integration/testproofs import ./integration/testvalidator import ./integration/testecbug + import ./integration/testrestapivalidation From eebeb8abbf9df30299a952615f7f150b5e7b358c Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Tue, 25 Mar 2025 19:56:36 +1100 Subject: [PATCH 133/178] verbose unittest2 output to stdout --- tests/integration/testmanager.nim | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 30c0502965..145ce40e63 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -350,6 +350,7 @@ proc buildCommand( # colours, and loglevel = TRACE). "-d:chronicles_log_level=TRACE " & "-d:chronicles_sinks=textlines[nocolors,file] " & + "-d:nimUnittestOutputLevel:VERBOSE " & "--verbosity:0 " & "--hints:off " & "-d:release " & From 348764550b4250d0b8e82d438019744bf02bb433 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 26 Mar 2025 12:29:51 +1100 Subject: [PATCH 134/178] try increasing polling interval to see if this has an effect on windows in ci --- tests/integration/multinodes.nim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 72afe5ae61..d6dada1f14 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -381,7 +381,9 @@ template multinodesuite*(name: string, body: untyped) = # Workaround for https://github.com/NomicFoundation/hardhat/issues/2053 # Do not use websockets, but use http and polling to stop subscriptions # from being removed after 5 minutes - ethProvider = JsonRpcProvider.new(jsonRpcProviderUrl) + ethProvider = JsonRpcProvider.new( + jsonRpcProviderUrl, pollingInterval = chronos.milliseconds(1000) + ) # if hardhat was NOT started by the test, take a snapshot so it can be # reverted in the test teardown if nodeConfigs.hardhat.isNone: From 8f4dae1b6055a01b4329442d374469280c121952 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 26 Mar 2025 15:56:19 +1100 Subject: [PATCH 135/178] logging: show test setup/teardown in logs --- tests/integration/multinodes.nim | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index d6dada1f14..1f2728ca77 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -68,8 +68,8 @@ template withLock(lock: AsyncLock, body: untyped) = except AsyncLockError as parent: raiseMultiNodeSuiteError "lock error", parent -template multinodesuite*(name: string, body: untyped) = - asyncchecksuite name: +template multinodesuite*(suiteName: string, body: untyped) = + asyncchecksuite suiteName: # Following the problem described here: # https://github.com/NomicFoundation/hardhat/issues/2053 # It may be desirable to use http RPC provider. @@ -108,7 +108,6 @@ template multinodesuite*(name: string, body: untyped) = currentTestName = tname nodeConfigs = startNodeConfigs test tname: - trace "Starting test", name = tname, nodeConfigs tbody proc updatePort(url: var string, port: int) = @@ -121,8 +120,9 @@ template multinodesuite*(name: string, body: untyped) = var args: seq[string] = @[] if config.logFile: try: - let updatedLogFile = - getLogFile(CodexLogsDir, starttime, name, currentTestName, $role, none int) + let updatedLogFile = getLogFile( + CodexLogsDir, starttime, suiteName, currentTestName, $role, none int + ) args.add "--log-file=" & updatedLogFile except IOError as e: raiseMultiNodeSuiteError( @@ -167,7 +167,7 @@ template multinodesuite*(name: string, body: untyped) = if config.logFile.isSome or CodexLogToFile: try: let updatedLogFile = getLogFile( - CodexLogsDir, starttime, name, currentTestName, $role, some roleIdx + CodexLogsDir, starttime, suiteName, currentTestName, $role, some roleIdx ) config.withLogFile(updatedLogFile) except IOError as e: @@ -304,6 +304,7 @@ template multinodesuite*(name: string, body: untyped) = e.msg, e proc teardownImpl() {.async: (raises: []).} = + trace "Tearing down test", suite = suiteName, test = currentTestName for nodes in @[validators(), clients(), providers()]: for node in nodes: await node.stop() # also stops rest client @@ -368,6 +369,8 @@ template multinodesuite*(name: string, body: untyped) = doAssert success, "Failed to open log file: " & logFile setup: + trace "Setting up test", suite = suiteName, test = currentTestName, nodeConfigs + if var conf =? nodeConfigs.hardhat: try: let node = await noCancel startHardhatNode(conf) @@ -420,7 +423,10 @@ template multinodesuite*(name: string, body: untyped) = # ensure that we have a recent block with a fresh timestamp discard await send(ethProvider, "evm_mine") + trace "Starting test", suite = suiteName, test = currentTestName + teardown: await teardownImpl() + trace "Test completed", suite = suiteName, test = currentTestName body From 7c00329d90fcf97d7cbb8979bf652a037eb9993d Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 26 Mar 2025 16:26:32 +1100 Subject: [PATCH 136/178] try removing verbose output to see if windows ci passes --- tests/integration/testmanager.nim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 145ce40e63..b4ceecc3cc 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -350,7 +350,8 @@ proc buildCommand( # colours, and loglevel = TRACE). "-d:chronicles_log_level=TRACE " & "-d:chronicles_sinks=textlines[nocolors,file] " & - "-d:nimUnittestOutputLevel:VERBOSE " & + when not defined(windows): + "-d:nimUnittestOutputLevel:VERBOSE " & "--verbosity:0 " & "--hints:off " & "-d:release " & From 2bfd5241e3e290c9608ae9b699bcb0592967aa79 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 26 Mar 2025 16:41:23 +1100 Subject: [PATCH 137/178] fix previous commit compilation --- tests/integration/testmanager.nim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index b4ceecc3cc..8de1d18405 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -334,6 +334,9 @@ proc buildCommand( else: "TRACE;disabled:libp2p,websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT,discv5" + let unittestVerbosity = + when not defined(windows): "-d:nimUnittestOutputLevel:VERBOSE" else: "" + withLock(test.manager.hardhatPortLock): try: return @@ -350,8 +353,7 @@ proc buildCommand( # colours, and loglevel = TRACE). "-d:chronicles_log_level=TRACE " & "-d:chronicles_sinks=textlines[nocolors,file] " & - when not defined(windows): - "-d:nimUnittestOutputLevel:VERBOSE " & + &"{unittestVerbosity} " & "--verbosity:0 " & "--hints:off " & "-d:release " & From 4616c48931bf750228809c3d2b7c5107b787e2cc Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 26 Mar 2025 21:02:55 +1100 Subject: [PATCH 138/178] revert posix-only verbose unittest output It didn't fix the error with invalid proofs in windows in ci --- tests/integration/testmanager.nim | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/integration/testmanager.nim b/tests/integration/testmanager.nim index 8de1d18405..145ce40e63 100644 --- a/tests/integration/testmanager.nim +++ b/tests/integration/testmanager.nim @@ -334,9 +334,6 @@ proc buildCommand( else: "TRACE;disabled:libp2p,websock,JSONRPC-HTTP-CLIENT,JSONRPC-WS-CLIENT,discv5" - let unittestVerbosity = - when not defined(windows): "-d:nimUnittestOutputLevel:VERBOSE" else: "" - withLock(test.manager.hardhatPortLock): try: return @@ -353,7 +350,7 @@ proc buildCommand( # colours, and loglevel = TRACE). "-d:chronicles_log_level=TRACE " & "-d:chronicles_sinks=textlines[nocolors,file] " & - &"{unittestVerbosity} " & + "-d:nimUnittestOutputLevel:VERBOSE " & "--verbosity:0 " & "--hints:off " & "-d:release " & From aa00566d2967d88b5066d6af892b92dfeed6c069 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 4 Jun 2025 16:43:54 +1000 Subject: [PATCH 139/178] update to websockets addresses for hardhat connection Also, catch exceptions on JsonRpcProvider.close, which should not need to be done, as this routine should not raise any exceptions. --- tests/integration/multinodes.nim | 8 ++++++-- tests/integration/testcli.nim | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 1f2728ca77..552e7c37ea 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -90,7 +90,7 @@ template multinodesuite*(suiteName: string, body: untyped) = # .withEthProvider("ws://localhost:8545") # .some, # ... - var jsonRpcProviderUrl = "http://127.0.0.1:" & $HardhatPort + var jsonRpcProviderUrl = "ws://localhost:" & $HardhatPort var running {.inject, used.}: seq[RunningNode] var bootstrapNodes: seq[string] let starttime = now().format("yyyy-MM-dd'_'HH:mm:ss") @@ -324,7 +324,11 @@ template multinodesuite*(suiteName: string, body: untyped) = except ProviderError as e: error "Failed to revert hardhat state during teardown", error = e.msg - await ethProvider.close() + # TODO: JsonRpcProvider.close should NOT raise any exceptions + try: + await ethProvider.close() + except CatchableError: + discard running = @[] diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index 4fd33378a2..f5dd3e6288 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -74,7 +74,7 @@ asyncchecksuite "Command line interface": let node = await startCodex( @[ "persistence", - "--eth-provider=" & "http://127.0.0.1:" & $HardhatPort, + "--eth-provider=" & "ws://localhost:" & $HardhatPort, "--eth-private-key=" & unsafeKeyFile, ] ) @@ -98,7 +98,7 @@ asyncchecksuite "Command line interface": let node = await startCodex( @[ "persistence", - "--eth-provider=" & "http://127.0.0.1:" & $HardhatPort, + "--eth-provider=" & "ws://localhost:" & $HardhatPort, "prover", marketplaceArg, "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", @@ -111,7 +111,7 @@ asyncchecksuite "Command line interface": let node = await startCodex( @[ "persistence", - "--eth-provider=" & "http://127.0.0.1:" & $HardhatPort, + "--eth-provider=" & "ws://localhost:" & $HardhatPort, "prover", marketplaceArg, "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", From 69628f41f8987e0417e30133ed598e89f9fe0178 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 4 Jun 2025 17:23:07 +1000 Subject: [PATCH 140/178] disable ccache symlink Permission denied creating the symlink in CI --- .github/actions/nimbus-build-system/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/nimbus-build-system/action.yml b/.github/actions/nimbus-build-system/action.yml index fe0aef66ed..fc71de246b 100644 --- a/.github/actions/nimbus-build-system/action.yml +++ b/.github/actions/nimbus-build-system/action.yml @@ -108,8 +108,8 @@ runs: if: inputs.os == 'linux' || inputs.os == 'macos' uses: hendrikmuhs/ccache-action@v1.2 with: - create-symlink: true - key: ${{ matrix.os }}-${{ matrix.builder }}-${{ matrix.cpu }}-${{ matrix.tests }}-${{ matrix.nim_version }} + create-symlink: false + key: ${{ inputs.os }}-${{ inputs.builder }}-${{ inputs.cpu }}-${{ inputs.tests }}-${{ inputs.nim_version }} evict-old-files: 7d - name: Add ccache to path on Linux/Mac From 564551811f5abeb5d61d31ad030aee668dfa0ec4 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Wed, 4 Jun 2025 17:32:07 +1000 Subject: [PATCH 141/178] Update ci.yml to be in line with master --- .github/workflows/ci.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17b4707fbf..89150c312a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,11 +73,7 @@ jobs: suggest: true coverage: - # Force to stick to ubuntu 20.04 for coverage because - # lcov was updated to 2.x version in ubuntu-latest - # and cause a lot of issues. - # See https://github.com/linux-test-project/lcov/issues/238 - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v4 From 8a2394af95716384953159dcc1bccfd40e5bd9cd Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 11:28:33 +1000 Subject: [PATCH 142/178] contracts: increase period duration for windows ci --- vendor/codex-contracts-eth | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/codex-contracts-eth b/vendor/codex-contracts-eth index aee91f1ac4..68e66f3888 160000 --- a/vendor/codex-contracts-eth +++ b/vendor/codex-contracts-eth @@ -1 +1 @@ -Subproject commit aee91f1ac411258af338af5145e0112e6ab6f5df +Subproject commit 68e66f3888cda9376aef08ca130b1914b3307a83 From 649bd480d28752e6a07d05ef95fc296f800a7c9b Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 11:56:13 +1000 Subject: [PATCH 143/178] fix(CI): change macos runner arch type to amd64 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 89150c312a..b87b9b45cb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,7 +46,7 @@ jobs: os {macos}, cpu {arm64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {arm64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {arm64}, builder {${{ env.builder_integration_macos }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {arm64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {amd64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {windows}, cpu {amd64}, builder {windows-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {msys2} os {windows}, cpu {amd64}, builder {windows-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {msys2} os {windows}, cpu {amd64}, builder {${{ env.builder_integration_windows }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} From 8e35f38fb7c32623a2e9b3ff4d4a258cb3df96ba Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 12:06:58 +1000 Subject: [PATCH 144/178] fix(CI): change all macos runners to amd64 --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b87b9b45cb..e7353f26c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,9 +43,9 @@ jobs: os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {linux}, cpu {amd64}, builder {${{ env.builder_integration_linux }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {arm64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {arm64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {arm64}, builder {${{ env.builder_integration_macos }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {amd64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {amd64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {amd64}, builder {${{ env.builder_integration_macos }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {amd64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {windows}, cpu {amd64}, builder {windows-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {msys2} os {windows}, cpu {amd64}, builder {windows-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {msys2} From b4c771be733e7c580db8ae4abe910be4583ab8d7 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Tue, 1 Apr 2025 12:31:18 -0600 Subject: [PATCH 145/178] adding nim-groth16 dep --- .gitmodules | 5 +++++ vendor/nim-groth16 | 1 + 2 files changed, 6 insertions(+) create mode 160000 vendor/nim-groth16 diff --git a/.gitmodules b/.gitmodules index 5cc2bfab6e..32b5ad8784 100644 --- a/.gitmodules +++ b/.gitmodules @@ -231,3 +231,8 @@ url = https://github.com/vacp2p/nim-ngtcp2.git ignore = untracked branch = master +[submodule "vendor/nim-groth16"] + path = vendor/nim-groth16 + url = https://github.com/codex-storage/nim-groth16.git + ignore = untracked + branch = master diff --git a/vendor/nim-groth16 b/vendor/nim-groth16 new file mode 160000 index 0000000000..907ae6ed72 --- /dev/null +++ b/vendor/nim-groth16 @@ -0,0 +1 @@ +Subproject commit 907ae6ed72fc102c22e00bb7d1f4550a2b2c479d From 493e3eb601f773bbd8fa81ab23bf28df75895f2a Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Tue, 1 Apr 2025 14:44:29 -0600 Subject: [PATCH 146/178] adding threading dep --- .gitmodules | 3 +++ vendor/threading | 1 + 2 files changed, 4 insertions(+) create mode 160000 vendor/threading diff --git a/.gitmodules b/.gitmodules index 32b5ad8784..e3f446df5b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -236,3 +236,6 @@ url = https://github.com/codex-storage/nim-groth16.git ignore = untracked branch = master +[submodule "vendor/threading"] + path = vendor/threading + url = https://github.com/nim-lang/threading.git diff --git a/vendor/threading b/vendor/threading new file mode 160000 index 0000000000..bcc284991b --- /dev/null +++ b/vendor/threading @@ -0,0 +1 @@ +Subproject commit bcc284991ba928d1ed299a81a93b7113cc7de04f From ed3b060dbb21a1ecd1792c6fca0ca7f8185a5202 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Tue, 1 Apr 2025 17:17:20 -0600 Subject: [PATCH 147/178] wip nim groth16 --- vendor/nim-groth16 | 2 +- vendor/threading | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/nim-groth16 b/vendor/nim-groth16 index 907ae6ed72..bc72efc545 160000 --- a/vendor/nim-groth16 +++ b/vendor/nim-groth16 @@ -1 +1 @@ -Subproject commit 907ae6ed72fc102c22e00bb7d1f4550a2b2c479d +Subproject commit bc72efc54558b452a25e39f3fa901b81b14db8ea diff --git a/vendor/threading b/vendor/threading index bcc284991b..9f9c7afe67 160000 --- a/vendor/threading +++ b/vendor/threading @@ -1 +1 @@ -Subproject commit bcc284991ba928d1ed299a81a93b7113cc7de04f +Subproject commit 9f9c7afe67652c5ee542f452f0b6484b5349fccd From 812b39e28f8101cfef5acc09af7ddc2c84ae34f8 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Tue, 1 Apr 2025 17:17:43 -0600 Subject: [PATCH 148/178] adding deps --- .gitmodules | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitmodules b/.gitmodules index e3f446df5b..c60e2ed919 100644 --- a/.gitmodules +++ b/.gitmodules @@ -239,3 +239,5 @@ [submodule "vendor/threading"] path = vendor/threading url = https://github.com/nim-lang/threading.git + ignore = untracked + branch = master From c5881e36da8160dcb3100b57bee95b410e11bf15 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 2 Apr 2025 17:54:43 -0600 Subject: [PATCH 149/178] adding goldilocks deps --- .gitmodules | 3 +++ vendor/nim-goldilocks-hash | 1 + 2 files changed, 4 insertions(+) create mode 160000 vendor/nim-goldilocks-hash diff --git a/.gitmodules b/.gitmodules index c60e2ed919..dce3922329 100644 --- a/.gitmodules +++ b/.gitmodules @@ -241,3 +241,6 @@ url = https://github.com/nim-lang/threading.git ignore = untracked branch = master +[submodule "vendor/nim-goldilocks-hash"] + path = vendor/nim-goldilocks-hash + url = https://github.com/codex-storage/nim-goldilocks-hash.git diff --git a/vendor/nim-goldilocks-hash b/vendor/nim-goldilocks-hash new file mode 160000 index 0000000000..3c5a2bea15 --- /dev/null +++ b/vendor/nim-goldilocks-hash @@ -0,0 +1 @@ +Subproject commit 3c5a2bea154b0712ac9576c17dc4d92c00fe003e From d069e183b3a03111a338703a87380213a1d98086 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 9 Apr 2025 17:19:17 -0600 Subject: [PATCH 150/178] adding circom-witnessgen --- .gitmodules | 5 +++++ vendor/circom-witnessgen | 1 + 2 files changed, 6 insertions(+) create mode 160000 vendor/circom-witnessgen diff --git a/.gitmodules b/.gitmodules index dce3922329..ceab9072f1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -244,3 +244,8 @@ [submodule "vendor/nim-goldilocks-hash"] path = vendor/nim-goldilocks-hash url = https://github.com/codex-storage/nim-goldilocks-hash.git + ignore = untracked + branch = master +[submodule "vendor/circom-witnessgen"] + path = vendor/circom-witnessgen + url = https://github.com/codex-storage/circom-witnessgen.git diff --git a/vendor/circom-witnessgen b/vendor/circom-witnessgen new file mode 160000 index 0000000000..2420269dc4 --- /dev/null +++ b/vendor/circom-witnessgen @@ -0,0 +1 @@ +Subproject commit 2420269dc47ed2cdf376051976e7c61310f48c2c From 85998779951ed16e29bd0dea4869435090776df4 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Thu, 22 May 2025 21:10:42 -0600 Subject: [PATCH 151/178] Remove vendor/threading submodule --- .gitmodules | 5 ----- vendor/threading | 1 - 2 files changed, 6 deletions(-) delete mode 160000 vendor/threading diff --git a/.gitmodules b/.gitmodules index ceab9072f1..f45d463b2f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -236,11 +236,6 @@ url = https://github.com/codex-storage/nim-groth16.git ignore = untracked branch = master -[submodule "vendor/threading"] - path = vendor/threading - url = https://github.com/nim-lang/threading.git - ignore = untracked - branch = master [submodule "vendor/nim-goldilocks-hash"] path = vendor/nim-goldilocks-hash url = https://github.com/codex-storage/nim-goldilocks-hash.git diff --git a/vendor/threading b/vendor/threading deleted file mode 160000 index 9f9c7afe67..0000000000 --- a/vendor/threading +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9f9c7afe67652c5ee542f452f0b6484b5349fccd From a77dcc14bd99822fcbd671282803c398d1a8c011 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 28 May 2025 19:03:04 -0600 Subject: [PATCH 152/178] Refactor Circom compatibility backend and add NimGroth16 backend implementation --- codex/slots/proofs/backends/circomcompat.nim | 70 +++--- codex/slots/proofs/backends/converters.nim | 58 ++++- codex/slots/proofs/backends/nimgroth16.nim | 208 ++++++++++++++++++ tests/codex/slots/backends/helpers.nim | 9 +- .../codex/slots/backends/testcircomcompat.nim | 28 +-- tests/codex/slots/backends/testnimgroth16.nim | 119 ++++++++++ 6 files changed, 431 insertions(+), 61 deletions(-) create mode 100644 codex/slots/proofs/backends/nimgroth16.nim create mode 100644 tests/codex/slots/backends/testnimgroth16.nim diff --git a/codex/slots/proofs/backends/circomcompat.nim b/codex/slots/proofs/backends/circomcompat.nim index 1d2e3e19a2..7e66a264ed 100644 --- a/codex/slots/proofs/backends/circomcompat.nim +++ b/codex/slots/proofs/backends/circomcompat.nim @@ -7,6 +7,8 @@ ## This file may not be copied, modified, or distributed except according to ## those terms. +{.deprecated: "use the NimGroth16Backend".} + {.push raises: [].} import std/sugar @@ -24,7 +26,7 @@ import ./converters export circomcompat, converters type - CircomCompat* = object + CircomCompatBackend* = object slotDepth: int # max depth of the slot tree datasetDepth: int # max depth of dataset tree blkDepth: int # depth of the block merkle tree (pow2 for now) @@ -34,13 +36,15 @@ type wasmPath: string # path to the wasm file zkeyPath: string # path to the zkey file backendCfg: ptr CircomBn254Cfg - vkp*: ptr CircomKey + vkp*: ptr CircomCompatKey + + CircomCompatBackendRef* = ref CircomCompatBackend - NormalizedProofInputs*[H] {.borrow: `.`.} = distinct ProofInputs[H] + NormalizedProofInputs*[SomeHash] {.borrow: `.`.} = distinct ProofInputs[SomeHash] -func normalizeInput*[H]( - self: CircomCompat, input: ProofInputs[H] -): NormalizedProofInputs[H] = +func normalizeInput*[SomeHash]( + self: CircomCompatBackendRef, input: ProofInputs[SomeHash] +): NormalizedProofInputs[SomeHash] = ## Parameters in CIRCOM circuits are statically sized and must be properly ## padded before they can be passed onto the circuit. This function takes ## variable length parameters and performs that padding. @@ -53,23 +57,25 @@ func normalizeInput*[H]( for sample in input.samples: var merklePaths = sample.merklePaths merklePaths.setLen(self.slotDepth) - Sample[H](cellData: sample.cellData, merklePaths: merklePaths) + Sample[SomeHash](cellData: sample.cellData, merklePaths: merklePaths) var normSlotProof = input.slotProof normSlotProof.setLen(self.datasetDepth) - NormalizedProofInputs[H] ProofInputs[H]( - entropy: input.entropy, - datasetRoot: input.datasetRoot, - slotIndex: input.slotIndex, - slotRoot: input.slotRoot, - nCellsPerSlot: input.nCellsPerSlot, - nSlotsPerDataSet: input.nSlotsPerDataSet, - slotProof: normSlotProof, - samples: normSamples, + NormalizedProofInputs[SomeHash]( + ProofInputs[SomeHash]( + entropy: input.entropy, + datasetRoot: input.datasetRoot, + slotIndex: input.slotIndex, + slotRoot: input.slotRoot, + nCellsPerSlot: input.nCellsPerSlot, + nSlotsPerDataSet: input.nSlotsPerDataSet, + slotProof: normSlotProof, + samples: normSamples, + ) ) -proc release*(self: CircomCompat) = +proc release*(self: CircomCompatBackendRef) = ## Release the ctx ## @@ -79,7 +85,9 @@ proc release*(self: CircomCompat) = if not isNil(self.vkp): self.vkp.unsafeAddr.release_key() -proc prove[H](self: CircomCompat, input: NormalizedProofInputs[H]): ?!CircomProof = +proc prove[SomeHash]( + self: CircomCompatBackendRef, input: NormalizedProofInputs[SomeHash] +): Future[?!CircomCompatProof] {.async: (raises: [CancelledError]).} = doAssert input.samples.len == self.numSamples, "Number of samples does not match" doAssert input.slotProof.len <= self.datasetDepth, @@ -101,7 +109,7 @@ proc prove[H](self: CircomCompat, input: NormalizedProofInputs[H]): ?!CircomProo ctx.addr.release_circom_compat() if init_circom_compat(self.backendCfg, addr ctx) != ERR_OK or ctx == nil: - raiseAssert("failed to initialize CircomCompat ctx") + raiseAssert("failed to initialize CircomCompatBackend ctx") var entropy = input.entropy.toBytes @@ -172,12 +180,16 @@ proc prove[H](self: CircomCompat, input: NormalizedProofInputs[H]): ?!CircomProo success proof -proc prove*[H](self: CircomCompat, input: ProofInputs[H]): ?!CircomProof = +proc prove*[SomeHash]( + self: CircomCompatBackendRef, input: ProofInputs[SomeHash] +): Future[?!CircomCompatProof] {.async: (raises: [CancelledError], raw: true).} = self.prove(self.normalizeInput(input)) -proc verify*[H]( - self: CircomCompat, proof: CircomProof, inputs: ProofInputs[H] -): ?!bool = +proc verify*[SomeHash]( + self: CircomCompatBackendRef, + proof: CircomCompatProof, + inputs: ProofInputs[SomeHash], +): Future[?!bool] {.async: (raises: [CancelledError]).} = ## Verify a proof using a ctx ## @@ -196,8 +208,8 @@ proc verify*[H]( finally: inputs.releaseCircomInputs() -proc init*( - _: type CircomCompat, +proc new*( + _: type CircomCompatBackendRef, r1csPath: string, wasmPath: string, zkeyPath: string = "", @@ -206,7 +218,7 @@ proc init*( blkDepth = DefaultBlockDepth, cellElms = DefaultCellElms, numSamples = DefaultSamplesNum, -): CircomCompat = +): ?!CircomCompatBackendRef = ## Create a new ctx ## @@ -217,16 +229,16 @@ proc init*( cfg == nil: if cfg != nil: cfg.addr.release_cfg() - raiseAssert("failed to initialize circom compat config") + return failure "failed to initialize circom compat config" var vkpPtr: ptr VerifyingKey = nil if cfg.get_verifying_key(vkpPtr.addr) != ERR_OK or vkpPtr == nil: if vkpPtr != nil: vkpPtr.addr.release_key() - raiseAssert("Failed to get verifying key") + return failure "Failed to get verifying key" - CircomCompat( + success CircomCompatBackendRef( r1csPath: r1csPath, wasmPath: wasmPath, zkeyPath: zkeyPath, diff --git a/codex/slots/proofs/backends/converters.nim b/codex/slots/proofs/backends/converters.nim index ee771477d9..46db7c8b05 100644 --- a/codex/slots/proofs/backends/converters.nim +++ b/codex/slots/proofs/backends/converters.nim @@ -1,5 +1,5 @@ ## Nim-Codex -## Copyright (c) 2024 Status Research & Development GmbH +## Copyright (c) 2025 Status Research & Development GmbH ## Licensed under either of ## * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE)) ## * MIT license ([LICENSE-MIT](LICENSE-MIT)) @@ -9,21 +9,27 @@ {.push raises: [].} +import pkg/groth16 import pkg/circomcompat +import pkg/constantine/math/io/io_fields import ../../../contracts import ../../types import ../../../merkletree type - CircomG1* = G1 - CircomG2* = G2 + CircomCompatG1* = circomcompat.G1 + CircomCompatG2* = circomcompat.G2 - CircomProof* = Proof - CircomKey* = VerifyingKey - CircomInputs* = Inputs + CircomCompatProof* = circomcompat.Proof + CircomCompatKey* = circomcompat.VerifyingKey + CircomCompatInputs* = circomcompat.Inputs -proc toCircomInputs*(inputs: ProofInputs[Poseidon2Hash]): CircomInputs = + NimGroth16G1* = groth16.G1 + NimGroth16G2* = groth16.G2 + NimGroth16Proof* = groth16.Proof + +proc toCircomInputs*(inputs: ProofInputs[Poseidon2Hash]): CircomCompatInputs = var slotIndex = inputs.slotIndex.toF.toBytes.toArray32 datasetRoot = inputs.datasetRoot.toBytes.toArray32 @@ -34,21 +40,49 @@ proc toCircomInputs*(inputs: ProofInputs[Poseidon2Hash]): CircomInputs = let inputsPtr = allocShared0(32 * elms.len) copyMem(inputsPtr, addr elms[0], elms.len * 32) - CircomInputs(elms: cast[ptr array[32, byte]](inputsPtr), len: elms.len.uint) + CircomCompatInputs(elms: cast[ptr array[32, byte]](inputsPtr), len: elms.len.uint) -proc releaseCircomInputs*(inputs: var CircomInputs) = +proc releaseCircomInputs*(inputs: var CircomCompatInputs) = if not inputs.elms.isNil: deallocShared(inputs.elms) inputs.elms = nil -func toG1*(g: CircomG1): G1Point = +func toG1*(g: CircomCompatG1): G1Point = G1Point(x: UInt256.fromBytesLE(g.x), y: UInt256.fromBytesLE(g.y)) -func toG2*(g: CircomG2): G2Point = +func toG2*(g: CircomCompatG2): G2Point = G2Point( x: Fp2Element(real: UInt256.fromBytesLE(g.x[0]), imag: UInt256.fromBytesLE(g.x[1])), y: Fp2Element(real: UInt256.fromBytesLE(g.y[0]), imag: UInt256.fromBytesLE(g.y[1])), ) -func toGroth16Proof*(proof: CircomProof): Groth16Proof = +func toGroth16Proof*(proof: CircomCompatProof): Groth16Proof = Groth16Proof(a: proof.a.toG1, b: proof.b.toG2, c: proof.c.toG1) + +func toG1*(g: NimGroth16G1): G1Point = + var + x: seq[byte] + y: seq[byte] + + assert x.marshal(g.x, Endianness.littleEndian) + assert y.marshal(g.y, Endianness.littleEndian) + + G1Point(x: UInt256.fromBytesLE(x), y: UInt256.fromBytesLE(y)) + +func toG2*(g: NimGroth16G2): G2Point = + var + x: array[2, seq[byte]] + y: array[2, seq[byte]] + + assert x[0].marshal(g.x.coords[0], Endianness.littleEndian) + assert x[1].marshal(g.x.coords[1], Endianness.littleEndian) + assert y[0].marshal(g.y.coords[0], Endianness.littleEndian) + assert y[1].marshal(g.y.coords[1], Endianness.littleEndian) + + G2Point( + x: Fp2Element(real: UInt256.fromBytesLE(x[0]), imag: UInt256.fromBytesLE(x[1])), + y: Fp2Element(real: UInt256.fromBytesLE(y[0]), imag: UInt256.fromBytesLE(y[1])), + ) + +func toGroth16Proof*(proof: NimGroth16Proof): Groth16Proof = + Groth16Proof(a: proof.pi_a.toG1, b: proof.pi_b.toG2, c: proof.pi_c.toG1) diff --git a/codex/slots/proofs/backends/nimgroth16.nim b/codex/slots/proofs/backends/nimgroth16.nim new file mode 100644 index 0000000000..e51edd448b --- /dev/null +++ b/codex/slots/proofs/backends/nimgroth16.nim @@ -0,0 +1,208 @@ +## Nim-Codex +## Copyright (c) 2025 Status Research & Development GmbH +## Licensed under either of +## * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE)) +## * MIT license ([LICENSE-MIT](LICENSE-MIT)) +## at your option. +## This file may not be copied, modified, or distributed except according to +## those terms. + +{.push raises: [].} + +import std/sugar +import std/isolation +import std/atomics + +import pkg/chronos +import pkg/chronos/threadsync +import pkg/taskpools +import pkg/questionable/results + +import pkg/groth16 +import pkg/nim/circom_witnessgen +import pkg/nim/circom_witnessgen/load +import pkg/nim/circom_witnessgen/witness + +import ../../types +import ../../../stores +import ../../../contracts + +import ./converters + +export converters + +const DefaultCurve* = "bn128" + +type + NimGroth16Backend* = object + curve: string # curve name + slotDepth: int # max depth of the slot tree + datasetDepth: int # max depth of dataset tree + blkDepth: int # depth of the block merkle tree (pow2 for now) + cellElms: int # number of field elements per cell + numSamples: int # number of samples per slot + r1cs: R1CS # path to the r1cs file + zkey: ZKey # path to the zkey file + graph*: Graph # path to the graph file generated with circom-witnesscalc + tp: Taskpool # taskpool for async operations + + NimGroth16BackendRef* = ref NimGroth16Backend + + ProofTask* = object + proof: Isolated[Proof] + self: ptr NimGroth16Backend + inputs: Inputs + signal: ThreadSignalPtr + ok: Atomic[bool] + +proc release*(self: NimGroth16BackendRef) = + ## Release the ctx + ## + + discard + +proc normalizeInput[SomeHash]( + self: NimGroth16BackendRef, input: ProofInputs[SomeHash] +): Inputs = + ## Map inputs to witnessgen inputs + ## + + var normSlotProof = input.slotProof + normSlotProof.setLen(self.datasetDepth) + + { + "slotDepth": @[self.slotDepth.toF], + "datasetDepth": @[self.datasetDepth.toF], + "blkDepth": @[self.blkDepth.toF], + "cellElms": @[self.cellElms.toF], + "numSamples": @[self.numSamples.toF], + "entropy": @[input.entropy], + "dataSetRoot": @[input.datasetRoot], + "slotIndex": @[input.slotIndex.toF], + "slotRoot": @[input.slotRoot], + "nCellsPerSlot": @[input.nCellsPerSlot.toF], + "nSlotsPerDataSet": @[input.nSlotsPerDataSet.toF], + "slotProof": normSlotProof, + "cellData": input.samples.mapIt(it.cellData).concat, + "merklePaths": input.samples.mapIt( + block: + var mekrlePaths = it.merklePaths + mekrlePaths.setLen(self.slotDepth) + mekrlePaths + ).concat, + }.toTable + +proc generateProofTask(task: ptr ProofTask) = + defer: + if task[].signal != nil: + discard task[].signal.fireSync() + + try: + trace "Generating witness" + let + witnessValues = generateWitness(task[].self[].graph, task[].inputs) + witness = Witness( + curve: task[].self[].curve, + r: task[].self[].r1cs.r, + nvars: task[].self[].r1cs.cfg.nWires, + values: witnessValues, + ) + + trace "Generating nim groth16 proof" + var proof = generateProof(task[].self[].zkey, witness, task[].self[].tp) + trace "Proof generated, copying to main thread" + var isolatedProof = isolate(proof) + task[].proof = move isolatedProof + task[].ok.store true + except CatchableError as e: + error "Failed to generate proof", err = e.msg + task[].ok.store false + +proc prove*[SomeHash]( + self: NimGroth16BackendRef, input: ProofInputs[SomeHash] +): Future[?!NimGroth16Proof] {.async: (raises: [CancelledError]).} = + ## Prove a statement using backend. + ## + + var + signalPtr = ?ThreadSignalPtr.new().mapFailure + task = ProofTask( + self: cast[ptr NimGroth16Backend](self), + signal: signalPtr, + inputs: self.normalizeInput(input), + ) + + defer: + if signalPtr != nil: + ?signalPtr.close().mapFailure + signalPtr = nil + + self.tp.spawn generateProofTask(task.addr) + + let taskFut = signalPtr.wait() + if err =? catch(await taskFut.join()).errorOption: + # XXX: we need this because there is no way to cancel a task + # and without waiting for it to finish, we'll be writting to free'd + # memory in the task + warn "Error while generating proof, awaiting task to finish", err = err.msg + ?catch(await noCancel taskFut) + if err of CancelledError: # reraise cancelled error + trace "Task was cancelled" + raise (ref CancelledError) err + + trace "Task failed with error", err = err.msg + return failure err + + defer: + task.proof = default(Isolated[Proof]) + + if not task.ok.load: + trace "Task failed, no proof generated" + return failure("Failed to generate proof") + + var proof = task.proof.extract + trace "Task finished successfully, proof generated" + success proof + +proc verify*( + self: NimGroth16BackendRef, proof: NimGroth16Proof +): Future[?!bool] {.async: (raises: [CancelledError]).} = + let + vKey = self.zkey.extractVKey + verified = ?verifyProof(vKey, proof).catch + + success verified + +proc new*( + _: type NimGroth16BackendRef, + graph: string, + r1csPath: string, + zkeyPath: string, + curve = DefaultCurve, + slotDepth = DefaultMaxSlotDepth, + datasetDepth = DefaultMaxDatasetDepth, + blkDepth = DefaultBlockDepth, + cellElms = DefaultCellElms, + numSamples = DefaultSamplesNum, + tp: Taskpool, +): ?!NimGroth16BackendRef = + ## Create a new ctx + ## + + let + graph = ?loadGraph(graph).catch + r1cs = ?parseR1CS(r1csPath).catch + zkey = ?parseZKey(zkeyPath).catch + + success NimGroth16BackendRef( + graph: graph, + r1cs: r1cs, + zkey: zkey, + slotDepth: slotDepth, + datasetDepth: datasetDepth, + blkDepth: blkDepth, + cellElms: cellElms, + numSamples: numSamples, + curve: curve, + tp: tp, + ) diff --git a/tests/codex/slots/backends/helpers.nim b/tests/codex/slots/backends/helpers.nim index e1b6822a94..fe7f5c96d0 100644 --- a/tests/codex/slots/backends/helpers.nim +++ b/tests/codex/slots/backends/helpers.nim @@ -19,13 +19,13 @@ func toJsonDecimal*(big: BigInt[254]): string = let s = big.toDecimal.strip(leading = true, trailing = false, chars = {'0'}) if s.len == 0: "0" else: s -func toJson*(g1: CircomG1): JsonNode = +func toJson*(g1: CircomCompatG1): JsonNode = %*{ "x": Bn254Fr.fromBytes(g1.x).get.toBig.toJsonDecimal, "y": Bn254Fr.fromBytes(g1.y).get.toBig.toJsonDecimal, } -func toJson*(g2: CircomG2): JsonNode = +func toJson*(g2: CircomCompatG2): JsonNode = %*{ "x": [ Bn254Fr.fromBytes(g2.x[0]).get.toBig.toJsonDecimal, @@ -38,8 +38,9 @@ func toJson*(g2: CircomG2): JsonNode = } proc toJson*(vpk: VerifyingKey): JsonNode = - let ic = - toSeq(cast[ptr UncheckedArray[CircomG1]](vpk.ic).toOpenArray(0, vpk.icLen.int - 1)) + let ic = toSeq( + cast[ptr UncheckedArray[CircomCompatG1]](vpk.ic).toOpenArray(0, vpk.icLen.int - 1) + ) echo ic.len %*{ diff --git a/tests/codex/slots/backends/testcircomcompat.nim b/tests/codex/slots/backends/testcircomcompat.nim index b61d4f188c..91c04a66c8 100644 --- a/tests/codex/slots/backends/testcircomcompat.nim +++ b/tests/codex/slots/backends/testcircomcompat.nim @@ -24,7 +24,7 @@ suite "Test Circom Compat Backend - control inputs": zkey = "tests/circuits/fixtures/proof_main.zkey" var - circom: CircomCompat + circom: CircomCompatBackendRef proofInputs: ProofInputs[Poseidon2Hash] setup: @@ -33,22 +33,20 @@ suite "Test Circom Compat Backend - control inputs": inputJson = !JsonNode.parse(inputData) proofInputs = Poseidon2Hash.jsonToProofInput(inputJson) - circom = CircomCompat.init(r1cs, wasm, zkey) + circom = CircomCompatBackendRef.new(r1cs, wasm, zkey).tryGet teardown: circom.release() # this comes from the rust FFI test "Should verify with correct inputs": - let proof = circom.prove(proofInputs).tryGet - - check circom.verify(proof, proofInputs).tryGet + let proof = (await circom.prove(proofInputs)).tryGet + check (await circom.verify(proof, proofInputs)).tryGet test "Should not verify with incorrect inputs": proofInputs.slotIndex = 1 # change slot index - let proof = circom.prove(proofInputs).tryGet - - check circom.verify(proof, proofInputs).tryGet == false + let proof = (await circom.prove(proofInputs)).tryGet + check (await circom.verify(proof, proofInputs)).tryGet == false suite "Test Circom Compat Backend": let @@ -72,7 +70,7 @@ suite "Test Circom Compat Backend": manifest: Manifest protected: Manifest verifiable: Manifest - circom: CircomCompat + circom: CircomCompatBackendRef proofInputs: ProofInputs[Poseidon2Hash] challenge: array[32, byte] builder: Poseidon2Builder @@ -92,7 +90,7 @@ suite "Test Circom Compat Backend": builder = Poseidon2Builder.new(store, verifiable).tryGet sampler = Poseidon2Sampler.new(slotId, store, builder).tryGet - circom = CircomCompat.init(r1cs, wasm, zkey) + circom = CircomCompatBackendRef.new(r1cs, wasm, zkey).tryGet challenge = 1234567.toF.toBytes.toArray32 proofInputs = (await sampler.getProofInput(challenge, samples)).tryGet @@ -103,13 +101,11 @@ suite "Test Circom Compat Backend": await metaTmp.destroyDb() test "Should verify with correct input": - var proof = circom.prove(proofInputs).tryGet - - check circom.verify(proof, proofInputs).tryGet + var proof = (await circom.prove(proofInputs)).tryGet + check (await circom.verify(proof, proofInputs)).tryGet test "Should not verify with incorrect input": proofInputs.slotIndex = 1 # change slot index - let proof = circom.prove(proofInputs).tryGet - - check circom.verify(proof, proofInputs).tryGet == false + let proof = (await circom.prove(proofInputs)).tryGet + check (await circom.verify(proof, proofInputs)).tryGet == false diff --git a/tests/codex/slots/backends/testnimgroth16.nim b/tests/codex/slots/backends/testnimgroth16.nim new file mode 100644 index 0000000000..e7c6625bba --- /dev/null +++ b/tests/codex/slots/backends/testnimgroth16.nim @@ -0,0 +1,119 @@ +import std/options +import std/isolation + +import ../../../asynctest + +import pkg/chronos +import pkg/poseidon2 +import pkg/serde/json +import pkg/taskpools + +import pkg/codex/slots {.all.} +import pkg/codex/slots/types {.all.} +import pkg/codex/merkletree +import pkg/codex/merkletree/poseidon2 +import pkg/codex/codextypes +import pkg/codex/manifest +import pkg/codex/stores + +import pkg/groth16 +import pkg/nim/circom_witnessgen +import pkg/nim/circom_witnessgen/load +import pkg/nim/circom_witnessgen/witness + +import ./helpers +import ../helpers +import ../../helpers + +suite "Test NimGoth16 Backend - control inputs": + let + graph = "tests/circuits/fixtures/proof_main.bin" + r1cs = "tests/circuits/fixtures/proof_main.r1cs" + zkey = "tests/circuits/fixtures/proof_main.zkey" + + var + nimGroth16: NimGroth16BackendRef + proofInputs: ProofInputs[Poseidon2Hash] + + setup: + let + inputData = readFile("tests/circuits/fixtures/input.json") + inputJson = !JsonNode.parse(inputData) + + proofInputs = Poseidon2Hash.jsonToProofInput(inputJson) + nimGroth16 = NimGroth16BackendRef.new(graph, r1cs, zkey, tp = Taskpool.new()).tryGet + + teardown: + nimGroth16.release() + + test "Should verify with correct inputs": + let proof = (await nimGroth16.prove(proofInputs)).tryGet + check (await nimGroth16.verify(proof)).tryGet + +# test "Should not verify with incorrect inputs": +# proofInputs.slotIndex = 1 # change slot index + +# let proof = (await nimGroth16.prove(proofInputs)).tryGet +# check (await nimGroth16.verify(proof)).tryGet == false + +# suite "Test NimGoth16 Backend": +# let +# ecK = 2 +# ecM = 2 +# slotId = 3 +# samples = 5 +# numDatasetBlocks = 8 +# blockSize = DefaultBlockSize +# cellSize = DefaultCellSize + +# graph = "tests/circuits/fixtures/proof_main.bin" +# r1cs = "tests/circuits/fixtures/proof_main.r1cs" +# zkey = "tests/circuits/fixtures/proof_main.zkey" + +# repoTmp = TempLevelDb.new() +# metaTmp = TempLevelDb.new() + +# var +# store: BlockStore +# manifest: Manifest +# protected: Manifest +# verifiable: Manifest +# nimGroth16: NimGroth16BackendRef +# proofInputs: ProofInputs[Poseidon2Hash] +# challenge: array[32, byte] +# builder: Poseidon2Builder +# sampler: Poseidon2Sampler + +# setup: +# let +# repoDs = repoTmp.newDb() +# metaDs = metaTmp.newDb() + +# store = RepoStore.new(repoDs, metaDs) + +# (manifest, protected, verifiable) = await createVerifiableManifest( +# store, numDatasetBlocks, ecK, ecM, blockSize, cellSize +# ) + +# builder = Poseidon2Builder.new(store, verifiable).tryGet +# sampler = Poseidon2Sampler.new(slotId, store, builder).tryGet + +# nimGroth16 = NimGroth16BackendRef.new(graph, r1cs, zkey, tp = Taskpool.new()).tryGet +# challenge = 1234567.toF.toBytes.toArray32 + +# proofInputs = (await sampler.getProofInput(challenge, samples)).tryGet + +# teardown: +# nimGroth16.release() +# await repoTmp.destroyDb() +# await metaTmp.destroyDb() + +# test "Should verify with correct input": +# var proof = (await nimGroth16.prove(proofInputs)).tryGet +# check (await nimGroth16.verify(proof)).tryGet + +# test "Should not verify with incorrect input": +# proofInputs.slotIndex = 1 # change slot index + +# let proof = (await nimGroth16.prove(proofInputs)).tryGet +# check (await nimGroth16.verify(proof)).tryGet == false From 086e6f10e088fb881245125ea4d78a9d3717c4fd Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 28 May 2025 19:04:03 -0600 Subject: [PATCH 153/178] Refactor backend structure: remove unused files, add NimGroth16 support, and enhance prover functionality --- codex/slots/proofs/backendfactory.nim | 82 -------------- codex/slots/proofs/backends.nim | 5 +- codex/slots/proofs/backendutils.nim | 8 -- codex/slots/proofs/prover.nim | 96 +++++++++------- codex/slots/proofs/proverfactory.nim | 138 +++++++++++++++++++++++ tests/codex/slots/helpers.nim | 1 + tests/codex/slots/testbackendfactory.nim | 97 ---------------- tests/codex/slots/testbackends.nim | 1 + tests/codex/slots/testprover.nim | 73 ++++++------ tests/codex/slots/testproverfactory.nim | 111 ++++++++++++++++++ 10 files changed, 349 insertions(+), 263 deletions(-) delete mode 100644 codex/slots/proofs/backendfactory.nim delete mode 100644 codex/slots/proofs/backendutils.nim create mode 100644 codex/slots/proofs/proverfactory.nim delete mode 100644 tests/codex/slots/testbackendfactory.nim create mode 100644 tests/codex/slots/testproverfactory.nim diff --git a/codex/slots/proofs/backendfactory.nim b/codex/slots/proofs/backendfactory.nim deleted file mode 100644 index 7aba27d85c..0000000000 --- a/codex/slots/proofs/backendfactory.nim +++ /dev/null @@ -1,82 +0,0 @@ -import os -import strutils -import pkg/chronos -import pkg/chronicles -import pkg/questionable -import pkg/confutils/defs -import pkg/stew/io2 -import pkg/ethers - -import ../../conf -import ./backends -import ./backendutils - -proc initializeFromConfig(config: CodexConf, utils: BackendUtils): ?!AnyBackend = - if not fileAccessible($config.circomR1cs, {AccessFlags.Read}) or - not endsWith($config.circomR1cs, ".r1cs"): - return failure("Circom R1CS file not accessible") - - if not fileAccessible($config.circomWasm, {AccessFlags.Read}) or - not endsWith($config.circomWasm, ".wasm"): - return failure("Circom wasm file not accessible") - - if not fileAccessible($config.circomZkey, {AccessFlags.Read}) or - not endsWith($config.circomZkey, ".zkey"): - return failure("Circom zkey file not accessible") - - trace "Initialized prover backend from cli config" - success( - utils.initializeCircomBackend( - $config.circomR1cs, $config.circomWasm, $config.circomZkey - ) - ) - -proc r1csFilePath(config: CodexConf): string = - config.circuitDir / "proof_main.r1cs" - -proc wasmFilePath(config: CodexConf): string = - config.circuitDir / "proof_main.wasm" - -proc zkeyFilePath(config: CodexConf): string = - config.circuitDir / "proof_main.zkey" - -proc initializeFromCircuitDirFiles( - config: CodexConf, utils: BackendUtils -): ?!AnyBackend {.gcsafe.} = - if fileExists(config.r1csFilePath) and fileExists(config.wasmFilePath) and - fileExists(config.zkeyFilePath): - trace "Initialized prover backend from local files" - return success( - utils.initializeCircomBackend( - config.r1csFilePath, config.wasmFilePath, config.zkeyFilePath - ) - ) - - failure("Circuit files not found") - -proc suggestDownloadTool(config: CodexConf) = - without address =? config.marketplaceAddress: - raise (ref Defect)( - msg: "Proving backend initializing while marketplace address not set." - ) - - let - tokens = ["cirdl", "\"" & $config.circuitDir & "\"", config.ethProvider, $address] - instructions = "'./" & tokens.join(" ") & "'" - - warn "Proving circuit files are not found. Please run the following to download them:", - instructions - -proc initializeBackend*( - config: CodexConf, utils: BackendUtils = BackendUtils() -): ?!AnyBackend = - without backend =? initializeFromConfig(config, utils), cliErr: - info "Could not initialize prover backend from CLI options...", msg = cliErr.msg - without backend =? initializeFromCircuitDirFiles(config, utils), localErr: - info "Could not initialize prover backend from circuit dir files...", - msg = localErr.msg - suggestDownloadTool(config) - return failure("CircuitFilesNotFound") - # Unexpected: value of backend does not survive leaving each scope. (definition does though...) - return success(backend) - return success(backend) diff --git a/codex/slots/proofs/backends.nim b/codex/slots/proofs/backends.nim index 3bd2edb6cd..b0b79b3703 100644 --- a/codex/slots/proofs/backends.nim +++ b/codex/slots/proofs/backends.nim @@ -1,5 +1,4 @@ import ./backends/circomcompat +import ./backends/nimgroth16 -export circomcompat - -type AnyBackend* = CircomCompat +export circomcompat, nimgroth16 diff --git a/codex/slots/proofs/backendutils.nim b/codex/slots/proofs/backendutils.nim deleted file mode 100644 index 0e334aced2..0000000000 --- a/codex/slots/proofs/backendutils.nim +++ /dev/null @@ -1,8 +0,0 @@ -import ./backends - -type BackendUtils* = ref object of RootObj - -method initializeCircomBackend*( - self: BackendUtils, r1csFile: string, wasmFile: string, zKeyFile: string -): AnyBackend {.base, gcsafe.} = - CircomCompat.init(r1csFile, wasmFile, zKeyFile) diff --git a/codex/slots/proofs/prover.nim b/codex/slots/proofs/prover.nim index 1afcd06841..861ad627b6 100644 --- a/codex/slots/proofs/prover.nim +++ b/codex/slots/proofs/prover.nim @@ -12,6 +12,7 @@ import pkg/chronos import pkg/chronicles import pkg/circomcompat import pkg/poseidon2 +import pkg/taskpools import pkg/questionable/results import pkg/libp2p/cid @@ -35,22 +36,24 @@ logScope: topics = "codex prover" type - AnyProof* = CircomProof - - AnySampler* = Poseidon2Sampler - # add any other generic type here, eg. Poseidon2Sampler | ReinforceConcreteSampler - AnyBuilder* = Poseidon2Builder - # add any other generic type here, eg. Poseidon2Builder | ReinforceConcreteBuilder - - AnyProofInputs* = ProofInputs[Poseidon2Hash] - Prover* = ref object of RootObj - backend: AnyBackend - store: BlockStore + Prover* = ref object + case backendKind: ProverBackendCmd + of ProverBackendCmd.nimGroth16: + groth16Backend*: NimGroth16BackendRef + of ProverBackendCmd.circomCompat: + circomCompatBackend*: CircomCompatBackendRef nSamples: int + tp: Taskpool + + AnyBackend* = NimGroth16BackendRef or CircomCompatBackendRef -proc prove*( - self: Prover, slotIdx: int, manifest: Manifest, challenge: ProofChallenge -): Future[?!(AnyProofInputs, AnyProof)] {.async: (raises: [CancelledError]).} = +proc prove*[SomeSampler]( + self: Prover, + sampler: SomeSampler, + manifest: Manifest, + challenge: ProofChallenge, + verify = false, +): Future[?!(Groth16Proof, ?bool)] {.async: (raises: [CancelledError]).} = ## Prove a statement using backend. ## Returns a future that resolves to a proof. @@ -61,33 +64,46 @@ proc prove*( trace "Received proof challenge" - without builder =? AnyBuilder.new(self.store, manifest), err: - error "Unable to create slots builder", err = err.msg - return failure(err) - - without sampler =? AnySampler.new(slotIdx, self.store, builder), err: - error "Unable to create data sampler", err = err.msg - return failure(err) - - without proofInput =? await sampler.getProofInput(challenge, self.nSamples), err: - error "Unable to get proof input for slot", err = err.msg - return failure(err) - - # prove slot - without proof =? self.backend.prove(proofInput), err: - error "Unable to prove slot", err = err.msg - return failure(err) + let + proofInput = ?await sampler.getProofInput(challenge, self.nSamples) + # prove slot + + case self.backendKind + of ProverBackendCmd.nimGroth16: + let + proof = ?await self.groth16Backend.prove(proofInput) + verified = + if verify: + (?await self.groth16Backend.verify(proof)).some + else: + bool.none + return success (proof.toGroth16Proof, verified) + of ProverBackendCmd.circomCompat: + let + proof = ?await self.circomCompatBackend.prove(proofInput) + verified = + if verify: + (?await self.circomCompatBackend.verify(proof, proofInput)).some + else: + bool.none + return success (proof.toGroth16Proof, verified) - success (proofInput, proof) - -proc verify*( - self: Prover, proof: AnyProof, inputs: AnyProofInputs -): Future[?!bool] {.async: (raises: [CancelledError]).} = - ## Prove a statement using backend. - ## Returns a future that resolves to a proof. - self.backend.verify(proof, inputs) +proc new*( + _: type Prover, backend: CircomCompatBackendRef, nSamples: int, tp: Taskpool +): Prover = + Prover( + circomCompatBackend: backend, + backendKind: ProverBackendCmd.circomCompat, + nSamples: nSamples, + tp: tp, + ) proc new*( - _: type Prover, store: BlockStore, backend: AnyBackend, nSamples: int + _: type Prover, backend: NimGroth16BackendRef, nSamples: int, tp: Taskpool ): Prover = - Prover(store: store, backend: backend, nSamples: nSamples) + Prover( + groth16Backend: backend, + backendKind: ProverBackendCmd.nimGroth16, + nSamples: nSamples, + tp: tp, + ) diff --git a/codex/slots/proofs/proverfactory.nim b/codex/slots/proofs/proverfactory.nim new file mode 100644 index 0000000000..6f2795d774 --- /dev/null +++ b/codex/slots/proofs/proverfactory.nim @@ -0,0 +1,138 @@ +{.push raises: [].} + +import os +import strutils +import pkg/chronos +import pkg/chronicles +import pkg/questionable +import pkg/confutils/defs +import pkg/stew/io2 +import pkg/ethers +import pkg/taskpools + +import ../../conf +import ./backends +import ./prover + +template graphFilePath(config: CodexConf): string = + config.circuitDir / "proof_main.bin" + +template r1csFilePath(config: CodexConf): string = + config.circuitDir / "proof_main.r1cs" + +template wasmFilePath(config: CodexConf): string = + config.circuitDir / "proof_main.wasm" + +template zkeyFilePath(config: CodexConf): string = + config.circuitDir / "proof_main.zkey" + +proc getGraphFile*(config: CodexConf): ?!string = + if fileAccessible($config.circomGraph, {AccessFlags.Read}) and + endsWith($config.circomGraph, ".bin"): + success $config.circomGraph + elif fileAccessible(config.graphFilePath, {AccessFlags.Read}) and + endsWith(config.graphFilePath, ".bin"): + success config.graphFilePath + else: + failure("Graph file not accessible or not found") + +proc getR1csFile*(config: CodexConf): ?!string = + if fileAccessible($config.circomR1cs, {AccessFlags.Read}) and + endsWith($config.circomR1cs, ".r1cs"): + success $config.circomR1cs + elif fileAccessible(config.r1csFilePath, {AccessFlags.Read}) and + endsWith(config.r1csFilePath, ".r1cs"): + success config.r1csFilePath + else: + failure("R1CS file not accessible or not found") + +proc getWasmFile*(config: CodexConf): ?!string = + if fileAccessible($config.circomWasm, {AccessFlags.Read}) and + endsWith($config.circomWasm, ".wasm"): + success $config.circomWasm + elif fileAccessible(config.wasmFilePath, {AccessFlags.Read}) and + endsWith(config.wasmFilePath, ".wasm"): + success config.wasmFilePath + else: + failure("WASM file not accessible or not found") + +proc getZkeyFile*(config: CodexConf): ?!string = + if fileAccessible($config.circomZkey, {AccessFlags.Read}) and + endsWith($config.circomZkey, ".zkey"): + success $config.circomZkey + elif fileAccessible(config.zkeyFilePath, {AccessFlags.Read}) and + endsWith(config.zkeyFilePath, ".zkey"): + success config.zkeyFilePath + else: + failure("ZKey file not accessible or not found") + +proc suggestDownloadTool(config: CodexConf) = + without address =? config.marketplaceAddress: + raise (ref Defect)( + msg: "Proving backend initializing while marketplace address not set." + ) + + let + tokens = ["cirdl", "\"" & $config.circuitDir & "\"", config.ethProvider, $address] + instructions = "'./" & tokens.join(" ") & "'" + + warn "Proving circuit files are not found. Please run the following to download them:", + instructions + +proc initializeNimGroth16Backend( + config: CodexConf, tp: Taskpool +): ?!NimGroth16BackendRef = + let + graphFile = ?getGraphFile(config) + r1csFile = ?getR1csFile(config) + zkeyFile = ?getZkeyFile(config) + + return NimGroth16BackendRef.new( + $graphFile, + $r1csFile, + $zkeyFile, + config.nimGroth16Curve, + config.maxSlotDepth, + config.maxDatasetDepth, + config.maxBlockDepth, + config.maxCellElms, + config.numProofSamples, + tp, + ) + +proc initializeCircomCompatBackend( + config: CodexConf, tp: Taskpool +): ?!CircomCompatBackendRef = + let + r1csFile = ?getR1csFile(config) + wasmFile = ?getWasmFile(config) + zkeyFile = ?getZkeyFile(config) + + return CircomCompatBackendRef.new( + $r1csFile, + $wasmFile, + $zkeyFile, + config.maxSlotDepth, + config.maxDatasetDepth, + config.maxBlockDepth, + config.maxCellElms, + config.numProofSamples, + ) + +proc initializeProver*(config: CodexConf, tp: Taskpool): ?!Prover = + let prover = + case config.proverBackendCmd + of ProverBackendCmd.nimGroth16: + without backend =? initializeNimGroth16Backend(config, tp), err: + suggestDownloadTool(config) + return failure("Unable to initialize NimGroth16 backend") + + Prover.new(backend, config.numProofSamples, tp) + of ProverBackendCmd.circomCompat: + without backend =? initializeCircomCompatBackend(config, tp), err: + suggestDownloadTool(config) + return failure("Unable to initialize CircomCompat backend") + + Prover.new(backend, config.numProofSamples, tp) + + success prover diff --git a/tests/codex/slots/helpers.nim b/tests/codex/slots/helpers.nim index fced1f1c40..9394fd7c12 100644 --- a/tests/codex/slots/helpers.nim +++ b/tests/codex/slots/helpers.nim @@ -6,6 +6,7 @@ import pkg/libp2p/cid import pkg/codex/codextypes import pkg/codex/stores import pkg/codex/merkletree +import pkg/codex/utils/poseidon2digest import pkg/codex/manifest import pkg/codex/blocktype as bt import pkg/codex/chunker diff --git a/tests/codex/slots/testbackendfactory.nim b/tests/codex/slots/testbackendfactory.nim deleted file mode 100644 index a24bc41a5a..0000000000 --- a/tests/codex/slots/testbackendfactory.nim +++ /dev/null @@ -1,97 +0,0 @@ -import os -import ../../asynctest - -import pkg/chronos -import pkg/confutils/defs -import pkg/codex/conf -import pkg/codex/slots/proofs/backends -import pkg/codex/slots/proofs/backendfactory -import pkg/codex/slots/proofs/backendutils -import pkg/codex/utils/natutils - -import ../helpers -import ../examples - -type BackendUtilsMock = ref object of BackendUtils - argR1csFile: string - argWasmFile: string - argZKeyFile: string - -method initializeCircomBackend*( - self: BackendUtilsMock, r1csFile: string, wasmFile: string, zKeyFile: string -): AnyBackend = - self.argR1csFile = r1csFile - self.argWasmFile = wasmFile - self.argZKeyFile = zKeyFile - # We return a backend with *something* that's not nil that we can check for. - var - key = VerifyingKey(icLen: 123) - vkpPtr: ptr VerifyingKey = key.addr - return CircomCompat(vkp: vkpPtr) - -suite "Test BackendFactory": - let - utilsMock = BackendUtilsMock() - circuitDir = "testecircuitdir" - - setup: - createDir(circuitDir) - - teardown: - removeDir(circuitDir) - - test "Should create backend from cli config": - let - config = CodexConf( - cmd: StartUpCmd.persistence, - nat: NatConfig(hasExtIp: false, nat: NatNone), - metricsAddress: parseIpAddress("127.0.0.1"), - persistenceCmd: PersistenceCmd.prover, - marketplaceAddress: EthAddress.example.some, - circomR1cs: InputFile("tests/circuits/fixtures/proof_main.r1cs"), - circomWasm: InputFile("tests/circuits/fixtures/proof_main.wasm"), - circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"), - ) - backend = config.initializeBackend(utilsMock).tryGet - - check: - backend.vkp != nil - utilsMock.argR1csFile == $config.circomR1cs - utilsMock.argWasmFile == $config.circomWasm - utilsMock.argZKeyFile == $config.circomZkey - - test "Should create backend from local files": - let - config = CodexConf( - cmd: StartUpCmd.persistence, - nat: NatConfig(hasExtIp: false, nat: NatNone), - metricsAddress: parseIpAddress("127.0.0.1"), - persistenceCmd: PersistenceCmd.prover, - marketplaceAddress: EthAddress.example.some, - - # Set the circuitDir such that the tests/circuits/fixtures/ files - # will be picked up as local files: - circuitDir: OutDir("tests/circuits/fixtures"), - ) - backend = config.initializeBackend(utilsMock).tryGet - - check: - backend.vkp != nil - utilsMock.argR1csFile == config.circuitDir / "proof_main.r1cs" - utilsMock.argWasmFile == config.circuitDir / "proof_main.wasm" - utilsMock.argZKeyFile == config.circuitDir / "proof_main.zkey" - - test "Should suggest usage of downloader tool when files not available": - let - config = CodexConf( - cmd: StartUpCmd.persistence, - nat: NatConfig(hasExtIp: false, nat: NatNone), - metricsAddress: parseIpAddress("127.0.0.1"), - persistenceCmd: PersistenceCmd.prover, - marketplaceAddress: EthAddress.example.some, - circuitDir: OutDir(circuitDir), - ) - backendResult = config.initializeBackend(utilsMock) - - check: - backendResult.isErr diff --git a/tests/codex/slots/testbackends.nim b/tests/codex/slots/testbackends.nim index b9994fcdf6..f8f1b45082 100644 --- a/tests/codex/slots/testbackends.nim +++ b/tests/codex/slots/testbackends.nim @@ -1,3 +1,4 @@ import ./backends/testcircomcompat +import ./backends/testnimgroth16 {.warning[UnusedImport]: off.} diff --git a/tests/codex/slots/testprover.nim b/tests/codex/slots/testprover.nim index c567db55dd..8f7695e52d 100644 --- a/tests/codex/slots/testprover.nim +++ b/tests/codex/slots/testprover.nim @@ -13,17 +13,19 @@ import pkg/confutils/defs import pkg/poseidon2/io import pkg/codex/utils/poseidon2digest import pkg/codex/nat +import pkg/taskpools import pkg/codex/utils/natutils import ./helpers import ../helpers -suite "Test Prover": +suite "Test CircomCompat Prover": let samples = 5 blockSize = DefaultBlockSize cellSize = DefaultCellSize repoTmp = TempLevelDb.new() metaTmp = TempLevelDb.new() + tp = Taskpool.new() challenge = 1234567.toF.toBytes.toArray32 var @@ -34,55 +36,60 @@ suite "Test Prover": let repoDs = repoTmp.newDb() metaDs = metaTmp.newDb() - config = CodexConf( - cmd: StartUpCmd.persistence, - nat: NatConfig(hasExtIp: false, nat: NatNone), - metricsAddress: parseIpAddress("127.0.0.1"), - persistenceCmd: PersistenceCmd.prover, - circomR1cs: InputFile("tests/circuits/fixtures/proof_main.r1cs"), - circomWasm: InputFile("tests/circuits/fixtures/proof_main.wasm"), - circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"), - numProofSamples: samples, - ) - backend = config.initializeBackend().tryGet() + backend = CircomCompatBackendRef.new( + r1csPath = "tests/circuits/fixtures/proof_main.r1cs", + wasmPath = "tests/circuits/fixtures/proof_main.wasm", + zkeyPath = "tests/circuits/fixtures/proof_main.zkey", + ).tryGet + tp = Taskpool.new() store = RepoStore.new(repoDs, metaDs) - prover = Prover.new(store, backend, config.numProofSamples) + prover = Prover.new(backend, samples, tp) teardown: await repoTmp.destroyDb() await metaTmp.destroyDb() test "Should sample and prove a slot": - let (_, _, verifiable) = await createVerifiableManifest( - store, - 8, # number of blocks in the original dataset (before EC) - 5, # ecK - 3, # ecM - blockSize, - cellSize, - ) + let + (_, _, verifiable) = await createVerifiableManifest( + store, + 8, # number of blocks in the original dataset (before EC) + 5, # ecK + 3, # ecM + blockSize, + cellSize, + ) - let (inputs, proof) = (await prover.prove(1, verifiable, challenge)).tryGet + builder = + Poseidon2Builder.new(store, verifiable, verifiable.verifiableStrategy).tryGet + sampler = Poseidon2Sampler.new(1, store, builder).tryGet + (_, checked) = + (await prover.prove(sampler, verifiable, challenge, verify = true)).tryGet check: - (await prover.verify(proof, inputs)).tryGet == true + checked.isSome and checked.get == true test "Should generate valid proofs when slots consist of single blocks": # To get single-block slots, we just need to set the number of blocks in # the original dataset to be the same as ecK. The total number of blocks # after generating random data for parity will be ecK + ecM, which will # match the number of slots. - let (_, _, verifiable) = await createVerifiableManifest( - store, - 2, # number of blocks in the original dataset (before EC) - 2, # ecK - 1, # ecM - blockSize, - cellSize, - ) + let + (_, _, verifiable) = await createVerifiableManifest( + store, + 2, # number of blocks in the original dataset (before EC) + 2, # ecK + 1, # ecM + blockSize, + cellSize, + ) - let (inputs, proof) = (await prover.prove(1, verifiable, challenge)).tryGet + builder = + Poseidon2Builder.new(store, verifiable, verifiable.verifiableStrategy).tryGet + sampler = Poseidon2Sampler.new(1, store, builder).tryGet + (_, checked) = + (await prover.prove(sampler, verifiable, challenge, verify = true)).tryGet check: - (await prover.verify(proof, inputs)).tryGet == true + checked.isSome and checked.get == true diff --git a/tests/codex/slots/testproverfactory.nim b/tests/codex/slots/testproverfactory.nim new file mode 100644 index 0000000000..b65265504f --- /dev/null +++ b/tests/codex/slots/testproverfactory.nim @@ -0,0 +1,111 @@ +import os +import ../../asynctest + +import pkg/chronos +import pkg/taskpools + +import pkg/confutils/defs +import pkg/codex/conf +import pkg/codex/slots/proofs/backends +import pkg/codex/slots/proofs/proverfactory {.all.} +import pkg/codex/utils/natutils + +import ../helpers +import ../examples + +suite "Test BackendFactory": + let circuitDir = "testecircuitdir" + + setup: + createDir(circuitDir) + + teardown: + removeDir(circuitDir) + + test "Should initialize with correct nimGroth16 config files": + let config = CodexConf( + cmd: StartUpCmd.persistence, + nat: NatConfig(hasExtIp: false, nat: NatNone), + metricsAddress: parseIpAddress("127.0.0.1"), + persistenceCmd: PersistenceCmd.prover, + marketplaceAddress: EthAddress.example.some, + proverBackendCmd: ProverBackendCmd.nimGroth16, + circomGraph: InputFile("tests/circuits/fixtures/proof_main.bin"), + circomR1cs: InputFile("tests/circuits/fixtures/proof_main.r1cs"), + circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"), + ) + + check: + getGraphFile(config).tryGet == $config.circomGraph + getR1csFile(config).tryGet == $config.circomR1cs + getZkeyFile(config).tryGet == $config.circomZkey + + test "Should initialize with correct circom compat config files": + let config = CodexConf( + cmd: StartUpCmd.persistence, + nat: NatConfig(hasExtIp: false, nat: NatNone), + metricsAddress: parseIpAddress("127.0.0.1"), + persistenceCmd: PersistenceCmd.prover, + marketplaceAddress: EthAddress.example.some, + proverBackendCmd: ProverBackendCmd.circomCompat, + circomWasm: InputFile("tests/circuits/fixtures/proof_main.wasm"), + circomR1cs: InputFile("tests/circuits/fixtures/proof_main.r1cs"), + circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"), + ) + + check: + getWasmFile(config).tryGet == $config.circomWasm + getR1csFile(config).tryGet == $config.circomR1cs + getZkeyFile(config).tryGet == $config.circomZkey + + test "Should initialize circom compat from local directory": + let config = CodexConf( + cmd: StartUpCmd.persistence, + nat: NatConfig(hasExtIp: false, nat: NatNone), + metricsAddress: parseIpAddress("127.0.0.1"), + persistenceCmd: PersistenceCmd.prover, + marketplaceAddress: EthAddress.example.some, + proverBackendCmd: ProverBackendCmd.circomCompat, + # Set the circuitDir such that the tests/circuits/fixtures/ files + # will be picked up as local files: + circuitDir: OutDir("tests/circuits/fixtures"), + ) + + check: + getR1csFile(config).tryGet == config.circuitDir / "proof_main.r1cs" + getWasmFile(config).tryGet == config.circuitDir / "proof_main.wasm" + getZKeyFile(config).tryGet == config.circuitDir / "proof_main.zkey" + + test "Should initialize nim groth16 from local directory": + let config = CodexConf( + cmd: StartUpCmd.persistence, + nat: NatConfig(hasExtIp: false, nat: NatNone), + metricsAddress: parseIpAddress("127.0.0.1"), + persistenceCmd: PersistenceCmd.prover, + marketplaceAddress: EthAddress.example.some, + proverBackendCmd: ProverBackendCmd.nimGroth16, + # Set the circuitDir such that the tests/circuits/fixtures/ files + # will be picked up as local files: + circuitDir: OutDir("tests/circuits/fixtures"), + ) + + check: + getGraphFile(config).tryGet == config.circuitDir / "proof_main.bin" + getR1csFile(config).tryGet == config.circuitDir / "proof_main.r1cs" + getZKeyFile(config).tryGet == config.circuitDir / "proof_main.zkey" + + test "Should suggest usage of downloader tool when files not available": + let + config = CodexConf( + cmd: StartUpCmd.persistence, + nat: NatConfig(hasExtIp: false, nat: NatNone), + metricsAddress: parseIpAddress("127.0.0.1"), + persistenceCmd: PersistenceCmd.prover, + proverBackendCmd: ProverBackendCmd.nimGroth16, + marketplaceAddress: EthAddress.example.some, + circuitDir: OutDir(circuitDir), + ) + proverResult = config.initializeProver(Taskpool.new()) + + check: + proverResult.isErr From 6ec73f396d1066e0fdd6a6342cf2ed8bd4f51679 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 28 May 2025 19:04:22 -0600 Subject: [PATCH 154/178] Refactor SlotsBuilder and DataSampler types to use generic parameters SomeTree and SomeHash --- codex/slots/builder/builder.nim | 144 ++++++++++++++++---------------- codex/slots/sampler/sampler.nim | 65 +++++++------- 2 files changed, 104 insertions(+), 105 deletions(-) diff --git a/codex/slots/builder/builder.nim b/codex/slots/builder/builder.nim index a26fc04e0a..7bf6baea12 100644 --- a/codex/slots/builder/builder.nim +++ b/codex/slots/builder/builder.nim @@ -34,107 +34,125 @@ export converters, asynciter logScope: topics = "codex slotsbuilder" -type SlotsBuilder*[T, H] = ref object of RootObj +type SlotsBuilder*[SomeTree, SomeHash] = ref object of RootObj store: BlockStore manifest: Manifest # current manifest strategy: IndexingStrategy # indexing strategy cellSize: NBytes # cell size numSlotBlocks: Natural # number of blocks per slot (should yield a power of two number of cells) - slotRoots: seq[H] # roots of the slots + slotRoots: seq[SomeHash] # roots of the slots emptyBlock: seq[byte] # empty block - verifiableTree: ?T # verification tree (dataset tree) - emptyDigestTree: T # empty digest tree for empty blocks + verifiableTree: ?SomeTree # verification tree (dataset tree) + emptyDigestTree: SomeTree # empty digest tree for empty blocks -func verifiable*[T, H](self: SlotsBuilder[T, H]): bool {.inline.} = +func verifiable*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash] +): bool {.inline.} = ## Returns true if the slots are verifiable. ## self.manifest.verifiable -func slotRoots*[T, H](self: SlotsBuilder[T, H]): seq[H] {.inline.} = +func slotRoots*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash] +): seq[SomeHash] {.inline.} = ## Returns the slot roots. ## self.slotRoots -func verifyTree*[T, H](self: SlotsBuilder[T, H]): ?T {.inline.} = +func verifyTree*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash] +): ?SomeTree {.inline.} = ## Returns the slots tree (verification tree). ## self.verifiableTree -func verifyRoot*[T, H](self: SlotsBuilder[T, H]): ?H {.inline.} = +func verifyRoot*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash] +): ?SomeHash {.inline.} = ## Returns the slots root (verification root). ## if tree =? self.verifyTree and root =? tree.root: return some root -func numSlots*[T, H](self: SlotsBuilder[T, H]): Natural = +func numSlots*[SomeTree, SomeHash](self: SlotsBuilder[SomeTree, SomeHash]): Natural = ## Number of slots. ## self.manifest.numSlots -func numSlotBlocks*[T, H](self: SlotsBuilder[T, H]): Natural = +func numSlotBlocks*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash] +): Natural = ## Number of blocks per slot. ## self.numSlotBlocks -func numBlocks*[T, H](self: SlotsBuilder[T, H]): Natural = +func numBlocks*[SomeTree, SomeHash](self: SlotsBuilder[SomeTree, SomeHash]): Natural = ## Number of blocks. ## self.numSlotBlocks * self.manifest.numSlots -func slotBytes*[T, H](self: SlotsBuilder[T, H]): NBytes = +func slotBytes*[SomeTree, SomeHash](self: SlotsBuilder[SomeTree, SomeHash]): NBytes = ## Number of bytes per slot. ## (self.manifest.blockSize.int * self.numSlotBlocks).NBytes -func numBlockCells*[T, H](self: SlotsBuilder[T, H]): Natural = +func numBlockCells*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash] +): Natural = ## Number of cells per block. ## (self.manifest.blockSize div self.cellSize).Natural -func cellSize*[T, H](self: SlotsBuilder[T, H]): NBytes = +func cellSize*[SomeTree, SomeHash](self: SlotsBuilder[SomeTree, SomeHash]): NBytes = ## Cell size. ## self.cellSize -func numSlotCells*[T, H](self: SlotsBuilder[T, H]): Natural = +func numSlotCells*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash] +): Natural = ## Number of cells per slot. ## self.numBlockCells * self.numSlotBlocks -func slotIndiciesIter*[T, H](self: SlotsBuilder[T, H], slot: Natural): ?!Iter[int] = +func slotIndiciesIter*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash], slot: Natural +): ?!Iter[int] = ## Returns the slot indices. ## self.strategy.getIndicies(slot).catch -func slotIndicies*[T, H](self: SlotsBuilder[T, H], slot: Natural): seq[int] = +func slotIndicies*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash], slot: Natural +): seq[int] = ## Returns the slot indices. ## if iter =? self.strategy.getIndicies(slot).catch: return toSeq(iter) -func manifest*[T, H](self: SlotsBuilder[T, H]): Manifest = +func manifest*[SomeTree, SomeHash](self: SlotsBuilder[SomeTree, SomeHash]): Manifest = ## Returns the manifest. ## self.manifest -proc buildBlockTree*[T, H]( - self: SlotsBuilder[T, H], blkIdx: Natural, slotPos: Natural -): Future[?!(seq[byte], T)] {.async: (raises: [CancelledError]).} = +proc buildBlockTree*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash], blkIdx: Natural, slotPos: Natural +): Future[?!(seq[byte], SomeTree)] {.async: (raises: [CancelledError]).} = ## Build the block digest tree and return a tuple with the ## block data and the tree. ## @@ -152,22 +170,17 @@ proc buildBlockTree*[T, H]( trace "Returning empty digest tree for pad block" return success (self.emptyBlock, self.emptyDigestTree) - without blk =? await self.store.getBlock(self.manifest.treeCid, blkIdx), err: - error "Failed to get block CID for tree at index", err = err.msg - return failure(err) + let blk = ?await self.store.getBlock(self.manifest.treeCid, blkIdx) if blk.isEmpty: success (self.emptyBlock, self.emptyDigestTree) else: - without tree =? T.digestTree(blk.data, self.cellSize.int), err: - error "Failed to create digest for block", err = err.msg - return failure(err) - + let tree = ?SomeTree.digestTree(blk.data, self.cellSize.int) success (blk.data, tree) -proc getCellHashes*[T, H]( - self: SlotsBuilder[T, H], slotIndex: Natural -): Future[?!seq[H]] {.async: (raises: [CancelledError, IndexingError]).} = +proc getCellHashes*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash], slotIndex: Natural +): Future[?!seq[SomeHash]] {.async: (raises: [CancelledError]).} = ## Collect all the cells from a block and return ## their hashes. ## @@ -184,7 +197,7 @@ proc getCellHashes*[T, H]( slotIndex = slotIndex let hashes = collect(newSeq): - for i, blkIdx in self.strategy.getIndicies(slotIndex): + for i, blkIdx in ?self.strategy.getIndicies(slotIndex).catch: logScope: blkIdx = blkIdx pos = i @@ -200,25 +213,18 @@ proc getCellHashes*[T, H]( success hashes -proc buildSlotTree*[T, H]( - self: SlotsBuilder[T, H], slotIndex: Natural -): Future[?!T] {.async: (raises: [CancelledError]).} = +proc buildSlotTree*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash], slotIndex: Natural +): Future[?!SomeTree] {.async: (raises: [CancelledError]).} = ## Build the slot tree from the block digest hashes ## and return the tree. - try: - without cellHashes =? (await self.getCellHashes(slotIndex)), err: - error "Failed to select slot blocks", err = err.msg - return failure(err) - - T.init(cellHashes) - except IndexingError as err: - error "Failed to build slot tree", err = err.msg - return failure(err) + let cellHashes = ?await self.getCellHashes(slotIndex) + SomeTree.init(cellHashes) -proc buildSlot*[T, H]( - self: SlotsBuilder[T, H], slotIndex: Natural -): Future[?!H] {.async: (raises: [CancelledError]).} = +proc buildSlot*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash], slotIndex: Natural +): Future[?!SomeHash] {.async: (raises: [CancelledError]).} = ## Build a slot tree and store the proofs in ## the block store. ## @@ -244,18 +250,17 @@ proc buildSlot*[T, H]( error "Failed to get proof for slot tree", err = err.msg return failure(err) - if err =? - (await self.store.putCidAndProof(treeCid, i, cellCid, encodableProof)).errorOption: - error "Failed to store slot tree", err = err.msg - return failure(err) + ?(await self.store.putCidAndProof(treeCid, i, cellCid, encodableProof)) tree.root() -func buildVerifyTree*[T, H](self: SlotsBuilder[T, H], slotRoots: openArray[H]): ?!T = - T.init(@slotRoots) +func buildVerifyTree*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash], slotRoots: openArray[SomeHash] +): ?!SomeTree = + SomeTree.init(@slotRoots) -proc buildSlots*[T, H]( - self: SlotsBuilder[T, H] +proc buildSlots*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash] ): Future[?!void] {.async: (raises: [CancelledError]).} = ## Build all slot trees and store them in the block store. ## @@ -269,10 +274,7 @@ proc buildSlots*[T, H]( if self.slotRoots.len == 0: self.slotRoots = collect(newSeq): for i in 0 ..< self.manifest.numSlots: - without slotRoot =? (await self.buildSlot(i)), err: - error "Failed to build slot", err = err.msg, index = i - return failure(err) - slotRoot + ?(await self.buildSlot(i)) without tree =? self.buildVerifyTree(self.slotRoots) and root =? tree.root, err: error "Failed to build slot roots tree", err = err.msg @@ -286,17 +288,15 @@ proc buildSlots*[T, H]( success() -proc buildManifest*[T, H]( - self: SlotsBuilder[T, H] +proc buildManifest*[SomeTree, SomeHash]( + self: SlotsBuilder[SomeTree, SomeHash] ): Future[?!Manifest] {.async: (raises: [CancelledError]).} = - if err =? (await self.buildSlots()).errorOption: - error "Failed to build slot roots", err = err.msg - return failure(err) + ## Build the manifest from the slots and return it. + ## - without rootCids =? self.slotRoots.toSlotCids(), err: - error "Failed to map slot roots to CIDs", err = err.msg - return failure(err) + ?(await self.buildSlots()) # build all slots first + let rootCids = ?self.slotRoots.toSlotCids() without rootProvingCidRes =? self.verifyRoot .? toVerifyCid() and rootProvingCid =? rootProvingCidRes, err: error "Failed to map slot roots to CIDs", err = err.msg @@ -306,13 +306,13 @@ proc buildManifest*[T, H]( self.manifest, rootProvingCid, rootCids, self.cellSize, self.strategy.strategyType ) -proc new*[T, H]( - _: type SlotsBuilder[T, H], +proc new*[SomeTree, SomeHash]( + _: type SlotsBuilder[SomeTree, SomeHash], store: BlockStore, manifest: Manifest, strategy = SteppedStrategy, cellSize = DefaultCellSize, -): ?!SlotsBuilder[T, H] = +): ?!SlotsBuilder[SomeTree, SomeHash] = if not manifest.protected: trace "Manifest is not protected." return failure("Manifest is not protected.") @@ -352,7 +352,7 @@ proc new*[T, H]( numBlocksTotal = numSlotBlocksTotal * manifest.numSlots # number of blocks per slot emptyBlock = newSeq[byte](manifest.blockSize.int) - emptyDigestTree = ?T.digestTree(emptyBlock, cellSize.int) + emptyDigestTree = ?SomeTree.digestTree(emptyBlock, cellSize.int) strategy = ?strategy.init(0, numBlocksTotal - 1, manifest.numSlots).catch @@ -368,7 +368,7 @@ proc new*[T, H]( trace "Creating slots builder" - var self = SlotsBuilder[T, H]( + var self = SlotsBuilder[SomeTree, SomeHash]( store: store, manifest: manifest, strategy: strategy, diff --git a/codex/slots/sampler/sampler.nim b/codex/slots/sampler/sampler.nim index 6ea41ee338..740f5950e9 100644 --- a/codex/slots/sampler/sampler.nim +++ b/codex/slots/sampler/sampler.nim @@ -29,14 +29,14 @@ import ./utils logScope: topics = "codex datasampler" -type DataSampler*[T, H] = ref object of RootObj +type DataSampler*[SomeTree, SomeHash] = ref object of RootObj index: Natural blockStore: BlockStore - builder: SlotsBuilder[T, H] + builder: SlotsBuilder[SomeTree, SomeHash] -func getCell*[T, H]( - self: DataSampler[T, H], blkBytes: seq[byte], blkCellIdx: Natural -): seq[H] = +func getCell*[SomeTree, SomeHash]( + self: DataSampler[SomeTree, SomeHash], blkBytes: seq[byte], blkCellIdx: Natural +): seq[SomeHash] = let cellSize = self.builder.cellSize.uint64 dataStart = cellSize * blkCellIdx.uint64 @@ -44,11 +44,14 @@ func getCell*[T, H]( doAssert (dataEnd - dataStart) == cellSize, "Invalid cell size" - blkBytes[dataStart ..< dataEnd].elements(H).toSeq() + blkBytes[dataStart ..< dataEnd].elements(SomeHash).toSeq() -proc getSample*[T, H]( - self: DataSampler[T, H], cellIdx: int, slotTreeCid: Cid, slotRoot: H -): Future[?!Sample[H]] {.async: (raises: [CancelledError]).} = +proc getSample*[SomeTree, SomeHash]( + self: DataSampler[SomeTree, SomeHash], + cellIdx: int, + slotTreeCid: Cid, + slotRoot: SomeHash, +): Future[?!Sample[SomeHash]] {.async: (raises: [CancelledError]).} = let cellsPerBlock = self.builder.numBlockCells blkCellIdx = cellIdx.toCellInBlk(cellsPerBlock) # block cell index @@ -77,27 +80,22 @@ proc getSample*[T, H]( cellProof = blkTree.getProof(blkCellIdx).valueOr: return failure("Failed to get proof from block tree") - success Sample[H](cellData: cellData, merklePaths: (cellProof.path & slotProof.path)) + success Sample[SomeHash]( + cellData: cellData, merklePaths: (cellProof.path & slotProof.path) + ) -proc getProofInput*[T, H]( - self: DataSampler[T, H], entropy: ProofChallenge, nSamples: Natural -): Future[?!ProofInputs[H]] {.async: (raises: [CancelledError]).} = +proc getProofInput*[SomeTree, SomeHash]( + self: DataSampler[SomeTree, SomeHash], entropy: ProofChallenge, nSamples: Natural +): Future[?!ProofInputs[SomeHash]] {.async: (raises: [CancelledError]).} = ## Generate proofs as input to the proving circuit. ## let - entropy = H.fromBytes(array[31, byte].initCopyFrom(entropy[0 .. 30])) - # truncate to 31 bytes, otherwise it _might_ be greater than mod - - verifyTree = self.builder.verifyTree.toFailure.valueOr: - return failure("Failed to get verify tree") - - slotProof = verifyTree.getProof(self.index).valueOr: - return failure("Failed to get slot proof") - - datasetRoot = verifyTree.root().valueOr: - return failure("Failed to get dataset root") - + # truncate to 31 bytes, otherwise it _might_ be greater than mod + entropy = SomeHash.fromBytes(array[31, byte].initCopyFrom(entropy[0 .. 30])) + verifyTree = ?self.builder.verifyTree.toFailure + slotProof = ?verifyTree.getProof(self.index) + datasetRoot = ?verifyTree.root() slotTreeCid = self.builder.manifest.slotRoots[self.index] slotRoot = self.builder.slotRoots[self.index] cellIdxs = entropy.cellIndices(slotRoot, self.builder.numSlotCells, nSamples) @@ -108,10 +106,9 @@ proc getProofInput*[T, H]( trace "Collecting input for proof" let samples = collect(newSeq): for cellIdx in cellIdxs: - (await self.getSample(cellIdx, slotTreeCid, slotRoot)).valueOr: - return failure("Failed to get sample") + ?(await self.getSample(cellIdx, slotTreeCid, slotRoot)) - success ProofInputs[H]( + success ProofInputs[SomeHash]( entropy: entropy, datasetRoot: datasetRoot, slotProof: slotProof.path, @@ -122,12 +119,12 @@ proc getProofInput*[T, H]( samples: samples, ) -proc new*[T, H]( - _: type DataSampler[T, H], +proc new*[SomeTree, SomeHash]( + _: type DataSampler[SomeTree, SomeHash], index: Natural, blockStore: BlockStore, - builder: SlotsBuilder[T, H], -): ?!DataSampler[T, H] = + builder: SlotsBuilder[SomeTree, SomeHash], +): ?!DataSampler[SomeTree, SomeHash] = if index > builder.slotRoots.high: error "Slot index is out of range" return failure("Slot index is out of range") @@ -135,4 +132,6 @@ proc new*[T, H]( if not builder.verifiable: return failure("Cannot instantiate DataSampler for non-verifiable builder") - success DataSampler[T, H](index: index, blockStore: blockStore, builder: builder) + success DataSampler[SomeTree, SomeHash]( + index: index, blockStore: blockStore, builder: builder + ) From aaca013ff5fb26e6b0470f46a0aae07ad39fa48c Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 28 May 2025 19:05:25 -0600 Subject: [PATCH 155/178] Refactor codebase: enhance error handling, improve type definitions, and streamline async procedures --- codex/codex.nim | 28 +++----- codex/node.nim | 137 +++++++++++++++++------------------- codex/slots/builder.nim | 2 +- codex/slots/proofs.nim | 4 +- codex/slots/types.nim | 24 +++---- codex/stores/treehelper.nim | 8 ++- codex/utils/arrayutils.nim | 2 - 7 files changed, 92 insertions(+), 113 deletions(-) diff --git a/codex/codex.nim b/codex/codex.nim index 3ee48d68df..234f2d7fab 100644 --- a/codex/codex.nim +++ b/codex/codex.nim @@ -208,22 +208,13 @@ proc new*( .withTcpTransport({ServerFlags.ReuseAddr}) .build() - var - cache: CacheStore = nil - taskpool: Taskpool + var tp = + try: + Taskpool.new(numThreads = int(config.numThreads)) + except CatchableError as exc: + raiseAssert("Failure in tp initialization:" & exc.msg) - try: - if config.numThreads == ThreadCount(0): - taskpool = Taskpool.new(numThreads = min(countProcessors(), 16)) - else: - taskpool = Taskpool.new(numThreads = int(config.numThreads)) - info "Threadpool started", numThreads = taskpool.numThreads - except CatchableError as exc: - raiseAssert("Failure in taskpool initialization:" & exc.msg) - - if config.cacheSize > 0'nb: - cache = CacheStore.new(cacheSize = config.cacheSize) - ## Is unused? + info "Threadpool started", numThreads = tp.numThreads let discoveryDir = config.dataDir / CodexDhtNamespace @@ -299,9 +290,8 @@ proc new*( store = NetworkStore.new(engine, repoStore) prover = if config.prover: - let backend = - config.initializeBackend().expect("Unable to create prover backend.") - some Prover.new(store, backend, config.numProofSamples) + let prover = config.initializeProver(tp).expect("Unable to create prover.") + some prover else: none Prover @@ -311,7 +301,7 @@ proc new*( engine = engine, discovery = discovery, prover = prover, - taskPool = taskpool, + taskPool = tp, ) restServer = RestServerRef diff --git a/codex/node.nim b/codex/node.nim index b742df2cc3..2250b4313d 100644 --- a/codex/node.nim +++ b/codex/node.nim @@ -46,6 +46,7 @@ import ./errors import ./logutils import ./utils/asynciter import ./utils/trackedfutures +import ./utils/poseidon2digest export logutils @@ -63,17 +64,17 @@ type ] CodexNode* = object - switch: Switch - networkId: PeerId - networkStore: NetworkStore - engine: BlockExcEngine - prover: ?Prover - discovery: Discovery - contracts*: Contracts - clock*: Clock - storage*: Contracts - taskpool: Taskpool - trackedFutures: TrackedFutures + switch: Switch # the libp2p network switch + networkId: PeerId # the peer id of the node + networkStore: NetworkStore # the network store + engine: BlockExcEngine # the block exchange engine + prover: ?Prover # the prover + discovery: Discovery # the discovery service + contracts*: Contracts # the contracts + clock*: Clock # the clock + storage*: Contracts # the storage + taskpool: Taskpool # the taskpool + trackedFutures: TrackedFutures # the tracked futures CodexNodeRef* = ref CodexNode @@ -96,18 +97,12 @@ func discovery*(self: CodexNodeRef): Discovery = proc storeManifest*( self: CodexNodeRef, manifest: Manifest -): Future[?!bt.Block] {.async.} = - without encodedVerifiable =? manifest.encode(), err: - trace "Unable to encode manifest" - return failure(err) - - without blk =? bt.Block.new(data = encodedVerifiable, codec = ManifestCodec), error: - trace "Unable to create block from manifest" - return failure(error) +): Future[?!bt.Block] {.async: (raises: [CancelledError]).} = + let + encodedVerifiable = ?manifest.encode() + blk = ?bt.Block.new(data = encodedVerifiable, codec = ManifestCodec) - if err =? (await self.networkStore.putBlock(blk)).errorOption: - trace "Unable to store manifest block", cid = blk.cid, err = err.msg - return failure(err) + ?await self.networkStore.putBlock(blk) success blk @@ -338,7 +333,9 @@ proc retrieve*( await self.streamEntireDataset(manifest, cid) -proc deleteSingleBlock(self: CodexNodeRef, cid: Cid): Future[?!void] {.async.} = +proc deleteSingleBlock( + self: CodexNodeRef, cid: Cid +): Future[?!void] {.async: (raises: [CancelledError]).} = if err =? (await self.networkStore.delBlock(cid)).errorOption: error "Error deleting block", cid, err = err.msg return failure(err) @@ -346,7 +343,9 @@ proc deleteSingleBlock(self: CodexNodeRef, cid: Cid): Future[?!void] {.async.} = trace "Deleted block", cid return success() -proc deleteEntireDataset(self: CodexNodeRef, cid: Cid): Future[?!void] {.async.} = +proc deleteEntireDataset( + self: CodexNodeRef, cid: Cid +): Future[?!void] {.async: (raises: [CancelledError]).} = # Deletion is a strictly local operation var store = self.networkStore.localStore @@ -403,7 +402,7 @@ proc store*( filename: ?string = string.none, mimetype: ?string = string.none, blockSize = DefaultBlockSize, -): Future[?!Cid] {.async.} = +): Future[?!Cid] {.async: (raises: [CancelledError]).} = ## Save stream contents as dataset with given blockSize ## to nodes's BlockStore, and return Cid of its manifest ## @@ -478,7 +477,9 @@ proc store*( return manifestBlk.cid.success -proc iterateManifests*(self: CodexNodeRef, onManifest: OnManifest) {.async.} = +proc iterateManifests*( + self: CodexNodeRef, onManifest: OnManifest +) {.async: (raises: [CancelledError]).} = without cidsIter =? await self.networkStore.listBlocks(BlockType.Manifest): warn "Failed to listBlocks" return @@ -505,7 +506,7 @@ proc setupRequest( pricePerBytePerSecond: UInt256, collateralPerByte: UInt256, expiry: uint64, -): Future[?!StorageRequest] {.async.} = +): Future[?!StorageRequest] {.async: (raises: [CancelledError]).} = ## Setup slots for a given dataset ## @@ -527,32 +528,20 @@ proc setupRequest( trace "Setting up slots" - without manifest =? await self.fetchManifest(cid), error: - trace "Unable to fetch manifest for cid" - return failure error - - # Erasure code the dataset according to provided parameters - let erasure = Erasure.new( - self.networkStore.localStore, leoEncoderProvider, leoDecoderProvider, self.taskpool - ) - - without encoded =? (await erasure.encode(manifest, ecK, ecM)), error: - trace "Unable to erasure code dataset" - return failure(error) - - without builder =? Poseidon2Builder.new(self.networkStore.localStore, encoded), err: - trace "Unable to create slot builder" - return failure(err) + let + manifest = ?await self.fetchManifest(cid) - without verifiable =? (await builder.buildManifest()), err: - trace "Unable to build verifiable manifest" - return failure(err) + # Erasure code the dataset according to provided parameters + erasure = Erasure.new( + self.networkStore.localStore, leoEncoderProvider, leoDecoderProvider, + self.taskpool, + ) - without manifestBlk =? await self.storeManifest(verifiable), err: - trace "Unable to store verifiable manifest" - return failure(err) + encoded = ?await erasure.encode(manifest, ecK, ecM) + builder = ?Poseidon2Builder.new(self.networkStore.localStore, encoded) + verifiable = ?await builder.buildManifest() + manifestBlk = ?await self.storeManifest(verifiable) - let verifyRoot = if builder.verifyRoot.isNone: return failure("No slots root") @@ -586,7 +575,7 @@ proc requestStorage*( pricePerBytePerSecond: UInt256, collateralPerByte: UInt256, expiry: uint64, -): Future[?!PurchaseId] {.async.} = +): Future[?!PurchaseId] {.async: (raises: [CancelledError]).} = ## Initiate a request for storage sequence, this might ## be a multistep procedure. ## @@ -617,7 +606,17 @@ proc requestStorage*( trace "Unable to setup request" return failure err - let purchase = await contracts.purchasing.purchase(request) + # TODO: remove try/except once state machine has checked exceptions + let purchase = + try: + await contracts.purchasing.purchase(request) + except CancelledError as err: + trace "Purchase cancelled", err = err.msg + raise err + except CatchableError as err: + trace "Unable to purchase storage", err = err.msg + return failure(err) + success purchase.id proc onStore( @@ -731,38 +730,28 @@ proc onProve( if prover =? self.prover: trace "Prover enabled" - without cid =? Cid.init(cidStr).mapFailure, err: - error "Unable to parse Cid", cid, err = err.msg - return failure(err) - - without manifest =? await self.fetchManifest(cid), err: - error "Unable to fetch manifest for cid", err = err.msg - return failure(err) + let + cid = ?Cid.init(cidStr).mapFailure + manifest = ?await self.fetchManifest(cid) + builder = + ?Poseidon2Builder.new(self.networkStore, manifest, manifest.verifiableStrategy) + sampler = ?Poseidon2Sampler.new(slotIdx, self.networkStore, builder) when defined(verify_circuit): - without (inputs, proof) =? await prover.prove(slotIdx.int, manifest, challenge), - err: - error "Unable to generate proof", err = err.msg - return failure(err) + let (proof, checked) = + ?await prover.prove(sampler, manifest, challenge, verify = true) - without checked =? await prover.verify(proof, inputs), err: - error "Unable to verify proof", err = err.msg - return failure(err) - - if not checked: + if checked.isSome and not checked.get: error "Proof verification failed" return failure("Proof verification failed") trace "Proof verified successfully" else: - without (_, proof) =? await prover.prove(slotIdx.int, manifest, challenge), err: - error "Unable to generate proof", err = err.msg - return failure(err) + let (proof, _) = ?await prover.prove(sampler, manifest, challenge, verify = false) - let groth16Proof = proof.toGroth16Proof() - trace "Proof generated successfully", groth16Proof + trace "Proof generated successfully", proof - success groth16Proof + success proof else: warn "Prover not enabled" failure "Prover not enabled" diff --git a/codex/slots/builder.nim b/codex/slots/builder.nim index 25844db631..1857150c8d 100644 --- a/codex/slots/builder.nim +++ b/codex/slots/builder.nim @@ -3,6 +3,6 @@ import ./converters import ../merkletree -export builder, converters +export builder, converters, merkletree type Poseidon2Builder* = SlotsBuilder[Poseidon2Tree, Poseidon2Hash] diff --git a/codex/slots/proofs.nim b/codex/slots/proofs.nim index 4f7f01b58e..a1f56d9a09 100644 --- a/codex/slots/proofs.nim +++ b/codex/slots/proofs.nim @@ -1,5 +1,5 @@ import ./proofs/backends import ./proofs/prover -import ./proofs/backendfactory +import ./proofs/proverfactory -export circomcompat, prover, backendfactory +export backends, prover, proverfactory diff --git a/codex/slots/types.nim b/codex/slots/types.nim index 0cd243261b..aabba0caad 100644 --- a/codex/slots/types.nim +++ b/codex/slots/types.nim @@ -8,23 +8,23 @@ ## those terms. type - Sample*[H] = object - cellData*: seq[H] - merklePaths*: seq[H] + Sample*[SomeHash] = object + cellData*: seq[SomeHash] + merklePaths*: seq[SomeHash] - PublicInputs*[H] = object + PublicInputs*[SomeHash] = object slotIndex*: int - datasetRoot*: H - entropy*: H + datasetRoot*: SomeHash + entropy*: SomeHash - ProofInputs*[H] = object - entropy*: H - datasetRoot*: H + ProofInputs*[SomeHash] = object + entropy*: SomeHash + datasetRoot*: SomeHash slotIndex*: Natural - slotRoot*: H + slotRoot*: SomeHash nCellsPerSlot*: Natural nSlotsPerDataSet*: Natural - slotProof*: seq[H] + slotProof*: seq[SomeHash] # inclusion proof that shows that the slot root (leaf) is part of the dataset (root) - samples*: seq[Sample[H]] + samples*: seq[Sample[SomeHash]] # inclusion proofs which show that the selected cells (leafs) are part of the slot (roots) diff --git a/codex/stores/treehelper.nim b/codex/stores/treehelper.nim index e1f5d48d81..99f8cde1b0 100644 --- a/codex/stores/treehelper.nim +++ b/codex/stores/treehelper.nim @@ -25,7 +25,7 @@ import ../merkletree proc putSomeProofs*( store: BlockStore, tree: CodexTree, iter: Iter[int] -): Future[?!void] {.async.} = +): Future[?!void] {.async: (raises: [CancelledError]).} = without treeCid =? tree.rootCid, err: return failure(err) @@ -51,8 +51,10 @@ proc putSomeProofs*( proc putSomeProofs*( store: BlockStore, tree: CodexTree, iter: Iter[Natural] -): Future[?!void] = +): Future[?!void] {.async: (raises: [CancelledError], raw: true).} = store.putSomeProofs(tree, iter.map((i: Natural) => i.ord)) -proc putAllProofs*(store: BlockStore, tree: CodexTree): Future[?!void] = +proc putAllProofs*( + store: BlockStore, tree: CodexTree +): Future[?!void] {.async: (raises: [CancelledError], raw: true).} = store.putSomeProofs(tree, Iter[int].new(0 ..< tree.leavesCount)) diff --git a/codex/utils/arrayutils.nim b/codex/utils/arrayutils.nim index e36a0cb34a..c6721f6bb8 100644 --- a/codex/utils/arrayutils.nim +++ b/codex/utils/arrayutils.nim @@ -1,5 +1,3 @@ -import std/sequtils - proc createDoubleArray*( outerLen, innerLen: int ): ptr UncheckedArray[ptr UncheckedArray[byte]] = From 8e25bb52320bd9bec89255f72641f95ac4f623ab Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 28 May 2025 19:05:45 -0600 Subject: [PATCH 156/178] Add ProverBackendCmd enum and update configuration for nimGroth16 and circomCompat backends --- codex/conf.nim | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/codex/conf.nim b/codex/conf.nim index af55861f54..40e21c4b02 100644 --- a/codex/conf.nim +++ b/codex/conf.nim @@ -87,6 +87,10 @@ type noCmd prover + ProverBackendCmd* {.pure.} = enum + nimGroth16 + circomCompat + LogKind* {.pure.} = enum Auto = "auto" Colors = "colors" @@ -387,12 +391,28 @@ type name: "circom-r1cs" .}: InputFile - circomWasm* {. - desc: "The wasm file for the storage circuit", - defaultValue: $DefaultCircuitDir / "proof_main.wasm", - defaultValueDesc: $DefaultDataDir & "/circuits/proof_main.wasm", - name: "circom-wasm" - .}: InputFile + case proverBackendCmd*: ProverBackendCmd + of ProverBackendCmd.nimGroth16: + nimGroth16Curve* {. + desc: "The curve to use for the storage circuit", + defaultValue: "bn128", + name: "nim-groth16-curve" + .}: string + + circomGraph* {. + desc: "The graph file for the storage circuit", + defaultValue: $DefaultCircuitDir / "graph.bin", + defaultValueDesc: $DefaultDataDir & "/circuits/graph.bin", + name: "nim-groth16-graph" + .}: InputFile + of ProverBackendCmd.circomCompat: + circomWasm* {. + desc: + "The wasm file for the storage circuit - DEPRECATED: use the default nimGroth16 backend", + defaultValue: $DefaultCircuitDir / "proof_main.wasm", + defaultValueDesc: $DefaultDataDir & "/circuits/proof_main.wasm", + name: "circom-wasm" + .}: InputFile circomZkey* {. desc: "The zkey file for the storage circuit", From 12eb464e3bc053f54a54cae93ba1d9765ffcdff9 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 28 May 2025 19:05:55 -0600 Subject: [PATCH 157/178] Fix import statement in testslots.nim: replace testbackendfactory with testproverfactory --- tests/codex/testslots.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/codex/testslots.nim b/tests/codex/testslots.nim index 059de7c2ff..9c1c9204f8 100644 --- a/tests/codex/testslots.nim +++ b/tests/codex/testslots.nim @@ -3,6 +3,6 @@ import ./slots/testsampler import ./slots/testconverters import ./slots/testbackends import ./slots/testprover -import ./slots/testbackendfactory +import ./slots/testproverfactory {.warning[UnusedImport]: off.} From 318dc20fa0d7c7a84f9f9b0ee9d2a9000d878f1f Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 28 May 2025 19:18:36 -0600 Subject: [PATCH 158/178] Fix typo in testproverfactory.nim: correct getZKeyFile to getZkeyFile --- tests/circuits/fixtures/proof_main.bin | Bin 0 -> 3975118 bytes tests/codex/slots/testproverfactory.nim | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 tests/circuits/fixtures/proof_main.bin diff --git a/tests/circuits/fixtures/proof_main.bin b/tests/circuits/fixtures/proof_main.bin new file mode 100644 index 0000000000000000000000000000000000000000..6820a11b28e567a83158dca480ae6e48575066fd GIT binary patch literal 3975118 zcma&PX;_xm*|wcTnWvliU{3QSZJMNM(kX44HqF!~P1+`D(=<)ebV!=cX_Gc>IwUHh zs0iYOpo}7*42mP*1cE3ah%yKwAR>awjEV!ux7N9i<=a2+`#t?}ZpXGC>pu7EHs&(J zvibX8|MbCw@4o+wKmX>zhaP%3{`&0O^#4BXcendp?srQ5e+(YG{r_=9S3Gvd|L)kV z|J|{t?mznE@h48zf0#YG^NA(Fe|1XR?)Pf?`Op0O$E9J@FTL;prL&)KdfoePSs%Qf zQghd-{;tQv-uv=~`u$VYk=3OISo&5tk1Z>E;+b%tuYUiZ=jMI);XCjB_u}(^Z7Esx z%Ip^+f3!U| zR?oe!?^qys?EPOlfA{_Vxi3HS_EP`yyj_8Hp3gsZ|DV47=QlS$bWd#Aj$j@ePI>ym z3%7sz)4zW9!gG5Zy5`N$hALizusHgJrXe4lk>vkQN^G8%_p~ee(i7XU;E?_d;aSE%#R? zFMRe#KN~#oy)8eOmB0UI@3!>hJ`~y;)3_txzIX4Tw7y`?qyKt4!y*?w|I{6mo;TG z|A_r@d-NB9pL;&*k!Sz>h2KQ2{7PHy+*h8hj?PGWV)Pe}&b*M>W`97=Rt!e^AFe(3 z{%2x;`{F+qO@8wB^BZzrf4Sko5zl=we|+!LR_eUt-sIHSpMUhnyWi`)_diKDAL{=2 zbo<~JfAaWaI5YiK`!i(rrr#WRB&Ff=vG2Tj_t8`7U(5U5YfpaZ2fyB)|6#zT$A6pQ z!fo+?`qUp^{rZQ`{B-!0e+)hSCbIlzwKL({&L{XGe7;fA&|#LuOAt5`RkC=fQtnd3xaW z(A{`|Y-Ut|{*eQndb0kiIT&^81D3$9?waTWjIHk57HCYQ>MbBfoRo^*6WrX8L3% zKJ~ZLqj}#5f9LTp*gvy=7?R-eNat7j?�{=CQ$sn%5U(w4eO_bn@xSy?v2?&9Fb; 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

};Hq8|DH`jhTm;5u~NCWkHaIM!a5M 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

^BnUuNK0YM%OJ0e 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 aWLo(=uVf~ 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 aWLpK z^o~p2#N>C2cM*)5+(R;wqW8V=fp2&Sy=^m#nQ^3~WYc3uokF|c#lfJ@pmQ$u z2$SC}zCbW)@)F5NioWv3*S_Hm^r_8T%yUOdN;bW7$oWN=v(n8|tAoHVv4?j+B&aTINVoL}I4!;b8UNUYZvVo{2NLH9yOU1~QbzgrwbFlw?N$w-Qh zd*cD$FaaI0If&WkNJ+`2LyjDdNUYZvVo{2NL61U@xzr>kzgs+kVASL!l93cW<&CF( z!x`uio3ohXj+B&aI`7DZh{Sq*Ar_@L81xeKvP+%A;}-|z@}$L2BS zo+BkCo1QxIEF!U9Ux-C14hDS=ec@71F!|l$D+Hq^uaS(T=o@c*>l@~wb2jfVFC8f< z+4RAYj}eLW`a aWLp-=ogoIkIC;Azabbk`Ho~HMSpnXPv7th`pM=u=BpzmC7Wux zi;WArb0pU53$ZB0!JvzY)OKqpf6@OC$?q2Hpp2RBWA55B_*3SIkGt- zv0h(@MJWyj-3s02QiGWMZgB^KQInlWMpAT_HxBuR-Ow#I!-IgdH%NJ+`2i;i51NUYZvVo{2NL9als zy3_^CzqI~3f|0y|WK3^*<1ODXMc}f{ZOk=CN=i1}abzYUv0h(@MJWyjy$8MTQq!3H zZt)?4QIlCDBPsgG8z1|IC(ye#PcaW1DJj`B=g9Mj#Cm-p7Ns~C^d8w^)y0 z)T9B)NQyT0dRH4%yR`a aWLpwXunIX#^iU40|-V<)*~57 z(GA|X(Kif2`)oF0);UsAvT2JWTO$(d^@UiJ;$YD2&>b$d8I#{F?m{qXGK6F#MR$AS zuy5D{-DWd_+3840$)-_9_C+Mt>kF|c#lfKaq2n&K7n9#DP9PXHIf!H=MJJsd!{m31 zhY^edN05x9=uu}6VDh`g;|NB96G%o<^rU~uAvZe>J!W$TbIOsDl1=9vIUkYuS^7du zKlU#j40;iI$)(O>^1H<=2u4k=A{j~1YtCN4`2u6Wv zBqJ$$$IY(0*AG5Ou%Qv{1%grFC6bX8edX*EOn$fc2Ei!s7RgA8&b!%jH+v6#ZSw*1&XJOmO`jb3 z9Fh20`a&#zEC+*rg?@9XkC^;!@dtuYlb=XNQuLRzUoiRI;vWQ~K+S6YU)rm)6kV7l ze{#QL^1H>w1Q=y&k&LA1lGR1C-)^=Px@dJ#vmR6DNJ+`2Mn{%KBz~5@5Q`tn!Jx~D zG{?@iBm5UDKFqJgI*{Myvg|}Q%xBq!?EaEv4|2=zEPIjrm*fXyeaJISS@t7uw`Vzk zeBP7g2IRMOSq>r_wq&^(**%oyR^*m_S#C$}pUiS6^2~`Whmg0=XE}^~el5!pH+y38a z=HKHVzOAeCo6f%$Y~vrkk^k2Jf7*OU4;Pw18Y}e9{~vdL2tM)OY~<_?bbfg`tZ@AE zu?NYhlITd5WOrfm%ga#&qrg5SBPlxO>~2hcc{z??6gYrnBt<9uKNEZXKNFMC{Wga% z2OTLX*>uE_qY;V!fzlUZ@sAS+gC2*TaH+$X{POY?f>D#xNJdihjI+lu`Q_y~1f#%t zBqJ$$!P%3T{POY=f>Gcyl93d>;$~;v>>Bi<&2`LGM@mXI-E`zuMB-=Z3$ggI91MCJ zI_*+7F!_H^W)O^;+(j~yqW7Gg!sP#He1KpSc!*>qMQ5G8gUR$Uf>GcJl93dB>Sp)d zY!3R!<~in>BPAu9UOMtBBJs2Ig;@Mp4hDS#ed|&$F!|->I|QR9?~#n8=m%$CWAe+( zPY6bV&qzj6^oz6enEdkc8-h{bJCczU{o!UG-Ru|itIcoBPe)2hHr4bNzhq%=j>ON> z7h>^aIT&;?k=kDE!6I9EJZSsqV>JS4Gmt>2wh~e470?Ml9El!9chk8 ztk)M}D)qMx25o`1x>OS;zr1WmFly3)WF$pbdSj<=SOr~S(}ihsq@-k1k0Yxi66^Ja zSd`*m&^6FLm+HpkmzVtrMorcs8A;IrZ(Q#iHb8rAHe%K~Qc|*MlOvlW66^JaSd`*m z(5=vIE;WeBFE4i>7&Y06WF$p*dE=08*bUucGmP2pNJ+`25l8k$B-ZN-u_(pCp!=X> zF0}`fUtW$Q7&SS7WF$o=yz!uKn1qhn9K!5(q@-li5l4J% z5saGLKr)h|H@)$eZ?r-|z%_*XAkafg>d)o8}yO9+6nDFT|o02ZO$ZzH+H&nEdkc4T4dVw@5}( zblw}^`G)t<7d9U-uN^5V+4RYg&k>3B`a aWLpt=r@=8h{-Q6e;^n&`H5sCMSpqY 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�+A(gR~U3JP-21h}Y``%%!;KbeMD`rJiBx z1H@MdMonHL8A+vYvhi)c@Q!pS<~`tbke0%hO+hvr@p_$rxfBqb56%jHJ?C z*|l*?2WyxJG&| z<~rtLke0%hn?Y_F@p_$rxfBzyj~|@F2zNs-K0G!^%PSdAod{`HR(q(l1c}%aWG$aM%oqg9Mc=5rLbiv z$gmNw*9n+Qanb2Z(pM?<0#hF#zCkc*@)pTRDt#Ar1XCX%en2n+J|Y=OrJusS#?%Lh zUl5FduSiBx>9_on_i6Tn^mEKl%=aKIg)P5>{4wI6r4umy*#GFF(|@F6MzoVZ%D*u6 z0phq3{%g6W|8G2!Q7NSp!v2M=4-hAjG6E(e8A+v6!j8q%2Z+-UjDYD#MpEgFk>^BkfVdjL2v~z;B$cjBvt?H&Moo4i8A+wP!fwIT2Z(zRjDWpJMpEg%u-h^90pbA!Bj6yC zkyLsp&332R5z_rJM=^(kv=p`+4|2kYf0jyEQrPl7$Oj|-SvmppkL9A%Po$qy>K&#&K>Uhe)Z`nIkyQFU z>_<#}fcO)^2>69$B$fUS`vp@UApS)#0{$TxNu^_6jyC&|X5(J+zf@wzW5xz)DQube za`cx>GUA`56EOc+E;^k8GWDf)@~?vln7V#Cf>DzhNJdiW%&?O&^#S5+1S4P$l95z8 zH|#V_eSkP0!3bD@WF(a?%rBXhW{XMZ#Vo-r3er;8vMk7QBmP-B0rQXLqSKY6t5Rwy zranMigJ9HTEs~K`x-MT>pD%16T@kYpvpPsiVaw(qTa0+UPQX;^zq;sj8|n6x+JvbO z5O*RNHQ9w^B$e*Y#y$DMUec{G`!G9#v=p`+2y)Pf*Xsn#rMT$yFzJz$+K;IZ5RV}k zH93xCB$b}X#*_KNDbhnRr!hx^v=p|S4RX$i*Xsn#rMT$y0_nw+I)kYX5HBMbHMxRh zB$Zyx#%uY)b<*=OH!zoiv=p}73Ub?s*Xsn#rMT$yF6q6Lx{0X|5Fa2IHF=0+B$YnO z#>e@>6Vf{|Pcip{v=p{<2I(^5^*RA_DK0wgA?;164orQ3*pFb;WB|!XDjm$mXZgZ& z((afSn7$w_g)PHDMvQp9PQYA>i%wsWzD}tjOnrd(7Qv{=J0v5i^nEsd$QM46zKr>V zc@w0iu;ojTuSUFHCtxncMW^3Mf27oBOnrd(3&E(#ZzLnB^iMYa%@_WWev29Niog6p zS_)gny&By(-iX)h1k9zl=yW2;q*vO>ALX%_`T%hXf>D#HNJdiWv{&^D|0&b6WCrPk zn3mT#Orke=2BdAx|(!NN-f9K2Z-wsjGC-RGLlL+WaGwsVH4@9n9Z2AL0Sr1 zwg%Z|#Orke=2BdAx`T9QN^QZ^2Z*~7jGF90GLlO7X5+qmVL$2im;;zyL0Sr14h1=E z#Orke=2BdAdX)57N*%=12Z$#SjGCN8GLlM9W#j35;SA}Kn6sGUL0Sr1&Ih?*#Orke z=2BdAdWrOMN}a>h2Z&b@jGA0SGLlNKXXA~0;U?+Dm|K`DL0Sr1?gY7O#Orke=2BdA zdY|+`O5MiP2Z)aljG8<~GLlN4WaHC(p@Z~ZOef}Hke0%h?jSuzyj~|@F2zNseWd*< z)rF}K5C;*Anmj`?l1iUv$af=NuM;qr;-b@^q`y+?E9QS%{|CWH z{zWoL|7GKt*P~w;`q`T%hn zf>D#{NJdiWjMw!Gyxz`|S)`Lk9%P3Ruh$8fOL5WZF4Em8wGC4rAnrvlYO)W>NGjc* zjR*3DgQPoS4q^5LX(?E803->uh$8fOL5WZ71FCIbpcZ!AYMl>YH|a~NGiRVjkofJ+oYFc z?qIG3X(?>E7v#PXuh$8fOL5WZL()enbr(|~AU;7bYVs7xNGk2f#?E}9i}XQEH|BAW zmco|aAbm!>UMFBK#YLwBq=PBdgQ*V?pCcGGd4Xgkl@4X&aK11?+8^^0^DIb9Vaw|v zZ;W`oPQYA>i%#E>zE7!FnEC+mBZ5(rPe?{m>E~?xk}rHEeH-%)^C3t}VatyoKaF_3 zPQYA>i%x%&{z<9tnEC+mAA(VnF>m<4C2y)!I`&Qd0(pf1rJ4@z}PKlX|nI5F2uw{Ob z1xCDHCtxncMW>5M7pK%bOnrd36v3#;G9)9Zba^(e$QM?UE{s`)SrVkBuw_kA{ROnrd33BjnzW+Wr2bW1jF%@?+ju8Y}@*%+jyuw`eET}HfKCtxnc zMW=g6_ombiOnrd3AHk@}0VE@-^k6m~$`=lk?v6Qv*%zdxu;o~g<3_w*CtxncMW-i8 zPo>mROnrcO2EnMwStKK=^jtQc&lfI`o`|`KIUS^>u;p@)D@MFtCtxncMW@$Ducy={ zOnrcO6Tzs-EhHnU^maDh$rtXDUX8hjxe=tLu;oFJheo_!CtxncMW>HRpQO}%OnrdZ zfne066Uj&_?aIdPe4&T*QA{u9X^@t}mi{0EM!a4pU@pZ)r_V^Ar&J%NK0q8oFlsW4 zWF(c2WaGWW;`KTKb15!5{Y&~UrG8@S1H`d!`P==rHW`OxR7&ai zxAhCW-hMm!g^8qp^0`TvF+o}iTc(7cYQ*bx0_IX&bUK}MM%~F@^vRg|0C5(AQIpw7 zMpEgVY@C}f%p;u^GaoZENK0YM!XS%`c)d=*T#AcMmyj+^sRfw&0C72jQIi!&MpEg@ zY+RKutR`I?vj(#)NK0YMx*+R~c)d=*T#AcMH>%9`vlFv9NK0YM?jU=Nc)d=*T#AcM_mS>Tsa=@*0P!G#QIkVRMpEhFY&?=L93|Zw za}0AJNK0YMi6AG9c)d=*T#AcMPm`WWspFXX0P!5+|MTb`yLm2Mk}mMq=->c_9_IMW zyYHm>n&d4dN+RXG_uhN&z4zW*Qj|!_P~>?cgOP&;L_|LMuJ|^pxC^_IQIpe1MpEgS zY&@GUoFhFJa~^XtNK0YM#UPiAc)d=*T#AcMuaI6%sSB9;0P#A4QIi`;MpEg`Y`m2( z+$Oyoa|d%RNK0YMy&(6Ec)d=*T#AcMACf*wsk@l^0PzWeQIn@gMpEgsYmYB8c)d=*T#AcM-;usgsaKf#0P!P&QIk(dMpEhLZ2Xchd?kGw^9}PM zNK0W$Z;EUm8k9P9Ma|on9KpaoXsL2E*BdK&^PyGU~w|hpvFqw2DpPPai z7o?@IWm@>@M!a4pU@pZ)r!z=rrqonSeSkO%!Kle>BqOPGPBwPs3*Dq0F>^7UL0Sr1 z<_B3|#Orke=2BdAx`=dfO3lOkkJc|mFp|rVOw#4qxFTOz39v9`6=q40mco`bLDm}a zdYyo|6c?SYC*6=zt1Er&J23SD;(i39CI^s=q|$@gcqm^uOu9Sf2xec9mco`}L5>^odYyo|6c?SI zBt4Z^CTEe1q|$TQcs^gaKzbtPBIb0Emco|HL9Q6_dYyo|6c?RdBfXwd zmoW7K;!OmjCby7`q|)2jcqd=DOL{ft9_B`nmco_?K^_|MdYyo|6c?R7CVi4p_c8SW z;xh!JCeM+Kq|z7J_%dI3Mfxb_HRfrMmco{|LEahhdYyo|6c?R-ApMw9Z!q-%;%5Y- zCSQ<@q|&e1_$^=PA$=dyi}@6!rLd(h$PXi4uM;qr;-b@j(t(uvj;Rk2e<2t(`Hf^G zmHr9)6H^}`4j~u;|B#HN(&4a!nEC*5OfUb}a&HC3A{ntt$Mx1`|0#ddYy#;>%tXxi zAT5P0lY2*h$rL00SvmpJkNuA>I-LeGz3$}S6q7LZ0pbhjGC-QGLlNygk6TI4-nTO7y;{%jHJ>HVOL`61H?@TM!;qyBdK&t znypQk8Dy6c|16z=`Nwk6=^oO(DYXMrA0X~WFlurD$w(?a73L1`@(+4)CY(^5sZL-BqOPGAkBKx>=)^enBSPeAT5P0e}fDe@z2r; zn13u6oeq*I_mWxiiNV`+26I0jE zLojMGAIV56T@ZE-ranMigkS_LMlzC0mxP^*sSgmBAs7M6k&L9$6=}9G%~p{vjaiLZ z8KkAKWo?jkM*OpM0_GpfMW-7`H>T7YOnrd38NsN@79=C7bZfq_EnnD9x;|zHW>b)s z!j@e@b{p|}oq(y-f9ayry`=k6YA2>XKs3R;>KLXzKs<|J)Z`qJkyLs<8!zMw7fDaXT*90Q(o)!RCCF7H zUau1{m*S$+>!deQ>N2K2K)i)u)Z{jjkyLso8}H@|_eihB+{fGu(o)#+Fvue#Uau1{ zm*S$+C!|kP>H(%cKzxp1)Z_({kyQFJ8(-xMuSp-ryumyR(o)#+F35W$Uau1{m*S$+ zkEEYc>Mf=|K>UJW)Z{CYkyQFE8+-DFUeXUS-!Y$qv=p}d2=dd2*Xsn#rMT#HfOIgW z`Y`nY;%@|_CV!BOq|(3HIFv8^BkhkF#{3G>QrI%4Z*=3>zKVFgPQYA>i%!RbOz6{2 z{(z5w)CY)@NEtPmjASI0PU)*(_)nRdCDTa9#Z1Rc4AN5AG9$=LBVMl)Fqh(@(^;gm zQ>p_~A0T!i7&YleGLlN?X5+kkVLoYR%mU1uAT5P0i-IgR;`KTKb15!5T}rwvr50l9 z1H=^wMom^C8A+w9vT=33u!eL=%v#LyAT5P0>w|1C;`KTKb15!5-9)-MrPg8U1H`Qe zMoqRM8A+wvvvEhhu#KgfU)uh$8fOL5WZFVf#B^%GMcApS)#YBGdmB$fWl#^HQngmf@w%n$zl2Wcs6 z8TVs!<9H)puM;qr;-b@uAd`M*Cx6k$V*a<*PeCw}Q;|&4X+P>0c)gt^9RL$zW?&`< zX(?>!3^L1z*Xsn#rMT#H4ry0P&BW9Ph;tE)n#@Bol1k@iun{;!`9?Z5NErl)ng6ucq^*RA_ zDK0uaNO~xx_G0P-#3KksO^zZNNu|fK@p!&)g7iSlNzCCOErl(ogPbwq^*RA_DK0ua zM|wV`PGRZ;#ES?|6@nOF3i1b#>W6a$kErl&lgFG|h^*RA_DK0vFLHaVKo?z+& z#McN$P2M0GNu_VI@m;>~p7eRl2h6J=Erl(gf_ygO^*RA_DK0wwO8PCOK4R(v#9joW zCf|{aq|&}@{E;vGB>fW8kLd~0QrI#WK6Y{xnn4usog)I}pPc-87IstPjE;^k|I_0N!@)vzPranNNhG5iW zI+Br8+VQh~f!EtvGLv*tOebb)ke0%h*+J$Q@p_$rxfB;zCyj~|@F2zNs7f3Ir)EP{DfOr|fsL2&1BdPRiHeSmYu9KdRxq-P9 zq@}RsR*>69yj~|@F2zNscS-N1)J;r%fcOBxsL4YlBdPRJHa^Z5o{-*&d5XCoq@}Rs zd5{-Iyj~|@F2zNsuSj2~)H6(dfcO@{sL4AdBdPR#Hh#z#K9atS`Gk2Bq@}RsOOUTd zyj~|@F2zNsJ*2%U^%+wiAod{`HTi*LB$fWm#{PU^fb?6;Am)3Jmco|bLH-!=dYyo| z6c?Qik^W1mUzqv;aRkAr$(Vlri%EZ#O2_usFYtQ1fAkCE0siK56EMRm)l%3pDg0z3 zUau1{m*S$+sif2DPX3}##MB3f9SBCHW*`|!r885iGfQTXPKlX~nI5F2u%#g`S_)g{2AOBX>vaO=Qe1SpfOKI>bz|xS#Kj0kO_m@TNu^7(aaq2w zoOFK73e2J)Erl(sf~+>;^*RA_DK0u)OS&$lR$~4~>o*`6$&E-R>85PloG)wvSQE1q zvpz^mVaxU)JB)a}PQYA>i%xfu?oO#~nEC*5FM?5%eMm-9>HcgykS`o0-5GNTvnNPP zVat&qM~!&BPQYA>i%yS|o=B;~nEC+m6oOHc(?~{A>6vUin=hOrJr;8wb23OvVavrJ zmyCG5PQYA>i%zeQUQMYBnEC+mI)YJ?8%Rb{>CJ4sl`q^Ty&Q7~b1g_qVavTB_li%uVsK1!*(nEC+m34&3Rr$|Op>9cHno-e#0eGu~!^EgOLVaw|vZ;W`oPQYA> zi%#E>zE7!FnEC+mBZ5(rPe?{m>E~?xk}rHEeH-%)^C3t}VM}k2??${{CtxncMW;VV zf2LFqranL%Krm`Dh-4&{{>sMR`NAL4zL>w5{va)dE&qZH8}WLbfVmVGosJpgZ}*^f z^2c)sq&`3#Ps*st1SBJ=bYj>M*!lo*GAScq3X+jjIyLM#Onrbj9l;3bKr)g_XAIV6 zyb2#2ZPrOTEoK&GW{{S`mN`MXjQD5i1WZ5nKf362F6q3KnvJOs5EmdAHCc#cB$X}- z+l{FY5SJhr0ZWmLq|#+!=VR&v#1#lez)B<|sdQDEEl#sFq|0O0Vpa!fDQsCEWP=g^ zES-S)$8yo>CeqC*wGLAsAZ|r4YO)QTLKA0U20 zFaka!8A+vI((G-TeIxxC(}VdMq@}RsdyqaO{#iN!^N;1C)1RdMDbI}nUY%|J4eN@s?hf~gM>XCW8? zvyqIX(m7$LW9kFMZUiG>E|QT{IxoMZGtCx|cEv2j%n#C1*s?gt5+nXuIsx;K<)YJN zq{~xk5vHzRiD1-Z6_Sxux;pGqOnrd37QqNuhh!v`t`EBcQy(C1L@)w2AsI=fo6~Gf znr$WB5VH-lB}hwQ%Z?yBjreEj1k68{i%xfw?n$ZbnEC*5AA(Vn{YXYq>4ALVV7_pO zbXUw_%-$d^g)K*e95dqeIssFu|I$ULCrD4G)DcX5fOs0gsL2^5BdPRkHlE8D&XXRG zxqvwpq@}RsQjp6=yj~|@F2zNsS4pp>)J05vfOrGJsL4$vBdPROHr~z`?vP%Ixr@0T zq@}Rsevk)7yj~|@F2zNsk4PV<)ICgnfcO-_sL3-VBdPRxHonLgUXnhHd4+irq@}Rs zO^~-nyj~|@F2zNs?@2$T)N4$AfcOc)sL5v}BdPRDHh#?)zLCC*>A`#q(o)#+JxHGs zuh$8fOL5WZPtyLB>c!Lth=T}5O@1L6Nu|HD@lU?+m-I)>5N04qOJU1!kP#zZuM;qr z;-b^BzxnI@TRZu?`VXW&K%79zsL4bmBdK)K@A`%Rl*zwGzc7V#Ow3fw_#iEXEz^T^ z81Z_YfVmVGoz5ifOsQ#@`T%h@f>Dz>NJdg=S2lL%3v)?l#LUCY3er;8vLMJpBVMl) zFqh(@)5WAqQffY?K0sWCVANzel95!pA{$rc3#&*M#jM6G4boEBvNp&%BVMl)Fqh(@ z(+#8>Q)&&SK0w@zVANy_l95!pH5<3(3)@N8$Lzpt3er;8vMb1LBVMl)Fqh(@)4ino zQfeorK0rKxVASLwl95z;C>syw3r9%z#2m%!57JWDay-ZhBVMl)Fqh(@(^I6UQ|cI| zK0rK+VASLsl95z;J{vFO3l~XG#$3Xj3DQ#7awW)BBVMl)Fqh(@)9a)+QtC3MK0v&M zVASL`l95z;CmZkP3-?H`#oWi-4AN5A@-WCFBVMl)Fqh(@(Xh}Y``%%!;Kbbxd)rTQ@S0pf22qb7fljHJ@P**KIh z{3Gp;8OHny(o)zm=FjNHv41M!^*RA_DK0u44>IA8cJdc}1f)JdoJ7i~$z&uWsdUPp z`UPHZXUR0uaWT^|6N9uAw#*1J(}>sW1k9zl=yVq8?3C)j{BN!ALNJouNG9prY@C-b z%m?U zq@}QBPmsMvyj~|@F2zNs`$-R^)NV|DfOrVOsL5d@BdPRAHXh9vj*;$*IgU9Pq@}Rs zWRO!vyj~|@F2zNsXGqVc)Co*|fOsCksL2H+BdPRaHeSjXE|Z>)xq>+tq@}RsT9E5T zyj~|@F2zNsH%V`$)KyGQfcOo;s7Vi!kyP57joneO@@$+q|$%cIGitxkPgO-`ODw`AT5P0HPKL0Sr1I)ltI;`KTKb15!5okQA{ zQZq620peT)qbBo^jHJ@}*|;EISV%fMW)Y@4NK0YMk|0Zsc)d=*T#AcMmy@nYsl}N3 z0C5$9QIpk3MpEgTY+Rc!tRr0(vmUcDNK0YM#vq%Fc)d=*T#AcMw~%g4sSTL=0C78l zQIj1=MpEg{Y}}PE>?YkDvj?*+NK0YMz99RJc)d=*T#AcM50V~AslAx`0PzTdQIn%c zMpEgqY&@PXoFF|Aa}sknNK0YM=^$r}c)d=*T#AcM&yk)_sZ*Hx0P!M%QIktZMpEhJ zY`l^$TqQjla}9GLNK0YMjUYFTc)d=*T#AcMZfMpEg6YvaO=Qe1TUhxBhs4Pfd6#D54zO@@(-q|%XW95Xcfg|S2YJ0YJNhZzde zQrI#f{6r&OuM;qr;-b^Zq*I2plfUTWG4%oBGz6n2(~*p%(vG3}1zvAw$xPBoF`byH zL0Sr1W(S#L#Orke=2BdA+D$q)rDkF31H}0VMoktV8A+uJvvEW+P^Gke0%h%|W&p z@p_$rxfBN*?2NvI7NCW<}~JLke0%hvq8=o@p_$rxfB>+4wkLctUz7<|*cWke0%h=RsZ=@p_$rxfBkke0%hFG0Q<@p_$rxfBf>vaO=Qe1R8MEWnKeqrhZ#1RCeCS(5b zUrhd0sdVhW`UPHZ{~P_nc!0n8+yu;UO0^WWObS2Qh}Y``%%!;KbSmkzx|6@?6EXDx zVh4gzsToK{Qt8Z;>dcZ^q*G#MW2OgbDQxKq(rv`+bpqy6Ty#2*bbdD-uQm<2&v3R_kLS!u-Ubpqy6Ty(mcbWKVv$J7Ui>ky2ZtVc4E zN;hQV#(ZHD>8hB`n6*J#3R|`Y*=EG+bpqy6Ty(mFbZ1I!!TgWb??y0^dyq`hz1g@g zU)T?@J>~#rSCE#%mP0`f8}WLbfVmVGogO7UmQn{X^#S4u1fwP=k&L9$Q`vYrUpPa0 zB<3vUc#xLDmh(X_81Z_YfVmVGon9inoKoj7^#S5l1fwR`kc_0#>)CiCU${wnG3FNL zN|2VqmODZ28u5CafVmVGo!%#XkW#lX^#S4|1fwR8k&L9$C)xNkUwB4(FXlPsVUU)> zmX|?Z8S#3ZfVmVGoxUM`n^G?@^#S601fwP&kc_0#kJ2%VLx|6@?lQH!H;!FgiCY?w|Qt7O)(=hb`;v57cpbN=JD(wzC15+O$ z&O;)W~bRA(z!8Dz-NJdiW+OW$p^#S5~1S4Prl95!pG3+W#eSo+b!3fxbWF(btO|x}rww-iS%nr=9 zAT5P0yMpXC;-94xF#lLCI^9dUFQs;3>I1|B2u4i~A{j}ghr;f`)CY)15R8DMNJdiW zv9S9w^#S4u1S8-il95z;D$Ne3*%{K~F=sKSgR~U3oDXurh<}z&!2Dym==2il<&-*y zsSgmZA{aHfhGZm_UJrW_Qy(DSL@)wwAsI=fx5Hk+)CY)n5sZL)NJdiW{WQCgW)Dg4 z#5}@02+~s6@+8PpBmP-B0rQXLqSNQ3FNQ}SAU?)?7=3{F4E=HR0phFBZwOzqjQNB46{MxGWhlr$BmP-B0rQXLqSF!5F(cZ^ zU&z0h`T%j<2!E?<`oG2_8I@8xA?z@0eSkQLlo2o)$w(@l5_T-6K0us?U<6D@GLlL= zMn;=W92spklXPlKCuT;Fmco|VLFO3o&(aB)e=HZBc9YIcsacr%0C7HoQIiEoMpEg* zuw9t?0C6#b5wHZwNGe?#b{?iaKwOSs1gt*4Q5r4mco{GLDn1b z&(aB)e=HZBZY155Qfo1F{T2kHCR>q=q|$9+H(=@m#2pAmz)mD1sdQJ^&6xTCaSwtK zuouZlD&3c6+tcg->F$_=nEgRo3R?~bIby^=ODACdv0QX|jP!U)9m3QHh$j(@nw&y1 zl1fkK3up3$v!q93&S6djX(?>E5agl}uh$8fO8u8EI=xJKC8f?|>I1}U2u4k=BN<7h zH?r|&zHp25Qp|14)gUc}Eq8<5Gvf6+0dpxXI(I1~b2u4kwAQ?%ePqXn^ zzVMv%e#{HZqaZDXEw6&SHsbX<0dpxXI(#>I1|N2u4jlA{j}gpR)0DzVLYcjd;CIz+8%pPWwoIq|`S|eSp}HVANy)$w(?4%*J2&!f(>=F@G>W zgR~U33TjQ-bCf3Gq10phqZ|6Le08INQnl};G*-}=IT%EU4M z?JrCs9nR+_W5xz)DQuY5P<`f~gM>I}wbU%tA7fN@r)|oP42+ zbb3rTW@eCIDb{g?|oq)L%7oF}V-IG$=G4%oBJ_MsC`;m;K(gWFeFkd)Cx+~@|W^a&|!j_{! zjv4WKoq)L%7oDCUJ(*HRF!cfAX#}GtXON7f(zDrkE?+oLdOYR==2VcD!j?-xE*tTB zoq)L%7oA=uy_QlJG4%oB4FsbmH<65_(p%YhJ72g%dL`yA=6aBp!j}6%9vJa@oq)L% z7o9#LeVkJFF!cfAQv{A{aIKg=8d^{?5if`NCh)A2CCifgmk~EyF=ZjCj3Hz+8%pPREYrZ}(X3=6OoLh(n(|M7kIrrcJvEVNXNuX#f%TqQrI#*NQV)x*9n+Qanb2a($18c zhN%w_XCoLjnS*2`m3C!gcfK%}bVkfP%&Z_Sg)Iw$EHvWvIstPjE;?OIx+JCMWB#|+ zFGDbr%aKgd71_8lUswgOC}uTgX^@t}mbF3F8S#3ZfVmVGoo*oAm{Myn|3~XLBN)jo zNG9plY}}SFYzJ5$vjej!NK0YMt{}UOc)d=*T#AcM_mb{Qshybm0Pz5VQIms6MpEga zY&@JV93kBka}={bNK0YM@gOIRc)d=*T#AcMPm!KZsbiS>0P!q>QIm5>MpEhdY`l;! zTqHdia|v@MNK0YMl^|D*c)d=*T#AcMuan+Lsmqx90Pz-rQIp$9MpEgWY`mK<+#|gf zb02dvNK0YM!yu20c)d=*T#AcMpO8LHsRx+)0P#73QIi))MpEg^Yci9rh`$kxn*2dBl1l$(<50fvkF-B#81pMgOJU2Haibf@ zj;n~*>jccDxaf2|$b@m)$zSvlkoo{|5-Fo5laY+1(kbKW7kIs$CDTa9#Z1Rc4AN5A zG9$=LBVMl)Fqh(@(^;gmQ>p_~A0T!i7&YleGLlN?X5+kkVLoYR%mU1uAT5P0i-IgR z;`KTKb15!5T}rwvr50l91H=^wMom^C8A+w9vT=33u!eL=%v#LyAT5P0>w|1C;`KTK zb15!5-9)-MrPg8U1H`QeMoqRM8A+wvvvEhhu#KgfU)uh$8fOL5WZFVf#B^%GMcApS)#YBGdmB$fWl z#^HQngmf@w%y|C(2Wcs688?1(<9H)puM;qr;-b@uAd|*xCx6k$V(J6LDF{YQrXm?h zrPIdOFYtOhOFBp=#LU1<4$@NC(ivoy5wF(?m`icd=^WCol$wdD4-n@f7&V!PWF(c& z&&CD$!a~y7F^e$WL0Sr1mIPU9#Orke=2BdAx}0=HN-f6J2Z*Z>jGC-QGLlNyWaHX= zVIAqRnDv;IL0Sr1HU`;b#Orke=2BdAx`lLWN^QW@2Z-AdjGF8~GLlMnX5+4WVK?dK zm_3+nL0Sr1_66B*#Orke=2BdAdXV%`O6|qe2Z%=yjG7!pGLlMGLlLkWaGnp;SuSrn8%pAL0Sr1o(6el z#Orke=2BdA`hxUjNUau1{m*S$+ zKcs(CY5-FoApS!zYBG#uB$bY2vaO=Qe1R8 znRLno?c^`|cuakOI1Rz5$#f(mskCE4{lb6Bj4YW+Iw__TGc`y{Vax0wbBuVsPQYA> zi%z>q=cd#wOnrbjAHk@}0wg1;bYV6w$`=-scEv2g%nQ;|*s?6hawA@^6EK(JqSKY6 zt5RwyranMigJ9HTEs~K`x-J{n=L;K1SHx_@tPavr*s?ju79(D-6EK(JqSI}p+f!;2 zranO2iD1-Z7m|@wx;q>9Jj%1Ra$i|cT!YP15F{d#{gR~U3oDFi$h}Y``%%!;K^aAO{lsbd?zgmA8!AM>~ zGD)vy7mu8<vaO=Qe1R;m-Jpr-Ne)fhz}5qnmj}@l1d+C zvaO=Qe1TUiu83#J;T%oh;I>$n!H0Yl1kra*j>vaO=Qe1S}L)x2CpE30TVjqH0lOIS%Qt8iZ?9UelNWaAl zV!j7yDQx*2A#fvg{cn^M-YsfjG4%PF_~DU(y&8mco{!L5>;m&(aB)e=HZBo*+G$Qb#cL0pe){qb6sNjHJ@DVUJ_# z1H|(PM!*FmBdPRa*i)GL0P!+{5pV^`NGiRWX6MrEI_agD8<=ZBS_)fk1-Wg+KT9WI z{;^zidYANGO5McN2Z#?4jG8<|GLlLkg}sBR4-lUq7y(a_jHJ?MVeez=1H=~yM!-uX zBdPRNnmtalH>A&F-eO({X(?=ZALN4(|16z=`Nwk6=_k_96aV}F{r~Va# z_)!O=4-mhG?jigZ(~J3%54IGx^ac50#H(}y<^o)F+D|%=e=6TG^#S591fzcxzmbfj z(m!E;V(J6LAp|4fACi$&IvjQoQy(CXnZ)1fNfj82WW*{RH)*ul-!z**IubJxGd@U5 zVaw!6qrYT|5&tZmfceLA(djgh>2)Xnv?pQe1H>5!MonfS8A+v`VW(p11H{<~M!*~- zBdN42YzL-3K%9$U1k6J+l1k_2m&{7Dg{0jvi!cjTDQr0x zMbb+tbrw?}AYMT*YH}6HNGiRSFI>+TZjfGxxrwXX^a~S6hw{0Jn30rfDQuY>eu@#V*9n+Qanb2C(&=@l{$6A1 z1H>5!MonfS8A+v`DK#rgW|K~hnS<#F(o)#c9b~Q%uh$8fOL5WZe9{Fe)rF}K5EmgB zHCc>gB$Y17#-;hfGSYc5%P|Xsv=p|i46@3I*Xsn#rMT#H4e8pHT7jt#5Z5CZHQ9h< zB$aN=#!dOcX42I$TQKW_v=p{%3$opa*Xsn#rMT#HC+V(~+KQ6j_n$sfd0E9>~Un`NAQ9T``9-dxNwTwj2#|%!t?P1k9zl==22X z$&@;RsSglOBN#O~gJdL?p3TN{`NDb9<1rU7r-HN;wp|-pai%w^fcBa%cOnrbj8^Nf_93&&D zv@09C^M$#jGh*gpW(8>}Y*`Rwp%Jgw37AW9(dlB+B`Gx@Qy(BMLojNx9LY#3U6G9| z^MzHUi(*z|mIi4lY*`y*oe{6s37AW9(dh=#jVZMTQy(C1Mlfo!1<6P%-I|Tt@`dfB z>tl9cHU()ZY}plLw-K+`37AW9(dk~&eJQmQQy(B6Krm`@5Xnd?J(P`y^Mxa%dt#1a z_6KPxY&jm}gb}aT37AW9(djAD(u zkrA)g37AW9(diS?rz!OSQy(BcM=)yg0?9}!eVL7~@`cx=k7M3oo&{+sYDz{NJdiW-)tPp7ygm<#|&eB1!*a488dBk)MPS}kyJWmTKxjAx3gp#>A0Bbn2AAJ3R`9bnQ6r9bpqy6 zTy#2%baqO0VCnD+9bmoLmG?TlG~nG>X?uw_w@#YVhdCtxncMW;(i zm!;G~Onrd30>P-sN+ctxbX7L4&KK5@E{R!-SstXNuw{La4Mx0PCtxncMW>rcH>cD( zOnrd36~U;y+*uVCtxncMW_2o52Vy?OnrcO z2*IeyVI(7|^hh=y%@>Z5?u$8&IT)m+u;pZsQ%1aACtxncMW<&-&!*G~OnrcO9>J)| z1tcS>^kOz%$`>w^o{qVKITxg*u;p5i>qfj@CtxncMW;7OZ>7{#OnrcO2f?VxT_hu^ z^j%hzogWAOnrd(4Z)~M50a5o+MA8v^MyXr zPcc6*UxTz1w)6)XFyi$(0dpxXI{iiZJEeYN>I1~T2u4kYkc_0#f7v*kFN}~5#*CTH z-~S*jg)QTzk8T`q#Orke=2BdAIuT^jbnWCX`dCbTfH(!gsL50$BdK)S^!f!}Z)Zsd z>4caWn8`s}3R^mZ%rfHjIstPjE;^k<+Lcl>G4%oBTm+*g^N@_B()roAAYWKWIy+_& zraMSWVat*rOO1HFPQYA>i%yr5u1KlHnEC*56@pQd)ksEC>6&a@n=h;*T^6$*voc6a zVavuKn~Zq9PQYA>i%z$YZcV8TnEC*5JAzS@9Y{t}>CSB2l`rfj-5j$Avn@zVVavWC z`;Bi%t)c9!jabnEC+m2!c_Qqew9K4)o-dprJrHveb2vy#Vaw?tXN-8g zPQYA>i%!pxo=>S$nEC+mB7#wqOGrji>E&#^k}q5(JsWckb0J7eVatsmH;s6`PQYA> zi%xHo-btzJnE$Kw_YjQaeI%3gK{h_j7ajrJig}E=8>FSMhMpEfWHje2S{leG|{+*D|jl&EDX(?=(5PqT&uh$8fOL5WZWYQ@e+R0z^@tFDm zaTD#T zNJdiWy09xS^#S4r1S4Q0l95!pDeP)YeSo+H!3fxjWF(bt%P(1dkIq?Al^bS0&XK2Nu_tfUd7Z0i1!eTfcr>BQt5*Nbklx z#ykwtQrPk|$TK7USvmppkL9A%7o;y!>ItSkKzxm0)Z`74kyQFN>~l5_x zB$a*)`wCMZAbv(L0=^&_Nu^)Y>|L7mkba8k#e56WQrOZLm@lIb5Pzb-jy^#A75We1@0h=s!F;f#u;pKnVIy9p6EGLxqSG-m`2Q=;(2wTN z>kvqNfHjHJ?KVdrD&1H=^wM!-rWBdK&%nk`PVHKfa9)?!u%X(?=3A7q0O|16z= z`Nwk6=_b<6DYXt$A0Tc;Flw?5$w(^Q9(E(9K0w@wU20?s2DNu?LUp2XA#h?fwIfXhfmQt6d6JDXISAhK)jD&)Z_t@kyQFHUwD)+JSM#z^8|A*NK0YMvmnonc)d=* zRO-KU(dkRlS1I)rQy(C{K`?6a7Rg8|eV2{z^MwzjFJeAoUI%F@Z227IixIEa37AW9 z(djqRo|O88sSgmpBN#R5Lo$*|e`Mp&e4(H8Ys>(qH%Loi%da56jd;CIz+8%pPXCe) zrPLs%K0q8sFlsV_WF(c2nK}AD0Apv4eqr29{#!{tHy-mZrCJJGCWfD6#Orke=2BdA zI)!xVOzq^~0~0Xy0pfH7qb40lMpEgFl$x0(ourdvW?`lUX(?=(6Qs+C*Xsn#rMT#H zF6q3KnvJOs5EmdAHCc#cB$Y18#>M%<64LINrI`6aS_)g12U%gn>vaO=Qe1Spiga~K zEyL6Yh-(pynyf=Il1kTSvaO=Qe1SpopeV^ZN}6G zh`SJsn(Rh0l1levAL+K3{g|CWS_)eZ203KJ>vaO=Qe1R;g!E`i9l+EFh{q9( znw&r~l1fizvaO=Qe1R;k@QkZoyF7#h*uDdnp{OP zl1i^-vaO=Qe1R;kMw>@-NMudhz}8rnmj@>l1d+E zhDe2vqXP5^;S_)fU1bJ!1>vaO=Qe1TUn)FRdJ;&4si0=@Ln!HCcl1e{hh>vaO=Qe1S}OZq*fzF_JD#2*MoO@1O7Nu~YSIFK(4lJ>;> z!t@1cDQx)@A24N1zvA=j(%YR z=}u6^#S4{1fwR4k&L9$CE2(%Usy&uFJ?Jr zVUU)>mX$$P8S#3ZfVmVGovtBWn^G$<^#S5~1fwP!kc_0#joG*GS}|3~XjA{fb2NG9p&Y&?@MoCP=in0Pz}vQIqRPMpEgGY`mE-+#dYyo|6c?S2kdB$9o&53qi>VI~ z$IaqzcTNA-cqF4zN+-;!U*PrjtkEw_A|1}>CS%41X(?=(8h)A)uh$8fOL5U@2kDHI znu4hh5IYf!n#@8nl1gW1;mdYyo|6c?SIAU&B7CZCavq|z_h_%&bnM*1$M2lFvV zOJU3RAbm!>UMFBK#YLw-N&8c(7gHY~4k8#e`GsU8mHy7gKl#F6(jPHHn1LWIg)PHD zMvQp9PQYA>i%!SR=5P0G?c^`|KalzWaRMo$CKHj2q|!;V>lb*vJ$v*EQ%J|eOvQ{3 z(o)zmJxGTUuh$8fOL5WZOw!Jjnue(l5N9J8HJO8CB$ak$V|TtVmvlzVJj|>hErl%$ zf-E%R^*RA_DK0u)Ou8hc=40vu#AOIZO_n1WNu?{Yab>=+igZ!TYRu9gErl&>gRC>+ z^*RA_DK0wQK)Nxd)?n%b#LWmsO|~EzNu^t}aa+EyopgQ74$P(?Erl(+g6uZp^*RA_ zDK0wQOS&(mc4F!S!~+OMO%5U%Nu`If@o>Iygmh2LQOy1zErl(|gPbtp^*RA_DK0ua zMS41=j$!Hp#Ip!SP0k@1Nu}qr@j||Ek@RHDCCr&1Erl&tf?PG?^*RA_DK0v_PI@Dy zE@SEg#9IhPO>QF@Nu_tP@ov6wkMvs1eay`uErl%)gFG_g^*RA_DK0vFLi#kN9$@MN z#ODY`OI1|{q>P$O zMlzC0r_8Be;PrNvOd}l^GaWNANK0YMj36_Oc)d=*T#AcMXOYfMsSZqifY^m#)TA59 zNGhG1jq~z_`J|mO3ovtnv=p{13bNRU*Xsn#rMT#HDe1D5T8OC+5LX}=HCc&dB$ckp z#?|@48qy^(Ycb1%v=p|i53<3C*Xsn#rMT#H6Y1uZT8F6*5Vs;2HQ9z_B$aN@#vS>> zPSTAryD(dVv=p}N39{FS*Xsn#rMT#HKk0##+Ks6X5Dy_3H93rAB$Xb?#-sVdG17f8 z$1w+kv=p|S406hd*Xsn#rMT$y4C&dFI)SMV5YHnRHMxLfB$Zyw#!LCaWzy3zS1{*- zv=p{n3v%6v*Xsn#rMT$yCh4t|x{9d}5bq!uHMxsqB$eLF#{2og1JWBY4>7lcv=p{H z4)Vl^*Xsn#rMT$y8R_$sdW8AETK^KkNWMZcNndB3R^w|`Dn!J zbpqy6Ty*-G^h-*;$J7Ui-w=$N^dK2YrM=nsJzwY}{S@;9^EF6IVM~9I0V7_o6EK(J zqSIfbzf4caWn8`s}3R^mZ%rfHjIstPj zE;^k<+Lcl>G4%oBTm+*g^N@_B()roAAYWKWIy+_&raMSWVat*rOO1HFPQYA>i%yr5 zu1KlHnEC*56@pQd)ksEC>6&a@n=h;*T^6$*voc6aVavuKn~Zq9PQYA>i%z$YZcV8T znEC*5JAzS@9Y{t}>CUj5G4%oBZUiG>50a5ox;N}LOnrd3AHfJXfMg_<9?UP*m5k$aU=d&Iswy<{f{m>JxO{hrH*3i1H>~3MorEl8A+w*!k)m?2Z$FC zjDU+sMpEgeu%|Kg0pb+|Bj75MkyLsu&CaLU4bsaoH!;_Pv=p}74syqcf0jWF(b74tp0&2Z%2bjDS~2MpEhP zG<%X}Z%JRoyu-W+(o)#+A;?D~{#iN!^N;1C)6b+|QtCaXK0y42VAP}s$w(^g4f_dG zA0YN27y&yJL#sF9hhxFS_)fs z1=(%HKT9WI{;^zix|eicO6|nd2Z#p{jG7!oGLlLUh24Xx4-k(a7y(C-jHJ?IVfSO| z1H=;uM!-oVBdPRMnjKEFGo;63&SFjnX(?u zFlurQ$w(@_9`+)prZ*9cfLlmLQt9omS1|Pf;#~wI;2x5ZRC+(nZlu{m(mOGaFb{&X z6t+AG^3;fbmQKL@W4Y+`Iq8d(dW@+L5MLn}HF=F>B$d9&7vAOz??|7;yvMu@(o)#+ zF~}z)Uau1{mHIDTbozz#Yf62<)CY(?2u4kMk&L9$@7dUwFZ>|=9P<A!-i~>Kxfi6Ru;p2h=SI9 z{gI77^M!uWuQ3Cd-XJZ7Ex&^NHsbX<0dpxXI{iyJlv0D3`T%hl!Kldyl95z8W?ucm zf6CZ-qhA;|kAElRbK^1pQmUn}Wn%bAM!a4pU@pZ)r&CC$&eKl*qEEoo2Z+-VjGA;H z8A+uxQfg+FbdpYvnT44aq@}QBPLM7mUau1{m*S$+xuo+_YBr`mKwN-e)MO!&kyN@U z8yDvbOGvw8mSW}yX(?=39%O|Puh$9K|IgHWEa$moNw(G}Yj6j5ki&R}JIE)wR?kGO zwblY4NP+}OfFJ=9pw?Pzt+m#gy*wNqRfBEj?%#^o{#T{pv}H$TxfBPTc93?a)Cx>} zfY^m#)MPD^kyN@a8`tNCZqn5;8!&5vv=p}V1leT7>-7c9r8wwx3u$jkZN$_Eh+7ei zn)D+XNu}GeaeHnUAl)1@i0KQ`QrNOH$dD1Q*B3CC;-J%Aq`OmU2c|wi+>2n;WFL}| zRJuPK59Ee}q{A_XFnfZu6t)}*a@2^|>kF7manR{;(i16l81o;kKZRfUEap7sWRRA^mWx3y8S#330dpx1I=w=AHKi_K>I1~<2u4kAAQ?%eH?#3pZn#Z) zIpz-LT9B5)mU}_&8}WL50dpx1I(I1|l2u4kwA{j}g&$97(Zg@fZAm%0J zagdh6me)bv81Z_20dpx1I(I1}&2u4jlAsI=fpR@5xZum<2Hs%}VLy(rj zmLEZW8u5C40dpx1I{i)hC#Ak)>I1}43;ElG&n1%HQUT-fPxnUgXuUt1C z^Eahh3R@D0QDzvvS%^#S5^1fwQ1kc_0#nJG0ZOJD#DNJdiWvTR(Q8&;4mh*^nQ9HgbN zWp$7aBVMmBU@pZ$r)x;NQfd{ZK0sWDVANzil95!}osAoE!$#81m>$g9AT5P0n}cjI z;`RCh=29GV+DE!Ir8Z&e1H^3zMoqRO8A+uB**KURc98bQ?8Nj3X(?-7c9r8wyH zB-7c9r8wyH8tL_v zx`e3@5N{$FHMxakB$eLI#yh#;F6q^ndzc$RS_)ep1bJx0>-7c9r8wyHG3k?(x{s+3 z5T79!HF=I?B$d9%#+SL_73rgx*O;e4S_)g<26<=1>-7c9r8wyH1L?<-7c9r8wyHFX^a7+Q}c!pP2dpam*tA zcGvXZW08zXDIK?{-oWeaMI$#%ApMi;CSpbhX(?=(9Da%suh$nam*Sw)X{6IrY7(YC zK%9wS)MOTtkyJW68|UPPxujEL=3!<8X(?=35M-eduh$nam*Sw)#iUD8YCfhuKwO4k z)MPo5kyN@O8&~FrRiukzR%4b1X(?>!46??E*Xs+IOL5TYTGDkX)q$xG5W5kKnruKa zl1evbV^40_MA{Xz8M8h}OJPfIkUk?`uPz9AV&rQfshM{f8@`Z4Ag=1Y*4!j?Zl{u=Rm zeF1YR4musZn7`eNwUfW-zd`B)#BrpInv6#>l1e8mt~c;{d-2E(lSoI!Ova22(o)zm zHOMq0Uav1;F2zBoGe~Eq)D%p8fH)h$sL328BdK(5HqOfp^GT=2EWpeP(o)#6D9B-7c9 zr8wwxJ!yAJt-;g>h#L`%n)DzUNu`^zadU3iLb@)d7qcNqOJU2_ApJ(XUSGgmii1wK zlMbX*AErJ)+<{=!WG9l5R63N6!?|G>>9&~Nn86?|g)Mu7>@(u^`U2)s9CUhs^k7Qu z!PEzchY^gL96>UYN{?pavD|Q+bbrhV%%LDHg)OIooHpY1`U2)s9CUh?^ju1v#MB3f z7Z8k^TtqUGN-t&O<=k+E^i0fE%=sWKg)P^E+%V$x`U2)s9CUh%^ma;J!_)_ecM*)5 z+(R;wO7CamgWT|t^k&Q>%$*=Dg)L8lJT>C=`U2)s9CZ4e^hHWN#{9R|zd|sQuaQjB zH`(|$H@pLQ7V{qSGDu5d%f}#}jCj4ifVmV0oqi$xno=Jy^#S5{1fwQDkc_0#pV{~; zH~c339PkF7manR`o(v2y#7E>P}ZbC3>vKh%pD&3Ney}6-}v^!=i zrYA^CVav84+l_d=zJR$D2b~U*?ntSAOnrbjgkaQU7|BQ~-4%8KQy(DiK`;XLA{j}g z`@-(T)CY(M5R8C>NJdiWq5P8FX?BEkf6P(L;UF!AEyshLFyf!3FJSty|LCC8Q>3R; z>KLXzKs<|J)Z`qJkyLs<>`6?0fOrwX2)Kk~B$Zwcdj?Y_VE| zB)t-I3v(k#OJU2MAa{-UXXy)=e=G-`-Y0#KQnxYn0pcSBqb84$jHJ>hVeet;1H@+t zM!<63@X9qG%M_n5aqS_)e}2Ki*fKTBW0{9`%j z^b6_Nl=^_F4-mg27&ZBUWF(dT4Eq^VA0YllFarJ{8A+vo!+yim2Z*DW^6zdet-u&0 zBUb6yr6bLLrP+AWQAb4q|(kbTb5>Bq^n}qV%7v{DQsCE zq}zypmcD@b$8yl=M$(>?T8F9c4>uziHQ9n>B$f7t-GHg@54R#10sTluQt7s^n=tkL z;Q)dWFoGQt9EadolI>;ZX!5;24sTRC+w@0Ze^=coM+~IE7>+m7Y$sBWZS)^hC@#%$Xo9 zg)J9?Tr}dJr7vLqu^e=Ine<9ZoyXMohu08{np{URl1gucy@aXhEd(RrHjrM!yqk%El-0yGvc46FJS($9CZ4E^kqst!PNJM zuMv!zyg@ROO5f&&ce&v`>GPNmm{&ns3R^w}`E11N^#x3&{-uLXzmk4SsgIcY{_qEa zQInrYMpEgoZ2X-Y{*Zo&`HT4;q@}QB^s-7c9r8wwx9LV@(+R0zHQJDJv za3X?HlSxQMQt9MnBmc9Wk|k3~$Hq*eFJLakL8r4x=cLqhOnrYi z55cI(d?X{ObU`*Q%ngf3XT>bW%ni~~*s?UpG9zBEFJLakL8mK7SEkewOnra28o{VZ z2a=Ig+L?`OazhvC@|d-lRY6(`Th<5ZHsbaA0_IX2bh?qWC#BY5>ifgZ2u4k|AQ?%e zz1i588@7^ei0Q{{3er;8vOUOv5wF)5Fqh(>(;cKcQ)(NgzCRpBFlw?3$w(^QosD~P z!(P(Cn0=U`AT5P02Z9_l;`RCh=29GVdYJS`O6|wg_lL(2jG7!rGLlM9WaG))aEkO$ z%xTQgAT5P0XM>zG;`RCh=29GVdV%y}N}a*f_lK7ejGA0QGLlNKX5+QoaGmsg%ni(? zAT5P0w}RX@;`RCh=29GVdYANGO5McN_lFMk&WYw zc)h-WxfBPTP5_y>Ts!%TJ_b|YA5KOvYBB}MNGhGWyx#CnnU*EfNyo>`z)T9#QrI#p z$ZR8CuPmmF&#l#3R^Y=*=WS;^##nO zIOuc}>E@K`#?<$Ry$D84`jCvI(yiIppBuK3_QY(*Yzfj**fJPohY_#W7ciINpwl7J z;glM{)c1$G5saGbK{Ap`_h#e1+_0Z?XUqZ2t{^RiEr)^}HsbaA0_IX2bb6HZSV|ql z)c1!c5R96fL^6^}Pi5oj+;E2UNX%Kx@gOaQE$4$=Fyi(40_IX2bb5*Oa!Q@U{737r zA{fbQNG9p^Y`l>hZUS74xrMnBq@}RsPLR7syk1|xT#AEE?~^`AsoR+P{_qikQIp3= zMpEgMY*d5(D)q@}RsWsp}!yk1|xT#AEE-;lmdsTY{~{_s75QIiiyMpEg= zZ2XiPK9jzV`GR>Dq@}RsTafQYyk1|xT#AEEf0F)6sjry&{_qciQIo$&MpEgh74-%l zZ?71+Vay8tnUL$oVt%JoOJU3S@Dq%9y}p3C6bGG7BAvWKJNb(~4pZMBPDLBN{>m?=S83R~s`nQO%B^##nOIOudf>4KD+jj8Vs7aPl`hG~ zrMY1l>AaZbn1w-F3R_kNS!KlQ^##nOIOw#4v@@kvVCwtBE(D_{Ymtnk(skLmJ~woe zu8!G&SreqCu%#!+CL><2FJLakL8n_tdsAv7roKPiieS{FAIV56-Ik5pbHf1X=9ocD zUyzoaRHyk7#jyZ(c6QrfE zD#xNJdiWnQT0p8_tm)i#d-u8KkAKDzjNJdiW&1}4t8*YD#FNJdiWvuu2x8(xq;hD!CNJdiW=WP6v8@`ghjroT85TvEB z(}kpqQfe-yzCT=oVANzOl95!pEE|{Sh83g>Vpd`n2Wcs6SskRqh}Y{2m`icc=^E0m zlv;(U?+@1@7&TdsWF(b#XXA$4u#vPgrU$b&NK0YM<{(>)c)h-WxfBPT_K|K)sZE&r z{%{+DQIqXRMpEfOHV)>79i+W6J2Cx1S_)f+gX}Wm_4)$lQXF);hjedB4Pom0!~Fv~@lb9!Ou9Sf2xec9mco`}L5>^odVK+NDGoY4NqQ=!j$-Qj!!rm*P0k`2 zNu}qq@qBK$KzbtPBIb0Emco|HL9Q6_dVK+NDGoZlMtVJ^E@A5X!Q9>Nu{^5 z@lI~IOL{ft9_B`nmco_?K^_|MdVK+NDGoY)O!_3H?qllv!)FLaO`aneNu@8c@nvp! zMfxb_HRfrMmco{|LEahhdVK+NDGoaQK>9JI-eBtc!_NptO}-!*Nu^)2@mp^APWnFP z2j)|dmco`_L4F(YdVK+NDGoaQOFC+mcJjybC#JqX9J7kQ-8KF9SR|uTO2@6LH}H6S z)yNGKNdM%ziI~wrS_)exho54^>-7c9r8wwx8tL?unuMwE4`(76HJOEEB$dw2#yPoR zF6q>md6*eNS_)eh1X*ar>-7c9r8wwxG3k<&nvbdP50@brHCc{iB$ckn#+A8Y73rdw z)tIG0S_)e_gRC*)_4)$lQXF);mULZ8bztiI!)^qlCL559q|%Mq*pnMJk#@yw#;gz0 zQrOZPq|b=g>kF7manNZ$>9&;Gf~oHh2M~;!3?dmxr8}~5XKolG-5N8D*&d{&uw{3U zJx07EUcVk{gba?u|KyIS{0!u;oOMlSaH= zU%*_7gHBJAo=K_WnEL+k9D-4k^GHTg>4j{(m>VvUo{G7QIUA&D_F+mmBVrUXOWzxfP_Pu;o#Z$40zfU%*_7gHE54 zK1->GnEL+k1%gqNmq8osfog3beK8bmYc^;&tu;qP_4@SIRU%*_7gHAt@eom=( znE%%LuLwr+8)6uK>+r3&l`HTJ= zq`p5KN6M(lcqAjKbi(R-1CO^?kK8bcbX3e_%-A3;g)LKqOf%y3`U2)s9CSK^bY@CT z!PNJMvk{D%%t11eO6O+dyxcIKbb8DJ%&Z_Sg)NJMEH>ix`U2)s9CW&rbXiI*#MJkP zD-evDtVA-BN>^p$>fF#lx+JC(vph&kVM|w#wMM*NU%*_7gHG3zcBj-DOnra25y7ZQ z50a5ox+xns=Y}n$>tcE_8-lbHwrma3Z^Y~M1ifeT2u4kIA{j}g zL)kc-8+MUyi`k7C4AN5AvNy;+BVMmBU@pZ$rw2$6rqmuxeSdfu!Kld*BqOQxXxROj z`u^}Zf)Q{6$w(?a8TJsSzCS#TU<8~&GLlNq=9e5xv-6~zMlf@BxAm z@DRyJDt(k@x6|wi>HV0en8!g{3R|8Bd11sqOJBhJV>#&b73u4gdWNa*58omfHF<|* zB$d7o`w~;%AAUqI0zM%bNu{5|zQNS@hhGtlfNw}fQt9_J`;cZoNx#JW!u$x*QrPk* z$X_G=S^5IzAIm|fqdWL}-JzZOdks?GAC4ns)MPx8kyJV%>?llqe>e%j2$+myB$ZAH zI~G&lA5KFs0;VGwNu@J7Mw(6R7-=?(bZX3O%*-Gyg)MV~%roMjr7vLqu^e=|fOKI; zeSi3`e^2TAf6LAPAL9Sv-{5xB|MTzvQzZXC{#_B!rLIR(mKpdL!17!$nG3FuT(I(g zE|BDcRh(Mw3rI@G|6I`NbOq^}+%<{2u8!Qb)~L!za@RW0^*%*Xx(%qz2B%%58*|r0 z?z%j3*CwO7OOm@bgKqIDlG1BHcl9~#A>Eq0CUDoqk-N4T)m@U@wH4}s%jHz!%Pazonn$t)|Qt6qn$1wHH=s5%<;5?F% zRC*!oNlbk+dI`Y@xQt{Zm0n4+vuSpX^kU3)%+(+*g)KLO+%n>yr7vLqu^e=IhxBer z-N4j0qxTVvnmj-0Z)*Oq|&Eh?_uhj(dP(8zzZZJsq|%F9EPVmMf?e8U2D_)Z{CYkyQFE><3JJGx`I; z2>6L)B$fUO`x#UJMgIrE2>6R+B$bZp9BKAF&Bk={|JN8Z7Bf0XOJU3S&XHd-!H9pB zzJU41a?t4{kjb6e$=~^LnEGaPDuPjyX-Gy=>GZG@F*TiuU7dgMq#ILeEvCL1-GpG&WHXYH zRJtV_dvik{X?M(4Oiz%O!j^48wj1$!eF1YR4muqq-H}rLnEGaP2*IeyFp`l}x+@!Z z=Y~C`12KCsJAGf| zgE6NtM}o8zwwwua)`-{Z3z$oB(CK;73n_IPQ{RkULNID_8Oca0y^@VrbHg>#b1~O3 z7lX7Ew%iPI%ZS(O3z$oB(CHo0yD4=8Q{RlHZN+c8ft_ky$( zwmb{++=$of3z$oB(CJIkS1I)rQ{RlfK`?6a7Rg8|eV2{zbHfMH7cn0(uYHNJuQ8+6@RvVGOJU2HH6t6x z8u5C40dpx1Ivo!(VU2e3M|m`+z8Rf_VANzXl95z8Wlg<-{~HKdGL3Xx%yi7eAT5P0 zGlR@B;`RCh=29GVI)`*_O3lF3H>2|rjG8P!GLlLcX5*sVu$Xjq%o5DJAT5P0%YrO7 z;`RCh=29GVx{`ENN-f3IH=`X0Mol`AjHJ>v+1QmE){?G>S%+C2q@}Q>JIDqjUav1; zF2zBoJ*1mbYCWdD8Qp?l)T9^5NGk2i#;v)bpLAo)Hq7QAErl%uK?aR@y}p3C6bGH| zBpphr?U?#zbQgkAlif&0Qt6&-+?yNrk?x4uj~NcqQrL1Z$RQ(MuPNROt} z0Ze@}dK|&1$q6JQsq|zvp2`iUNe{=I!5jhIuPkF7manR{R(n(#~$zSxbnEz<~6a*tV70D!> z)>Uu#r%cb182}SvW@07>X(?=(9b}FXuh$nam*Sw)d8G4GY8Ixx8C{5A)MOEokyN@k z8<*sUrKEFXmSGkIX(?=35oDziuh$nam*Sw))ubIMwH#C5jIKd2YSM*dB$cks#&x-2 zJ?W~LZcJy8mco{eL3)gMy}p3C6bGGdCf$-!8!+|FXdi-6ldVWbQfYrSZp#hZNjJp| zV0weJ6t?ULveSsy>kF7manR{7>8_L-#MC#Vdk~D8>_sw?O7~^s{@ieYbSUN^W_OU5 z!j{89ju`QJeF1YR4mv$XdOW2LVd|UFlL$slP9YgdrKhv;Ol~+!dNk%7=0uQ|!j=m` zE*kNAeF1YR4m!O|dL^aKW9pmHYY0Y7t|J*qr8lziW^TAedMV~M=4z0Z!j`*1?iulV zeF1YR4my26`Y@&LVCtLE#|TDEo*)@XrBAc*S#EevdOzj`=24KA!j@M-UK{axeF1YR z4my2H`YxqjV(OdG4+ut0J|Y=OrJu6#b8h%T`X=Tp=6#Ts!j|trei-q3eF1YR4m$ls z`a7k*Vd|UFzX(Q6My=)FEm>Qo($Q<{4gZueYe#Mv3-B}7jl=v&sg}Z)3E?Li@p^p$ zb14owolH8V?&L4}cuajWIt{_7)N~{xsdPq4&CHTnq?2N1W2OdaDQuY=WS$YP*B3CC z;-J$7qzhAO4yL{tU5sGVWC@ayRJt@9m*s}#r1N7|U={^wDQsC4WVI2m*B3CC;-J$` z(lsfy5>wxdu0=3vvJS~eDqWwA-ML`{X-CXPOjnSW!j?@zHXHGJeF1YR4m#~6?Mta1 zOno!jk6_ef8F3$mY5xwtwCA}TZV!R8}WL50dpx1I^9jWC#7~`>YLGh z2u4lzBN<7h2eR>CZa74`E9Nj}Z;+P4mZL$A8S#330dpx1Iz2&pGNq1S>YLHi2u4lL zAQ?%eXS4BKZa7bRJmv!CRFIa!mPYLFU2u4kAA{j}g zx3ckeZn#5wCFU;XdXSdFmis{-81Z_20dpx1I(YLH02u4kwAsI=f&$IDG zZg@%hFyYLF|2u4jlBN<7hU$XIQZumy} zF6KMtW001@mY+d>8S#330dpx1I{icXH>G}H>YLHg>-gKft~MEiWK>G&*md=Wf6BOZ zBR7mE{hjM3U`7RLDQuY(ezFm-*B3CC;-J&1q|@q7{-RIB)HkCu5R974L^6^}XJzB; z+%Si9O3Yl$^dK#TE%SpcFyi(40_IX2bh?OiaZ1g@)HkC`5saEFLo$*|muKUO+^~{# zVazJbk{~UGEgeBRjd;DjfVmV0opzC~O{vwG`et-Jf>D!hBqOPGLpE;A4Lzi5Vm4vc z1!*a4*%GAJh}Y{2m`icc=~mMIl-i7`Z$`Hx7&RF{GLlLMvvEgm*h$(KGlba|q@}QB zSCHLCyk1|xT#AEE_mb{QsbNfgGkO5QsL4SjBdPRIHXhCmM@aX?9L4Mp(o)!RJje+n zUav1;F2zBor$|qy)GE!ZFw26p6t=7h(q+W!^##nOIOud8>H3uF#Qe9` zZ$L1T8<9-Xo^0Hd8#V*1joE_f4$@NC(idc_5wF)5Fqh(>(`}^NQ>qtJ-;53-7&X~} zWF(dD%*LVIFihGXvkNm2q@}QBPmsMvyk1|xT#AEE_mdt-soj|RX7mt(QIo?+MpEgK zY&@D9j*;$*IgU9Pq@}RsWRO!vyk1|xT#AEE&yb!?sS}v`X7oIQQIiWuMpEg;Y`l~k zE|Z>)xq>+tq@}RsT9E5Tyk1|xT#AEEZ<5|hsjHa!X7mn%QIoq!MpEg$Y`mWv9+2LM zd5F0kq@}RsagZlQyk1|xT#AEEpOHRKsYjUlX7nY3QIl6lMpEhPY{m>EGdil9|JQPN1x6zou}a5u*Jl5epJ_IZ^l!{~%-A3;g)I}iM}Em9BmP^mCg)18B^bk&PFf-<{%kKrE|kh!_+sU^AU`I z1xQ9x>B9VyS!uSIbY9F7%%UJIg)Pg1EH~mGt1n>wu^e=|l5|x{EydI~qa6rFO*)Z` zq|!BES77R!(X|Lhz&a!&sdRnV)tLHbbOVABuo1~fD(y+Lt~A?B+8wh6vnfbRVM||- ztw#K_^aad6mV-{Wk#0|^UQB&6I*4G@WCxOwRJt>4Kc>DJ9Y!z$b|D!_rMtrpVCtLE zy$D9YJ|rWlbbp!+rP)E!Ju!zc2ZFQ|wj2p^)QEqUzJU41a?t5<(i1MFhmAb0)cSrN zS)J-0c}Y6|zsg~^Is**hD^BMMK9;lp3r3qbAL1g!g_uj2b3s}PTdoATYQzoo1^BnUuNK0YM%OJ0e_-E-0n13t>oxUM`n^G?@_1)ro1fwP&kc_0# zk6~Y9>bu3y2u8pcBqOQxYuI;~`fl+%f)Vfo$w(^wnP#8T>^JGRm_L|bL0Sr1Mr|1R zC8IY~#6L@4!2Dx5=yWW|xDDFLAJ)Gh_1)qGQbtWCA{j}glfsU{)OU+h5R8DSNJdiW zw6Nnb^I{vcQOcmcD@b$8yl=BGSbv zH4jtYEiOecYO)N;NGe?(b|I#wD-n!FTgcF!kMHCxQ{M2FXY&?Mky1X||5E zBW68jZIG72mJLBR8u8E47cl==4m#aLx;dq~G4Kz=WDk;&RJu1C_vMEDq&s5{V0Hy* zDQr0uVr1xT;V;%-+DQtNeOP4RYOB%q?0#lCx7h6Vd}fZsR%|*rXd+grPEVtMwZMZoftC% z)OU+p5saGjBN<7h+p=+cZWtil95aaN3(`{9vNOn#5wF)5Fqh(>(_N&yQ)&mMzFXXj zVANzEl95!pKN}C^hJ&QTF^4dFg0vL290_vNh}Y{2m`icc>2cB%DRmfA-z}a(Flurd z$w(?alZ|I{!#UDpG3PNSgR~U3Tnuu_h}Y{2m`icc=@rteDRlu;-z{E8FlurG$w(@_ znT@w{!)?;bF?TT6g0vL2+zWEwh}Y{2m`icc=|j>-DRmc9-z`2tFlzD?$w(@FmW|JI z!wb>}F)uNXgR~U3ybkilh}Y{2m`icc={wT*DfJ3d-z|PbFlzD%$w(^woQ+>{!&lO` zG2bvBg0vL2{0Q>Xh}Y{2m`icc>2K0MDfJyw-z|>n;cs_OZ893ksFcz%J@p3uO^lwA z8^)3T%5~#0e^aWZuw`QSNk+V0U%*_7gHETAPOUrj?~7pSyT$1UMonfQ8A+uxQ)*V0 z%qE>2GY2y*NK0YMydd+9c)h-WxfBPTE+k!)Qgbo?(fTC_Msg{VNxCc>m*<8R01IMP zVipH!DQsCCq{E2U>kF7manR`+(yo+Rg{kir*C7}+S&w8Sm3C+2hTO1`v@@m$vo=Ue zVaw(qTa0+UzJR$D2c7njZcV98nEGyU8-h`j?MOya=|DCP=7t@ly)ip6{Xtp^TZV(| zGUE060_IX2bh?LhZ%Pee>bu4L2u4i~AQ?%e2ea`|Za7T3JLU*xUyzobu1=2u4lLA{j}g=d$s9Zn!{tBIY9IbdZ+9mdin|81Z_20dpx1 zI=x1EJ*6&T>bu382u4kAAsI=fx3lq1Zn#T&HRc}XMv#`mmIpx|8u5C40dpx1I(bu2f2u4kwBN<7hFS7AvZg@rdDCRZhX^@t}mbXFP8S#330dpx1I{iTUF{R#M z>bu3y2u4l5AQ?%eU$gOBZun06KIRAJQ;?RzmR~`B8}WL50dpx1I{iyJYLj;I$MYwq zzFQo#iND=7{r6ZTqf$!8ZK^l$Ul_G%4`U2)s9CSL3 zbb3ln!qj(*GZBoM%tA7fN@r)|oZK*%bZX2z%#0u{g)Iw$EHvWv`U2)s9CW&vbV*9h z$JBR=%Mgs3EJreuN>^m#%G|JubWzM|%+eq&g)N;y))?`6eF1YR4mw>+x-O+UF!kMH zH-b@<4M;{(>BemA$qk!GyJ9wD)(2@RZ0QZsXTO2+~s6aw5n{BVMmBU@pZ$r>9BJq||XteYbcH!Klf3BqOQxLN;E^ z4VOqy#azam4boEBay7^`BVMmBU@pZ$r#DD%rqmToeYbcU!Kld{BqOQxZZ_V_4fjc} z$2`E?3er;8@+in-BVMmBU@pZ$r%y?rrPM=AeYf}m!KlegBqOQxRW`oP4R1)F#Jt5k z57JWD@;=B1BVMmBU@pZ$r=Lhar_?)4eYf}(!KleMBqOQxdp7>a4L?ag#{9y33DQ#7 z@+Zh&BVMmBU@pZ$r=vIXw|ld8@)!L#NPV|Bj+9Z8@kmBe>4eSo2L219HjmseiF8!V zWX#wgErl&pgG@8x_4)$lQXF(TgLGy}O~KT6i?b1on#@5ml1k@hOJPe_ zkhMmLVd}fZ9SBBEb|M)`r9;^`oEvtLZj0HC84S`=*s?dsJ|kYQFJLak zL8k{u52n-}OntX_7{RE?5hNq2^k_C7%MHg#_s5*T917A>*m5e!X(L{*FJLakL8oU) z&!yB!OntX_0l}!rMIQ8X zOntX_7s05>JtQNk^nNxz$PEukZ^k^r+zHZB*zzREQzKrlFJLakL8s42U!>GyOntZb z3c;w!Ya}D7^i4Lt%?9sKgayRd<)W2*fMI%$i~rID&qC}0_IX2bUGGf+!pQRFZy4Q`fhOo zDWfJ6k&L9$Nn7d-{9pUck}0HPVy0ro2Wcs6nI2?@5wF)5Fqh(>(^;gmQ)(KfzFVA& zVANzDl95z8KN}b1hJ~avV-{iN1ZgR3SrTNa5wF)5Fqh(>)8(WqQfe`#zFS;{VANza zl95!}k&T_XVGZfBm@dr9AT5P0>w>H|;`RCh=29GVx`A|KO0C7zcZ-`4jGAmlGLlNS zWMgk`=p*fp*^222(o)#6Ey#8wUav1;F2zBogQPoBsvq;;T0ewfB!`hq(p}lOJ2&hB z7>L=6*%_pzuw{Rc14g`FU%*_7gH8{T9!{x!nEGzG5nlksD5u9*jAK zITEC$u;omUvqrpLU%*_7gHF$rUP!6anEGz<5`s~a%Sc92>6L7}nj5Z>o{PDTxfrCS zu;pfuTSmNIU%*_7gHG>|-c6|+nEGzBDS%lp7wC-i~>Kxfi6Ru;p2h z=SI9AP%vpBp}qzKHpVc^#ysu;p`*FGjpx zU%*_7gHFGZeov`SnEGzF;d(lNnHRAR9 z0_IX2bUGenLa%o67kxCQzFVAxVANzXl95z8CG0p%eYZFb!3da+WF(c&2s;r|-!0BU zFal;H8A+vcdTTTO`%hAS9_h@O`IxyuS_)eh23cgpKTBW0^ke_gL8nVdm!{MLOntYw z9Koo`3M3<`bY3L1w}st|sqYpC5R8C9BqOPG zN7z10eYZG-U<3>!8A+wP(rkO0?IGP6vlp{FNK0YM{vZd8_-E-0n13t>ogN}RoKpKR z_1)r81fwR$kc_0#<6#eC>bu302u8puBqOQxbl4-9`fl+of)Q{I$w(?apJpf0>>}xz zm`j)oL0Sr1t^~Pi#6L@4!2Dx5==3`24VTipMg9vWwZ4aUi?@15-YqWpuX5R~?f^sh zircw@kLB+Fg3%`Khj<9_Am$O~UXYf;mM1};8gWB?0rQm{bo!k1g?s<=@5h+>Zt)d@ z(NB1dWF(co3HuCF-z~mFFaq8q8A+ud!oI}RcZ;78jDXKbMpEgQG<%z7-$*~ke8+qZ z(o)#+GsrI^{#p70<{!&Jr+-NQrqmBieYZHekAGLXuQnNjWK>G&*edmJl)%<^i{nWd z0TYmnq|%9DM`7x_#mNXpz!W4SsdQ@JNV9Q$Bh99hPKudGGIP%<3R5g)Ln{)*A88(ibrQSPnW}PuiVQYcTcQ;zk6cCOt?-Qt76! z>o7Ilf?x#nA{j}gePK6X>bu2$1S4P@l95!pJrmbAT5P0LqUd(_-E-0 zn13t>o$e;xlTte|_1)q=1fwSVk&L9$1G(W~Za74`E9Nj}Z;+P4mZL$A8S#330aK}e z>7dgSq$gAA2&TSUJdI$~TDQvkEoeT z9;Uuqe2QSy z{DffCTD2d2JT9KDsl z*IR3oF-S(Gl#bn6Z{R=AzIEh=@ua_V-2}|2AT5P0lfq9n;`RCh=29GVI+b)<-N`=~ zCSvNl#Tf`jO=cn)Nu{&0advK)Lpmj9E@pa=mco|#K^7SCdVK+NDGoYaM7lVo=3(l) z#ia;FO_m`UNu|rPaYb%eNxCp*6=q40mco{fAe~0MUSGgmii1wONY|#+YD|5%xE{f% zNjH*_RJtJ>H|B;O(ls%gFzbS}6t-*$(rd))^##nOIOudMX@5#>#?*I<+YyYK3?Lav zrGweHBRA|M?TZ=0Yzxv-*s?3gZX;f=FJLakL8p63_odV@roLM|fMC?*Ad-<(dMFzY z=Y}Jsdt#1a_6KPxY&jm}gb}aT7ciINpwm;Nr&H<}roLM|i(u5`9Fmb#dOjO3ukrA)g7ciINpwlO$PgCjvroLNzj$qW}1(K0e`Z60|<%ZX!k7M3oo&{+s zY@p^p$b14owT|&Avr50f7yT#=QMom^A8A+upvvE~!SWUV(rUSDqNK0YMnjl?9 zyk1|xT#AEE*O9JIsZPv)w0;AEk=%%6lJ;cdrrfX@U~SA6Om~o$!j`@uTa9?VzJR$D z2c2#s-JVjtnEGyU5W%R)4kRO~bZ0gW<%VI>{+L~ufgmk~Eqj9OHRAR90_IX2bh@AP zKuYb#)OU-A5R94}MlzC0k7VP~+;EI^U(9jL!5}S#EhmGVGUE060_IX2bb5yLY)YNL z)OU;L5saE#Kr)g_FJ|MV+;Exnbj%gZxgaftE!TovH{$jB0_IX2bb6EYR!UvP)OU+_ z5R97KMKY2~?`7lt-0*<(M$ALZ?I10MEsujdG2-?50_IX2boz|+c}hLP)OU+75saF= zLNby{UuWZ+-0+t4Y0Nv!iy$q9Egyn>G~)I80_IX2bo!a}OG>@R)OU;D5R969M>3L1 ze`Mp&-0+L^Q_OG7*B~v0Eq{ZI+Ex*-*B3CC;-J$pAY->_Cx6lZfYf)3<4GAcnSf*@ zl}_ANZ}_K7+BR~-WYWgRC>+_4)$lQXF*JO}Zhax-j+KVh@5*lTAoQQt9Sw+>#r5 zN!Q2pVKxS7DQxKvvdxIs>kF7manR`i>0nB2#ng9;I}wbU3?UgwrNh~{D>v*W-5#?C zvm;1LVavWC`;B{}%rwk|AT5P0GlI-C;`RCh z=29GVI-7J(N=?VqcZ>57jGD|xGLlLcWaGlzu!wY4%wo*kAT5P0OM@&k;`RCh=29GV zx`K3NN-e?EcZ;hLjGA;H8A+v`*|;V*bdfHPS&LZ}q@}QBeUNS=Uav1;F2zBo8%cXo zY8|G&TilFb)MN{ikyP57jeWUcE9r)qe$1vIErl)HgA5q)dVK+NDGoZ_LAo=gwqfeK z#bE@aCcBV~q|)8lxF=@e2KZ+} z%xKKdAT5P0V+Teyjx*x*`U2)s9CSJXWa5B!@)vy!roLO8j9}Dc3X+jjI(4Al@K2eR zCDTdA$IQS?3er;8GAqbzBVMmBU@pZ$r*lc?rPNGJeYdy(!KleXBqOPGQ8q5l4NFMp z#4N?k57JWDvOLHNBVMmBU@pZ$r>jU;r_?e`eYe<&VANy{l95!}m5pn2!#dKHG3zlM zL0Sr1HU!yd#Ow71%%wQ!bQ9_3l%)}KHyk|&W&(o@-ZIyamFI1+Ofb38~(Vaxd-7mRqlzJR$D z2c2Fby_{0#F!kNyRRp6Z*N}{)((BoHBRAY6y%=)~b0tViVauH$ca3^zJR$D2c7;T{gqN*G4D#jNJdiWlCbkI_1)q!1S4QMl95!pBJ4s;eYdy@!3bE5WF(b#vo)kE zW4bV%L0Sr1)&*H_#6L@4!1QDP(LtvhNH?a`T1ohIq38f>E)C-rMJUg!PIw)cM*($dq_r7>HRdjk!BA`@5DU9JP6WK*zzREQzQOa`U2)3 z%R#5lNnf~>-YxQfWLxXIc(?d!aOB7TIQF!kNys2%*R z-cfXZJ5ilOfNGhGMW2D*NG@C>^cE?D~$(V^jS_)gH2AO8W zKTBW0{9`%jbOy-Gl$wI6?-pkx7&V!LWF(c&4LcoE-!0BZFaj1J8A+uJ!_LCgcZ-V= zjDRIbMpEh0G@F-Z%Sji-tiUV_(o)#6D#&Uh{#p70<{!&Jr=6s0QfeipzFS<2VANzC zl95!pK5Pf3zFXXYU<7PLGLlMr!ggWmztT4&7y(<5jHJ@uH0w^Yt)!b``Z0Y$S_)gX z2N^KppQSHg{;?c%x`T9QN^Qf`cZf)?gR~U3ybtohh}Y{2m`icc=_k_9DfJFh-z|PcFlzD*$w(^wo{c|p z!%xzWF~2Zhg0vL2{0Z{ch}Y{2m`icc>FAyOz22#v{Js7SQr|6(BW2WNJd%-AI$>wM zf&V=F&XF4?k&cR)j2RoGrLbjckZDG|USGgmii1vPkj_l0DVX|haW;ZclQ~F6Qt8}m zoR=HslTMFWfSDDfrLbjDki|y4USGgmii1vkF7manR{{((aU6gQ@QpHzF7{=|M7*N;hTW=G?G_bX`m@ zWT!IavAsqYpKBN#O~f@CC>9?iyMx#2kJ{+JV(LqS>!TTTTz zZN%&K1;W-x#2hI=a@g3Z$VlLTSg6yY#cpQ5wF)5Fqh(>)3G4q zhP0Ev=zl@#yTu8ljG9bDGLlLs4b>a?&$DOA6w)yH4u*Xs+IOL5TY zEYjI2H4RhWEzU(SYBCSWNGhG5jSF(aLeiNri!gJ7v=p{139{6P*Xs+IOL5TYa?%wk zwHQ<1Ev`Z^YO)&1NGk2f#?IWZhICm>7iMLUmco{GLDn1bdVK+NDGoZ_K)Nxd)?(_r z#Z3rCO*SJLNu^t|u{SsLk#@&y#q4SN6vV)kNo25Bj5*&pP95wF)5Fqh(>(?g_(Q)(ZkzFRzsVASLol95z; zJR48shLfZRV@_d?1ZgR3ITPfp5wF)5Fqh(>)AOVkQtC9OzFWM6VASL?l95z;B^$5i zhHIqfVy(>tVhQ|bn$zFWMHVASLRl95#UFdHA`hR3A0 zW1e8{1!*a4c^2fk5wF)5Fqh(>)0d>LQtBzDzFT~QVASL-l95#UE*szHh7Y7KVm@MC z2Wcs6`5fen5wF)5Fqh(>({H5TQ|c3@zFYi>VASLnl95#UI~)JxhQFj=V@3`0_diHW zVau4|k&R=Gc)h-WxfBPTjt7}AteyNtAC0N+7AGMXHJOZLB$ZAXt~c_9MT(urgwm9ELguH3MebVbZM%<3R5g)QAd zHW=}GeF1YR4m#~2-IP-6G4bu3`2u4j#AQ?%eC$sTXZa7VPIOYuISdf;&mUBVQ8}WL50dpx1I=x7G zDW%S0>bu1&2u4k=A{j}g*Rt_?Zn!~uA?7CLa*&q7mfJz@81Z_20dpx1I=x4FKc#MA z>bu2<2u4jFAsI=fkF)VfZg@(1H|81UL6DZhmKQ-@8u5C40dpx1I(<$0CZ(QZ>bu2v z2u4lbBN<7hAF}adZums{D&{lhZIG72majp+8S#330dpx1I{iWVGo`*@>bu3?2u4l* zAQ?%ef3tDau8|u?@8X{cxo!;RSCE#%mT}?78}WL50dpx1I-N*5X_t2L7kw2I(>4_4)$lQXF);nRH7^ZNSubi+u=2O|~K#Nu~YS zxGgtqC*2e?fawj=QrNO1$W9|(uPG700gsJZqPa+sKIfY~-m7dPVGr8d`>Cu>T zm=i%-3R^A&xoE`e^##nOIOy~;>6Mf^kE!n#uOS#UxsGHcmEOq4o4Mf@>7|(4n5#ir z3R~_5xo5=d^##nOIOy~N>BE$|gQ@QpA0rqwd4gmll|IeJXSv}y>HU}&m`6cc3R_+U zd2Ph&^##nOIOy~(>ARGAiK*`vKOh)2`G{mBm43>`&$;0X>6@6ZnD;?i3R}Jh`C-KC z^##nOIOy~j>F<>KhN>jycEWpoPHxBbBrCJJG zCWN18#Ow71%%wQ!bTa9bx|6@?<1zK!;xq)KQqz%)q|zBFH8V?Qkxq)4jhPyxrLbjg zkafmsx!rLbjHkkv-K zUSGgmii1u&N!O&*N=$vXxE8^v$vPw>sdRldcISo-q#ZFEF*=)q?^##nO zIOw#Ov@fN4F!kMHKY~${ZAeB^>Go_K$PI&}TVi%#wgzb_Y#9nNY{cvJ1~Unx#1A$u9(A^y+K+ETaE@fX2k3D1+@)B=5Z!CCYp6z34eQ{OG#MNk5Uk(8v; zd)aI#o82e96Elh#3DTsnZb|7T57^@mJf#yTw)iUOs!PKfn-f@jERzEPww8j5aa3ePYPe zcK&R~Ov6lSpFo-vw#*1J(}*|J37A`Q(dlf`Iqmw_O8-3@Q{OGlLs0rxa6XcfRJtJS zEKGg3xClWBSd643l`aW87gOIYE<;cPmLn-ir7N=8!fdvRbZN|L%*r553R~6$S!=|f zr4ulJEEk=wBVC`RS}^t9;zk6eO*SDZNu`^^wqokL#jOZRz&0c$sdRhT4Ve0FaVLTj zunS2^D&3vUwq&!tq&s5vVfF-RQrL1J$U!6iES-S)W4Y+`FzJyjwI5U8EgnNq+T=Kr zl2m#k>>*5jw|ELc2{?_UB$b{CdlXaOEw&*j0qsaiQfWsvJDJV8NYBQc!*m8|QrOZH zq}PZ)ODACdSS~v4CmqOA-I)4r@dARso&2Euii@A-t8Kg;J%iSQuM*LYi0rSUl(dh{3{Va6{Q{OF)At-I~ z07*$IeV7i9(qWwRUd&_6Xpkm_El-0yGve_&0n<|dri)HrkiN`PPcZe};%fw@P2M0W zNu_Ty@m)H+Cw(6C0rM(IlfsryK|UMtc%6WGDK0wwO8PBJeZbu2d2uhnQM^chX zS7hSKbXY~YC}uTgX^uZqCFl z>9CcwHD()TLy#tgEjxnjG~)3(0rOH^bh?{#PnOz_sqYr|At-IKA4y3nJ&=h9)8P>5 zu9(A^y+N83wj2#|%!tS91k6iu(dh}&lUeErroLM|ji9v286+jC^lT=!r9(UE@t6+G zsUS@XTe^arGve_&0rOH^blOAOo25E2_1$7Wg3=}fNJ>)a`Aoc!4i`zgV=iI(f;1^? zxg6w*5s%jin3v+B(`%&Hv(zA_zFQnZP}<}sl9E(37l}S?V*UzFYi-ptQ+vBqgczPbU6Nhe@6MXF|+m%+DZA3R|XjPE4F;#N%}W=B2pk zbOy-GPR-;m`V>rkw>TR?X_GlfN>b_E&f09*m6th1_lfstcK~5O)c%6WGDK0uaMS40*9mCXj zi)Rs(Hfcjrl1ke%u_GNiNl(UfVa^0;QrOZRq{oQI>jcb8anWfXX@8bFhxt#9KaZd! zFCeL;7c=ovIt&8z#$3h>1Zh&(ay7^`BOb34FfYYLr#DE4veXq!eYbcEL1~lQNJ>)a zolLx&4#T9^WA0&Y25C~*azDtZ5s%jin3v+B(+8vvv(yNtzFQneP}<}%l9E*VBom*e z!!y#cnCF;BL7Eh{ybSWnh{x*$%u8|6=^N6wS?UF*zFT~cptQ*cBqgczVVC1!+>)@-4`BBOb34FfYYLr$0%5WvQ>2`fl+Lg3=~`k(8v;NnN!Azi027=rE;= z|4c}`shHncs!3tX^zbu`c)U))yc8Fm&LW-NrJ4LipN6UL7Uv=;Z88r@Nh+P6r50q! zLeiNri!gJ7G%0LZ5@e|nkJky9m*S$+<)kaJ)M8A1x3~&HX_M7RN>XV{Cay_`wWP~p zS}`kwG%0LZA7q0OkJky9m*S$+O{AN%)H+Okx40ESX_IY8N>b_eOx%$UJ4rXj?80mb z(xk9uPmsMvJYFYYUW$uO_mdvTQoAwr-QpnxrA-baDM_VAGVy3S93$Nqa~yLpNRz^r zlR-`y@pzqpc_}VBJwtjnOP#>fcZ=-^N}F^bDM_WBnb?&M=SWY-bYt3rG%0N94bo@C z<8=b&rMT#Hfb@Kp>cP}^ix&};Ho1hPB$WLfRj56>}j-lfstkL2elFc%6WG zDK0v_NqQ?wUBlFOi+2!|Ho1$WB$W|lcz{ZQt7iye4Y+3NFT<$#5@ktq_E|6kT*s=UMFB)ii=L)k-pDT zuQ2u9;ztCfO+FzhNu{4N@k=^(k2U#l%&#yS!z*+EGC^Dvjj6QNRz^rWkHr3@pzqpc_}VBT}iqs zOD)CJcZ)3uN}H@fQj$v7W@2kPtRr0!vmUcLNRz^rjX^dU@pzqpc_}VB-9oxGOKrf^ zcZ=H*ls4Icq$HK@%*0*ku$y#q%pT0PAWaHe_66B*#N%}W=B2pk^dRY>EVUO?-z^?N zP}<}ul9E(BufEOiP~-z|0`C~eY( zq$HJ|%f#+<=pj8D(~Ic{(xkAZKgfU)kJky9m*S$+3#1pbR3E0kTO34C+T=2ll2m#n z6R)PjHPZ7j*D;rZG%0Ku3Ubqk$Lj>lOL5WZZPGhg>ISC1TO3AE+TcKD}E@1E!| zgY-|@&BRO&(xk9ucKA6)JYFYYUW$uO=aJ6OQnN7i-Qq$7rA-zgDM_V^GjT~eEG3;A zvkbE!NRz^r6+u=S@pzqpc_}VBT}|4OrIusryT!E#N}IGIDM_X4GI4!6Y#?0~vk|i< zNRz^r%|W&p@pzqpc_}VB-A1}SOKrl`cZ)j_ls4Igq$HK@&cr?Gu$Ode%s$MHAWaHe z4g@)9#N%}W=B2pk^f2j>EVUm~-z^?PP}<};l9E(q$HL0WMXeR^pUp5^kce$G%0L3ALN1&kJky9 zm*S$+OQeHYY5-H;EnY!T+T<#dl2m#v6R)Sk4bqD-Lzv4!niRI&3Ub?s$Lj>lOL5WZ zUDDw!brVzHEsh{4ZE_z;Nh%%9#IbaEKzb+UA?99?CWS5IK^`0Nc%6WGDK0vFO8P8I zJ;MB##=k&Nk}r`|(pQ=IIvw5sJc)UWc^;%mVaxjGaEBCNRz^rxk2U`@pzqpc_}VBT|l}pOU=R5 zcZ-V=lr~v{q$HIt&BSHtu$**$%nHn+AWaHeRs~sY#N%}W=B2pkbPeg+EVU9--z}~~ zP}*cYl9E)qArm*I!zR*}n9Z2hAWaHewg%Z|#N%}W=B2pkbO-6qEVTtw-!1M&P}*b< zl9E)qHxu`z!+z53F$XZaf;1^?ITYlu5s%jin3v+B)1#!vveZFLeYbc5L1~kdNJ>)a zsjx>d_1)qb1SQ}sl9E)~7WO!%zFX`-Py#xUl%&$Ge97r-)=k0|%VMW^RUFJ!4+OntX_2|;O-K_n%q^m5n%OntX_6+sEOhNL8wUJrW_Q{OEP zAt(Vik(8v;TiNVNHoHT5BjzsVc9158E%$^rV_9k#Q{OEF=;# zF!kNyUj!v!QZIiLd#hABxp!i-AK7dwz@M0Dm?=S;6t>Lho%oWOM*LYi0rSUl(dlfE zIi9)d??0tyXC2>yUk5_cQfPA6z4dgsubiRmuaqs{7zy6>9^IyaN zyG+ldCB#d6C*DGCJ@|i@o&O)Z{0A>fYLEZ;KX^7N`Tz3&9SOS9ok_|n1A14vIt{ka zVB184HUHf}k_KzJ)#?T$W!--_SnsrjbVGV=rq||)UYm?+8A*C=2HoOYBxS1sEwjz( zM$+x+wTWIECVK5Os$P=x+6B7Xw@At!1M0Qc=?>C;>9vtwtrNWt7*#JxdL0Bk{^uopySR^h|oKr`O7fUTsFzOOjsg zpdG$NQaTN&SC`YXr03FW9le%K^y)FHUXt|c1?}@KlG1NLy#}0ilb%nnR(dU-=ylPk zdP&mj66m0Bk(A2@)a#1V3#3=mYc0JNO!T^LRJ|nWbpv$Bw@AuO1L}3l={3^Z>9vMl zb0>P;HL6~c^cn`e=UXIY#DIF;cY23(G`(8rHEW{R1EcCCNw0^Xk9>=yj2lp|$4DK8DE*DI$_NnfYeDtb+s==Ij9dP&mj9q4=CA}JpX zsMklQZ%99-*GhW*{onrM@WrTlNz&^p=r`XYDc=pK*AJ(kNq?r-3VQvT==IyEdP&mj z59nXtA}N#l^w;k{)N68;|N2EbrElVo)^d7%pXfEssCr4#YkD7ld3}qd%ru~0vz$&P zot<9G==Eiy*Ic9OB}uP&p!0o;q%1I?UJIShAzhSSOX>A-qSq3m>Lp39rJ&1vi=-?! zpk6DSE+$=>UQ6ipZlc#}qv|C|uNKfXzC}{j8c?rRr>jWUrPpG5y`Jc`!Kivk(rY8= zCf_0{n+>Sf7N_e;x2D%3dcBzFwcV(CNz!Wv=uY1vDZ31)*KViVNcW`ILV7)&=(W$N zdP&l2Kj;D9A}I$AsMjH2(&g&9_KOy8-p;aC(}wGri`~YjmR5Iiu<&Nw03u9^WDr7%l!WguM)Hm_pF5t?I|8Wm(_*RHJw74B}7jrX6lfssJK}L-Dzr5%K%q_X-bd+=~ z%M4@cuOuEKD1FT%BqgbIJnVf;{guQM1SQ}pl9E*VEbIeJ{guQE1SQ}ll9E*VDw{pd zW^YKJ$GpY74$`Es<$aJ3M*LYi0rSUl(dj4B&spjnrv6IeD}vG{-;k7~((hqEV(PCX zej+FVzmSxq(%)gfVCt_V{vs#=llu7+++U^A$^8?X{m5oh0sh2H!%PX%q_Aa1|HPNf zG~&aQf`At)_1A4y3nT@ZE_rv6G|5rPu17)ePgT@rRK zrv96L8G;h997#zkU6C(Yn9Wv^E{$1@SsA2BVau8zYmNA`bOPp&<)YJdr0cU(3#R@` zVk3gmCYz9yq|(h{TQN1=il78+LsF7Tw};(;slSrgiJ%1RLQ;}ScW1LL*=#TAj+lLz zJwcijwj2m@(1<@vCt&_qE;>C-dL&Ej$JAd*979mrjX?o{hKa2?I7*UQfDyrR}$wCls4%`Qj$u0GO;%u`bgVj`Y~NWniRI2 z4|2hX$Lj>lOL5WZCDOqxHGrwVlDLAPw8>Q@C8_jUCSFg68>AOwhA@|dG%0Mk738)N zkJky9m*S$+yQITe>L#ZCN@4^-X_Na%N>b@)CXS`U1JXM&4>9+GG%0Ku5AxWE$Lj>l zOL5WZQ_^Qy>Jg^?O5z2A(k3sFl%&#EnfN*#-jF_td5d`-q)B1R`yd~Tc)U))yc8Fm zej@#xrQTucuOz-AC~fi$Nl7aGo{2xw;V0?Gm|vJLL7Eh{{0Z{ch{x*$%u8|6>Er?a zIuB^3{`X~&`YVZPq?9(9j-(`&&KRg2_}`ZYCOXU_ofI=0Gc`z)!j`!~<{9yLoq%~M zE;?O6x-d)4!PH+#EJje;WC@azRJt@1m!-pU()lqfFpGjTDQsC4WVI2G*9n-H;-b?v zq-(R(N=*Hg#5x3}P1YkRNu?Vyabr4cB5jG;jA;$hq_AackZndhUMFB)ii=KnknYS< zTQK!k61x$UHra!uB$e*X#C_?opLBc70nDx-O$u8M1vzZQ<8=b&rMT$yDCw~*br4g3 zC2;~lX_J#kN>b^mOgxYyDM_V2Gx1kC{3iVz z^9S=SNRz^rN#`dfPCj1|kJky9m*S$+sUXwNYbJlu|AN$CNz5Rnw8=~)C8>1Q`PzYh z4t9pjA)OL47c)IblfstyK^7SCc%6WGDK0u)M7lUj&BN4RNi0QB+GH7$l2p1p6IZ0e zO45Zft1wG~G%0Lp39`nB$Lj>lOL5U@E9tr{wHouE8ovQSNp3_^NjGKU=5*Ksur_8Z zW_^$*g)Q5I>@ec-Isx-iTy(mNba$58hN-`j*o&aF$vz|{sdRrP9!Q6Sq&s5{VfF-R zQrL1N$WbF6uM;pY#YLybNl#>{!A9GTnBE{w3R?z)TsGqI zIsx-iTy%Ps^jem>gsH!hxPhRw$q7U+(kn4{FxP`LDQp=Ia?gmz>jcb8 zanb30($Oq+7gK*F@c=<-lZQx3Qt6{i98ZVGq$4p;Fk?ZQ6t+AI^4y5W>jcb8anb2Z z(pOpPDW?8P;thh*CU23Hq|$ep_&yyzkiLldh&Sc%6WGDK0vl4l?6{ zX7U$(GN%4YVitnZCbN;0q|!MTY6t!~*cmd9bXv@O%*-H73R@NiS!BfHbpqz4xaf2V z>C!B<08@V@u^d5ZlNCrxQt8S}T$K*1Nf*boV3q}GQrNOKNUIT#*9n-H;-b^_q#Lr- z8ch9_#3lr#O*SJbNu^sdaceqkBV8A>9kVe=lfssrL3SDOc%6WGDK0wQL%KIh?ZDJu zN$f{Z+T;L|l2m#y6Az`sVba|(M=<+>G%0L37UZ}QkJky9m*S$+lccAz)KN_RmBbkY zrA^KvDM_Vmnb@8V9i%5>Ix(k%G%0L37o^*W$Lj>lOL5U@FKJ(v>cZ4tNemz;ZE_w- zNh-aNi5Ju15@}D&Af`V^lfsrOL9QC{c%6WGDK0v_PI@CtUB=X3N!&zG+T<3Jl2m#- z6Yr$MUD9hY!b^EO#GM*pGaTD ze8#*D(xkBEYmje7JYFYYUW$uOe~|vnQeQCjR}#Mwls5T;q$HL8&BRF;Cpt{N$bTlJ z-4x8PAWaHeriGtw#N%}W=B2pkbSCMni<-$_^r@KoD~UM>N}J3@Qj$vNU927W=U`{Z z0@4{V3o)~UG%0LZ9At?RkJky9m*S$+Wu(iq)FMp%mBdN}rA<~LDM_WPGqEKd){riZ zS&LZ_q)B1Rx*+R~c)U))yc8FmZY155rCKrdR}xzgls4Ilq$HJY%f#*Ju!D3%%udYa zAWaHeb_dyG#N%}W=B2pkbRX&dEVT<$e)a;Y>V|4o6A%#vH>O2-2jm zgTUrAg*P}<}ol9E(DW zveZjV{guQA1f@+rA}L9wpEB`tI(#906Y~}GK1h?omhVA+81ZElS@@9oqVZw;GctiX`;hafS+kM4f7{UH7RVF5q_o-kJky9m*S$+ z*`#yoO#Y%z$JAd*%tKIGYCe*ZRJtHbEzFQbq_bicW99~FQrNOI$TA}yuM;pY#YLwp zNLOa5C7AjviPZ>7o3tP)Nu_Htacw%Zk}i)~hglV*Nny)|ARCQ%yiUNp6c?RtCf$;y z)?@0gB(@lOL5WZ0n&q6Y7eIV zO5!kr(k4fcl%&$5nRqN6j+5?>Ie|G8q)B1RsUW9~c)U))yc8Fmo+WL|QYSJ0rSTmI zO0pA4CGE<@bLr3xa3-b)(;lQrVM||-ej^^Q6EH8uMW^RUFJ!4+O#PL_B?P5S29cDc z(#x56B^|Dk4#Zr;Tny5ru;oUOAtN5I6EH8uMW?q&Z)d6NnEES;y9i2~3?nH?rS~#% zBpvRP-i#T=+zHa8u;oFJhekYJCtzNRi%!Q$A7`mCO#PL_Qv{_=o*^korOz|*MLN7B zeH8Nw^CU=b0J@pzqpc_}VBol82e&g3upOicZi!~z7RO%@_4Nu`Uz&cW1Q zNi0E70+u2vNu|re&d1bWNvuFn0#+g^Nu{guC5y9J3+eKhHJH^wniRIQ23cpspQRHp zee6HF=yU_=#w@iKQ-39~89`~2El5gI>DI98G4)px+Yyw29Y{)2>CUj5F!fgwyAhOt zJxEGY>E3L%Et~Bp-4$~HvoA=K!j?lp4jb`j=>*Il%SES0NsnczgP8g&i4zD)o18>a zl1fj7J%Xvfk~o8)1e`@ul1kgc9>>&QNpv760i8%nQfXH`FGfLwY0TF6MTSCWS5cf{YmPXXymYAIn9jqoiYAN)H=(T&eMT z*!Xa8;&E`xzn5WeH4Y5n7LU?`!}9olz-SXsLp+Cg7V`r0BuJCOmRCVu8}WuZ0dq?( zI(5y^T%@0=`@h(mo<|=tdlVH-Qr9H zrA=lbDM_WX!%oH2cZ+iolz@3iN>b_kuro0A-Qq$7C14Sfl2p3*^2BCyviwrg1u@Go zOM)~hY*`Uxr4fIYPQd)JTy(mcv?WU|$JBR=YY~(-X+=_!O4o&5g{kirHy|hh8@nic(g~P9mWxjJk?zk@ zyD;_L;z0zZO%5R`Nu`Iw?#0yfD1s7j3`t2UJs$P|roLM|iJ%0WLQ;}SPiM0u+3YOo ziI_IbnIKIHTRMVt8u4f81k4}HMW^RTyR%d~roLP3MNrzL4@pTX?N5h+bU07i6>|a8 z6QoID%cUTLMm%08U|Q$qghWsdOk4Z>Ga7(#tWoG1r1L zDQvkLWY~zu>jcb8anb1r>HREq2UFiIjv***@&HLmDt(xVkJ4eB^j^$k%xI7%g)L8m zJTv0)Isx-iTy*+^^ktTMf~oHoUn3}O@&-vsDt()Y@6zEt>GPNmm{&oX6t;W{^4W;T z>jcb8anb2l(r;PnBc{Gv{DGjf$xkFDsq|MS{!WKKq+eqGV!j7yQrI&2%EZJeS1RK1 zIsx-iTy#1OWcn4&)Zc4NeYZFhL1~j&NJ>)a>?^gyKV?pa%q5)~GY>N(NRz^r1wj@X z@pzqpc_}VBT}-+pOU=jBcZ)a*-UIphj!BAF&&swL7Eh{bOkwQ#N%}W=B2pkw1>1eOLb!E zyTyJ4rA-Eql%&%0nRp=`E|PY~T*CAPX;Rp7Imi_w9X5L zw8>2*C8_jQCf-hmJET`*?qY5PX;Rp7FUW`ykJky9m*S$+QPQz2HH@k679S!gZSn|7 zNh%%B#K-CIg!F#QQ_O=PO$u9{2YF${<8=b&rMT$y73u3N^$b(rExtui+Tb^cO#GV; zldkfg2{Dr~KZ7(WY?*p>V&XI-9n{q|&XKxGf#F zldg~1f!P$KNny*bAiIrtyiUNp6c?TDCEb^$c4Gch;}0Mx$%9BL>7h(KoDN3-_QV{; z><`kUu;qA=6Gl8bu4B2uhn=KvI%QFJ|JUbQmP? zMm%08U|x!gPH&J7WvMHe`fl+Sg3>0pk(8v;JDGSl9fnD-$K1o*4AP{q<$jP+BOb34 zFfYYLrw>RUW~mWOeYZG{ptQ+jBqgczNhUr`hi9Z?G0!oNf;1^?c^TxD5s%jin3v+B z(>J7Vv(yVreYf}?L1~i@NJ>)a$4vZ`4xdS1$9%!O3(};pA}L9wldjbc{By9cO>~%YjsHwYyQ!GpS*l54%k=OwjCj0Gz`PU} zoz5bieN8j@i#`og-!0BXP}*c3l9E(9KT9phkcFf(V-{iN1Zh&(vLwh-BOb34FfYYL zr^`uKWU0lN`fhO*g3>0dk(8v;mP}le4r@u5#k68p25C~*vOdTLBOb34FfYYLr<+JO zXQ_3V`fhP6g3>12kd&m-?U}eE9d?p#jM;_R5~N9C%bp;6jd;9Hz`PU}o$e<+kfnBG z>bu252uhnAMpBYWk7VM}bT~%3FXlMrV2~z-EhmGVGUD+%0rOH^bb5yLY?eBKsqYrs z5tKIRKvI%QJ2SB>9nO)Sj_Jm<1!+>)(i^1Dh{x*$%u8|6=>X~ZEY*Xl?-nm2C~a~H zNl7Xl%*4y-aD}u#<|^hwkS2vK*Mr% zUXVVFd5L)(q)B1R>mYB8c)U))yc8Fmz9W5~rCwp`yTy+PN}GH_Qj$tPXX2N1_)7XV z<{RcikS2vKKZ5);;_*5G^HN-N`kVAmmimsV?-nOr=WqA*y2)fDrKOZkxn4W)&%wSv z(P0|tue6(v`J1Jh6t>I^Kg)>6>jcb8anb1<(z$gef6-@P>bu4H2uhnQKvI%Q7iOtN z8M2skcFYpYydX^qTb2b`Zp7nt0_LT-=yWCNsw}k>Q{OGNASi9J21!XOU7Lxm>9CG; zMa+84>L5)DTQ&ySWW?ij0_LT-=yVI|)-1IFQ{OFaM^M^i2a=Lhx-%1ZrNeI0%`tm0 z+k!MHY}prNzY&ku37D7SqSJ$9I^ao(?BS55%0r91hZ? zu;p}+Ge$gKCtzNRi%#1}+q2XuOntZ5iJ-Je7m|`xdM*>Y)1im-Y)mhvBS@3Nmi{0E zMm%08U|x!gPA`yN%u;=r`fhO$L1~lANJ>)al}x;v4%bM}$6Uu;3eu#oWhlr^BOb34 zFfYYLr?*M(WT_jN`fhO;L1~kFNJ>)aNG9G-hf&g7F=Lp!L7Eh{JPh*4h{x*$%u8|6 z>0{C-S?U3%zFT~TptQ+zBqgczMJB#XhgYQIF|RRCgET2@c^l-N5s%jin3v+B(+{K{ zv(y_*eYf}-L1~jONJ>)a*G&AD4&O=N$Na#23eu#olYu8P@+Srep5Vaw(qTa0+TPQbhr7oBb+-JYd3 zVd}fZod`;s>_SqKN_S`Co^;qtx;17WW=D`Fg)Iky95mwbIsx-iTy%Pv^hlQ4kE!n# zk0B^+avVuXDm{^jC)42+>7kg@n4>|O6t(kAzjl%&$pOdLyx z2c&mm9%AkVX;RoS9^|nRkJky9m*S$+r=-ua)FVuNxA+1oN>b^oOnjXVZ%CiS zyu~~Z(xkBEeUJ}EJYFYYUW$uOKaqaUQtvSJ-QrgSrA@veDM_W@Gx0|{{3QJt^9%DO zNRz^rKSBN)@pzqpc_}VBojk6CGxe zPKue0nHr=?Vawbg^Ne`BPQbhr7o9F3U6`fjVCuWY#Ry89EJ0F|N|$EhvUFHZIzMIw zW>JtPg)OUstTy8DIsx-iTy(mIbZwSeiK*`v*C8lvvK~oED%}va1ykQGZbDE3HX|uX zrCY+bV(PoaZ3s%hb|fXKbVt5qV>a7Gx;17uW@nHlg)Mu7>@(ue(g~P8_8(nzdVus` zmfC}1eOLb!EyTyJ4rA-Eql%&%0VY@N)-Qqb@)*gKf|Zt($v67Ud7Nh*C5_8z9bTYQY51Ux}fl1iUu zv$1UUoOC?q1?E|hCWS4pg1k23&(aB)KbDJ5-;%!bQhK+@KVVYh^$&OaFf{RQam~M% zm)`0VFoautObZUn=l=ntO?(aU9pYQe56qV!O$u9n1^I2n8|nniExG9QFX^P4`qxVT zJsVTsEl#<~-|CwFYbuh`*C?G9_77}*w>X285-<}b_S zuuC!Z-QpSqC15R*l2qCnb_J%sTU?Kz1Z+T3l1evbvzBbOnRH#u7R;s~O$uAK1=()I zpQRHpe=HZB?j+rnrM6<~yTv^SN}KFOQj$vdh24Rv?-marC;;2l%&#Q*=&C{J3)Fl<|O8LkS2vKr-Pg^;?L3vm_L?_PTNS^v(za}eYe<&ptMOB zl9E(!MO?wcOfLDQp=Da^Hx@ z>jX?o{hKa29V2~^rS4(syTwNcN}G%$DM_V|Gx13}JS82Cd4_oyq)B1Riy$wJc)U)) zyc8Fmz9xN>rJiHzyTx}1N}Ie#Qj$tPWa7tk_(b|D<}>DPkS2vKUxR!z;_*5G^HN-N z`h)ammimIJ?-qX}C~fiwNl7aGn~9TdO>~%ii~r7^c2h9Ff;1^?nHGM!5s%jin3v+B z)0w2RZfPd}IWQGd-!0BTP}*cJl9E(9?^f-=@7XhC0qKmGg_zkvniRGy4zk3E$Lj>l zOL5WZGScN)Y7wTsTU?2tw8<(YC8>0ECbp!*8q%dPYcVT=G%0LZ7i7H=kJky9m*S$+ zjij5hR4b;wTik-6w8>T^C8=~rM9i$s#c49UMX;Rp-JIEd*91QwS26Y7;%x+_P3|Bm zNu_r)aX20Bk=}?I!Q2Ycq_AZ)$e0n2*9n-H;-b@sq>r-HeN26~_!vQHlP5?@Qt8u7 ze3lN+Ngu?#z>EiJQrPk;$ZI1WuM;pY#YLxYN#A9umzer)@dJX=CLfWMq|#5B_&FWE zkiLoeig_QTNny+PAU}+FyiUNp6c?TTBK@7EzG3RS#lHwjn@qaRf6KmIrP9f_YX^SM zetV+BRDhppHx2VAOEoEMnGt@b5s%jin3v+B)7hkR>P-HkPsh}Ei}MhamYR>GB$Y16 zQVTO=5$UX$#hAH4niRGy4YJIL$Lj>lOL5WZ3euHXY6+&kTU?Exv`Gt+l2p1T6W69g zE9vr>b(mE_niRHd2(rlOL5WZX3{NLYCWdDTik}Aw8?fPC8=~rChkm!U8I|0 zc4M{%X;Rp-H^@FC9Ie|G8 zq)B1RsUW9~c)U))yc8Fmo+WL|QYSJ0sqq~MO0pA4CGE<@bLr3xa3-b)(;lQrVM||- zej^^Q6EH8uMW^RUFJ!4+OntX_2|;O-K_n%q^l~O%Nr$VX12NYy7lSk@Y`GC+$cV@5 z1k6iu(djMH+ga*5roLOei=ed0Fp`o~dM^`4(&0Yo&6rWloghsLTOI^?XvE`n0_LT- z=yaU)ah4jx)OU+d5tKH0hNL8wKF`D#>F|>DQOqmMlORnBTiyhDYsBMq0_LT-==445 zhb;9PQ{OFqLQvY|Gm?^2`Xv*;ro%VVcQM~FAA>Y0Z21}Fml2QG37D7SqSHU5f3wsN zOntXF`3`@(@6=7EASo@Sbn2bjf#0*=ndmT`^mp3Lz)T9#q_AaH_}NB0UMFB)ii=L? zlFq9$`HMaiQ{OEvKv3FbA(E0*x+oJDr^6D`IWbEy^Mf=gY*`*;g%OX}37D7SqSIBR ztFzQHOntYw20>|)wMa@*X=^5~ONaHOD`PfbT7onwY}piKvk{Ni37D7SqSLLU+p^R~ zOntYw13_t%ok&Vj>8?!Noeq0Qx5VtlY!A|;uw{Rc14cYvCtzNRi%t)b9?nwxF!kNy zQ3Rz;jv*;YrN=YzL^_-#Js5Keb0kQU!j>~Z&KmJ}oq%~ME;?-|?Z{H6G4bu3u2uhn=K~j=R zuV&)4bhu7>A?5~VFi4ZamYYFt8S!|XfO#n{I=w@BH%kp+>bu2z2uhobASp?u_cL)c z9mYs+$2`Cc2We8+@+io-5s%jin3v+B()a%S?Qg4zEcc z$GpKj3(};pl zOL5WZAnD~SbskgSEnY=X+TniRI&4syqc$Lj>lOL5WZ zFzLN4bqiD9E#5~^+GG?-Nh%%7#0Tl{ko0cMBg{yUCWS4JgFG?f@j3zXQe1TUjP!Yy z8pqUki!TwBHhG1lB$d9-#5d{imh@@NJIsq9O$u8+1o>#h<8=b&rMT$yGwGKs^&V5- zEq+5#+T=Tul2rO56Mv?|FVasjzcF8fG%0NP8)VXOMLb?7U|x!gPN#rO9o9_#qW=M@ z?-r+%Qrct&l9E(9bGUZ+r_36j=rEgfa?Bjev>;6iTjm9sZ^Ywu0_LT-=yW0JqAWER zQ{OEvK~UOcDUy;@x-1iyr^5=;1u-izi-R;NY*`(o#fZo21k6iu(dk;!)-1IOQ{OGF zM^M^i1Co+dx-kw+{XY}poMyAhAq37D7SqSKwEyRy_)OntYw2SI6* zy+}$@>Ap<-eTu;p-&BSt)4CtzNRi%yS`9?w#TF!kNyNd%=$P9Z5t zrKdCTOgfw;JsQ)7IT55uVM|AlP9q+#6EH8uMW^RTyR%d~roLP3MNrzL4@pTX?a#!4 zbU07i6>|a86QoID%cUTLMm%08U|x!gPOp$&%~BUJ_1)ri1f@-GASp?uLz#Fp9d40c zj=7Dw7NkjG%iSQuMm%08U|x!gPDe=ZXQ?}w|I+v|1SRA$Lj>lOL5WZSJH1;>LaGUTl|5bw8>8-C8_jRCjL%`Kcrt`{$jodX;RoS`QF6D zDfcSk@j3zXQe1R84P^Q~&EzloBuss`I1@o>lUYbgQt9k_wFCd0k_?$kIyGh7tm`n599Q6t=7h zvet;l>jcb8anb2I()C%Y1ykQGZbVSpWD}B-RJu76x1_^X($<)5m<>Ui6t?ULveSsi z>jcb8anb2+(mh#fJEp!{+=rmF$$lgysq{eDU6}fA@eqO%a2QERDm@Z*FQ&d*JcghI z97j@;N>AiV4ra4cq(@^;V@?KXQrL1fNShIVmQKL*vH$3z(+<+kEOiD`-z}a)P}-y$ zNl7a03EPgT?-u(Ilz@IDC8=~EY!{}!TfBgv1YAT?l1eXSv)*iWne=?j70h6eCWS56 zf?PM^&(aB)KbDJ5he&T`sjHa!Zt*sP(k6G1l%&$TVQ*mSyTyA5O27z`l2m#>>@7@v zw>XBN1Ux`el1d+Dv*BzuPC6R%81pDdlfss#L7o}$XXymYAIn9jFGyczsVA8FZt*pO z(k5?^l%&$PVV`5_yT$hiO27vsC8_jd*jJePZt*jM67U5{Nh-%nUJ`d$VHZU}gkqQrI#t$b2K-P$yt+$wj9NNf&wVfBrQWQ{OEv zK~VaHrASIr>9Vj3F!kNy3Iru!C6baX`MI z)*wv^TQ&ySWW=AP6EJ@)7oBb)-I}E~VCuWY?FdSn>_AeIN_U3cjH&MycOxhPdytf* z(!F7~Vd}fZ{Rm3H0VE}<^k6pImCX*5?u$8sITWNxVau@~$Bp>2bOPp&<)YJ*q^Gjf zQA~Zecm_dfle0)lQfXV*6PWsLu>(N~=tNSIO1r|I#?*hOcOxhPJxEGYX>T@b&u0Ck z=VAsheLH948 z3RB-Lene2(uiGQu9-k<0&jr3RAO~?GrQcVh5W`>_-#N%}W=B2pkbPnm< zI+Oo)J_A$VEzUb_COl(bub)+j|)?-!&X;Rp-F~}w(9ciA`i-QPCn_Naxl1i^+ z;?;DxMtVNxI_6T4CWS3SL2erHc%6WGDK0v_O?oFw-N4j$i^B*?o7_WEl1fK1@qRjt zlHQ6L!`uzhq_E{-kVi&5UMFB)ii=JklRn8(4>0xJ;xh!LO`anuNu@6`@nt%^A{~!; zjd>cRNny*|An%NLyiUNp6c?R-ApMx7-eBsx#m@*zn|wi1l1jg3;;=C&BD}oiwhByHd%zEB$Y1C#3kvllyq*) zGR%S?O$u991X*ds<8=b&rMT#HHEBzhT8^pj7S|#uZPJRQB$ckq#P#X0fpk^OM$DQZ zO$u8!2iao8<8=b&rMT#H8|n5ewFy(-E$&26+GH1!l2p1o6ZfRUUec{G`!G9#G%0L3 z5agf{kJky9m*S$+!=y*D)P78Tw|EReX_MnfN>b^GOgxzmr$`UQoW>jt(xkBEY>+l1 z9I|m7TRexLv`IITl2qE0iM{F2N7^3KkLe21q_E|DkPAjUUMFB) zii=J!kq&050nC4D{1pTxc@;?|y_SjB)8Pid#h4+? zaF)7>sqYp?5R^8#kEA4(j%MOmIy@k~6Y~&rFG!QZmhm8ujd;9Hz`PU}ojxUfmZctH z>bu1k2uhp0L{gGUUuEL!ba+GhB<3yVd5|WBE$@STFyiq#0rOH^boz<(bC!CCsqYrQ zA}DS04M|BV{hojcb8anb2z(kof&0;axOyoR8($#o(6a@UB*>jcb8anb2L(vd868&lscjv^>+GKQoil|IPChw1Q$bU0=lb3aIv z!j>mNo*MCZoq%~ME;@Zq`XWm`#?*IDMgv0aM>Cen(K+)a%}l(N4!23K#N5GL57MNtWjM$^BOb34FfYYLr}s%mv(#NoeYf}k zL1~kRNJ>)aqf8u6hsUHNF;6gKL7Eh{JPY#Nh{x*$%u8|6=}XdAS?VdKzFT~QptQ+b zBqgczT_(OyhYzGLVm@MC2We8+@;S&CBOb34FfYYLr{74wXQ@w^`fl+jg3>0xkd&m- z-lOL5WZ64IqvY5}IcTU?Hyw8;u2 zC8=~}Cay|{)ufAKS}@CkG%0LZ8>H2U$Lj>lOL5WZdeRM9Y7M5oTik@8w8>^9C8=~v zCT>lKZKUgBwqrI1X;Rp-GsrF@90iL@tX5Yr!| zNny*CAXkleyiUNp6c?RdC%uuSE@SGu#hVC9o7_TDl1gu9;+=H3OL{G47&8>4Nny)K zko!hFUMFB)ii=LiNFQXWdzkue@ezX3CgVs-Qt9JNe3A}NNk?OzVIBr)QrPk$$V($0 zuM;pY#YLyDN#A6t=a~P}_;(0O@;#DD`XLiPro$(IS23S4Z-X=`Z221Gn-P!K37D7S zqSGIwKeN;qOntZb8$oH4KS)Ya>EBG8^k|~Pfuw`2K=|((WCtzNR zi%w^f&U&Po{6(LNsqYr&ASi7z7fDGfo%g7A;Ga{HAqz-n#4Nu9?rxg>2Q>EZ_F{wfgnu^TTTQyX~g4o0_LT-==3z{nJjf2 zQ{OGNAt-Iqj-(`&c7#2JsqYrM5R`y(NJ>&^ci6L-`fjloK?&$XQj$vh^Cg|x>^x~t z%mvIqkS2vKmx2r$@n`7-OdtD?E;_wJdNoU3#MF0-*AbL9xq+l4l@5iyjH&MyZy_iF zw~>^j(mP?VVd}fZVFV@M9+Hw&I+D$9X0uV!yD?*!`$3u%wmb~-$cR5nCt&_qE;@Zo z`Xoy|z|?n(&k&S0d5)wcmA(i&j;Ze!Um+*~uaT6b(l=qBV(PoacL++rdn6^P^g}j# znaw_tzK!{e`52^0VawMb-;DUPbOPp&<)YIcq(8IN7fgM(_!~iKlRrpGQt98Y-!b*w z;^cAue-+0oFa=48RXVjw{^b6Gt?w46lTrd^ASp?uGsh=3n>0SL*=*8jF>^4pf;1^? znHOZf5r39W!2GdXbh?mqk(bgxZ*igDEgs?B;*#-+cZ;q6UgmnMWxx<_u{13>EX)4~ zj5e_{#A=9DF)f%CL7Eh{tPRp?#2e}a%q_X-bUo z__K5Z=8xr~(<7uuv(y1heYbcVL1~i{NJ>)a$*_kp_1)rW1SQ}Ml9E(eYe<- zpagUvDM_WB+3Zv{J4f0U(~ap0(xkAZH%Olmf0jY6Z1JplfstYLH-!=c%6W0sejW&r;{G@xB9VW>aQ|LeYZH3 zl+q^Ckd&m->5nHqYsTY=4l_yrrrj*elpswCTjqqHYsBMq0_LT-=yX2mf-E%~Q{OEv zLQvXdF_My0x+D{qro%GQc`?f|3xhN%Y*`s(l@X8E37D7SqSF@AHCbu}roLNjMNryg z9g>n%x;_&(q{Bwi)iIkeYlAc?Y}pcIs}Yaa37D7SqSNi9JF?VfOntYw3qfg<-AGDO z>7Gp7n-2R(x5ezo>CjKw z5i@}K|CxA;B|Vp{>C#M9gKq0V)iB0=0rlTW^(~2+nVFfHnVA_AlpraUQi|2f!_&iR zu+7{())U*`8sz!xSe)-nke0%hD?zRr@p_$rxfCBdy-s=~r7mOYyTw}wMon%b8A+vg zvhi+ixJP;|=04_Tke0%hhd~}0@p_$rxfCBdeM0&)r5<4FyT#`SMonHI8A+utv+-4K zcuo2^<_+dqke0%hcR@Ogc)d=*T#65!c9C|c)LTq_x7dSV)T9^5NGk2i#{S&!fwVK` zBj$aOmco{SAfJtRy-vVfiVvNBA^nBA{~tRjTs8k zQrPl0$jFY0c)d=*T#65!js_Xip`H9i{{vFrEsi5))MPx8kyJXNqu#)O&)zY7!z9vC zF_ST4gR~U3Obs&4h}Y``%%%9y=?v1DDK!OC-!0BYFlsUf$w(@ln~n2w!+g@|F$*xW zg0vL2EDEyNh}Y``%%%9y=~B{VDYXz&-z}~{Flw?A$w(?)m5r-&!y3{hF>5i)gR~U3 ztPirmh}Y``%%%9y=_b<6DYXt$-z{!MFlw?5$w(^Qo{c+l!%otTF}pBZg0vL2>3-4!DYY9@-z^?OFlurb$w(?al8r}m!!go*F~>0ngR~U3oD6cxh}Y`` z%%%9y=^4_qDRlx<-z}a;FlurE$w(@_n2ncm!)4ObF;_6>g0vL2TnlpDh}Y``%%%9y z=}ppGDRmW7-!0xjFlura$w(@_myP#x!voSAF%L1fgR~U3JPz{2h}Y``%%%9y=`+&j zDfI~RAFY3hU?g85nWV3?@l9@c3-C1N9p*)lmco|KAYDehUMFBK#fMJcllG)k2d2JT z>_aeW(vM^$m43*^kGbI!X?M&3rZ-4SVas5UFGjpxCtxnchfaq`zopb?OntZb1Hq`t zPb4F$^j9|i&JBM^zsCH+Fz+8$CosI<=*QuTSMIVW&?-nN@ z7&V!QWF(bN>Z~{L-?L}Q6w)yH4u*Xsn#rTEb4EYjI2H4RhWEzU(S zYBCSWNGhG5jSF(aLeiNri!gJ7v=p{139{6P*Xsn#rTEb4a?%wkwHQ<1Ev`Z^YO)&1 zNGe^EjcaqmI?`n^>oF^Xv=p{%46@0H*Xsn#rTEb47SgRLwEooy zoq)L%A3FU``Xi;jVCuWYUkFA`ej^!4rGK*VZ*Cab#Xl2bMqz#iX(?1(ttP!u* z37AXqq0{jo6S}mMzv!be_1)qm1fwRCk&L9$DP8r35oKzYOd}l^GaWNANK0YM%pkLj zc)d=*T#65!&LN$fQZq31-Qs)%qb3WGjHJ?q*|;b-EGC^Dvjj6QNK0YMvLMTic)d=* zT#65!t|VQRQcE%Q-QpSqqb6&SjHJ?a*|)c)d=*T#65! zZX?~EQkyXK-QrFJqb9qMjHJ@t*|;Y+>?PeAvk$W)NK0YMfglHsc)d=*T#65!9wt4K zQu{IW-QqC>qbA3ZjHJ>N*?2NHoFY9Ga~g9rNK0YM*&yePc)d=*T#65!ULd`gQfDyr z-Qr~gqb667jHJ@5*?28CTqivra|3fJNK0YMtsu9Jc)d=*T#65!-X*=4Qa3U6-QoiT zqb3iLjHJ>>+4wj&JR!Xk^AvMGNK0YM^B^ybc)d=*T#65!z9M~{QqM5;-QrsWqbBc= zjHJ?zZ0yVpU8FB#x-oBpv=p}V1nD*6^*RA_DL!=CPx>LH-ec;!#ZL%EO$LyRq|(pX zIG7v0koLuV#e59XQrPk>$af=NuM;qr;zOrDNq?o(5T?Fc{DWZBK?vfbT|J@$aP~dzf-EEuw`8M@kYE}CtxnchfXJwPU_Z9{-Te?)OU+h5R95kMKY2~ zr=`^NESW(%A!a6Ka*&q7mf1n(81Z_YfVmVOI-N&4Kc!}2>bu2-2u4j7AsI=fi?eY_ zZdgh>H)a`TL6DZhmK8x(8u5CafVmVOI$ce=CZ(2R>bu2t2u4lTBN<7h8?td@ZrDV+ zDrPfgZIG72maRdy8S#3ZfVmVOI^99KGo`j*>bu3=2u4lzAQ?%ed$Vz0ZrD${J>~#r zSCE#%mP0`f8}WLbfVmVOIz38yETs-&>bu1g2u4j#A{j}gr?T;MZa71FB<3vUc#xLD zmh(X_81Z_YfVmVOI=w`CIi=2F>bu3O2u4k=AsI=f*R%0PZn#N$G3FNLN|2VqmODZ2 z8u5CafVmVOI=xT&Af;|&>bu292u4jFBN<7hPqOi8Zg@s|FXlPsVUU)>mX|?Z8S#3Z zfVmVOI(Hlbu1b1fwRMNJdg=S2lL%hWDheV|p;}g0vL2^abfR;`KTKb16P_ z`jPZgO7&vuyT#84Mok8hjHJ>p+4wa#43U0_`Gy$?(o)#+Bgju9Uau1{m*PXGze)e3 z)OXB(wSMG#{&v5wO-3P^q@&;08%C5d?}u*~3-Bw~jl=v+sg}Z)3E?Li@p_$rxfCBd zolH8V?&L4}cuak_I1Rz5$#f(msdPq4&CHTnq?2N1W2OdaDQuY=WS$YP*9n+Q@uAZN zqzhAO4yL|aT#R7UWC@ayRJt@9m*s}#r1N7|U={^wDQsC4WVI2m*9n+Q@uAbTr0Y^@ zC8oYx+<;)zWFwN1RJth}H|K^eq-$cfV%7&~DQwvuWQP&2*9n+Q@uAaQq`OmU8>YTn z+>2n;WFL}|RJuPK59Ee}q&s5{VfF-RDQr0sq$g79Fs8m+JcVG? zG&*p}6q{m{;V@?KXDQvkIr4RExjHJ>ZVFxkw-Qq6=35DTO8TL-|Lbu2R z2u8qcBqOPGPS~lK`fhO^f)Owu$w(?)kY6%0%@&c)jaiIY7^J1JWoeLQM*OpM0_Gpf zhfY_Ju5>BATb${4i`y>nZ#Q~|-z_fxXIbJ_Yk?tr#hP5fVOjS-Fxte15St)2#%#u{ z57JWDvNgyyBW|b@Fki`sPIr**bng-W-h!#`7Iz~U{V%u&$w(^Q8+JRUzFXXnU<4dM zGLlLUhTVm!?-mau7y(C+jHJ?|X|^xTj*}jWIe|GAq@}RsRFKm~{Ihfd<{!(4PS28_ zOR1BX`fl+8f>D!;NJdiWrLbo(_1)qX1S8-ol95z;E$n$reYbc6!3emCWF(c|O0&yp zc8BzO%w5dwAT5P0_k%nz;-94xF#lLSboz+&aZ268)OU+d5saEVLo$*|pND;jsqYqF zA{YU$kc_0#*I}Pv>bu3a2u8p=BqOP`Bh6lm~KpGke0%ho*=zO{Ihfd<{!(4 zPWwqeq||#%eYf}t!Kldql95#UIcy)Mre6?@fUihKQt43GkC^&y@jHSM@B_(6D*c&e zgK74g^jpjy%&#CVg)Jj{hkwba-ir8V=>*I_mJgkd0U6t?o%~__3sT=LjwfZ*WCD_r zR64PD_=ZVYGMRLA%oNPHAT5P0(}GMl;`KTKQ>lOGL#H!IXQk9sOntXF2f?VxTqGl@ zbY3>j&kYMmXT&VT%ns60*s?gt5+h!(6EK(JL#N9~m#5SsOntYw62Yj+DkLMRbagha z$qj2sm&UBatO(Ll*s>wWMk8LY6EK(JL#LZbx1`j1OntYw4Z*0%b|fRIbVoMs%niFp zH^uD6Yz@*<*s?dsJ|kYQ6EK(JL#GEw52n-}OntX_7{RE?5hNq2^k_C7%MHg#_s5*T z917A>*m5e!X(L{*6EK(JL#Jm+&!yB!OntX_0l}!rMIQ8XOntX_7s05>JtQNk^nNxz$PEukZ^k^r+zHZB*zzRE zQzKrl6EK(JL#NM4U!>GyOntZb3c;w!Ya}D7^i4Lt%?El;_1$7Wf>DzXNJdiW$87wR8wN<<$9%^01!*a4`4Z%-5wF(?m`m}Y z({H5TQ)&=X-!1+`FlzD($w(^wosEBT!(Y;&n2~+_{SVSo*fP3rc;gr&Uau1{m*PXG z<3PsuX(xZtM`7x_#fb<;O(r23Nu`tf>J9w&>{&9EbZpEt%!D8_jq>N_S=B?%c44bW6-$%=REHg)RGo95CYbIstPjK6HAB^l(b;!_;?+ zM-hyg978gaN{?sbiQI6K^kB>>%#k21g)L`-oHgS0IstPjK6HAX^g>FV#?*I%)KBjg)Ps5JU8O?IstPjK6Lt$^i@hd#ng9;ZxD={yhSpSO5bH; zM{ejOeG$`zc^#ysu;qP_9wT0_6EK(JL#KVD{VCOr`H$9rL@<({kWA8nZ2X)X1_63w zzFx6EK(JL#L}qSEtl6OntYw7Qv{=IwT{hbbU5%$PF7wSH^6@tO?Rm z*s>+aRwG`o6EK(JL#NwGccj#2OntYw3&E(#ZX_eAbWb+!%?FQwF3OntX_1;MDvRU{*+^jbDv&kZ+7FT~u$Tn^Gw*m66_9V1?^6EK(J zL#Ovh@2Au)OntZb5W%R)BP1iK^l>&m$qi3Q@5VgCJP6WK*zzLCOCw&d6EK(JL#MAv z-=x%YOntZb4#B8N2a=Ig+L?`AxuKi%Rm^+L+aN84ExkedjCj3Hz+8$Coqizwm{L8M z`fhOm!Kle+BqOPGFdM(*hOeakF+-S7L0Sr1z6beX#Orke=2Cp<^cU&xl=_CL?-u_e z7&RIBfq!H2p-QErKGYjVl+hoCZx{pcGuMs9{7I>n!j|#jCm8X1oq)L%A3B{xI=SxT zFZwu4eYZFj!Kld6l9{9vV`gEd1ZgR3nG0`PQ)&gKzFS<6 zVANy-l95!pF&j7KhRvj_W42({1!*a4*%oBG5wF(?m`m}Y)19QdQfe!vzFXXbVANzU zl95!pFB|vgh6AKKVh&<<2Wcs6IUMAO5wF(?m`m}Y(_^H^Q|b_=zFRzrVASLkl95z; zIvdaAhO?wcW6oht1ZgR3xe(-{5wF(?m`m}Y)61k+QtCXWzFWM8VASL~l95z;BO7n# zhFheUVs2xu25Bj5xf|r35wF(?m`m}Y(+8vvQ|b<;zFT~ZVASLZl95#UG#j7ghUcXB zV_sk$1!*a4c@^Zf5wF(?m`m}Y)3>DWQtBn9zFX`>Fly3;WF(b#XXE?a&_ntrrWex@ zq@}Q>Kgb6oUau1{m*PXGpGXH%st;4&Ee;|WHTi;MB$a;6#-ZHsjr3#8cg*J?Erl&V zgZwh$^*RA_DL!=ihxBhs{lL_Bi=#gBxBFvlG8)OKl+rOD>kT8y*pI_Ej3fP>>&9b7 z25Bj5nHYYO5wF(?m`m}Y(rVcnPr%f7i_;N|n#@2ll1gW0&BfGri%SrUnk+>!l1i6l)Hq3?~Erl&Rg6uTn z^*RA_DL!<%n{-b~ZO7Dii~A6an(Rk1l1dL`DEcnw&v0l1k5J zhLDV;(r?-LJvaOy9fCtxnchfYU+;&1mS?c|T=FOd3faSSP= zCS#F|q|$Mp>J1~x_)o((Od$Q6>n37G2Wcs6nH+wK5wF(?m`m}Y(`lsBQ)&|Czgj;N z!AQ&BxSti^~vgRC>+^*RA_DL!<%fplX^t-;iHi<=RQnruNbl1jH` z_=hhyTyqJMolIm8A+v+!;Zz& zcZ*XIjDTrKMpEhYuoE!#-Qr9HBVZPikyJW+V7S?ol%GpFBW50EPLP(umIXl;8u8E4 z37CH@A39x3x+JCMW9qxbWe7%1mLnNSr7OZN!qj(*s}PKU)ksEC>6)-hG4_5wrriaoi4!?N#xV6=$?Ar3(tj5&E0v$eFRhAEuKa&`d{!2l95z;HtcaseYbcX!3em3WF(bd40{Sw-z{E7FaoY18A+vA z)9hTDT_?R1a|3fNNK0YMtsu9J_-E+^%s-Y7o!%wAmr^$|_1)qF1fwPok&L9$M`7<^ z>bu1!2u8qDBqOQxS=jrS`fl+Bf)Vf%$w(@Fm1d9A><#Jjn75eML0Sr1I)Zc>@z2r; zn13uEI_)NXpHlBI_1$7Gf>Dz`BqOP`KWrDKzFYi=U<74dN&G4)+)MPD^kyN@a8`tNC4Wuh#Heyx>X(?>k z9At|Tuh$8fOYx!8ZKT^%Y7?fuTil6Y)MOWukyN@n8~5afy`)=X_F;AeX(?2GtPGgP+X(?I|m7TfB^5)Z_}1kyLs$8?WVt>!jynZeT72X(?>E738)Nuh$8fOYx!8 zyQKG0>L#YXTYP|E)Z`(OkyQF98z1L}C!}{`o?`9?X(?=Z9^{1)uh$8fOYx!8SER2~ z>KUfKTYQUP)Z`tKkyP4|jh(rni}YnoH|9-{mco{vAiYMsUMFBK#fMJ&Nk632drW<| z_zA(N$pDg(RQfp^2Xn(0(!Q9ln2$kP3R}Jf`EJDPbpqy6eCYHi>93R;!qj(*e-MnC z{6#X7N=FXX8~E?p2ZwJMJ;?tRo$JP6ey3DRVavGi51mdVoiwPO{PiD; zsqYr2AQ&~7iew~}PD`ojSu%rkLd;Ce4)OU*u z5saEFLNby{7iZ&=+_02%Zp<>wf*>u0Eh~boG~)F-0dpxnbh?^!O-e1t)OU;P5R96v zM>3L1H)P|++^~ssRm^70+8`~3En9?p+;Efh zV$3bfl^`vJEq8+4HRAO;0dpxnbb6okK}y}m)OU-I5R95UMlzC0pJe0H-0+O_Ud(gM z!yqk%EiZ$-GUD|*0dpxnboz$$ZA!hs)OU*=2u4jhk&L9$u59ei4ev=`$Mj&{1!*a4 z=?l_t#Orke=2Cp<^dsq~lfmsx!rLbjHkkv-K zUMFBK#fMJUlCDdsm6-Z&aRY);lZ{A5Qt75_+?*S>kgkc@idi3|rLbjtkR3+6UMFBK z#fMIJk?u~ZZJ7FQaW8^VlYK}=QtAF|Jdhg>lJ1N-gxM3MrLg5lkfTPtUMFBK#fMIh zlb%Sa!Qt6p&JewQNksgaVk2x8nrLg5kX}ux z3z+(D@j8N0lN(4zQt8cXyp51kH>eom==OntZb1;MDvS0p2; zbSN9Y<%aL1pJIMs27|N|w)_h6+lbfe1k9!Q(CJ^&kzciwKb}7^_1)s=ul(DRn*MtX zl2Iw8W53oLMwD@1hi@29`X|>-z>EsgQrI#n{A43uuM;qr;zOrXNvEaML`;3RI0M0` z$xI|8sdQF0&dv>UNT&t$ucA( zsdRZZuE-55Nf*Yf!Ym2WQrNO4$XX*_uM;qr;zOtFNjId_YD|5%xCz0i$z~)YsdP&= zZp{tbNY}+|$7~GJQrNOH$SxyZuM;qr;zOrLsq|bnp3e;zNKeFE z#GDS&QrL1i$Q2`AuM;qr;zOs`NUx{VB}{#{coV^>$t@%!sq}U>-pLJjNw3D-!`ukc zQrPk!$U`GuuM;qr;zOs8NuQ+DeN26~_zc0Q$#Wzlsq{rQzRV4;NFT+##ykzuQrPk~ z$U7rmuM;qr;zOsMq+KcX22(t~6qmG)+1UvB6p?TGn+=?>CT*zzgJfDy0P z37AXqq0>RqFDdmAQ{OEPAs99JhGZm_e$U1qx#1`2=a^rZuR&T0TmA(3YsBky0_IYD z=ycQ&f4hgYQ~!D!q`q4mOUkIpI3y#fbo@}gVMLiQGjccD_|WNe(itf=8B^aa&O$J1G8@TADxH&!b92Ky(rGdCF*Ad-6t*l3vdDjccD z_|WMR(xoZ208`&BE=MqGvI5CSDqWe4t8&9?(#0`rFw26p6t=7jvfhZ->jccD_|WM_ z(oHF~7E|9XZb2|=vK7flD&3Zi+jGMX(hV^?F`I+56t?URvd4(m>jccD_|WM-()}s5 z3sc`M9z-x|atO&tDm|QyM{>ha(!DXqFb9IP6tjccD_|WNT(laS_98=#d zo)F=vCc6t-Lqa?Oa>>jccD_|WMM(wixD1ykQG-bOHL zatFysD!rSH_j1F1((5q~Ft>uV6t+AH^4N&i>jccD_|WN7(q}345L4eRzCbW)@)F5N zDt(oWuXDp2(kC%*G0%gv6t;8(=``Z?IstPjK6Khm`aY%JVd}fZUIe2ieMm-9X@53; z$PFJ!yJ9|JdV;hRwtNmUXvFJv0_IYD==3Y;P)ZG8>bu472u4kQAQ?%eKeO>yZum|5 zCFT$2TacE*mXY6vH;(#N5wF(?m`m}Y(=i}pziB6b(f@+fcZ=gm88w-JWF(bN{8n!m zQ6^={WYWS5Vury{J zW<`*e!j=s|HX8AIoq)L%A3EJkx+SI7W9qxbZ3sq9wj&uyr8}~5XKvU3_8IYdoq)L%A38lidN8H-VCuWY!w5!AjvyIHrAM>zSZ+8@x3-V(Poa3kXI{E+QF8rI)hta&EXndM4&7=6sNr!j|hnZW!@; zoq)L%A3D87dOM}AVd}fZy9h>2?jadTrT4S(L2h_RdNbw`=1!27!j>mNo*MCboq)L% zA3A+b`XZ$sW9qxbR|rN;ULzSvrEjwFZEko+`Yfgc^D;aGLlNa<(GU) zvmc~iVt!)22Wcs6`5oks5&tZmfa%AM(1%V(e&^qGeAiC?DE|Vf?-s|9GHNmw$w(?4 z7xph~eYZG)lo2oy$w(@l6m~SGzFVAvU<6D>GLlNCeIIT%{`+vV8KjeAW@4rXX(?=( z9b}FX|16z=`N#61(|M%xQ)(8bzFS;~VANz0l95!pIP6?ZeYdz2!3bD}WF(a?54!+U z-z~00FalN~8A+w9(`-qattDL%vktQ+NK0YMh9Db__-E+^%s-Y7oo*)Gl2Yq2_1)q& z1fwR~k&L9$9bq?N>bu2V2u8qeBqOPGPuQ)P`fhO_f)TJE$w(?akY+p6>=5bRn8TQZ zL0Sr1js`hq#6L?XVE(au==22XNte>Q#o2zhxPo_!r@s%sTU`0ia>T990z>$UGr5Ap za_)a%w22ELE~&0iw|F1H2zY>GB$Yl4dka(FEj~st0-hilNu^KI>|UBZCw&z20`n|LOJU2a zAg_)1XXymYKb8-jz9oH^QZF&}-C`$#QIjqtBdN4I>>Esdx7dSV1oR>qNu_;ZJ23U# z;s*pH;3JZeRQf5+-ly4T(*Br1%s`Nq!j`W=hK%@U=>*I_mJgkNC;gF9UoiFE;x7cF zCclx4q|!fOzhUaT#gRYwzpsB(U=)%Ot8{dg`ZwLM_1)rFQbxcyBqOPG{Ey*gf75It z>6jnGH78*v1ZgR3nG$5G5&tZmfceMrq0{LgGg4|YroLO8g<#ZVHj9VP|6MyTwHaM!;euBdK&rn$1nKWuyyZmSdI%X(?=38Dy0a|16z=`N#61 z(>0`PQ)&gKzFS<6VANy-l95!pF*j_=4Vy_<$85o@3(`{9vMtDVBVMl)FqQg;K6JX1 zbXQ7k#ng9;dk~D8>_sw?O7~^s{@ieYbVtlV%69wncQ%e^k~dE%!wc^g)J9?Tr}eKIstPjK6HAS^h!#d$JBR= z*AR@FTt_mJN^fN2&D?N{^is@i%+(+*g)Mi3+%w|!IstPjK6Ltk^kGWf!PIw)j}eTT zJV7#&N}p!qv)u5U^nT0>%%dPJg)Ogwyf)(XIstPjK6Lt)^j%85#MF0-od`xvx{!>d z((Y`0pBs8e-^BD{I)bzmw)6-2V8rWn0_IYD==2lmKuYyt>bu231fwQjkc_0#uh}@1 z8@`c#jQNiF9HgbND0QDe^N}q)OU;15saG5Kr)g_ zXJ+H9+%TJTa?Bjev>+{oE%SoRH{$g=0dpxnbh?mqQA*9l)OU+Z5R95EMKY2~mu2Jf z+^~XlLCi|b;vg-BEvtj9G2-<)0dpxnbh?goeM+su)OU*;5saE_LNby{H)rFP+_05& zZOk^zh9E74EjxnjG~)F-0dpxnbh?{#PfBga)OU;f5R97aM>3L14`k!P+;E6=SIl9| z-XJZ7Ek}bKGvf6+0dpxnbb5mHWJ(>u)OU-g5saFgK{Ap`&t~Jf+;E=sc+3UNsUR(d zEti5^HsbX<0dpxnbb6KaT1s8S)OU+F5R97KL^6^}Z)M}{+;E5VO3Yo%^&l;UE%$>w zFyi$(0dpxnboz+&aZ268)OU+d5saEVLo$*|pJ(HX-0+h0VazMclOQdHEpLLnHRAO; z0dpxnblO4MnNqJY_1$7Of>D$ANJdg=Pd4`EhCb4FG5wgXAT5P0AA@`{;`KTKb16P_ z`k8bvr9NQlyTz{vMoos0jHJ?U+4wy-{2(2O`HA@wq@}RscaT3uyj~|@F2#pVNB-h( z_b=_#zZU_i?-s|9GHNmw$w(?4_p9E(f6xAF_=X9je{4IstPj zK6E;bbb3ln!u&_;XCfHMSx6@7>};Hq8|DH`jhTm;5u~NCWkHaIM!a4pU@panP8X9d zNvZjm`fhOD#@NJdiWifmk&8&;7nidl_W8lDz#NJdiW)@D!$NJdiWp=>;y8;+3fi8+edAEc$Q<#>=2M!a4pU@panPEV1ZPN`#<`fl+of>D!m zNJdiW`E0z98!nQbjJbq46QrfERNU6)1`fl+Sf>D#(NJdiW zoou|D8}5-_i@A@v8KkAKDzfNJdiW%WQm= z8(xz>j(LN57Nn)H}Y*`d!u@SG=37AXqq0^#In^S5XroLO;ieS`a8<%Y|or(>>Q&IM^HY`GTXx)HC}37AXq zq0^hBw^HgVroLOegJ9I;E|QT{dM_LA=Y|KQH)0-QZU<>8Ybu201fwSXNJdiWhiv?q8$OYC#|&V4gR~U33 zixUuxnoLA8l1eB2sW*%$le1(B>6nFku6hNCBi#m^ndO3R{*0S!%@Vbpqy6eCTvJ>57zEjH&MyS0NZR zS&d{Qm9ELgwYgy(>9Uyhn3X|V3R^Y?*<{4)bpqy6eCTuw>DH9mfT`~mw<8!e*@0vv zmF~>OUAbX5>E@U{m~BB?3S0IC*>A+_bpqy6eCYHb>7kU`i>dDxk02N|If`T?l^)B+ z4BJ&n8QI@3R_MGIb+1@bpqy6eCYHX>G_m8g{kirFCrKDicTm7A6ij;Ze!?;#j9xsPNdl|IPEhq>Vq>8+T@ zn7ct*3R|8Ad1l1xbpqy6eCYHA>C2RQf~oHoUn3Ybd4psmmA=i!ce$a1^m$At=2eiE z!j|qJ?~Qo9PQYA>51sas_N7!8roLPJfMC?*Ba)F+`Y9U+a>HlRo|r*Qe~^~KmajpE zjCj3Hz+8$Coqi|%ky2kU_1)qx1fwRuk&L9$KiT*6nQ@S_)fc z2AO5V>vaO=Qhexi4(Z&Knt`eB7Uv@vHCcdUB$Y1A#znbdG3o4>C75|ZS_)g11zB#y z>vaO=QhexiCF!b^T8gRf7S|vcHCc;fB$ckq#`U>j1L=yGjhNLzS_)e>2iao8>vaO= zQhexi8|n6x+JyP9*6&0xlDm*h(%sp(CpYW`*c!7Bvm;1LVatIa2aR~WPQYA>51k$+ zJ(5!UG451n2hy_iyG zF!kNyWdx%pSCEXP(yQ5cEjL^zJs)!eb16tmVau%`w~ctcPQYA>51rm6y_ZrqG451qaueVtOzF!kNyTLhyf z?~sh7(vEEG%nebu2H2u4i?kc_0# z&)GPb8@`bC#eBtl4AN5A@-4`BBVMl)Fqh&(r$0%5rPL6nzFYi*VASLX}Z5ikMCNGhE;@?UDk|NoPb|8ld*q~l_y zU?v4=DQuY*WV#W5tP?O_$%js7lFmx0shIk1aSnn}letJnQt7;~Gcfht;sOLCU?Gx` zRJthaY)pN(xCFrnSc+sMl`c!O`DwO-baBi|%<>>Dg)OUttTE!Br4um!SUz;Rj&yxW zt-{oIiyIM)nruQcl1ev+U5lyj7Plf80o#y_q|)tSH(=_!#hnO7z%C>ssdRUmZAr7e zq&s5vVfF-RDQr0q>*5jw|EM{ z2sn*oB$b{CdlXaOEuKR#0?s2DNu?Lk>|~l(8FMj6OJU2^AlHoeXXymYKb8-j z-XOi{QhK*I$L|&w@^10=$bbDm|L_0(fBoa%tNvN8xYb=?2w!n0S8!PF{SS;b@gT$_ zh=(zcG53SC6t+AK^2~@E>IBSJ@}bigq%Ylj#J`_l>bu3)2uA-4zCkjQO5cWkj;Ze! zI}nV3P9!6#v@7f@OntZb9>ECcK{Ap`d(-S)n)Q=*$9%x_1!*a4`4nWph<}z&!2DzR z(CHxQmz4U5sqYqt5R969Lo$*|zlZ&dsqYqlA{YU`kc_0#-(kOE>bu3i2u8rjQU5B8 zq|#BNhMWCJvoQdFV#Z=d2Wcs689!?HmrO9?pQRHp|5!eBItgTQ-N`>0#$oEa#iqHU>=f@R60MuWJa1TB%Kqp2(uta zOJU2BAWMz-XXymYKb8-jE+<`)Qj0P5-Qp?)qb947jHJ>vVV7a*KSH zVOL^mx(UGu*o@wn?r4um!SUz;RhjedB?ZDJ` zi~A9bnjAnfl1dNehC{jGFzN1?Bba?bS_)f^1vzfS>vaOAQvcA0PEV4aN~xom`fl+I zf>D#RNJdiWxokY28!nKZh`ES49i*kO<#LcKM!a4pU@panPOp((PpM0o`fl+if>D!O zNJdiW?QFc08}5=`jk$-p5u~NCD#_NJdiW zi)?(E8(xtLaGUTO2|#YVr-qNGkoFjX!e3PtwmZ zzc62ev=p}d3G&y7*Xsn#rTEb4sL}j&9<81HUHuJG-z|K2COntYw1;MDvRwN^-bXzuV&kZ|BH^l73Y!1>= z*s?pw9wT0_6EK(JL#O*l_ovh@OntX_5W%R)AtWQI^l&yF$qh$I_r@H<90<}<*m5Gs zNh4mb6EK(JL#L-n&!p6GOntX_4#B9&c_bsL^g=dX%ng@FPsLouoDI@a*m5<H20OntX_8^Nf_9V8>E^lmoZ%MJHQug5&V+zQfC*zzdIVP-sOC%$y^i?*#&JAx!pTxYyJP*=R*wPWC(}>sW1k9!Q&}ld6 z`;>ZzsqYqh5saGjAsI=f{n_{-H+&@Riur`;3DQ#7@;S($5wF(?m`m}Y)32mMDK&tp z?-su!7&ZBUWF(dT%*J22;Wz1*m_L|rL0Sr1MvfWYIBHBqyj~|@F2#pV$AF9-qn-Rk z{|i#zEsiH;)MNsZkyJWyOud2so;^z@la7v=f*BX2rLbjMkm*LeUMFBK#fMI3lFmx0 zshIk1aSnn}letJnQt7;GoSz#Okj{u%h?yOvrLbjjkR?XEUMFBK#fMIpkuFcEMVS9+ z{YnHQxeCc7U7d|H7Hr7`O;D}uBXwrmKp(TLaU1k9!Q(CKEl-h%-?-mau7&SS9WF(ay z&BkN7;W+93m=l;oL0Sr1P6at_#Orke=2Cp<^epMQlsbv2?-nm07&W3L17i8nY+^~prR?K3|+#oH5ElYze zGvf6+0dpxnbh?6cWlAl<)OU-k5saFwK{Ap`*Jk6o+_0W>dCUgPsvs?eEt`UDHsbX< z0dpxnbh?#vTS{%j)OU+J5R97aL^6^}cV*-5+^~mqOUz!(_8={VE&GEUFyi$(0dpxn zbb5&Na7yjN)OU+V5saD~Lo$*|k7whF+;EcgV9Y7ZksvLFEoXw9HRAO;0dpxnbb6lj zLQ0*+)OU-Q5R95!MlzC0uVmxZ+;ENbT+DUM#UL$(EjNSQGUD|*0dpxnbb5#MZc5$2 z)OU;b5saEVKr)g_A7^p%yj~|@F2#pVe~|u6sjry&Zt*vQQIkJNMpEhD zY#cdm_=ZvA_-8_{8;$uDq@}QBZ1{0Tyj~|@F2#pVCy-7Yr=9#oAA_my7AGSZHJO5B zB$ZAbS8o_mre(==((y4fFq49`6t>I?GTVsP>jccD_|WNG(s?O06I0(UEjccD_|WMp($y)o3{&4Nu0=3vvJS~eDqWwA z8*;-&(v>lrFl&Oe6t-*$vek&!>jccD_|WNg(j6(a8B^aa?m{qXvKz@rD&3Qfdvn7+ z(rq#OF*}2_6t)};a>$6+>jccD_|WMQ(xWML08`&B9!D^0astUnDm|Hvr*gw-(!()l zFvo(l6tjccD_|WM^(n~3I7E|9XUO_Nwauvx)D!rDC*K@-S(hD&+F_(k1 z6t>(Ba>t0*>jccD_|WM+()%fO3sc`MK148T@(9UDDt(-dPjbUk(z`LwFb{&X6t=tw z^3sUc>jccD_|WNV(l;sf98=#dzC$o-(t%_om3C%hS8nJgeHHT_^EOCJVM}k2J|kYQ z6EK(JL#H1|Kc-Xbu3i2u4jtj_2Q)jIUDZsPXlN5oPrF;Ty&P{LFP@F@I93rLbju_z6b5 zUMFBK#fMHOkxs5V`HMadQ{OF4MKCHg4arChTUG{HWyI@s0_IYD z=yVO~+LT&>sqYroBN#Q=fMg_X~V#Mop0_IYD==2!r@sv7* z`LEWWL@<)4kWA9k*?1;5oCP=COJU31Aoq-Ty-vVfiVvMWAbprpcQEzc;$sA(CQp!z zq|&F^_$)U(C%qr@0`n+HOJU2aAg_&hy-vVfiVvN>C4HAtFERDqVkd%8lP)A9skA#A z-{*!N(l;@^n2sPVg)RL-J{a+Ooq)L%A3FU+I*?L*nEGyU5W%R)7bGL8^lLT_<%Vyh zA7j2_J_l(jZ21}Fml3bm37AXqq0>L4e^crQroLMoHG#j~6Ka#uNJgcUj+szz;Qvp_ zgy9>;k^atg<1r(Hv=p{X3_r<;*Xsn#rTEb46w;}6Cx6i=VCuWY=?F$mW*`|!r8C1$ z#?*IrQ>D;i>F!kNyd;}w40g{nax-h?FR+=p)ofoqNvnWVQVau{0%Z>PF z=>$wac7#53x{`ENN-f3IcZ+KfjGC-PGLlNyg{VOL}7yTvUC zM!;4iBdK&-nypW>9i*FMc4D>%X(?>k9b}IY|16z=`N#61(|x4-Q)(BczFRzqVASLg zl95z;IP6|beYbcN!3a2pWF(ay4|@Pp-z}a*Fak~?8A+w5)9gr^oh3aHa}IMRNK0YM zg&-G=_-E+^%s-Y7on9url2Yd}_1)q%1fwR`k&L9$8(}YD>bu2T2u8qdBqOQxPS~rM z`fl+af)Q{Z$w(@FkY+d2>=EhRn8%ohL0Sr1o(6el#6L?XVE(au==25YOPA8S#kqdB zIE#0SuO|$@TU`Cm^2Dv)0z>$UH@Skt^6r0Nw296T-4I8A5-5genl_>hLDV;(r;luVd}fZ9|%Uk zPb4F$^jDgFNwYts-(&t_eg|nOY#B9i_?L{HSP}m$oq+kr@}bkQAmb)#Cx2K+V(Poa z2?$0_CL$S0rIW&r!PIw)QxJ@RsYpgr>9nxpG4k5@f3p|16z=`N#61)9s`? zQff1%zFXXdVANzcl95!pC+s#%eYdy|!3fxoWF(ay2)h$g(?bYGz+ogKsq{#i?M<^| zqz7Y;V~z%CDQr0zI9~~TRe|o)Z_w^kyLsyH(bgMmq|~@ zT)~_R(o)!REy#5vUau1{mHLN1bb6EYR!UvP)OU+_5R97KMKY2~?`7lt-0*<(M$ALZ z?I10MEsujdG2-<)0dpxnboz|+c}hLP)OU+75saF=LNby{UuWZ+-0+t4Y0Nv!iy$q9 zEuBHSjCj3Hz+8$CoxUgSNvRG@eYe<$VAP}^$w(^wkc}U6!za@2m;p?0ke0%h!609Z zc)d=*T#65!4v~IKsn3}DZt(|#QInrYMpEgoZ2X-Y{*Zo+`HT4;q@}QB)TH5!qbF6w z>vaO=QhexiEXcS?+Nr7+^Z2L5~YESW+&CT1#Te2|vHmgzxe z81Z_YfVmVOI-Ny2JEf*!>bu3c2u4ljAsI=f^Rsb5ZdgbBBd5%>bu2N2u4j-BN<7hYqD`|ZdgaUEM`4sWssJ_mW@F+8S#3ZfVmVO zI^9CLHKjIS>bu452u4kIAQ?%eJF{_DZrDw_Ic5)LTacE*mVH6?8}WLbfVmVOIz32w zD5dsd>bu1w2u4kgA{j}g$FlKwZa6`DAm$|IaFCY5meWDb81Z_YfVmVOIz2~vKBZ1! z>bu2@2u4jVAsI=fm$UIoZn#Q%Hs%`ULXeiimK#BC8u5CafVmVOI=xMLC#9}q>bu2z z2u4lrBN<7h53=!LZg@m`E9NogZjhG3mZw3U8S#3ZfVmVOI(bu3)2u4lb zAQ?%eZ?o}TZs;I=9@B|=6{MxGr8~%bBVMl)Fqh&(r@f?oDbka((>{&96bX?4I%)}rqg)K9K%rfHjIstPjK6E;VbZ$z`z|?n(^AU`iEI=}nN*8A1 zqTH~Ubau=V%)B5ig)Pg1EH~oyIstPjK6JX0bX7_%#ng9;YY>c@tVJ@CO4nuM`rNRA zbVbZY%<3R5g)N(dY%${XIstPjK6JW`bbCr|!qj(*I}wbU>_Rebu3u2u4k=AQ?%eSF`b2Zn#c*KIR7IQjnIymRmt? z8}WLbfVmVOI=xGJFQsl`>bu1U2u4jFA{j}gkFxP`Zg@g^C*~>Uevp>JmghlU81Z_Y zfVmVOI(bu3a2u4lbAsI=f9og8K8@fne#&l!e1ZgR3=?T(n#Orke=2Cp< zw4d}tO1;O_cZ;78jG7D}8A+v|vvDvtd?D?N`HJ}%q@}RsTafQYyj~|@F2#pVf0F)6 zsUb{#xA+IasL5X>BdK)clzIdI-T9Q^8%9szp9#5c4CZ%AwG_6D3qRh7*Xsn#rTEb4 zMAAu9w3EN+V=?vJ;uHjlFp4;hFK7#rLbj1kd;QfUMFBK#fMH;ldegr z<(T?zaUFtDll4eOQt5_l+?X3Sk*rLg5rkh?~_UMFBK#fMJslRikP+nD-p@ezVilgCI#Qt6Xy ze3~1ck=~1Wj(HfQrLg5?kXJ^$UMFBK#fMJckiJc+7nu5Pu>--VNhgw#RN9q|-MQgC z>Fbyt%)1~hg)MzS`i*$KPQYA>51oD_{ghI@nEGzsW1k9!Q(CKf|KPmMcQ{OF)oXX$sskO-{B%@MFM^CLcj3{HK4&N}A z^jEGMhxwaQErl%;!cR2f^*RA_DL!;MnRH6s$zSyGnEGyU8iG-i=}1OW>5P<`nI*GG zC&kRhObyaf*fKZBJR@GO6EK(JL#GQ!7pBx4OntYw7{RE?5+oz3bZIs&%MHs(=f|wT zEDF+6*s?0fY9n5+6EK(JL#Jy=*QL}-OntYw0l}!rMkFJtbW=8N&J9~g*TihatPj#s z*s?vy4kKQ#6EK(JL#Mk)cc;`gOntYw7s05>J|rWlbbmG;$PEWccg7sT>7 zEu|)6>bu1m2u4k2A{j}gv$An^ZkR(lC1x&WdXSdFmia*z81Z_YfVmVOI$cD%IHl%c z>bu3I2u4koAsI=f%d>GsZdggWFlH5INsyMpmNh}v8u5CafVtHF&(vEiXS!s|wsu!l z`&u>QE%u|-DTdO+&xBo)Bn{_mDP#04;P*GlJ=!k zC#JqzT#aDVWB|!XDjm$mp?qNtX-~{rOn;D;!j|U(rwweJzv;CIvleTvpGmhVax6ydyII!PQYA>i%$2E?oX**nEGzEUcVk}n)3-5YZZb0A1dVatgiCyjW$PQYA>i%w6Io=K_WnEGz<9D-4k^GHTg z>4j{(m@ix+Jr#2qb2dmzVawGZ*Nk|*PQYA>i%xHl-b|@0nEz`1Z3H8E2gxM8n~nGK zh5G>4V;*2`1!*a4c@*Ta5wF(?m`icd=~L2YDfJLj-z~mCFlzD=$w(@Fm5s0Sg*T*6 zV%}n&2Wcs6c^~A15wF(?m`icd=_k_9DfJFh-z|PcFlzD*$w(^wo{c~9g`cD!V}4=2 z1ZgR3`4i-?5wF(?m`icd>F62!?Vh2X{6+r_Qr|6(BW2WNJd%-AI$=ir0{?ePW{iAc z66vUz$(XT0S_)gH2AO8W>vaO=Qe1R8gLGy}O~KT6i?b1on#@5ml1k@hvaO=Qe1Spgmh_2bzthd#pMV_O;#WoNu?{pF2>Y%i=7BYKo^pc zRN5VO8K%Bl>_spF`jCvI(*FFCRcSUr+7mN~SskRMuw_kjHJ@dVb@{myTz>tM!+^CBdK(I*kMe4x409*2-t;WB$e(?vn^@1 zmvl$WKFppVErl%yf*dsBpQRHp|5z?MJxqEerS@a$yTxM&Moo?*8A+ul!XCoZcZ;VG zjDXWfMpEgSutzcV-Qqa}Bj7xekyLsi%}%D-CDOAomoXQEv=p{n4RXzhf0jDWTuSd2=lk8_6y7a@VMk-?yTvI8M!-}gBdK)S z%#mi}XO1+RK{`2RCT4n&mco|VLFO3o&(aB)e=HZB&Lf?lQnN7i-C_rVQImy8MpEgb zuyZl>-Qp4iBVZ|#kyN@Y>;g=Ex3~hq2v~_^B$cj8v&CuFMY=qu8`Bx2rLd(pNS_h^ zES-S)$8yo>YSMv}>cP}^i$e%TP1Yb8Nu_JU_G9Y1#q|hAzy>5EsdPB(Af~=s+=O5R zY(_GYO1Grhx-{EHx-n)uW^0g^!j_#ub{X-{(g~PbA>Er&J23U#;(i39CI^s= zq|$?7cVp_i#lr|jz!4-Psq|>reVCdaM=%0TAQ?%eC)4aunw=&+7IOx3Do9IV%ef%u zjreEj1k68{i%u_+UP`I6nEGz<3W8CSt4Kyt>9u^}dcJUj^g_%{%;g|0g)O&(+%e+y zIssFuf9ayrd!+YM>K3NHTYQLM)Z`J8kyQFP8=vG0Pf72_Ji|N)(o)#+BFIZ4Uau1{ zm*S$+*Q9S!>N%#qTYQIL)Z{&qkyQF28$ad?pGaTDe8#*D(o)#+HOMz3Uau1{m*S$+ zAEZB1>I;>HW?|~P#SR3cCJT{_q|!y%xHw-}LOM5QDP}>Cmco|hK~@;?dYyo|6c?SY zBJE76WtjSIu^YjtNe_~dRN9-3efdH^>B^YZn64l#g)M_YhKzWi%!>)u1l!_ zOntYw0l}!rFp`l}x-lC!<-dW*m5|?5hGr&6EK(JqSIrf$5ZMMroLM|iD1;^ z6q1otdO91=kH(zCoCwlV*m5DrMI&CX6EK(JqSMQyS5oRcroLOehG5j>I+Br8 zdLtWe<_ot-FU8!(Tn*Av*m5_>JtJPP6EK(JqSFVY4^!$6roLNzj9}E{36hai`ZOD# z`HLimYByj~|@F2zNslS!x4o%}@~kE!n#ry&@XnvP^7mCi`1 znOQQ6bW+T0%+w$)g)MV~%roNkIstPjE;?O6+L2OoF!kNyA_Su*i;;|^(k0orG+$Uo zIzMJPW?_()!j_dmRvGbnoq)L%7oB#IcBj+|OntZ5i(u5G56MU>?a#*5`N9BcXUrg` zCrC?S%bFl-jd;CIz+8%pPS=xeNU0%AeYdy~!Kle5BqOPGb2e_t7q*hFi`j-54$@NC zvLnb&BVMl)Fqh(@)7_+dQffP@$4boEBax};> zBVMl)Fqh(@(-Wj8Q|buj|Fr%zf{{FfWRjlE#&h|?d4S_F7ci%Sv=p{n3Ub+q*Xsn# zrMT$yD(SV9x`?Uo7H=RJHMxmoB$eLE#@qSA9nvc?cQMz4v=p}75Awi>*Xsn#rMT$y z5$WTUx`(On7M~&*HF<_)B$YnT#uxd*OVWoiuP{%7v=p|y3G&v6*Xsn#rMT$yJ?V#( zdX1^?7C#{vHTjHWB$a;2#;^IpH_~@8-!UJ9v=p}d4D!o}*Xsn#rMT$y59!~O`hltM z7DvzFZ}*(qWDJr~DWzlQ)GzSwv(Fj%!g$i(`P>A|s30wcEtA4eHsbX<0dpxXI-N>7 zt?uM6`b129w>SgAsL4zuBdK&&HqOo$=8#T_nTweoq@}QBevk!5yj~|@F2zNs3rQEH z)I3amx3~nssL4_!BdK&*HZIQ>R*-hYti&u1(o)#c8KldI*Xsn#rMT#{hqO1PR$=P9 z#eM{%CaaN*q|$+G9LyJnNV{X!VETfz6t=7jvfhZ->jccDxaf44bYn`b#ng9;n-Pqf zY(X-TO1Ea?wtQhb>4umcm`y=i3R`vs*=@w@bpqy6Ty(mZbYDvC#MF0-2M~;!97Hmb zN)Kh@;e6o;>7JOQnEgRo3R{i`Ibp=>bpqy6Ty%Ph^mIxc!_;?+XAz8=oI^5_O3!EG zg?!;6>B*Q&m@`3I3R|uOxoX7gbpqy6Ty%P!^hQcu#?*I9v^qn43Xb3R@lqd1S=vbpqy6Ty*+`^l3^xz|?n(&k>B8yg)LNN?&HEoC; zm}fy+3R~U4%t~n9o64 z3R`{$`D4WEbpqy6Ty#2WE`Ph{YA1g@e}U9@i(^R{H5rFwB$bYzTfgv6nJ{)ri;Y1k9zl=yW>ijFg&;sqYqNAs988jbtR1&dJ8P`NBNXX)*IL zGlR4gwsZtpXvFJv0_IX&bh?;yNlGoi)OU-^5R95EM>3L1S7hVLd|?&oqL@z1(jYB` zE!{zSjCj3Hz+8%pPWwpvQ>qJ7-z^Rx7&RG0GLlM%vT;qmu$HtpW*ugAke0%h4MB#D zc)d=*T#AcMH<4~msr8upZgDGuQIl;*MpEhaY}}DA>?GY7vkS8&NK0YMo*;XTc)d=* zT#AcM_mdt-soj|RZt)O;QIo?+MpEgKY&@DT93$Nqa~yLpNK0YM$snhUc)d=*T#AcM z&yb!?sS}v`Zt*;VQIiWuMpEg;Y`l~&TqZpoa|LrQNK0YMwIJ7xc)d=*T#AcMZ<5|h zsjHa!Zt)I+QIoq!MpEg$Y`mW@JRrRh^AK}8NK0YM;~-Crc)d=*T#AcMpOHRKsYjUl zZt*38QIl6lMpEhPY^$w{FZv&l`fhPN zDWfJ6kc_0#iSz0g{wb5@jeKD;>FAg#m~lZ`3R|WHnQp}Ebpqy6Ty#25P~T%ixIstPjE;?OGx-6v@V(Poa6$nO6 zRw5ZmrK_^BGhgT;T@urcSstXNu%$OhpAoOu37AW9(dlZ^ft2dO)OU+R2u4lTAQ?%e zYqN1(zObIOKV}1FFi1;b%f=v^jCj3Hz+8%pPPdS5O{rl_eYdzB!Kld&BqOPGXEyH2 z7j~0wj@g6R7Nn)HWnYl}M!a4pU@pZ)rw2(7rPN+beYbc7!KlemBqOQxST-Kd7fz5K zh&hQl9HgbN<#doUM!a4pU@pZ)r{_q|r_?D-eYbcK!Kle4BqOQxayDMc7p{_?jk$)o z5TvEBFSM zA z*Xsn#rMT$yE9tkC`iQCT7JncZHTj8TB$fWk#^3qEAJQ)|e=*;Kv=p|Co0UY zy-vVfii=LifsCK8o%}@~g{kirCn6X%nS^8{l}?^tzrg>Uk}R1@IyPn+W69 zW*YH&oq)L%7oE-~os&}2G4i%yr5u1KlHnEGyU6@pQdP9!6#v@09C^MxMLWih>&l|fnxTl#~nHsbX<0dpxX zIvpe(N~u0feYdz4!KlePBqOPGeb@m^eYZG_U<7PLGLlL+g*I_mWxg=lU_-w^O*W>@fw0rlj}%EQt6GbmoW9+;w=Ot;5L$xRC*`uRZM-icn`q{ zxQ}Ecl|D$bn`!ol^lr>!%)=lpg)L8mJTu~-r4um!SS~t!LHaVKo?z;`#n%W%P2M0G zNu_VYKF8E|i|-MPfDcGUQt8LAuQ2u9;%5XS;0uzGRQff|-lf@h(oZozFyDf-6t?^d z^4o}imQKL@W4Y+`FX^ZS+R6Wq(Endq;CG8-dAB%b!N|MC?thn`ZZ&QJf8O$LaqNPT zPjFbq{|}7zl8GTEb8k}26wHJmErl)9f=oB!hB^WBC%Nc!Ch08q{^vhaG46);; znEGyU9fA?C9?3{5-H>JjX||DcZOkUjaFCY5mMuZH8u8E437CH@7oBb=-H}q8G4bu1!2u4kwA{j}g&+>)m`N9j*2Qe=(kAt)nw!9AV#)#MJ1Wcv=rHfAAk-kr`HV)#i$yj~|@F2zNsQ%I-Qo&2}+ z37GnBaXNxglNm@xQt8Z;nw2H9Nhin5!AuL%QrI#t$b2JSuM;qr;-b?I(uFBC7gOIY zE=DkFvINOUDqWh5%kqWgqzhtJU={^wDQsC4q|=Dk>jccDxahQ-v?rxjV(PoaJ_MsC z{YXYq>FR78$QK4lyJChgy+K+ETh<0yXTbu2F2u4jdBN<7h zTe5L$zOapSeav>u#vm<)EjxqkGUD|*0dpxXI^9FMH>Gx9>bu4L2u4i~AQ?%e2ea`| zzHpdycgzvYz921yEysc!H{$g=0dpxXIz35xDy5EM>bu1=2u4lLA{j}g=d$s9zHou` zM9f9Z=^!nIEti8_G2-<)0dpxXI=x1EJ*6&T>bu382u4kAAsI=fx3lq1zHpcHYRo;% zjUX+BEf0b`G~)F-0dpxXI(bu2f2u4kwBN<7hFS7AvzVM3lQOs-1(;zK{ zEpLOoGvf6+0dpxXI{iTUF{R#M>bu3y2u4l5AQ?%eU$gOBzVMy&easKcrywnbEx&^N zHsbX<0dpxXI{iyJYN2-W$MYwqzFQo#kiXqE{m)n=qf$!8Ev#SQ-)CPq@`VYcfAYDB zn9)I63R@C~8cm>EG@ z3R@Ng=`iB;IstPjE;?OAx;UlgW9qxbr3gk%mLVBQrOUH%MZU0-bYaXY%#t82g)Ln{ zx{Y|fPQYA>i%xq<`%D#LNJdiWwrt#9BJ zq||XteYbcH!Klf3BqOQxLN;E^7cP;Win)wA8>FSM?M!a4pU@pZ)r#DD%rqmV8 z|7rbg1S5F|$t1m-jra0}`vBKt9$;<-X(?=Z6y&iHuh$8fOL5WZQ_^QC^$=6vExtf7 zYVs1vNGg4mjj!{CH>6Ku-eR5yX(?=ZALN4(uh$8fOL5WZC(_R;^$t_tEq+BXYVr-q zNGkoFjX&~*pQImSeqp`@X(?>^6XdTEuh$8fOL5WZ=tcbPUZkD;MgI*_-z|i%w^d&P=H(nEGyUHiA); zIY>rQ>D+9bmoLmGogT9QGb>0-VaviGi;Q@^PQYA>i%yr2E={QpOntYw9Koo`3M3<` zbY(WK$`?9G7sqsAmIY}kZ0QNoYsBky0_IX&blOk4I;FZX_1)qif>DzpBqOPGO*XF0 z7uJ#X#jM8+1ZgR384j}1h}Y``%%!;KbTjFel-hu)?-sWq7&Y0BWF(dD$i|)d!Yl-h%-?-mau7&SS9WF(ay&BkN-!g135F()vG zg0vL2oCgF@G@Mg0vL2j9NUharEMfc)d=* zT#AcM$AXMoteyNt{|i#zElwb1)MO%(kyJWqas9$SWpb8GAsrJl6*E3aOJU3OATx}3 zy-vVfii=KXk|?#jm9`NAI3EirpB+k>TfcsL28(BdN3_8yDsa zi%4h3EXK?W(o)#6G{`a|Uau1{m*S$+6{IUuY6+&kTkJ$IYSM*dB$ak&V^6-&OS(L! z53?#rOJU3EAOl9cUMFBK#YLw>q-#>DA5-5gu0t?tvL4AuD&3Hc!}-ES(!rQbn6*J# z3R|`W*=oe=bpqy6Ty(mfbVo{U#?*I_#$@O7~>r-h5#n>9&~tn4Ljd3R?~a zIb_7^bpqy6Ty%Pb^k_;Qz|?n(#}SO0oIo;?N>66vseIuy>EW0&m}5a&3R}(vId8=4 zbpqy6Ty%Po^ioQl#ng9;R}hSvTtzaHO0Q+(^?cz5>4lh^n9D(03R`XmxnsoZbpqy6 zTy%Pm^nOa+!qj(*4-t%-JVG*(N*`zAlYHSR>D`!Tm8qH}n72V%3R}Jg`DVoHbpqy6Ty*+_^k+(a z!TeY2e-HuOKajE#tzEH{$g=0dpxXI-N*5X{mPd z7kw~u!MAO%u>vPAT5P0%Y&>i;`KTKb15!5T}9fNQp+&) z-C{R_QIj4dBdN4E8~gHwe$tgOt1(?cS_)eRgA5t*dYyo|6c?SYC0&|G=rLbjNknKjiUMFBK#YLw(Nq42xR!n`jxCgSQ@Jc3{Z97QscN{{82>`${3q=#cpVvYxCDQr0% zPS25^PpMOw`fl+ef>D!8NJdiW<*;Wl_1)rC1S8-Yl95z;J?sTc zeYbcM!3em8WF(c|PO~d%c9--<%stGVAT5P04}v^2;-94xF#lLCI(bu2f z2u4kwBN<7hFTy^;)OU-o5R8D=NJdiWo3KwY_1)q-1S8-*l95#UA&rSxvG!|xV<9r^#uoMj{L7JL3(rn=QUUD@a$m_dowxf~oHoI}wcj33eeFNu}Lkmt*R?#a;v> zpbyDND(w%u3RB-L4j>o-gGfeF=}?;Wq}f{1)iLWZYl5^CwrmJ8Y{WlHCt&`uTy(mL zbaP6r$JBR=TM>+!Y(p}VO1FpIh^g-ucOn=8yO4~e(%oUVVCuWYy$D9YJ|rWlbbp%d zNV9{adtwe@4g_f_Y&jC-s1g4xoq+kra?$B=(i16l7*pRZo zkW)syUMFBK#YLxQNYAF!2~2&rcpky1$ps`Msq|ttUdk6Plb(*bf;ktYrLg5%kn2Xg zUMFBK#YLw#NpGdpRZM-icn86#$z3EPsq|hp-p>~vklu)Sh`Al4rLg63kS9jGUMFBK z#YLyjNS~+FBTRj__!7aW$txrysq}R=zR4Hfl0J=jhj|gCrLg5gkdH>ZUMFBK#YLx| zNx!7jdrW<|_zl6R$#*0psq{xS{>&GCk$#H#jrkg+rLg61kWnit;`KTKb15!59Ro6U zg?926{SQcew>X}ZQIiQsMpEg-74-}J`|K-5zA%||bj%dYxF9WsEz^QbH{$g=0dpxX zI-N;6E2XAl>bu1`2u4ljA{j}g^RjV%zOaCFMob50c953BmPJ7p8}WLbfVmVGoh~I^ zmQo8b_1)qM1fwP^k&L9$RoU2?FLaSEiRs2H57JWD(i^1Dh}Y``%%!;KbT#QfO7&ps zyTu^{qb6&RjHJ@F*|;uWSWns?vjH<0q@}QBV~|Zoyj~|@F2zNsTS&L2)G(<ilLd z)MN*ekyN@f8+YXkyGb|4?7?gc(o)#6FUWo)Uau1{m*S$+gQSO2YA>d~TRehb)Z{3V zkyLst8;|D;CrA&(oWvXs(o)!RI>;F#Uau1{m*S$+bEM}}>J+BFTfB&1)Z`M9kyLs) z8?WRGS4q#tT*F)l(o)!RBgjo7Uau1{m*S$++oX3=>N=*rTfB#0)Z{*rkyQF18z1Hi zk4SIDJjUD&(o)#+G{`d}Uau1{m*S$+7o;y!>IvrmwEi`Mk$i(>lD^HxclpA5faftE zFt38N6t;W{^4W;j>jccDxajmN>9>^nh^g-ue;^n&`H5sCmHx`c-}%BH(l0T8G2er< z6t;|BIkIug%8GcsPQYA>i%!RZj9;mp{6!yysqYpiA{aH9gk&U@PF`8Rz`xI)B~wYq z#!SOZ2+~s6G9$=LBVMl)Fqh(@)7hkRQffM;zFVA!VANzjl95!pAR9aKg@vTEVisZM z25Bj5SrTNa5wF(?m`icd>2lH)DYY0=-z}~}Fly3?WF(b#Wn*`~&_lW`rWdm^NK0W$ ze~{Hiyj~|@F2zNsgQP<#)rYC?7S|#eHCcybB$cku#tr$xFzG;#a{?U zO@1R8Nu__X@o&B`Y8C&P5HlL{Ge}Ee%h**T8^;;(dYyo|6c?RN0GYT-JNb(~22^$w(?4 z&c==T!Y0z8n9Z1VL0Sr1wg%Z|#Orke=2BdAx`T9QN^QZ^cZ<6bjGF90GLlO7X5+qm zVL$2im;;zyL0Sr14h1=E#Orke=2BdAdX)57N*%=1cZ(+wjGCN8GLlM9W#j35;SA}K zn6sGUL0Sr1&Ih?*#Orke=2BdAdWrOMN}a>hcZ*jMjGA0SGLlNKXXA~0;U?+Dm|K`D zL0Sr1?gY7O#Orke=2BdAdY|+`O5MiPcZ-h@jG8<~GLlN4WaHC(;Th?@nCF;>L0Sr1 zUIuw(#Orke=2BdA`iAsvO1;3;cZ=^4jGBBvGLlL^X5*)P;WO#$m@k-jL0Sr1z6JSi z#Orke=2BdA`jhlmN`1xDcZ+`zjGFvKGLlM1b=EKZQ$}}=d|^x{|Cx}_jm7*;Nu`UkaY??glyqLqGE7I1mco`5K~@^^ zdYyo|6c?R#l6Ixka!h@<*n?oyq!-CZD(%b0{(NCI>8h9kOm~o$!j_>RYm9ikPQYA> zi%!>(u1~2!OntXFj9}DcBa)F+x+xns=L=g%*T!tcYzWd)*s?vy4kKQ#6EK(JqSIZZ zyHjc#roLO;i(u4bACi$&x<4BaH$cg7sT>vaO=Qe1R8g>-7&$zSvdnEz`1bOa+g z1IZ+vnNqW|WH!L$m^qkfL0Sr1<^`E=#Orke=2BdA+CjQ7rRHMlyT!!_MopF=8A+u} zvvFCzu$**3%nHn+AT5P0tAcbI@p_$rxfBLsq|df6PWsL@dAPoa1qH!D!ml; zG^V~=ynPVbT4PpMm& z`fl+df>D!4NJdiWbu2n2u4l5BN<7hKf->()OU-&5R8D| zNJdiWpRivs_1)sAZvI|(S70=f5vz1e_eis!X*Q1ZZ_Iei*dQ&1Efc#(e#s;w{#iN! z^N;1C(rVZ>#?*I<(-DlC%s?`dN@s?hjH&MyXCoK^bC8Ur(z#)$Vd}fZ`3Oe9 z0wg1;v?IS{R+=p$ofoqhvoJ_YVaw7W%Z&JE=>*I_mWxhTkgjwoy<1%9cZ;8Sx7gV| z@@}#B-(`tgb?bY1x7d|Wa9Dc&2S$5IUx?KZ{V@ZW-XJZ7Eki-p7;!_LfccYLbh?go zy?g)jpFvE0w>XSo^iOajl95!pDePKIeYdy;!3fxjWF(bt3%dbR-!1MyFamZW8A+wP z(rj~@?IGPBvlp{FNK0YM{vZd8_-E+^%s-ZkP7jeDPN{vE`fl+kf>D!WNJdiW@vsLm z_1)r01S8-Sl95z;I_wcleYbcP!3a2qWF(cIPqPzgc9HZ<%q7f)AT5P0SAtwM;-94x zF#lLCI=xPMBc(25>bu2T2u4kABN<7hcfwx7)OU;b5R8EPNJdiWgRnO-_1)ql1S8-v zl95#UB+c%o*)!6IG0!nigR~U3ybSWnh<}z&!2Dym==2Tg+mw2NsqYrwBN#RLfMg_< zehm8>Q{OFqMlb@tAQ?%eU&Fq`)bu-o5%2@aNGkoAW}njRH|e*SKbT)ZS_)f6^^E+I z(LELM&(aB)e=HZBjs+Rlqn-R={R>jxElwb1)MO%(kyJXVXXFc$vt$bCn3$=U@j+S& zTc!t@VZ`fo0;W>`(nY7UNN1C%`U%!(i_g)MzS`i*$K zPQYA>i%thf2UDsSQ{OGFK`?5v7Rg8|U6+mP^Mwtht7C>SLqS>!TQ&vRY{ctz0_IX& zbh?#vTS{%j)OU+J5R97aL^6^}cV*-5d|?mimYBVm?Lk@!TlNPzV8rWn0_IX&bb5&N za7yjN)OU+V5saD~Lo$*|k7whFeBmVN!I)E+BSBgUTh0VIYsBky0_IX&bb6ljLQ0*+ z)OU-Q5R95!MlzC0uVmxZeBm1DxtQyii$PinTW$uqWyI@s0_IX&bb5#MZc5$2)OU;b z5saEVKr)g_A71ZZp7<#0_IX&bo!F?RZ2a@)OU+-5R96< zMKY2~-(}ijz4Z(H`|MdVjdWbhbj-vcErl&JgUmAG^*RA_DK0vlLpnF5W?<^O#rX(EO%@;- zNu?dxxG-N>L^?ZWF=k$nmco{$L6#ZudYyo|6c?SYAYGYKOEC4_Vkd%8lP)A9skA#A zd-8=|(&aIIm{mbq3R_kO88G7YIstPjE;=0|U6WG%nEGyU9fDDl^+-li>4t0^&KEY4 z4#sT4tPRpq*s>+aRwG`o6EK(JqSNi9J5p*hroLO;g<#ZVHBh}Y``%%!;K zbRy}bKJDZ$`dCbTw>SmCsL50$BdK&+U;P6AK6{qTAe|616EitTOJU3GAajg(y-vVf zii=L?k--V$wDL}sdP~`F3uO0kj{-+idhh(rLbjrkQGL}UMFBK#YLy9 zNIO$%8K%Bl>_#wZ(t~6qmG)+1U%t>!x-w=prYlHGVas5UAtPR|6EK(JqSLjc>r!d} zQ{OFaKrm`DjASI0Zp_9_`NC$>H8EQ->w~luwrmTs-H6xg1k9zl=yWIPu9Vt}sqYr| zAQ&~-i)18~?#ssg`N9Fx9We(nyMwe8wj2&}#E94H1k9zl==2!r@sv7*sqYp~A{aF} zg=8d^p3cTI`NCP!qcP_&CxWyTwp<8u(TLaU1k9zl==3t_m6SSKF!8w z`NDJ3`!O#tkAk!mw!8}R+KAWd1k9zl==3e=yOer~sqYp)AQ(0Ih-4&{e#*wr`N9{{ zH!)u^?}M}ywtNrr!-&`G1k9zl==2xq@09w6sqYs5A{aFp)zAN8(qE<0(f#!c|CBNP zBVQN`@H3wqhxwCIErl%;!cR2f^*RA_DK0vlOgg3Rbu2W1fwQ>NJdg=e>Sep7Y0Z>V+Juj zL0Sr1)&yB=#Orke=2BdAx}J1HN)2J^yTy$NMol&$8A+v^vvEtlu$6RO%r?w$ke0%h z9YJ;)@p_$rxfB2jHJ>7*?2HtI7GTD<}hY&ke0%hqd|@t z@p_$rxfBV zQm--f-Qp(%qb8q`jHJ>p+4wbI_(u9J<~!zNke0%hpFw^Z@p_$rxfB>D z-Qwug{Ow*{n~Xs+Dy4Mn>iUI$%DB}dUl>pNJD;0?85N|Zuw_#C$ws_hCtxncMW<6q zr`4VOMW2YN?-pku7&V!RWF(c&%EsCG!W_~mF>^7~gR~U3%n!1_h}Y``%%!;KbRp@Y zl$wXB?-rLJ7&TdnWF(a?%f{vT!V1!kn3b5tL0Sr1I)ii>@p_$rxfBY` zQt6>=Je)5aA>9*m6th1_OJU3LASaA?y-vVfii=K9k)BSeW0?AG@hpN-lXFN$QtA0@ zypS(kBt02(33Db$OJU2EAXkley-vVfii=LKlioY6Z1Jp zOJU3JAb*T_y-vVfii=K14e+;nKs)*4`3t1JTO3QusL41aBdK)!K>fl$Wx~M77bcSa z&F3az#sq08Y?%^%su8c(37AW9(dl&387VaxQ{OGlLNIDF8_7s2os*4o^M!e&(_-dh zW(H{~Z0QKH(1_RT1k9zl=yWmZl9XD2`LEV5LokxdkxbGR*|;)aSOu^srW3O?NK0W$ zcaR<cZ4_ivtKoO$L#Sq|%{mT$3-XCGCw_hglt@rLbi~kYOWU zuM;qr;-b?{q?=P}J*K`}+=^h-WE+x^RJuJIcjOB@NjJvq!fXlBQrNO5$X+8}uM;qr z;-b_2qz6)JH>SQ@JcMA>$vRC**EkLC-ql|Bl48&lscK0z=7o+24ZrO)z9?x)!c z(#J6`G0%gv6t=t$^2UgNmQKL*WB<`br|(GLr_?JU_EBfn&<5&tZm zfceLA(dl@Q34_|nAN$dm`fhO&f>D#nNJdiWl(6G4_1)q$1S4QNl95z8BkV*>eYZFZ z!3da*WF(c&860UgHRb1#&WxFlnH!{~u%#o&LL>fJIsx;K<)YKYq)Sq20j9oNT!vuO zWI2+NRJtPUB20a^xC+4t=tMG-O1r`?#ng9;JqSiXFOrc|+LvZ4(`+?qcgz5$KS)bq z%TSOtM*OpM0_GpfMW^dX*SnP7EiUrA#W%cL93C8bx7hdZGU!&DfFb;ejrjzJW%K{Q zXcJpQY=_tuvjejwNK0YMt{}UOxS>wK{7Ei4-AlU9z5n^oPE38bcmToZpWs0xBdPRI z*gcr~Zt)0$5pWdANGd%Rc0Z=RTReea1e`=Nl1fjd+2J%hLwY>sEar5Omco|vK`t2a z&(aB)e=HZBULw7mQs*%B-QraQqbApojHJ@*VJ~9pyTzLbM!+p3BdPRu*ejU&Zt*UH z5pWO5NGiRbW;fF8A?cl%N0JVP9hEyTwlkM!;tzBdPRDn!Qc4Z=@e%zGJ=yX(?>^ z8RVA{|16z=`Nwk6=^xU+DfI(W-z|P8}L)Hg0I7*>uuLF*7jJg0vL2%nCBwh<}z&!2Dym=yWdW zyp)=WsqYpSAQ(02Kr)g_7v>9#@`c5ub7GcY<_BphY*`j$xe>3|37AU#OBbE4BwdwK zOELA`Vi$r@lWrsd-H`p(iJiNn9d+Ag)IX?290>VPQYA>i%!>&u1%@cnEGyU zJ%Uk_4M;{(>2Nk~%ojG14#jN7tP9do*s?XqHX~lI6EK(JqSGCuJ5y>4roLO;jbPMd z50a5ox;Gp5i%utzPF|y({PiD)sqYr2A{aH9hGZm_PEV;BSu&G! zV$3YelprmIEpvj*HRAO;0dpxXI-O6tAf;ww>bu2-2u4j7AsI=fi?eY_zOa;ZUd%E~ zN064nmK8x(8u5CafVmVGopzFTrPOjveYeXSo)MO))kyN@V8#m_*TS(W&Y{hH{(o)#6J;)9t zUau1{m*S$+U8K8HY8$4$TilCa)MOu$kyN@r8xQ0Q2T6Cv9K!4g(o)!RB*;-CUau1{ zm*S$+M*9hTReqe)Z{dhkyLsn8_(to=SYvmoX4CD(o)!RF~}t&Uau1{m*S$+ zE2LLb>H?;|TfB~7)Z_+|kyLs!8*k+cw@EL@+`(K6(o)!RFUWl(Uau1{m*S$+hop~E z>Mo|fTYQ3G)Z{6WkyQFD8=vP3FGwH6yu>^X(o)#+I>;L%Uau1{m*S$+cckxA>J_HG zTl|P%)Z`PAkyQFQ8^7cWUrFD_e8YSQ(o)#+Bgju9Uau1{m*S$+-=u$1>N}>sTO75P zzujwVlhH^xBiK*`v`w)zp z^dlKbrK_`XAYT|H?TQ(~^ag1uY*`y*oe{6s37AW9(dh=#;gni~sqYpyAs98;jASI0 zZpp^2`NB5R^)cHq8-uhIw(JbD%ZS(O1k9zl=yVV1-jv#bsqYr|BN#O~fMg_<9?Zr= z`NCn+-7!Zn`+~F-wj2v`+=$of1k9zl==3D%sgyd3sqYrgAQ&|{i)18~p3BDb`N9R# z6EPPtr-QTe$B>j`NDV7_c1>(pMta$w)_h6 z+lbfe1k9zl==3k?sCC-OAJ3nd`fhQ|I{tRo^gm;fj7ljTx2}HSpE7>k$QLG%{>kSi zVnzpPDQuY>eu@#V*9n+Qanb2C(&;HR2~*!K&O|V3G7HH_DxIB;bMl3`q*G(&VP*tr zDQsB~q{E2U>jccDxaf2d>Ee`{kE!n#mm(N7S%zdJl`hZ575TzS(uFarFiV286t;8) z={Dl^IstPjE;{Wc?MtanOntYw8o{W^0FseZI+%?^`NA5~o|v_m{va)dE$f49Fyi$( z0dpxXI^9URDW%q7>bu1)2u4k|A{j}g+p=+czOaLIIA$kibC8z8mfb=281Z_YfVmVG zo$e#upHjOp_1)q@1fwR0kc_0#!`XNwUpPv-H|7}TK#-QgmJ>lv8u5CafVmVGot`E= zlTybq_1)q*1fwSBk&L9$3)y%vU${hiD&{igY><}1ma9Ro8S#3ZfVmVGo!%h5nNn9U z_1)ra1fwQ*kc_0#yV-azU${?tJ>~)CR*;s$mPbJz8}WLbfVmVGojxUfmQoKf_1)qN z1fwP|k&L9$SK0VFUwA|MB<3yVd61UEmiIwE81Z_YfVmVGoqi(yoKo*F_1)rE1fwS3 zkc_0#@7eexU-(J-G3FQMOOTermOnxM8u5CafVmVGosM45-|qF=ssDK!q`q4mN6M(l zcqAjKbi(@jg@4M#^&?-HL^>*FGG=U$mco{)L8ck;dYyo|6c?S&Af1^~Q!w@2;%o$? zCUcOCq|&+BI4@tAPdYtj0cKW^mco{WK^7VDdYyo|6c?Q?AzhkM9hmxVaXErflNCrt zQt8TUT$L|$k}i(v!Ym8YQrOZHq}Pbo>jccDxahQ>bahH~W9qxbK?I{FLr6wa>6&a@ zn=h;*?TcBD83@u+*fJbsqYy`PN_@`Z<_H)9@Q?gVKmYbu1q2u4kIA{j}gyRvb2zOaXMOUz!(_8={VE&GEUFyi$(0dpxXIz2>sIHmSs>bu3G z2u4kgAsI=f$FuQ7zHpNCV9Y7ZksvLFEoXw9HRAO;0dpxXIz3N%A*D`Z>bu2D2u4jV zBN<7hSF-VHzHp87T+DUM#UL$(EjNSQGUD|*0dpxXI=w@BH>GZ1>bu4J2u4jFAQ?%e z53})6zVMjzcFYsZy&x@xEzg2HH{$g=0dpxXI(bu1^2u4lbA{j}g@4~*o z)OU*?5R8D2NJdiWr?9Uv_1)qZ1S8-pl95#UEx+V_n*AXC9P<3q@!DK#5Y z-z_dgFlw?0$w(?)9CjY2zFS<1U<52fGLlM{hwZ@BcZ(|#jDS^0Mp9{Knk`AQZqgMo zJ(#W_Erl(8LHdpOXXymYKbDJ52S^7~suxq=Ev`W@YO)r|NGe?yb~UEHTik$P1Pmh? zNu?XZ4q@uM#mxvtz!oGUsdQ_atxvPUebLo zrFV;q{ciCo?-maXkGxy#|99ExR)>Hg{E3741c&AD|G;PyM?)NkI2LmPb0kPhVaur? zr;WIwPQd(0E;>C+dd|K7`OisAeYbc4!RVjhMI8DgG`mB3J?1Xvc953Bmis{-81c{237CH@7o9#LeVkJFF!kNy zQv{6j|@zjVXacZ=gl83E&wjHJ>D8%LV`O|wa)V>gb}oQ#jHJ@d*|;TN z*h;!CW*cTWNK0YMjvzaYc)d=*T#AcMca!c(sqL8hZgC%iQIq{hMpEg4Y&@7R93tHn za~QKXNK0YM(ICf+c)d=*T#AcMPmrEWsUw*BZt*mNQIj)BMpEh7Y&@4QoF_dVa{+TI zNK0YMr68A$c)d=*T#AcMuaaI%sf(EUZt(_!QInfUMpEgmY`mQ>+#$UZa~E?xNK0YM z{U8sFc)d=*T#AcMACW#zse73EZt*FCQIls#MpEhXYtE zc)d=*T#AcM-;;hwsn?kLZt)X>QIpR|MpEgQZ2X!pd?S4q^BwasNK0YM&mg~yc)d=* zT#AcM|B(JosUMj7ZgKP`{%UWkO~xP@l~Ou(Q~d(}KKrJTFN`PsozG3cj0)0H*fJ^n zWFua$6EK(JqSL9Q)9OzClVT#KzFVAuVANzLl95z8D;sC$3v)=P#LUG^57JWDGC#-y zBVMl)Fqh(@(}kpqQfeNizFS;^VANzOl95!pEE|{S3oA%FVpd`n2Wcs6=?v0k#Orke z=2BdA+C$o#QmZia-C{q2QIpk3MpEfOHV)vaO=Qe1R8 zOu8|p)?(_r#mxvtO|~EzNu^t}aa+EyopeLY4$P(?Erl(+g6uZp^*RA_DK0wQOS&(m zc4F$g#RCXNO%5U%Nu`If@o>Iygmh2LQOy1zErl(|gPbtp^*RA_DK0uaMS41=j$!J% z#j^-TP0k@1Nu}qr@j||Ek@RHDCCr&1Erl&tf?PG?^*RA_DK0v_PI@DyE@SGu#ajqQ zO>QF@Nu_tP@ov6wkMvs1eay`uErl%)gFG_g^*RA_DK0vFLi#kN9$@Ob#peh{O082k z@4fflgRlYw0wiH1ArRhs?>%Q_rLv+2Pef+cdh5w=5A^Tou74lkZ}$Q1)c;)sq`q4m zN6M(lcqAjKbi#pp1OGnzfsq>~k^akdlQCn1v=p{X4L{9@*Xsn#rTEb44APk?H3d`O zEzU+TYBC4ONGhG1jq`HDeA4ML3ox^Sv=p{13bNRU*Xsn#rTEb4QqpB9wGi_^TE7Cp zNUlUONmpg#>fEpfU`fnc%<>>Dg)QrYY%t>WIstPjK6JW?baP6r!_;?+TM>+!Y(p}V zO1Ed@j@+=5bYsje%$6W6g)Mu6>^0)`IstPjK6JXD^gv4O#?*I!Kld(BqOQxXEy%I4Zlf0$Na&33(`{9@-N8fgB9_5 zoq)L%A37ZiGVY*u@)!LtNPV|Bfs|2`iAY9L>7;}8hEZkm!I2xLkdBF&iWwiIrLbjs zkQqk2UMFBK#fMI3kx#kuHl_k69U{rLbjVkWEIsUMFBK z#fMI}kZw(>4Ve0FaXW%hlO0G#Qt8fY+?5-4lWvaLgV`3OrLbjRko`uyUMFBK#fMH0 zk{(K_y_ouLu>--V$q^(Ysq| z5>wwToFJmr%-J91ZZp7<#0_IYD==3G&tCV_*sqYrwAQ&}yi)18~ zzRSkm|Ev`W@YO)r|NGe^Ijq7v6 z2GSKV8!@Ycv=p{%4zk6F*Xsn#rTEb4Hqz}WwFy(-E$&1xYO)K-NGjc(jeBy#Uec{G z`!G9#v=p`+2y)Pf*Xsn#rTEb4VbYG2+K;L47LOtrH93Z4B$Xb|#uK^WB51rm4y`NIIF!kNyLj z51qayeUnnpG451sxX z{h3l+ze~^r%(!bgGFE@-n%s&%i#$bL0X(?mT#Orke=2Cp7&Y00WF(dD&BlGXVL$2im;;zyL0Sr14h1=E#Orke=2Cp<^a$zElsbs{U#&lm zU?fi$}B?q>O+`NJdiW?}-ux3~zw2w03{B$X}+I~P;mEiOYa z0+u5gNu?{&Y+;(MB3&A@8nZG;OJU2}AnT0y$La*kKb8-jZXn&5Qfn~v-Qs2hqb6IB zjHJ@7Vb^2oyT$DYM!*gvBdK&}*iD%FZgDq)5wHizNGjc%X4}$iKk2TR1DJh5S_)eZ z1vzZQKT9WI{;_=M^a$zElsbs1?-q|E7&SS8WF(cI4BLUJ?-oxX7y+k|jHJ>tVUJEg%NJdiW%&?O&_1)rZ1S4P$ zl95z8H|#V_eYZFt!3bD@WF(a?%rBXhW{XMZ#Vo-r3er;8vMk7QBmP-B0rQXLL#HcA zSEbZaOntYw2EnMwS|lT>bY0jLnEGyU1A-B-5y?m@-4u2;rlwmEjDW33MpEgvG+Uo$ zJ4iRj?8Iyj(o)#6JIEd*{#iN!^N;02r~63vr_?S?eYbcJ!Kle0BqOQxaBk?x4M#}# z#vH{Q2+~s6ay-ZhBVMl)FqQf*edx54^i)b6!_;?+XAq2;%VavrJJx07F2LZ_G8!bu1|2u4lrA{j}g_pGr6_1)r21fwRekc_0#*V*_cH@qc%8uJeGB1lVN%ZDHzjd;CI zz+8$Coqi_$l2Y$6_1)q(1fwS3k&L9$AKCabH~b>~6!RPNHAqWg%ikdXjCj3Hz+8$C zosK!mU+1IR$=}sKAobnicv419CLkF}r4x_V8~FFxkB;0hnRIl_6wJ6FErl)9f=oB! z^*RA_DL!;MlXO-}O~urAi*pc+n#@Hql1k@gjccD_|WNP(km&|gQ@Qp`w@(q z3?LavrGwdcEjJ92UW&Pnxf-OUuw^*NO(R~f6EK(JL#MY%@1)cXOntX_55cI(eIz5P z^g%X0%ngr7Z^b;u+zrxF*zz>UGb3KF6EK(JL#HoDU#8R(OntZb8o{W^8zdvC^ldi2 z%MI^IpT~T_yb97%*zzgJXCq#(6EK(JL#JO!zopbiOntZb1Hq`tPb4F$^j9|i&JBM^ zzr_5-d=Ju6*fRRq$i^|pD&qAz0dpxnbUF@X{4wq1FZw@_`fhO|DWfKnkc_0#$;avq z{2wv0WGd;{m}!^^L0Sr1W(1jO#Orke=2Cpc zm<^a!L0Sr1HU-&i#Orke=2Cpk$`aT;!hXHRs4^`}rjw43nSq%Uq@}QBR*>07yj~|@F2#pV=aSA# zshODiZgByEQImy8MpEgbY+RfhmXOYgS&Eq-q@}QBd5{%Gyj~|@F2#pVSCOtxsb!e@ zZgDMwQImB@MpEheY}}9=Hj=K4*@RgWq@}QBOOUNbyj~|@F2#pVx0CKjsm+-BZgCfa zQIp+BMpEgXY}}h0_K|Lj*^k*7q@}RsV30#byj~|@F2#pVJ4lbD)B#L=w|ES}sL638 zBdPR6HlEB4our3jPGOD)X(?4TKIjj8VzA0Zeud5mNvl|ISFr@7%7>Ajfe zn1?}H3R_+Vd1b`wbpqy6eCYHI>D!cgfvN8n-y;|``G903m43{|Pr2bU>Fby;n0G;1 z3R}Jf`EJDPbpqy6eCYHi>93UfimC4w{~#DO`HN&EmHx}d(I-Z37;}PuCgi%YnBPHK z3R}j9pJ2r6bpqy6eCTu%>EsjI$zSwwnEGyUDuPjyX-Gy=>GTuzhEZikmdqrb7&8kq zB}hwQ%bXx{jd;CIz+8$Coz5p+kW#ZT_1)qk1fwR4k&L9$CE2(%H!LHa7qc9*Fi1;b z%gP|DjCj3Hz+8$CovtBWn^G$<_1)rn1fwP!kc_0#joG*D!`NJdg=XEvV74W~(u#GJt#57JWDayH00BVMl)Fqh&( zr{_s8q*NECzFX`;Fly3^WF(dLW#gsXaGA6_<_hLwke0%h{vZQJyj~|@F2#pVuaOR= z)KyG!RVp2GvfePNj6FGW!#IFnxo$k>Z%VZkwoD8^$%xnM1k9!Q(CHM?sdXoR(I;T) zyT$1UMx|yT8A+uxQ)*V0%qE>2GY2y*NK0YMydd+9c)d=*T#65!E+k!)Qgbo&-Qp4i zqb5s{jHJ?K*|L6>3c)d=*T#65!t|MKaQmZia-Qq?Bqb8e> zjHJ@d*|;S)Y$aVAvkkK$NK0YMjvzaYc)d=*T#65!?k3%nQrj{0-Qqq3qbB>2jHJ>7 z*?2HF93tHna~QKXNK0YMkswEnc)d=*T#65!9w$AKQXQE3Zm|==sL3fLBdPRsHlE21 zU8Kii&SFjmX(?>!4szaz*Xsn#rTEb4Mbe&>I*0jRt?xrHl9!N7(#zR+B{y6JxDeBi z=?&6S*fJR8nh~$p37AXqq0{T6H&SWHHHp_qG^;UF!A zEf0b`G~)F-0dpxnbo!X|NlM+v)OU-|5R95UM>3L1Uu5IU-0+I@QOs-1(;zK{EpLOo zGvf6+0dpxnboznxV@kcj)OU-Y5saFAK{Ap`zh>jN-0+?BeasKcrywnbEx&^NHsbX< z0dpxnbo!U{UrPPN)OU+xI{Dk(S(}VSGAgBXTxY$3|DBS~ksBtE{>gO{F{6XD6t+wb zKgEdG>jccD_|WMz(&=?4f6*sl>bu362u4k2AsI=fv%^ls)OU+>5sZL&NJdiW{ID}H z_1)q^1S4P(l95!pIKO00nk^+=5VH)kBuGnP%ZeZ?jreEj1WZ46lsiz;+}fsdPu0ZA`OWq+4Tl zV|E5 zI)|z67W)v4np{FMl1eX!y@09j7Ox^00sTluQt3e0UQB(rcn!e_7(z0VO0TEcl{6bB z9gMk&xe=tLu;q4;J4XDobOPod%ZEIr$Jf@TV4lwW5f-00_H3E(CItU_wGIFKd&(L-Qq_C zqyGdyAsI=fpToYz)OU+t5sZLuNJdiW_pl!@_1)r61S8-Vl95#UJI%hN*bu2h z2u8qkBqOPGM%am%`fhO+f)Owq$w(@lb84j7)Rdn`Ix}WIW^Ry{!j^?W78&u+(g~P< zEFU^uLb^1i7GUbT#pMV_O;#WoNu?{pF2>Y%i>ncgfHg=)Qt8^T%P{rb;(7!lU;~no zRJt+ER;Afy(seOgFq?w36t-*&vfYS(mQKL@WBJhOPSRZ|wG~s}E$%@uYO)u}NGjbI zb_b@uTRebZ1RO*%l1dMS-HoYf2Z9lB1j$G$J(_0w)9g6u;g}PcV?kO9TRMZBGUA`5 z6EOc+K6HA9v@4}fV(Poaa|lLFx{-{e((}3DLTcr0Nx#PY!~6)+QrI%)^vK4srz_(1IstPjK6E-BWWs6f)Zc4N zeYZFX!Kle(BqOPG%ISIo|2}(`Od}l^GaWNANK0YM%pkLjc)d=*T#65!&LN$fQZq31 z-Qs)%qb3WGjHJ?q*|;b-EGC^Dvjj6QNK0YMvLMTic)d=*T#65!t|VQRQcE%Q-QpSq zqb6&SjHJ?a*|)c)d=*T#65!ZX?~EQkyXK-QrFJqb9qM zjHJ@t*|;Y+>?PeAvk$W)NK0YMfglHsc)d=*T#65!9wzNbsr{JxZt*CBQIlgxMpEhV zY&?-0PLdvq>BJlf(o)!RI>;F#Uau1{m*PXGXGzbc)G17Tw|E}GsL2H+BdPRaHumI( zUed0ZK1_Fzmco|HL9Q6_dYyo|6dyY6Cml$sOPKm@@fw0rlOZG{sq}g_-pCEZq*r5Z zVg`e>6t>(Ba>t0*>jccD_|WM+()%fO3sc`MK148T@(9UDDt(-dPjbUk(z`LwFb{&X z6t=tw^3sUc>jccD_|WNV(l;sf98=#dzC$o-@*c@ZD*cd+A9KSe(pNE`F>iyk6t;W~ z^390X>jccD_|WMO(w`~y1ykQG{zfor@(0OCD*c;{|8m3VGyF3lW(?+6ke0%hac4$0 zjyK})k z%j_U?jCj3Hz+8$Coz5ejpHj0h_1)q^1fwR4kc_0##o4$dH!LNc8?y|vAV^DL%ZeZ? zjd;CIz+8$CovtQblTynu_1)q+1fwSFk&L9$4cWLcH*6wZ6|)($Hb_fh%hn*vaO=QheyNoAi82 zox#+1ix&}$n)DzUNu|Bn*q0kFk)DgWjJXh`rLg5{kbWaxuM;qr;zOr{q}NjF3Z}kW zypCYh=+(t()Un4usog)Mi3+%w|!IstPjK6Ltk^kGWf!PIw)j}eTT zJV7#&N}p!qv)u5U^nT0>%%dPJg)Ogwyf)(XIstPjK6Lt)^j%85#MF0-9}tY1d_*#m zNW8lDztNJdiW z(rjFo8D!=NJdiWrfl4t z8@7D!wNJdiW{%kyu8xE50 zj5&na6QrfEr6b4@BVMl)Fqh&(r^iT-r_^CgeYbcL!Kg_ml95z;DjQGdhBKr`W4bUW zg0vL2oD0%z#Orke=2Cp<^aAO{lsb#4?-qLzjGFWz8A+v=vhi|mxI%h9<|?KqNK0YM zK#)NrUau1{m*PXGL!{SJsvlF|Ee<0XHMxmoB$eLE#@o5!4(YX+yOvaO=Qhez25$WTUx`(On7M~&*HF<_)B$YnT#uvHaCF#SMSC}V3S_)g<1bJ)3>vaO= zQhez2J?V#(dX1^?7C#{vHTjHWB$a;2#;>{I8|k~4@0gE4S_)f!2Ki;g>vaO=Qhez2 z59!~O`hltM7Du1uZ}-{SWDJr~DWzl2)*D8Zac4(v7*F~;*G<6uOR1K^mPz3!8}WLb zfVmVOI-N>7t?uM6`b129w>SgAsL4zuBdK&&O3luaIiyo!=3=G?X(?=(A7p_Muh$8f zOYx!8MWl;UY96M(TU?4@)MOcwkyN@o8&~9pm81(}R$-O|X(?=36J)Isuh$8fOYx!8 z^`sk8YBi?5Tik?T)MPV~kyN@R8@J|$ZKUgBwqrI1X(?>k8Dy6cuh$8fOYx!8J*0b6 zY6qsiTilOe)Z_q?kyLsx8xQ4%!=$@oIxzc!v=p`+4RXwg*Xsn#rTEb43DT1(bp%u2 zEuKO!YH}LMNGd&(ja|9nEa~x>bC}K`Erl)TgIqA;^*RA_DL!=CL)x2C-I)4r@e+bj zlgmg(Qt6d!yqX*ONiW6>VETfz6t-LoGGxT-bpqy6eCYHB>2OL7V(PoaTL?x?ZX+2< zrFXLNZf>|odOhYo=4OzV!j^|Y9vSg^oq)L%A3A+P`ZT2;VCuWY=LkkkULYAsr7yGb zRc?4q`Z(qd=2?)I!j^YI-W&0Hoq)L%A3FU=`YEN}V(PoaF9=3Wz9Jb(rQfpgdv5qa z`XS~g=5vsi!j|7b{uuFkoq)L%A3FUz~$(Z_XaTbD6li5f{Qt6y* zoSPfwkxq-5kC_>yrLbjTkVQtkUMFBK#fMIpkSarLbjpkUd7cUMFBK#fMJ!k?v2aU6}fA@gRaxlS4>GQt9Dr?8psANcYAZ#T*FI zQrL1l$O$7}uM;qr;zOsMq^DBq7^c2kJcD4=qzlPNDm|Nx=W;_g>B*S$nA1U83R^A) z=`rHGke0%h$3dPL@p_$rxfCBd zeMb5`r5<7GyTz9XMonHJ8A+wDv++%CcuV>;<{jomke0%h4?#W}@p_$rxfCBd{Y?5L zrQT!eyTxw^MoqpW8A+u-vhinb_(l3D<~QbRke0%hzd`;P@p_$rxfCBd9n;OH4rMF!kNyMg${Z6Oxfsx;ejOO`2^b z-4L@4vn5DNVatvnJB|2f=>$wac9cGJx|?)QN^Qr~cZ>TFjGF96GLlLUgx!Uy?-mas z7y*ZojHJ?zuzNA}-QrOMBj6a4kyLs-%?_s7Nzx-RotP6rS_)fE2RUQJKT9WI{;_=M z^epMQlsbi}?-tJ^7&W@cRj zTYP|E1Uy7Cl1d+iy^X2w7M~y(0Z);Pq|#?;c0bKtkUoxiiFqERrLg67kT*vBvvdOH zAIpbM-;us|DZN`<;dhJuyj%R(J@RgG+kcl=ZuJ=$!dHCC6&#i?{|82!_!i;^#P^t= zn6E)v3R`{$`D4Tlbpqxq`OxV<($VMjpOyZ5Hm1H?9DAO>)iwRkI3%P0FqMuE`xmyp zTbxMB2$+OqB$ZAMI|ftVElx!+0;VAuNu|@zk2ITbex%t<(kU^sFf)R*6t>I>GS`TI zmQKL@WBJhOe9{FeH5*gkEiOVZYO)x~NGe?tb{?j_TU>@<1T04~l1f*EU5Kgg7FQt{ z0jrUWq|!BMwlvMwk*^4k&x40j{2snUbB$Xaavt4O+m~>xE2j);m&(aB)e=Hw5JwbXhrH)|gyTwxoMoms58A+vQ!XC%ecZ+8cjDT}UMp9{a*iKAM zFCZ8J7m|D8S8jm7*9(o)zmKKukDUau1{m*PXGlSn6D&`$n2Fb-4SElx!+YBCMUNGhFv zq29p1&z>bSNhik4!b}O$QrI#l$Xp{{uM;qr;zOtNNf)HlY)pN(xCp_h$zmiUsdPy; zF3ksxE{f%$p$1NsdQsDZpsat zNms{g!K@3?QrNOB$aW)MuM;qr;zOr9Nq42xR!n`jxCg z#Ow~zQrL1hNQV)x*9n+Q@uAbBq{mX~5T?FcJb_@;jccD_|WNj(hDiog{kirdk~D8^dcEarG43WDK}gu?T)#ExfrCSu%$o9 zfDy0P37AXqq0?)mLn(C?Q{OG#Krm`DjASI0-ps~Zx#2eHV9XuN^&l;UE%$=lH{$g= z0dpxnbo!9=QA*v#)OU+d5R95UMKY2~pJn6o-0*_*LCj0c;~*`CEw6*TG2-<)0dpxn zbo!3;eM-H;)OU*?5saFALNby{KWF2Y-0+q3ZOk{!hafG5EkA<%G~)F-0dpxnbo!h0 zPfC5q)OU;j5R96PzQ}*ezF4KwF&FC%{QK+|M{XDg@GIAi$NWvHmco{a;U^jKdYyo| z6dyXBLOQkXr-kKroLO;h+x!Y6Oxfsx;Y!S$sjF-E!{!R8}WLbfVmVOI=x8RlTzm}|D*MN2uAV} zl1X|w8?WSss{j{b`Z2vhS_)eRgIqJ>^*RA_DL!<1o%BXZ4PffK#hVC5O>Q9>Nu{^5 z@lI~IOF9&D4>KI3rLg5ekcURRUMFBK#fMHGlRinQ`cRrLg5~katGBUMFBK#fMHmkbX?5H<y zf%H$Vn}``5q@}QBa`-7myj~|@F2#pVr;$#tJNb(~2~*!K&O|V3G7HH_DxIB;b8^F6 z(y1}?Ff)R*6t*k~ve1av>jccD_|WNM(j_T1A5-5gE<-SCvK+}sDqWF{D|5pt(nT?= zF-wEA6t=7lvd)Ot>jccD_|WMF(v2y#22jccD_|WNI(tRnl6I0(U9zZZ^auCT#Dm|2qhjT**>7JM)nEgRo3R{i^ zIc~)3bpqy6eCYHfX=h3u#ng9;rxA>roIx^@O1rZ0Y;HJ5dLpJ9b1FznVatUe7mawm zPQYA>51sas_NCN$OntX_8NsN@6(l36^lCQt=Y|2&o|r+*r64VZEki-B8}WLbfVmVO zIvpmxnNrs<_1)ra1fwQ*kc_0#yV-azH{2(^5%U0ZD@aRW%cCHVjd;CIz+8$CojxUf zmQoKf_1)qN1fwP|k&L9$SK0VFH@qQz67v@GJV;An%ljZ7jCj3Hz+8$Coqi(yoKo*F z_1)rE1fwS3kc_0#@7eexH~b|181oDBB}hwQ%by^Bjd;CIz+8$CosRD1Z+EYD^2hTx zNPV|Bj+9Z8@kmBe>4e^T!>BT`cjSgir2lf=WX#wgErl&p!%s8f^*RA_DL!;MgLGy} zO~KT6i?b1on#@5ml1k@hjccD_|WMk(#t7z5mVnSUPUl!(vM^$l@4U%U~afZ z+7~l~xe}zMu;oUOVIy9z6EK(JL#MY$Z>Q9COntX_7s05>JtQNk^nNxz$PEukZ^k^r z+zHZB*zzREQzKrl6EK(JL#NM4U!>GyOntZb3c;w!Ya}D7^i4Lt%?9sKgayRd<)W2*zzyP z=)Q`0y-vVfiVvNR1sT_;o%}`r3sT=LP9SB}WFnH0R641z-Y}|6?i;yb3h9`bshIIW zS_)gH2bp2S>vaO=Qhexi7U}Ginue+G7Uv=uHJOKGB$dw3#s#@yA?eJRMVL83S_)g1 z1X*gt>vaO=QhexiIq8a&T8ydh7FQt{HCc^hB$cko#2H9l9 z>vaO=Qhexi3+dLB+JLF=7Pli9HQ9k=B$e*W#$CB#H|ge>J(z7lS_)hC1=(-J>vaO= zQhez2AnBo$+KZ|07CR7(njAqgl1h(epc8ALLYO0Q+(P;R(RdO79>rawqaVav@Rw~TnbPQYA>51rm2y_-_QnEGz< zK7vt`2S`Rz>BDS%lp7wC-i~>Kxfi6Ru;p2h=SI9VASLnl95#U zI~)JxhQFj=WBy@&1ZgR38FOi5MmjELI%Z;!mco{qL1r28dYyo|6dyXBLpnF5W?<^O#rX(EO%@;- zNu>+3aZzqqOgcMe31(i9mco{0L6#fwdYyo|6dyWWNxCYfmSXC=#We^M!G$vHeu?!#hnO7O?Dv}Nu|5PZpGAh zi+d4_fPF|tQtAG%J23U#;z0x>;1H6LRC+kSWKWtMAw3Xt6w?u;rLg6AkP}AyvvdNc zA3I7PI_)Gql~Ttr_1)qb1fwQhNJdiW*{~-u_1$7Of)Q{Y$w(@_5cV{tzFX`;Famm! zjHJ@OG&`4Omq{}>1S~=_l1dkcor9_G z7MCIz0n3n#q|)VSwjj+`k}io^g;^1#rLbj9khMnqvvdOHAIpbM*OP8YsnwYJZgCTW zQIpL`MpEgPu_$v|x3~+z2-uBeB$e(-v#n{ik923ue$3t= zErl%ygB&vApQRHp|5!eB+Ch3Gr4C@~yTxM&Moo?*8A+ul!XC!dcZ;0}M!+c~BdPRs z*rS;GZm|o&2sn#mB$b{^vy*9dp7c!21x$C4mco{vAiYNXvvdOHAIpbMFOgnOsf(EU zZt*IDQImcoBdK&CY#*k+TfBx~1Pmb=Nu}4rUcuCK7{Lg*iDV>|-b%BQIpR|MpEgQZ2X!VzLCC*`HuM*q@}Rs zXOLe;yj~|@F2#pV|B(JosUMj7ZgKP#{#IY9O~xP@l~OwP%E*7#>p z;`KTKb16P_x`%XcO6|bZcZ>TGjG7!kGLlLUX5*pUaF}#=Ob2FPke0%hqd|@t@p_$r zxfCBdJwbXhrH)|gyTwxoMoms58A+vQvau^SoFzRTa}LuPq@}Rse2@!9yj~|@F2#pV zdq{gzsvA?^EnY$}YH}ILNGiROjaPF+Kk3Do0ZdzOcniU($!#Pfsq{`Z-pvj7NUz7-$J`9kQrPk^$Ri_OuM;qr;zOrTNS~(E15ACl z_#DBg$qOVSsq|$wzRC@+Ngv0&!8{AnQrPk?$a^DRuM;qr;zOq&Nk663TTFeo_yxhJ z$yX#Jsq|Yme$Nd*NI%5<#C#6YQrPl4$R8tKuM;qr;zOtZNJn4QPX2iQ!qj(*W3TeJ zyQcpchh$Vr>G-Sl2L65at0Ol|B>kJ~CSk?|X(?=(5`L-?uh$8fOYx!8>7+AKYBHw2 zTbzYp)MPf2kyJV-8|UVRd8E@~=3{0CX(?=37-W$Vuh$8fOYx!8C8SGJY5}IcTU?G{ z)MN#ckyN@e8&~Cq)ufAK)?k(eX(?=37i7H=uh$8fOYx!8jij4WYAvR|Tik+R)MP7? zkyN@Z8@K0%9i$s#c49UMX(?>k9b}IYuh$8fOYx!8eWd$SY8R%yTRezh)Z`G7kyLs( z8#{8t5z@UeM==M2v=p`+4|2kY*Xsn#rTEZkC+Vq_I) zO?oosJmz$emco{cL3)gMy-vVfiVvOkkzPuv3z+(D@d|=bldDKZQfYrS4&;VG(%zVB zn9D(03R|uRxnacXbpqy6eCYHh>8+F+!u*fc-$5{vcacoed)atDH#`6sj(Lc=9i*kO z<#CWFM!a4pU@panPM?uJPpLD!KNJdiW>uh|J8{U#Wjd_Q85u~NCD$2NJdiWk8J#z8-9^~iusNC8lVAq@!b|V8#V$DQuY* zWV#Wr*9n+Q@uAb1q_a|LDyF_$oP%K0WG<4CR5~vk=jVn6q%&d`VrB6w%| zfvN8n&mtH#IfrB8u5CafVmVOI=xMLC#7y+>bu2z2u4lr zBN<7h53=!LZg@m`E9NogZjhG3mZw3U8S#3ZfVmVOI(bu3)2u4lbAQ?%e zZ?o}TZg@}nJmv%DRgjj#mQO)G8}WLbfVmVOI{ixeEu}tU>bu1s2u4kQA{j}gzq0Xn zZump`CFU>YdytmGmeB(v8^;V(#Orke=2CpAj^z+y-vVfiVvNxAYGYKOEC4_;%Wq=CToz4q|&w7xGp!W zCtV)10kbMdOJU2VAe)VNy-vVfiVvM`CEb=%8!`3W;tm9(COeUgq|#m4xH~uOA>9(Q z7qdM`OJU3YAP0R+CP$Hsq|#&Acsw_pAUzm!64Mc+ zrLg5xkkdxIUMFBK#fMJ2NYAEJC#Jqz>_#wZavsS@D!q`67jr`o>6w^b%();fg)NtY zTsGqMIstPjK6HAOv_GZ#F!kNyAc9eoYe+^?=}gVa>GZ`moc9(Z-TTGwtNZl)ri;Y1k9!Q(CK&5 zA1U=2Q{OHALNIFb8_7s2{gaJ`THNFrLbk};K;^tM!a4pU@panPA7m& z9Mn$!qL0DUcZ-t|jG9bAGLlNC4%Qn+m1$WropgN649uh;Erl(!g3LDJ^*RA_DL!;M zmvmlA&BWAqiwh8pnk+;zl1dk4dvik{>Dib|nDaqe3R|uOxoX7gbpqy6eCTw5bTFkZW9qxbAq1l)*O82*(i_=0 zoEvVE_Q%}9Tno}t*m5VxT_awv6EK(JL#OviAEeZ6OntZb2*IeyVJ)|2P7k@^kX)D$_<}MU&nmG zybID&*zzsNcOzb}6EK(JL#IDUf2Gt{%>Qcr9|R-$7s(|3myM&ZjodKi8vjhlbz?EV zgR~U3j1ND-h}Y``%%%9y=_Jz0*R+$r=;JW;-QrXPqbAdkjHJ@(*Xj-Y@04W8Owx%l zvoKSFv=p|?2{PA+*Xsn#rTEb4e9{FeH5*gkEiOVZYO)x~NGe^DjZ1UGGSYc5%P|Xs zv=p|i46@3I*Xsn#rTEb48q&2XwE|P$Ev`o}YO(>zNGjc!jhk}AX42I$TQKW_v=p{% z3$opa*Xsn#rTEb4PSRZ|wG~s}E$%@uYO)u}NGjczjr()M0n!~Y2Qj;Yv=p`+4$@)7 z>vaO=Qhez2DCx13I)th37Ed4;H93i7B$alCJ%Xw47EdD>0cVhmq|&ai$1(NY;yDB( zpc~0ZDm|ZHaw^R(lAev}!CVN^QrOZLav=p{H z4D!f`f0jD#dNJdiWzpy_r_1)r_A^yLLLlqc{WW*{RS0#UPf5X;yixWs00TYpoq|!-4Bh5w+ zjWnA=IzDD9W^$00!j|blW*G6$(g~P5&tZmfceMrq0vW*BolNK0YMtsu9J_-E+^%s-Y7o!%wAmr^$|_1)qF1fwPok&L9$M`7<^>bu1! z2u8qDBqOQxS=jrSn!Z3V0$w5+Nu{sS>~WgCA$=b67V|ntOJU3VARmnQXXymYKb8-j zej@#xQtvSJ-QrgSqbA>wjHJ@4fVeKWpOkksBtF{>ycfF=KjccD z_|WML(wQkW1ykQG&PFh5G6%^>DxI5+^K!#{(&;e^FtdWR6t*l1ve<~%>jccD_|WN6 z(q$>N5L4eRu0SwqvJ%NiDqWS0t8>E|(j_r#G0TIr6t=7nvcZVg>jccD_|WMl(#jccD_|WNo(gP{A8&lsc z9zrl`au~@-D(%R|Be~%y>Asj_n1exD3R_MDIcdb}bpqy6eCYHP>FJa@j;Ze!yAX_; zoJBH{O3!6ucWyXO+8J{Jb0$bjVM|YtUL#(w6EK(JL#LNWFQ?Q+OntX_6~U-UKa!DD zI*^Tnx#1dVU(68ZN|2VqmK#Bajd;CIz+8$Co!%n7ol@5^_1)rK1fwSRkc_0#``P#) zH#{W08S@BpCrC?S%ab5ajd;CIz+8$Cojxahky4K__1)qt1fwRek&L9$H`(|$H@qW# z7V{qSGDu5d%f}#}jCj3Hz+8$Coqi$xno=Jy_1)rk1fwQDkc_0#pV{~;H~c339P+2JRLuAwErl)9gUm4E^*RA_DL!;Mi*$BMO~cf8i*pf-n#@Bol1k@iEymP$i>nZfnyf}Ll1kTP-95ZNSubi`x;5n(RO_l1g`GNl(Z0V9o|jccD z_|WMU(yJ-ei>dDx2M~;!3?dmxrPs1?C^uXuy&Q7`(;uXzu;pfuTSmNICtxnchfeR1 z-c6}tOntX_AHk@}10*A<^kFtW$_QWp8w4Zy7Re-imyPdp!v}yDF&{CngR~U3d=B!(h}Y``%%%9y={M5vDfJ0c-!1+` zFlzD($w(^wosEBT!(Y;`G5;_>g0vL2j2Rx;ICi)qUau1{m*PXG<3T12YbSrvM`P-{ z#YqT8O(r85Nu^VU>ka(->{&96bX?4I%)}rqg)K9K%rfHjIstPjK6E;VbZ$z`z|?n( z^AU`iEI=}nN*8A1qTH~Ubau=V%)B5ig)Pg1EH~oyIstPjK6JX0bX7_%#ng9;YY>c@ ztVJ@CO4nuM`rNRAbVbZY%<3R5g)N(dY%${XIstPjK6JW`bbCr|!qj(*I}wbU>_Re< zN_S`Dp4_mPbZg8$%#I)}g)Iky95mwfIstPjK6HARv?HbVW9qxbqX51pPRJ(p6aF!kNyc?6>-7m$pk(u>*HlN)+T zyJGq<-9cIkTP_E=V#Mop0_IYD=(L}7Af+y0>bu2j2u4kYkc_0#>)CiCHw=?rjk$># z4AN5Aay!T!BVMl)Fqh&(r}s$jr_?P>eYf}!!Kle2BqOQxaW+254Npn$#yrD32+~s6 z@*>DfBVMl)Fqh&(r>{xhq||dveYf}y!Klf5BqOQxLpFZQ4WCF~#eBxR4boEB@-@ge zBVMl)Fqh&(r$0!4rqmZqeYf};>HW?|~P#f1n)O%@>;Nu`UkaY=4iN;)@Y8D>F{mco`5K~@^^ zdYyo|6dyWWO}ZwfmSgI>#dQcqP1YkBNu?XIabs@SM7kLAo=gwqWYJ#oY)-P4*xeNu_(UabIrOPr5zk0A^Q^mco`pK@J=7dYyo|6dyW0 zLV7f%4r1!N#p4J@O->*gNu?*Vu`@TEBJGGdjX4&irLd(d$XO#^uM;qr;zOt1q~}xW z45q$Yyog}bqzB1JD(%h2zT9w$^jyqk%!ME=g)LWu^c(Sdoq)L%A37Z*y_Ql}F!kNy zbp)d(H;{~^(&22pnHz4A4#eEX3lTs~(Efc~|G~)F-0dpxnbUK-I$}R2WFZy^)eYZFb!Kle} zBqOPGMoP`hl3ApaVrFBe25Bj5nHyxD5wF(?m`m}Y(*>jpQ)&*TzFS<3VANy@l95!p zG#i)YhUKL5V^&}m1!*a4Srufp5wF(?m`m}Y)3v1QQfeipzFXXYVANzIl95!pDH}KE zhApIPVzy$|2Wcs6*&bwv5wF(?m`m}Y(_N&yQ)(NgzFXXjVANzEl95!pKN}C^hJ&O# zV-8{V1ZgR3=?HSfh}Y``%%%9y=`qsdDRmfA-z}a*Fly3?WF(cI%Er^V;SA}~m@dqT zAT5P0=Yn(_@p_$rxfCBdy+C>~rOsmNyTx7vqb7YwMpEgeY`mNsu8^LOxr*rt(o)zm z5Mc`Y~i^B*;O>QC?Nu{^4@pf*wLwYUdF6Ks%mco|%K^_?K zdYyo|6dyW$MEW?T?qTY?#is~HO`ahcNu|%T@kMTUN%}D673N8hmco`dLEakidYyo| z6dyW$Px>LHUSsOJ#ZL%EO+F(TNu^)1@oR4QM*1%1JLY4Mmco{wL4FzWdYyo|6dyYM zL;5$Reqidm#nHF<+kLw>8G~e0O6l0!^@dSp-0hJY#*_ZebrUfEQmUn}Wm5RbM!a4p zU@panPN$Mit2_CNJ`wZ3T0aB9NX|quNoS?h>@1lBFePR#W_pm8!j}0#78vn*oq)L% zA39w`x;UlgVd}fZr3gk%mLVBQrOUH%MQ&J0x-e!HW=W8i!j?5b)*A78oq)L%A39x6 zx*?@jW9qxbO$bI!HX|8HrCYLbYi`&^x-MorW@C_+!j_#ub{X+{oq)L%A3EJbx;LeE zVCuWY{Rl=)4j>sxr3bU|P;NL(x;v%=voA51pPMJ(*HRF!kNy zDFmY?r;&`L(lgoEl^f2I9*;SP=?v0R*m6F|1tVUs6EK(JL#I8Yy(!g=sqYpqAs98e zjASI0UI}{BIle#9J)qxui|I5$+!RJN9G^YrIdO_nGu5$;`~m%*@QpOtK|e zwq%rL2K`r7Dl2+$M`UJQ_1yXP7oqN0QR{QsN%|tCo?z;`#V!P+Cf!IzQfW`v=a~9# zu@}Jzc#UKvmA(o45>wwT_9GYpZ;_0o(syb0D$PES_Qia}ybsb+*fJ30vl0I+oq+kr za?$A*(yuA?2~*!Ken&8B@&n08D*YLD5L4eR{zfnY{va7irGLYI!_;?+9Z>{j>rj zk&IZSqn-{o`;}&6NQYv^VnzpPDQp@4boiG{Fyf!36EOc+E;^kAGP&;5-)l^Lw>TBS zsL3=WBdK(H*om0>ZgD1p5ikqMNGhEjb_%AxTbzqv1k6J+l1k_2m&{1Bg`{(07GV|y zX(?=35@e|n|16z=`Nwk6>2lH)E~R&iEBtQpDDM_mJsp0xxb5F%v0JSXoOg?>^9c^i z+W&#kUa~&KMu-hDn=tEwv=p{%39{9Q8|nnipX8#`?W8;0d&EDRG466t|H*mQKL@W4Y+`4C&dFI)SP07SAIXHMxLfB$Zwadm2;UEnY@20Mo|fTYQ3G z)Z{6WkyQFD>;p`Fx7dkb1iU~pl1g8OeT=E^7P}FQfF2|xsq|HvJx{aOq+Ky@Fug%q z3S0VvyfxyVr4um!SS~t!Px>LH`Y`p~;wJ>7CId)DQt9Wg?=bb<;ui!X;46}mRQfIK zM@&tBAQ%BZk&L9$Uuia&W`9V($Na_o4$@NC((!EgmyCQ?5&tZmfceLA(dlTAG0(J< zKdeI__1)q)QbtY2BN<7h6P^u!VPcj{A{`Yo88bFWOJU2@Ak&O^y-vVX>R-C(bO!0n zl$wI6?-pkx7&V!LWF(c&&Bl58!hF){F$*xWg0vL2EDEyNh}Y``%%!;KbSdewlv;?X z?-o}e7&TdmWF(cY%Es0C!Wz;gF>5i)gR~U3tPirmh}Y``%%!;KbQ9_3lv;0ngR~U3oD6cxh}Y``%%!;K^bG0QlsbW_?-tJ^7&Wg0vL2TnlpDh}Y``%%!;K^d{-8l)8$k?-uVM7&WmYB8c)d=*T#AcM`$^xXR4=B!TYQgT)Z_z_kyQFI8$aa>1EhU1pE2)( zv=p{{3G&s5*Xsn#rMT$yJL!*<8pPChi@y+zn*2sGl1l$%py zsW1k9zl==3(} zos_zcsqYr=As98ek7Oj3KFG$0`NAX8TQQF@cZ0MPwmc2;%!t?P1k9zl=(LmcMM^!v z)OU+r2u4l1k&L9$o@{)TFZ7Z=k9m!G8KkAKr7uXo5wF(?m`icd={wT*DfI?Z-z|Pb zFlzD%$w(?4$i~n4!XW9}m@k+QL0Sr1z6JSi#Orke=2BdA`jhlmN`1xrN9+F}7|Fj# zCh1T%c61JZVPq%&osiFs!u$@>QrI#k{8%GiuM;qr;-b^>q!T)|lfUSrG4GA^>bu4H2u4j7 zAQ?%e3$t-izOa~dcFYpYydW)wEz5!|H{$g=0dpxXI$cS+Dy5cU>bu1?2u4lTA{j}g z>#}iuzOaFGMa)Lb>L4wJEt`XEG2-<)0dpxXI^9OPJ*75b>bu3A2u4kIAsI=fyR&gm zzOa{cYs@~(jvy_CEeC=eG~)F-0dpxXIz3E!B&GIa>bu2b2u4kgBN<7hC$jNmzHo~4 zP|Rt}(I72_EoXzAGvf6+0dpxXI=w)8F{RF6>bu3u2u4k=AQ?%eSF`b2zHpuNe9R5Z zr64VZEw_T)HsbX<0dpxXI=xGJFQsl`>bu1U2u4jFA{j}gkFxP`zVL+fPRvux{U9xc zEzg5=8u5CafVmVGoxUXPN~vd<`fjlY!KleABqOP`HydB)3vWnY#PnghgR~U3ybbcs zh}Y``%%!;K^aJU~lsZLCNx7dqd)Z{gi zkyQF78~gHwe$uX(x0qK!S_)g<2l-&c>vaO=Qe1TUiF6>P-eKyy#X$t4CSQ<@q|&e1 z_$^=fPWmzC2j+8-mco`_L4F(YdYyo|6c?TTB^^qspP2e?apX(>cE7AmMj;uMQabu& z{lbVc=H>7g#*+TY=f+_=g0vL2Ob9>Gh}Y``%%!;KbTa9bx|6@?<1zK!;xq)KCex9O zq|zDLI5S_EMLH>FHfCy&mco{~LFO6pdYyo|6c?Q?AYGVJb1?PY;$j4&CQFcvq|&9? zxGY~-PC7qk1!hr@mco`*K~@{_dYyo|6c?SYC0&3!m;sykxCL58Aq|!~>ndYyo|6c?QyCq0o;hcWft;wc29CZ~~%q|!6lcs5@+M|v#gJmzGO zmco{cK`t5bdYyo|6c?RdA-$SX7clkR;&lY0CO43bq|%$&cq?DHO?o-z4(3{rmco{M zLGByzdYyo|6c?R7Bz=@pcQN(d;u8d;CQp%!q|#^E_&i_eBz+L`0`oXXOJPe_kZvPh zuM;qr;-b@6q`fKi5>wwTzCkc*(uZUumG)=j+kD|2X-~|1%$BVYJQIuP><^Cd`2VauN&e~oy(PQYA>i%vVb z_}ks3o&53q4N~7NjwWT)WDJs#R64e+eqlrz*ERfw@uWlf+yu<1AT5P0lfq9n;`KTK zb15!5ok}__r6ywPyTus@MonfS8A+wHvT=64Fo$$X%v{X$AT5P0^Mfof;`KTKb15!5 zT|~M#rRHJ&tMy9}jN~#TlXQ7DuE-Zw0xXPKg;^4$rLbj9khMmLsq|bnp3fI9ke-OSh&dgkrLg64kSj*KUMFBK#YLyrNUx{VB}{#{coV^>$t@%! zsq}U>-pLp4l3tCuhq)1?rLg5ekcURRUMFBK#YLx&NuQ+DeN26~_zc0Q$#WzlskAff zBTRj__!7Yg=t44*O1r~8#ng9;uMmuYUL+%_^mTs8i!|#a?TP8fyb01$*zzvOdn5i? zIswy<9ifX(Kaze*skfN=Zt*jMQIkO=BdPRD*bkWcZt)v}5%3+!NGkmib^ue~E&f6< z0)8VINu__%>}#40k^YS7=;oh&1ZgR38Pz@fOGX><&(aB)e=HZBjs+Rlt)2X_ABm~& z7AGJWHJONHB$ZAII|ftVElxo&0;VDvNu|@mj>pt@i!%_6fSE`}Qt7Pj;bxOleh%sM zn7NqQL0Sr1<_B3|#6L?XVE(aObh?OiaZ1g@)OU+Z5saEFLo$*|mxo=5sqYq7A{YUy zkc_0#)nS)l>bu3Y2u8pQ9 z{lwIFiz9pZ-_|{~$tWbFQc6cx$sgfAu=U;ISW-s7I3y#fbbQzjOid>u7y*-zjHJ@Z zJ;Tk$^b9wfN;)BC8fHq6mco`9L1r59&(aB)e=HZB&L*9cQqwW@-Qqk1qbBo_jHJ>9 z`NG0{VG-%9n8ld6L0Sr1mIhg7#Orkerc(dXMW-uBSEkewOntYw8o{W^8YCmBbZs`S z%NN#@E|1xOSrw$Euw_$_%|^UlCtxncMWA!-i~>Kxfi6Ru;p2h z=SI98u5Ca zfVmVGoxUgikWzh^`fl+Pf>DzJBqOQxb2bj<3tvdz#eBtl4AN5A@;%58BVMl)Fqh(@ z(_f^&Q|cS0zFYi@VANy?$w(^gcvZi^zt8?^_zR<6@xP+;xzU(EDb-TgGB*4;BVMl) zFqh(@(+Q*#Uuh?Q{l{SHyT!=}Mop$58A+v6Q)*h4OeY;5GXpazNK0YMtRS?7S4vmdiFNK0YM!61i>c)d=*T#AcMkB}ZssRNk$ zZt*yRQIiu$MpEg?Y&?}OoF+XSa|UxPNK0YMxgh6_c)d=*T#AcMFOptLsk4~+Zt)6& zQIo4kMpEguY`mT?+#tOWa}#qpNK0YM?I3rIc)d=*T#AcM?~&e5sau%(Zt)?4QIkhV zMpEhHYj|9Z!z`V;%5Y-CWA;uQt6j${F*O( zBmEHb9WxN5rLg5^kY7f;UMFBK#YLxoNdKnP4@`Zx*wM@1?%vvDB$81nrK5W57x?$t zdxyU;hV*wnHx@ILQZ0ooveky{IoQ7nQPEV;B zSuzt~V$3YelprmIEpvj*HRAO;0dpxXI-O6tAf;ww>bu272u4j7BN<7hOR{lkzOamR zUd(dL!XPb$Eh~epGUD|*0dpxXI$cA$Hlbu4D2u4jdAQ?%e8?$j!zOb2eb<7sb zx*#ouE!%=@H{$g=0dpxXI^9XSE2Xw#>bu1~2u4lzA{j}g`?7I=zHoqaN6bOY?jS9N zEr){~G2-<)0dpxXIz2{uJf#j{>bu302u4j#AsI=fr?c@)zHpZGXv{gxi6AY7Ef<1Z zG~)F-0dpxXI=xJKC8f?|>bu2j2u4k=BN<7hH?r|&zHp25Qp|14)gUc}Eq8<5Gvf6+ z0dpxXI(bu3q2u4kwAQ?%ePqXn^zVMv%eoQCkQIM9xmX|@gjCj3Hz+8%p zPJ2jSrPK>deYf};!Kld_BqOP`FB|*wg}0>LG4C+FL0Sr1J_Pw_#Orke=2BdAIzak4 zrQT!eyTvaEMoqpV8A+wzvhjPq@PqVI%umc@$4boEBax};>BVMl)Fqh(@(-Wj8Q|bt&zFRzvVASLc zl95z;HXG073+G9X$6Uai3er;8aw*7VBVMl)Fqh(@)2pP{QtBe6zFWM3VASL$l95z; zD;sa;3wKDb#N5SP57JWDazDreBVMl)Fqh(@(?_I_Q|cb3zFT~XVASLpl95#UJR3Xn zg%_j`V_ssO1ZgR3=?>Ck#Orke=2BdA+DrO6rMfWn-C`etQImcoBdPRlHonUj-jlwH z`G9#7q@}RsQ;-28Uau1{m*S$+LDDZN^$}CwEq+5VYVsY)NGko2jX(2+U!^8)V3c*Xsn#rMT#HG%A_1)r31fwRikc_0#+1WTJUzkfeHD(@W zMv#`mmIXl;8u5CafVmVGoh~L_l2Y?A_1)q!1fwR)k&L9$71_8lUsy%DC}uTgX^@t} zmbF3F8S#3ZfVmVGoo*oAm{Myn_1)rT1fwQfkc_0#t=YIOU)WB%K4u4IQ;?RzmR&)1 z8}WLbfVmVGo$e*wmr^@1_1)qD1fwPgk&L9$L)myZUpPX#C*~+-e~^~Kmg7NA81Z_Y zfVmVGot`2+ol?gz_1)rG1fwSBkc_0#^VxVIU${tmGUgKIOpunsmMcN78u5CafVmVG zon9xsky4j2_1)qv1fwRmk&L9$JK1G9JlDDxJ_*zc8Xq%#ul@qhcmw#s+CAY?&Hlnh~$p37AW9(di7*nJF~|Q{OGl zMlfnJ2gyh(otusG@`d@N(_}Y*`d!u@SG=37AW9(dkmsWhu1~Q{OGFKrm{u z63Iv^U6qZi^My5}OJdeymIrAmY*`;MonHK8A+vG+1Q;g^pHM{d4=f=(o)#+ zI>;L%Uau1{m*S$+e$uxo)r+a`7T+TnHTi&KB$a*)+lQ&|76%ZFfX_%qQt4pWcbNKa z@hgH6@D0gGD*c{c@+r-Jl75N#h4~SrrLg5skiSO!vvdNcA3H)9op$u|PdfUwlRwJ8 zLF&83(WH!;j6pJzO2>vBg01fs$CEMwCLkF}r4z%B!qj(*lM#%7DM&_A>D2z=X5;#Y zn@uO36f*-eEl5jY%d8-?jreEj1k68{i%#c~&P%D8nEGyU0fJGJg-AwH>7uZ6F!kNy z5(Fb)DUy*?x-9H`OntYw0>KDaiDV>|u1d4TX|{%RdCXeO>L4wJE$f49Fyf!36EOc+ zE;`*rx;drRVd}fZtq4XF%&wF!kNyUIZgxACi$& zxLaB-!1O= zcRB1^BnUuNK0YMiy$wJ_-E+^%s-ZkPP<8aQmPYE-!1kc7&Uo~WF(co3EPFK?-u(J zjDWXDMpEg!u&*%n-QouXBj6*FkyQFA&HB>pGwJ)7LCipqmco{=LB1LB&(aB)e=HZB z{viFCQeQCj-QsTqqb7fljHJ@PVZUSQyTy*T{O{|x6&Q(R#3~(CrT$4bY<;&lhLjO7 z7Rg8|9rt#)*-)BIARYa7xaLI6_#iEXEt7*xG2)-46EOc+E;^kCGCidxVd}fZnFvNr zW+53#rL)6M#ng9;a}kVyc}PZ5>HM%WFg0C>U<52eGLlLcr`en|TS~ehW*KHlke0%h z6+u=S@z2r;n13u6ovtQblTynu_1)q+1fwSFk&L9$4f(>xd|?yms+i4~wLw}6Teb$- zX2k1t0;W>`(nY5`NOz{x7EFD&xEsN!$sQylsdR5P?#mbUlWvbWfY}wKrLg5tki$m2 zUMFBK#YLw_Nspz}K}>zOcmlzw$w?$5sq|Dfp3WD}kRFLSi#Z;orLg6EkPAkrLg5rkh?~_UMFBK#YLz0 zNgt%tZA^W)_z1zM$zvoVsq{%UKFt@Nk=~1Wj(HfQrLg5ike5chUMFBK#YLyxq&+Fs ziK*`vdl8J9yhbvTO5bE-U%t>!+7i%vh04y4pOOntXF zh+x#@3zCsk`ZXKB6EK(JqSL>mLn-wWQ{OF)e8*qy zceTkVB%@MFN589I;NNF|H~fXMq<`|cahQ%EErl%;!cR2f^*RA_DK0vlOgg3RJbWO}w%=#cLg)Q5I>@ec>IstPjE;`*sx;v$|Vd}fZy$D84_8}Qb zrTeq-K)!I0bZ5*V%$^`Eg)K*d95v$gIstPjE;>Cj*|oZXg*+r8l$jR=#kX z^m5D{%(Wmbg)R4j+&AL&IstPjE;@Zk`Y5IDV(PoaCkRGOo+24ZrO&eQdA`s|`XJ^7 z=5dgg!j`Te-A24#CtxncMW?SwdsFHqroLNzgJ9I856MU>?a#)y`NBKWo|yNT*Fjne zTRsN)WW?)r0_IX&bo!ZeFr_|V>bu3S2u4l5AsI=f-?Q;YzVMTDAm$h5OOTermOnxM z8u5CafVmVGop!wEZ})rc)IS#isqYp?lQL>D2FXY&9s9n1fq$R<{qPsYlMdx`6ELHK zv=p{X3P0J1*Xsn#rMT#HD(SS8nuw|I7H1$BHJOQIB$dv}#@YG89MUNB41buurOv7W=W8i!j?5b)*A78 zoq)L%7oDyr-H=kNG4z~$(Z_XaTbD6li5f{ zQt6y*oSQGqBb^pAA2TyZOJU2xAd8H6y-vVfii=K{kSy-vVfii=M7k?v2aU6}fA@gRaxlS4>GQt9DrJd!UQCEXiy z409kzOJU22ASaD@y-vVfii=K9lb%Vb+47rg^h-z|u`(o)zmEy#2uUau1{ zm*S$+nWVE)YAU9_TbzSn)MPG_kyJV_8|UW>3rJ_gEX2$X(o)#6ILHzsUau1{m*S$+ zWu(hfY7wTsTU?1?)MOQskyN@m8`tCuYe|>Jti!Ab(o)#6A;?A}Uau1{m*S$+&7@mW zYCWdDTik|V)MPu7kyN@P8+YalyGS?1?8a;j(o)#6H^@FCUau1{m*S$+1EdF2Y7eHq zTReLjMVTfBf^ z)Z`+PkyLsq8!zVzS4hvqT*aIZ(o)!RJ;)6sUau1{m*S$+Tco#B>KdlLTfB>4)Z`wL zkyLs=8z1Bg4@qyvJi^=w(o)#+B*;@EUau1{m*S$+=cJt}^%zs%ExtrBYSM*dB$ak& zV^6;Diu74bFXly%mco`dLHdk%y-vVfii=L)lDZl@dJWUlaEM7Qt78`9LN_w zllI39V%`U7DQx)~JjhTj-5TvEBWk!&hM!a4pU@pZ)r?W}tq||gweYZFd!Klf6BqOPGK{hVT7Z#Du zidl@A8>FSMWoeLQM!a4pU@pZ)rz=QTrqmKleYdz8!Kld^BqOPGZ8omU7uJ(5kJ*4( z6{MxGWmAyNM!a4pU@pZ)r&~$4rPM}DeYdy+!KlejBqOPGS2pg>7xs{DiP?+U9;BtP zWq*(ZM!a4pU@pZ)r-w)nr_?^of3^N7f{{FiWRf1w#uNF%Nq~bfr!Yr?v=p|S33Aqm z*Xsn#rMT$yJn4m$I*qCC7B3+fHMxvrB$Zyt#;f_lHPUl2*D)7^v=p}7406ke*Xsn# zrMT$y4(Z*Lx`C`uM;qr;-b^{q#shM z4^!VQenK#6GJs?xm442~!F=Hh>ARS(n2$kP3R}Jh`C-KCbpqy6Ty*-2^mj^q!_;?+ ze-VtD3?Ugwr5yv3{Gt7csqYp?4e(E?Yx>V$}Bqq>O;^NJdiWgn`TTYsL328BdK(5 z*y))1ZgD<>5wHNsNGe?zb{3|-TU?A_1S~-^l1i7R*}ODcPP!;&1!h^0mco`*K~@{_ zkJSm7e=HZBt|eWUQY$g_-QorWqb3`XjHJ>{Vb@^lyTvUCM!;4iBdK&-*!7tDZgB^K z5wH`E z66C58|16z=`Nwk6>2=Z@E~R&itNm_q1Me1Z4Gh0q-1+Zv*{$vXL--T7^9c^i-T#5n zChmuL2=O515$0Zymco`NL7p0ML!E&6lU#KAoV3%uNBr{`Q{OGVL@@eKunWmZD(w#Y z3{&4NzCthpdXbEz($`^MVCuWYJ_IA6AIV56eVb-IY4)D5s6VG4!XeUKF^4gGgR~U391U{Jh}Y``Or`#%i%w6Fo=mAD znEGzDg>NmoJi%zeSUQ4NqnEGz< z27*zOn@C1d>8)(MoiE%Wy%KX5b3I5)Vaxp>4~%%dPQYA>i%uVrK2E87nEGzGN#t%okpeK8$&Zc@m_hu%$alj}foe37AW9(P=N~>y+xk)OU-02u4l%k&L9$ zx7qkEUwBXYD&_;`O^}wtmQO(jjCj3Hz+8%pP6tW9q|`@DeYf}x!Klf1BqOQxM>hV< z7k-g`j`@xG8ljccDxaf2m>GYJEgsJZqXCfFinT2E|mCnw_ zIr+j|(y1}?Ff)R*6t*k~ve1av>jccDxaf2->5`P1kE!n#mmwH6S&n2Rm9EIfmHEOd z(nT?=F-wEA6t=7lvd)Ot>jccDxaf2P>Bf{=gQ@QpHzOD|*@9#wm2S<(ZTZ4>()BSr zFq?w36t?UNvfGH)>jccDxaf2*>AsZOiK*`v4a>9t$>jccDxajm0>FJa@hNjccDxajmc>5Y`SjH&MyZy^{pxs7BbmEOt5yZORB(rYpIF*k#>6t+AJ^2mtS z>jccDxajl=>C=>YfT`~mpCcGG=|nP;N?&B-%Y31W^l?l#=2?)I!j@M-dX0F!PQYA> zi%#E=_N7!0roLNzi(u5`9g>k$`aT;!((T!}BVX7FurX#AW=oKk!j?Tj_8Reeoq)L%7oF}WJ&;nnG4-7m$pk z(u>)6DPOoudOGF`=3J1L!j@}6t{d@soq)L%7oFZDy_Hf|G4 zKVNu2dL!l`=5~;l!j{KDo*40Zoq)L%7o9#MeV$T}F!kNy3k0JkFOiI-(ynam&KG(} zpT@kxbOvcDYD#-NJdiWpKSb_FAR}>i|P2v-~S*j zg)O7L4sRT7#Orke=2BdAIu>NySMB64`bbQDw>Sa8sL4bmBdK)K*ZPGKWpb8GAsrJl z6*E3aOJU3OATx}3y-vVfii=KXk4Ve0FaXW%hlO0G#Qt8fY+?6lvCfyvf2eU0mOJU2tAp4DY zy-vVfii=JUk{(K_y_ouL@d$!ZlcPvRQt7d5Jf1I{AUzOs5_336OJU3DAZLtty-vVf zii=Lqk)BVfQ<(a0@gjmzlS@cOQt9Pvypk_mB|RH+4Raw#OJU26AUBP8y-vVfii=Kf zlio?G>zMj(@g9Ovllw?UQt5+ie3&mhBE1#!7;`sBOJU2?AkU0=y-vVfii=J=NnfPY z6HI-#*o9!!q#MadD(%U}SNTFO>GPP^n3q9X3S0Vu^c(Sdoq)L%7oEN%eVg0vL2EDN&Sh}Y``%%!;KbS3Gklv;|Z?-th}7&Tdo zWF(cY%f|Kj!Uob6F&il-iG}?-q|C7&SSLWF(cI$i|cT z!YR^2F{d#{gR~U3oDFi$h}Y``%%!;K^aAO{lsbc{?-nm37&W&i z>vaO=Qe1TUoAgggeaF;yi$e%TO*+2wPfWg7sdVJ``h^i?)c4^pj0X6X&yB(SO{tc` zmT}?78}WLbfVmVGolYd3RCn?heJrNFTbzPmRB9@ckyJV@rKV@e4AKcPGcl8cv=p|? z4l>7x*Xsn#rMT#H9_jp)nuV$F78fEIHCcpYB$Y1C#wGc}Qqs9G%P07UK;Uwoq)L%7oB#K_M}uNroLP3MKEge z8p%j1eUpuS`9eQwSIk??s~|0fE$@STFyi$(0dpxXI{idCkW%k3_1)qif>Dz%NJdiW z*KGWjFMKEc81n=3IY>)k%da56jd;CIz+8%pPXCe)rPNPMeYZIB2YoL!XPb$ zElYzeGvc466EOYQ5xVGf1?kF^T7s$X7FQz}HCcmXB$ciWyBt&BEv`o}0yZESNu?XZ zuENxJi<=RQfGtQyQt8$-TbE|rNjJspz-$ZBQrNO9$ZjM4SvmppkL9A%y`=k6YA2?? zTRebZ)Z`$NkyLsp>>f;gw|E4>2snylB$XZuyB|~EEuKIy0!|_sNu{UK>~NZ$Aw3>* z7IQjCOJU3TAQz1IXXymYKbDJ5FOgnOsdJe6Zt*IDQIl&(MpEhZuop4)-QrCIBj6U2 zkyLs+>=jIXw|E!92)Ku2B$eJzvm0slkn~Q>Bg}&!Erl&lf;=_ipQRHp|5z?MeNNix zQhK+z#_twa@^10vkKuQVyZ&7syHz(Zgg?=hPjFaz{s%^z=ne4(;&n_P=2eiE!j`u| z-WhR2oq+k1Ty*+@^rL%^_@^IJ-z^Rx82u;s8Oca09Sr*(Q{OFqMKA)sAsI=f-@|^w z)OU+N5sZLeNJdiW?=<_8W`9Y4#0+8n1ZgR38ToVgmyG&Z5&tZmfceLA(dihFu|Ktw zKdc>?`fhPNf>DzRNJdiW#IU0=_1)rR1S4Pyl95z8HS9P{eYZFr!3davWF(c&{5jlg zQp(RJofb0(Gb>0-VavQA^Nsjt=>*I_mWxgok}gWAxtRKHaS4J^lch*TQt7g=3o!NF z;tB*KU?q}~RJtncVoZIvxCX%pSc_yNm99&(lv8u8E437CH@7oDCaJ(E($G4* z#eCrs>8Y5@n6p7z3R|uQxn{)cbpobR|I$ULH%M=$)D=v9w|E=DsL359BdPRmHr~q@ z?vq}Rd4RbUq@}RsQIN+*yj~|@F2zNsPf4Gp)I&^tx7dkb)Z_({kyQFJ8@uv_Zqg?) zJ(%Y~S_)fwgS<{E1-HSsEsL5O;BdK&=HqOr%7Ld+}S%{e(q@}QB zagZfOyj~|@F2zNs%Se}})FMoMx406)sL3iMBdK(CHm=DR){-ubS%+B>q@}QBLy(O| zyj~|@F2zNsn@P8%)Ot*Px3~?#sL6IDBdK&pHtx(9c9Cw1*^Sv6q@}QBZ;*XPyj~|@ zF2zNs2S^X5)E-QIw|E%AsL2r|BdPRgHXh3tj+5?>Ie|G8q@}RsRFKm~yj~|@F2zNs zXGzbc)JaTzw|D`;sL4enBdPRKHeSvbu8^LIxr#X-q@}RsdXO7Nyj~|@F2zNsw@7cN z)HO_fw|E!9sL4GfBdPR$Ha^G~9+KXSd4#zWq@}RsNsy;Tyj~|@F2zNs&q+H|>M^Fi zTYQON)T9f^NGk2l#-4oP73s5>Ud)RiErl&_g7g{jdYyo|6c?SoC4HAtuQB!A;s*qy zCLfWEq|#5>IFK)VChd!h zU)V#sC1x*XdytmGmi<8v81Z_YfVmVGogN}RoKpKR|IzxR2uAW4l1X|z8&Bj5Cjkz| zoWdLl(o)!RCdgSMUau1{m*S$+^Q0G2>NKXlTfBr|)Z{XfkyLsm8?WXI*GSLBT*q7t z(o)!RGsrC?Uau1{m*S$+JEV70>ISC1TfC28)Z_t@kyQFH8z1Ehk4bOGJi*)x(o)#+ zEXZ>sUau1{m*S$+7o;y!>M5qaTkJ+KYSM#bB$d9(#@>A4HECze8%$S_mco|)Aa9L$ zy-vVfii=L)lYU64K1_YL_zA(N$pDg(RQfp^2lIt5r0-(BVm=0GDQx*3jccDxaf2O>BK+U$zSv_nEGyUGJ;W)DM&_A>C}{(mL=0k$H&aTObXIc*fJ}~Y$IN; z6EK(JqSLvg^HORiroLNTfMC>QA(D|)x+ohL=L<_n=fo_<%n#C1*s?sx3L{>x6EK(J zqSIBRt5a$jroLNTi(u4b9g>k$x;`5>@~SH^6@tO?Rm*s>+aRwG`o6EK(JqSNi9 zJ5p*hroLO;g<#ZVHQ7NUP{?;#y zD5L)le_;&i?|g17W+D!cNJdiW z^pu*BB{NAU#>~P@3DQ#7GAGDfBVMl)Fqh(@)A^(eQffA)zFS;`VANzWl95!pBpa9J z3(H97#Vp4x4AN5AvNFgjBVMl)Fqh(@(>0`PQ)&gKzFS<6VANy-l95!pF&j7K3!6z- z$85o@3(`{9vMtDVBVMl)Fqh(@)19QdQfe!vzFXXbVANzUl95!pFB|vg3kOJd#2m!z z4$@NCayZBlBVMl)Fqh(@(_^H^Q|b_=zFRzrVASLkl95z;IvdaA3uj4>#+<{P2+~s6 zav{h?BVMl)Fqh(@)61k+QtCXWzFWM8VASL~l95z;BO7n#3%5uw#oWeR4boEBayQ65 zBVMl)Fqh(@(+8vvQ|b<;zFT~ZVASLZl95#UG#j7g3(raK$8=&I1!*a4c^Rb3h}Y`` z%%!;Kw1@OnO1;3;cZ;tPjGDYbGLlOBvavs3cuU$H^A6J+q@}RsLy(U~yj~|@F2zNs z1Eil*>OH2uTl|7x)Z{CYkyQFE8^7lZKS)2t{KO0fX(?>^9psM@uh$8fOL5WZ5NXGd zcJjyb7pA^j95uw>?wbBH8p)`X(lJBz3nR+dq2Vu#BmJAtjmL}((o)zmG5jPWUau1{ zm*S$+DWp?VY67OdTbzzy)MN&dkyJV}8)xMUvq>k%%)v|x(o)zmFUWi&Uau1{m*S$+ zg`|s8YA&X}TU>%*)MP1=kyN@Y8<*z`D@Yf_ti&u1(o)#6I>;I$Uau1{m*S$+b)@T4 zY89rwTil3X)MOKqkyN@l8@J>OTS?c(Y{P5_(o)#6Bgjr8Uau1{m*S$+-K2X`YCERB zTil0W)MP)BkyLsh8xQ6She&tD9LDSo(o)!RG{`X{Uau1{m*S$+6Qn0o>IkO3TRe?m z)Z`43kyLs%8_(qn=Sh#pT)>LRATTfBi_)Z`|T zkyLss8*k?ecSx_q+{IiE(o)!RKga_kUau1{m*S$+N2HHa>K^95TK^QmNIpX{NuOt9 zXTIi%xqbu2n2u4l5BN<7hKeF*>zVM6mbIfnd z*B~v0Eq{Xy8S#3ZfVmVGosR7Ir;O^*6FmN+{{gA*7RQh>YBCndNGcuI@sGa1|DTeM zfBc0Bq#ZF6F{6XD6t+wbGR255>jccDxaf2m>GYJEgsJZqXCfFinT2E|mCnw_Ir+j| z(y1}?Ff)R*6t*k~ve1av>jccDxaf2->5`P1kE!dIAs97Tj$|a2t_ZsbQ{OGFLNEeW zBN<7hYr-zY)OU;P5R8EJNJdiWhWwJ1X|{=UZOmrO#vm<)En9(C^1z6HmQKL@ zW4Y+`5$WTUx`(On7M~&*HF<_)B$Yl7`w&y#Extf70$w5+Nu^z3pJ3{{#U2DB;1!aQ zRN9+nooV)lv^%B`^EyaNVawYf?~M3o=>*I_mWxh5kbZP2y<1%CcZ-X7w>Z%8&;R@X z{XhTbU;pg>cj64boEB@;k^MBW|b@Fn^MZ zPKQW4M(RH+{qJl{eYZGjB!8=G`p;-2qyI3KjtTo0w!T{&N6H8ok7Oj3P6#^^Q{OF4 zLNEd*BN<7hQ$`Lq8#{8i*)-CLG1D| z?h3mZQ{OG_K`;XLA{j}g`_gQCnjIkB9di(~KS)bq%i$nLjQD5i1k68{i%yS`9#5%5 znEGzFKaXG4E$##lV(>* zFT`BKTnW-r*m5JtO(XtUIsx;K<)YKuq<2#4I;Or`yoX@aR-C(w3GBjNFG#-;uh$8fOL5WZJJRvaO=Qe1TUlk`_geZ|ywi+>P|n*2pFl1hiNv18Qm7e%j#7AGMXHJOZLB$ZAXRlmT$&z>dINXNxY$4m^; zQrI#x$SfmXuM;qr;-b?zq;peh2ByASoR47CWC4!A!|VvsQrL1J$U!4suM;qr z;-b^Tq(@R}Kc>E0JceM@i%vg~eoU!;OntXFfMC?* zGm?>1I+%@L@`bOY?_<7UJ_TthZ21x7rxCB$37AW9(dlo}KPmMcQ{OEPAs9937|s96 z9$lrH;Ae|616EitTOJU3GAajg(y-vVfii=L?kOJU2_Alr<1y-vVfii=KnknT*WEtvXlaW{fdlRZdAQt94o z+?OxxC*2-%0JAGdOJU2QAcu{3y-vVfii=Kx+1Qsa^pkeQyv4i<(o)#+KF9|n zUau1{m*S$+Pox7W^$t_tEe;|WHTi;MB$a;6#&7w;chZkBKQNzzv=p}d3i8{C*Xsn# zrMT$yFX>Q9{lwIFizCPIw|h)&G78D4l+w{->KFL;*~bijVJzvNd~O`3BS=eO%Y^U~ zjd;CIz+8%pPA8L2sXO_LJ|0uwElxu)YBC+kNGhF?jWhFwS)`Lk9%P3Ruh$8fOL5WZ zF4Em8wGC6>E$&4yYO)W>NGjd`f4O?E=C0DOO|M@5GoBgS2fN;*=gjsvhqC7@OqCD2 zJ@3Kz`;deX0z?o&63RJ{qX;7BoDm3wKtz#6j=t8u_q|Ko2dnB{*S^;CtY6bDy1IAq z^Nss_!YFjRoBcGqtdtZt9kg;tims0*Xj+Ov(ZkRqUg`i%{@&s-0u`GaCsGlEp74z) zeZnc|n48lyN3E0;H=VU|PKvINCumxVLD37)i(cvsP5$2EWdaqOTp>~sgI@KG*L=ct z=y^9cXf9bPDQ>!D<+c=EA5YM<6oaDU(7RshCQbg{;sk+;P3{w^h(RCt#z~*>5PHYW z6wN&=CB;pTtxQYN_3;EvOED<=6#C3dJ)+6qTYN#FVw0CdDq_$X-}uTWyoNq;^M>ZR zm6GD7cUIm@(e?2JO-nH-It%^irQXuy?=5~NP_fAuA{8;{SKs)}Cwzx~aPx!ala-R< zre9WmOVRc51WijZC_2A}pWQWaCqF!YqU7%_E`n0A$zmcEF=$Oqe!{%8q^3Bb7W&7> zEu~p#rKGrNnf-bxx;~zuX(!U)rMhYI_ZEi;RBSR#q#_0#@r|2(!WL+so2@j1R!WMSwp-aD zMc2m@G%dxT=q~7PFSU&(e{XRwfr?G`5vhnlM}6adpKt)W)6GGeJyuGJo5rjhmZIz9 z37VE-Q1mGDn3p<4lfSokfS($Xcx33bo~ZkEw3wo+2uwA{)HDY`zMplK-vMH`^2 zyi`3+{@&sm0u`IAB~lTCHu}bOK4Cp{rJD^jtF4q2H#J#lmZIz937VE-P;?Wt)k|%p z$=_RSCs46T2a$>xw9_|s`Gjt0i<=&rHY+8?O?_7SrRe&2f~KVy6di;Pd8uBS{Jq5y z0u`HVCQ=cDZt;y8L7#94y4%ed%|0t7#Z5=79F?N$;|ZFUVo>xr^n{l>Oq0L2c#1&9CZ~y1 z#Gq$<<5{0@4tmVZd76_}N{X8-Z}B>TicM}1sfa;u z`o>#6;WqTLn>#eutdtZt-L-O0ims0*Xj+Ov(fiN`UTT~se{b<2fr?G0h*ZR&k9^}} zpD+!baPx#_(n?8j(=#j2rRe&2f~KVy6nzPu@lsD|{!?84nm|Q-L!?aK`o?!Y;XT3& zHy>zTSt%)Q`e@~o6kQ)r(6khTqFK2|(Iiw`?521SoRk9w(t zH2Hgr#|czya)L-j40_V;VVeBC#nS{Tgfm1cV$id8kJ04sEuJS(AzUC*5rbazW~aQ_ zW#~CKS7=!}3gI)6 ziWu~ZH+$#JzCk~_`A+lIN=b3kPbLT8&&0`O7W@R4xh(Ffl zae!Fgn#UnxOHUq0h{MBq+(JCCBahpN=STCngLv;q9(NIEPUmqC@yDe+?jzRU%Hw`w z%l$kaBo0sKag2CiCXYvm#kXM}BNl(aX6|UCNK9 z{~Ygk&db`!JBo~u_7%C~|Htij!4LjtezloxC+BZo_7JG}d!Uy{MGV@PN8C=D{LRY& z0u{m_k%|~}$Zj`H{^sQffeK+Wk%|~}%hKZSiTl!d!T#0)DD{b&C5{&6`SlQQW1k5u)CWkfAjJXfeK-aNJR{K*zP`>{LRaw z1S*7ML@Hv?uHG3XV$=VailMGSh!n_cy0ccC}k+@l${ zQc~P>-^v3i`dIM|$^S8(Ay6T_B2p29zV>EMz1dsnOE>Rm-dHIqZu($lR*F7WJVDckWl;1J^s|?G zPm{lS`ISJ$Cf|ru#Gv1O!VjPD6Z+B3FPbk_N{XBQSeaj!E4n_Opv6-Eh(XbXD2wXi zPJTH2M#Wano`uE2QZ9c!H*-7!+-Q zuJTg#H2IsCYY0?qvX)3i4BF@$*ZG9?(3NgB(5$vnQry&JrCExuk0)qaib2s$&{i+C zktTohvYkN1CLKg7V$e?C*yR(tp)GEDXxgll6gTx*>6fDG;|ZFUVo-DtI^?B#Y4SHO zM+j7GvYALl47$ZPZuJSJ7$loU4|v2s+3u8${ZT8cr@M%|I=H)2@6`PzU zQW1lm@r`GF!a3+MH|J?iS}7@Rx@hH+6kQ)r(6khTqF10-z0?Jo{LRbj1S&SUL8KxE zz3Cfo`Gnih%Wm$_T(eSA+;rE4bi&OOnn^1q#ZAwwJeQ*D;|ZFUVo>xYbjC|PrODsCd`+NYlQ%>vV$ip~@tse2 z4}Ib01I;TdCB;o2t$dQA>*EQUmSRx!3-qg(nx)C#y!=j}Vv`?4Dq_%|zVVk&_znH+ z<`2y`D<#EE3zii(E?kx?x;~zuX(*EQUmSRwJHFS-aT0xV)dD%#yVv}`5Dq_&}zHx(3 z*a%(ario^)m6GD77Au>i==ykqrllAZZG*OZsb-q|&C5;#6`OPssfa7(heQc~PBU}aE>u8${ZT8cr@Vd#jL>Zi%yyxc;dVw0^zDq_%WzHz%x*a01Kvy*1C zm6GD7-B$KU(e?2JO-nH-x(_<)rFPNeZ(bfCP_fBDA{8;{A>TOW6AnZ7x;a9#-%3ew z(=jW@rRe&2f~KVy6g>$&<)x0&Z@s3XzhhBAam*$3*lH#TbEBB@7 z`gnq-r5F^Qgg*3A_h|mlxc(7=iujmFnNIu0CqCgR!UH$YXr`=`6gR!F@=}Vfk0)qa zib2s=(AQq-InDnS*S{rD5#JFh)AzpdgHM=6m~r!w=8ct-;-=45zDUva@dQmvF(~>C z`rS)?qWKST{Z9fF@fVRY{p}n7_=NfO{GQ-u0nHC9CB;pP>Wdo}OVRc51WijZD7plt zwm$CUC;CE~{LRZc0u`GqBT^BA*4O7J@aMJqk`>SzH!EqDS}7@RT4iOm6kQ)r(6khT zqHCdzUaEm6fAexZfr?Ew5UGekH~PjVpU@0luC6ErQwpy+<+0WYxn^o*A}PLscRd5%EE zCg+J%#Gn^^<3*ov33|%SWty{AN{XAVTDc}g*T)kyEybYd4d_iTb%iE>^YS)>OYD<#EE53Ec|(e?2JO-nH-It6{?rS8+@Z(dFlsMzEQk%}1f zsc(Gd6P`mKx_LqK*h)!p(~Ol@QgnShLDNzUioSuq^-?cs@;5Kv6R6na1Cfdtbk;Y1 z^a-D!uibp6d1s}hxaq5vZ&Gx9JVDb^42u4M{`68`X!18Ne-o(K6gSn_Um``<#}hOy#h~a?Xx;L-lb`5|Y4SHO>j_kBvYbdo z47$Qgt@I@g&{{XEXqH(iDQ;S0WvvulA5YM<6oaDcpzFQVYMT7b%Z&soHfbVK5ra1S z#ulHj3EJqUm1cvLlH#UzD;-jFeLO+aQVfcALA$+F8%_S^WiNq>P5Ovb#Gw7Yalj`G zLOb0I(ezj;DQ+6EvRR6*k0)qaib2t>&~097m?nSoatDEmO?DEgh(UMx#@#+)4|I#0 zy)@gcloU6OTG=l}*T)kyEybYdLFgebwT~u$^YSo(icO9Xsfa<3`o?2E;W+ewn-er+ zR!WMSPFXoEMc2m@G%dxT=vnAFFLjb8fAjJJfr?Eo5~+wmFZssHKH&=VjGL=8=dF|! zH(j@KLyE4CCumxVLD5^#+g|D#P5$QPIDv{y?h>hpLGSs-37>EudehAVnmblXiklu< znUbRG;|ZFUVo>xkblOWz(&TSmJ|$4G$ulAqG3ayO_`)Z=gg$aJL-WK+NpaI_D{rLe z`gnq-r5F@_2Yv6QUeV-lUd|Gz*yJOTiWu~hZ~W{NzCho)`AYM_N=b3kcPl@n==ykq zrllAZ{RRE)rM}VRZ(hz{!O!j$`6dg9R4f&A;fnkO{=C)|#R-d{KYd&c%^xpSQruK) zf2kB*A5YM<6oaD6p!NBk{6t?ulfQYnf!j%Vc!H*-7!=(A-RPy((&TSmHWR4Wq=iUD47$lTw)%uN=z2HpG)-1YikmvEbVtwAo9oqxqM(eiMO; z*h-{K+k9iYPv}6{=%$mV#Y#zWQ@52KDY`zMplK-vMf;%rUaE^GfAeyXK*c6QL@Hv? zVc$676E;J8-E5&5uu@Xow9U$PDY`zMplK-vMR!7Xd8w^5`J0z}2vlscmqEN4?ZRn*7bn;{+-;IYFc%20iH;Px*w? z(8F%d&>XW;QrvXT%6TceKAxayDF#I^LN9r#vo!hjR|r&Wa+OF$40_G(1)BWL%NqnL zgquVvV$fT5FVp02Ufv;4A&e8Lh(YiAlU(;^6VTgk?$g|}Qc~PBY2~35eXMwb79VzA z42nL2KK4=%X!18NpAe|n;m#+y_2yci~ z#Gr4z*>i999{S472byBBN8`UU#cOU=^cZ(e>UP_fAmA{8;{ zPrILK@;5Jk6Q~gW5UGek=Ql*;=k+(5{LRaS4g9>$X|{++g&TBnL$TQ}Z?*)wprKf^ zmZru^NpVx1m1R=&vEm7uJ}iTx%TZQ%siideo0km)DmGa~q#_1gZMU8#fAexJfeN9K zNJR{~&hAQ@{LRY^1S*7$L@Hv?CU3UJo3%jKyV*q3Y^9{Qsm)5e6n(6Cf~F74plBzw zE2sZ9%UZSFKW9DAe_{_Y#edHFs&rlm|C|j}=|4n=g2o$(`Kf6lUMoZ%sp823Z>i!( z1>RQ0PYS%FioX|lR~2uH|7^jPd#bp*!27CrsKEQHczb~lR`I?9k5%#E0w1a3Qw2U& z#TN^FqKa=6_*50&EAW{repKLdRs5pB7pnMOfiG3@mjYj@;@<_nR>d{(pI-P2d!ve% z7x-2cuPyMMDsC?D-74-Z@I)046!<|EZ!Pe{D&AAzM^${Nz|&QHqQFn9_7%_hXsC9#m@@-u8Q9j_(K(cD)7fD{#oG9RlF$v8x+4fU#oaofxlPr>H`0) z;*ACVUB&GMp1-Q{4|iXI7gq7+0xz!OT?JlJ#Rm$!w2F@vcv%&nE%5RxzEa?oReZa^ ztE%`xf!9>=lL9wZ@v8!_uj1JPZ>-|)1#Yh51@Rx__|@4|#Y+p^R>chk?x^DR1@5Zi z)&lobaZiE!s(84-1691Ez(Z9$THui?K2qQwVL;)w$9sp7{4 z-dDvh3%tLI-xv5`6@M-8SQY;%@R2HB692K1U$kRYyrRG-s<^Shr>eN6z-OwstH9@~ zc(A}1s(4$0FIDm00$-`(u>xPK;*$lwQNl7J|E*u0r&U~E;OAAmrob<&xT(Oes<@-TZ>qSz!0)PfOMyRB z@$LeDtm1XArD?h)V7IRz)P!mVf^Q7{@Gbp#dQTzE$9^D!yOfo+_R$a9AUq zf5+!nXG;~=7I<3~uPpG6DqdIMT~)lPzchP6!=sX-z)H$Dt=Vpb5;DJz!$3cU4buE@s|Q$sp8)SzE;IG@&7sa zMY~bO%L{y~iq{tSP8By7_-++<7I>nH2MYY4inkW{VHNKw@S`d|RN(0J>#KOSz#FUhdx4v)ctQN1FMf44Rq@gSw^eaNfjg>r zeSy2GxV6ANRoqkHzA7Fr@IV#sDDY4fj}~~OijNd{OBJ6k@U|+xRNx&|e6zs2s(7Nn zd#d7bc&xzJs`zAqZ&dMx0^h3Q>jl13#diyQw~D6O(VHLkF z@Zu`|Sl}g9{G-52t9W7jzhZuMmQ`_GftOeDssgX9;td5}RmE)uUQ@-r1#Yb3kpi!; z;++NFSjGDb++4*+3%sd{&lI>VaD3o@WbH-FItY~LKc!B`Rtwz(%0f>bvtDS|+Wfzg z|05%$KJot2&RU3+2L~k#$<K{*R2IG%P+++F28k^57N;Tjgqyp|nkWdueAIh?EC+ zO4ub=gAAqJ;(JOvTSufkxKF~UTn#dm_KP1V?QAWP^57u}V{$dfP&zDrWUjrMCVnxp zV+6`)9G81SV>*NRbW;4(T)TlLKjRF6@)>94p3|7lU_PA}zfjuQ3L@pfOA;>2)gVLZ ziul#i&gzMj2d_)GAyarZbpN@5JAicJ_y#lavQ%C47{tL59*N@y|rr*)Iku4}O*KO|AwRO5eqQ5KH?< z{A^}0`xP`7_y_i%(r>wcG^R6{PxBk&nruPi9Q&KkSOlfK$6~oPP{woyAuSQFooj#b z8Ff&~XDpLjuQ8p$d|EEPqO`M5oIrW7LBcAz8e}M~7GFb@oy{^xd9YE!I=LETD6JRY zKrHR|-nt1&`HW_{EgI7q%%@G_t#j?SKBFB<`HT*^of^{_%%?8#?z#4BpV14Yd`6$# zevRo2=F@=qU}04KkEAi*F&y&R#G`d2pMA?Q%89P}(8BlUUl%y!CD< z(QXaf5;f`DlGL*)}?-FHa;|x+BoRDx|t_B%O55y;f=XQ3RLCS+u z5+2FbAVcY~_%yM!Z!((ypn3|We8w}m&o!nqm`^XnUzT=uof9YzzLM}-t_B%OZ^Yjc zWoK6zq&)au!Uwq;WGKyweiGQDKU-TJ2p_I?~CHJ?+ zbO!V3kNEs`wzKn`KzVTCx`^2#1Y8Xg(qi!%xa{mKgOmqrB`ih2)gU3&i7z9{&Q3E( zd2qRe6>>GmP+BS8KrHQ({B2J@*=eBE68xX;)CrF_OlxlJ0=8O*0< z@s`rgj&cI!!Bz=vay7_MY8USymiA#^-UX$6Mz`D^jp+>LQ?GbmX=jHxf%4#hgh9C) zWGD@Z4-;i)2NJO4KkF@h@T~v_EtvoA3o=yl+U;z_oBvh2J`8X_~p{hHgf{y!K)Ik$<-i3>ALt0 zVrdWi@>@{KXWW*1M`JpJ`7|zmx3sfCPM|zEA>qDU4KkD-h))t_XZ;LP9-NZ!NUjDM zN{_{-iKX4^t)D_EpYcrYbB*Z?=FL(|7S7bM022@e4}%jNfwqXiR4?pXRR* zC0nq5j@{xj7C|YWu~=>mlrfz_NK3?POFL`g1j>VT5|+u;AVaBMd^u5ewt+#)gDWL8 z$kiZ2X_feDqU>xPgOmr?N@$d;L59*g@%0gNJ6p>j<-v^-n&fJbq0}tiLM-jojOPE0 zwn8bN(I&TDV>*NR)FIwk+F1i9P#)}-&?8ra45eQ2K4NLF@Z|$g%4ZD99nzT2U_K3t zkCb*+&k2+Vw@BD3SAz_tZQ|RBva>n{DG%Nix{Llcuc}^xf*0Boe)1sEbRr1=D)h9p_I=! zBloPvbO!V3ocQ_D&i?R!kth#dlyFI|1{q41#jg-$XTKPvJa|pQb-5a3DBTdhNtB)a zV36|QZ3%beYLKBcE`FC-+TY@Tc`=wxKq;SbU+x2q=?v!6r1-oZjz2^kV zgR>Go%GDr4>67?pVrjqig>c!~3@1YfNV_pO%ZSm}@`t84Xa% zXRMODT4Oqc`LsrSZE0suIDzuuItlCLYLKC{L3|^zv>*HOW+>$|TI6ohn9g86wTicu zb~eQclm|N`bjsBrL#a!=nptTIl=2xT<(|@*&R{;B7C%$k*;P)U zJa|sRdAS;7C|wZ0NR*vjW{~pWWeHd0YLKCHRs0%Jc6O0L%7Zr~+?1<9hSDwZ+eF#f zc?KyDj!U>JSAz_td*TyB+1XhJDGxr7Fez7q45f$SQ$*R>X$C0|K9(>oSAz_tC*n_u zrG1jo{8#rml=2xb^LV-9(*I=ty~QzV<_1| zcxfN-8H=Hm&!~~R1j?AsAf#IHrKO#XasuVSWfJP;YLKC{TzmylcD9#6%7YCOR>{>M zLus}68lvoMH-nT18zroht3ig+dhrcJ+1XA8DGxSDXqKx%hEj|8CSqxCXEgu2tPM)} zjCQ#l8q*ofr%v&%($2PW0_DLT3B7VP$WZDN?UG!CMk;%he!5>5lj~v9w!! z`8_D*GbZHT*O<;=K0OehEbXj`6DSW(Nq8hzgAAp|;?qRg*#-tF4?dOfOs)nQO3%e# z5M^iU7^FNnBjJ@?4KkEoi@zbt&ek$WdGMWt_i{DJQ2HP~OO&0hW{~pWCkdbBYLKDy zMf@wVv>O=Be=2;3Qa zw6l6npnUlf3AG5g8YHBp;&nvXSsjCv2kRv)m#aaB(hBjF#L}+y)~leD&sZ&YjmC5a z^J%Sk<6OJOXRL=(K4XL2jT+M#%%>*t=DGGFpRox_`HWV%Z5q=V%%^toj=A;%pV0-S zd`7q29*yY?=2NeD-(34oyl~H8HUOo3#-Q9Gjp+>L)3EqRX=lGUf%4!M30viAkfF3q zd^@qUfB5p9P|9cQlDk`DI)nMNM|^K-XWux1^5Ce1{c<(PP&y!fkSII*!XV|rF$ss| zYLKCHMEodGcJ_%u%7e!xoRF(QhSEv#Q$*R>EQ6E>&qz2cSAz_tbK>WTrTw1K{1@pW zl=2yuX#XADvvd@kXITn#dm zUW(5UWoJ(qq&)aq!W+37WGKBAe@B#^J!X*d;0Fn_ay7_M`Y8U1SlUyJ=D)gMpp?(} zD)*blbO!V3yZDc}_N34F1*Lq(Z@GUorZbpN^P5A-7BtVX@B55JP|9a4mRkd5OlJ_% z67kx(_C23b2c>+*GP(5{(;3XC<>D(!I~(T&%7YCOR>{>MLus}68lvp%HiMK08zroh zt3ig+dhrd!(!S}fo1m1>XqMZeF`dDD+9cjO*S_vE+M$%s=#bl~F`dDD>JslR?d&Qi zP#)}+&?i@e45fbY0b*%i_T@uR%4ZDA9nqN1U_NaY-!j*}=rguKDW9=j?hcLV4Cd2L z@m+K6^FCt_l=2yS?|ix9y}=FkX#Kil*Ysl6J=+o8KgXTRKhX2 z8e}LP7e7HP?UUa66qNEAr{$i}n9g86ofSV<+SzeVpged%!bQ0nWGGz{zf3IcqrUtq zl=2zZ5WhLsKI}7YLn)teNA9@BbO!V3uK2yV_935fA4>U*2XZGhrZbpN z55=cSJ3GJ$lm{P6n3k(ShSC%9r$pJ=D1(#-pG$ZlSAz_tm*O)-+1XwODG$Du@J6l% z8A@-(-w|bJyBVZB_(8&~Tn#dmK8k-LmiA6Y_0t;qB^UCy@V?6ZrZJtteEKf_qqMW_ zoIv^VUlM-H)gVLZkNEr++u2qIDGx4eiI^=yz||ljEf%kVm-c3FT??gr#!|U;P{woy zAuSWHFYRoY6DSX^kg!s&1{q2X;;V?Vvq1(a53Z50R;~saN{!;{h_bVO1}P72kg!p% z1{q3C;?2a;?)Asr1f_gNtK2q?=?vymyLd-wXWg7Yd9X`Dw_FV}lzPN_iKX4?%ln~} z&lr$9s4<RrTF72$H6DSXEmas*x1{q3Q#kUbL z(+TmDbM19L<201=8E534)tJs;KAjUkKi6LCGcH0YpK(dKLRv_(H-*m_Od`3N#@)^tJ zuF#myU_PxBZz%2T2PaS-TrFXZTn#dm)`~Y0OZ%HIUk{~x#s;|?HKsF|Pfg;@rJa4@ z1j>V(B(%!aAVaB5yq#FupL}^Il=2x}a=SIAGnh|3;=Ob2S)b7lrF_PK+(C`$4Cd32 z_;6`w?>T|;;ARP174lax%LyEaS=-Sj7xGaYfNV_pRR~soohe#8P}nd&$uD?rp9yz^XZoO z?YZ`p&lrbNKI5+3dm7Uj%%=(Q`*ZC{pD_uge8xk$QySA5%%?}wgf5B`xbzcqI?$WU6)8cMbh zE<3x*Amzcu5^4}|HAqNH#A}JNv&#%p9;}nFOs)nQ;tPE98#BJP-+%$AbAVXK9y}u9s9X&)l#YoXC(6$DGDvywq=Zv)HONppEq;b5JKN15 z<-v0j&db#xL+OI}MWXC%Cxes+FH5*0SAz_ttK!#)va{_BQXae^;ig;-GL&wK-zLh= zwlYY0a9qM&xf*0B-4mZ6%FZ@3NO|yqgh{y?WGFoppCZc6h8d(h_*lZUTn#dmo`^ps z%FYHEq&)as!V9??WGKB9pCQW5`Wd7=_*%jnxf*0By%m2)EbU%K^M4Wj0Hu7!tlW

@nb#G>c8W6 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 F{|6*Zl Date: Wed, 28 May 2025 19:19:56 -0600 Subject: [PATCH 159/178] Avoid using pointer to task, use the actual task object. Add some checked exceptions --- codex/erasure/erasure.nim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/codex/erasure/erasure.nim b/codex/erasure/erasure.nim index e3d618ea79..472c27547f 100644 --- a/codex/erasure/erasure.nim +++ b/codex/erasure/erasure.nim @@ -358,7 +358,7 @@ proc asyncEncode*( proc encodeData( self: Erasure, manifest: Manifest, params: EncodingParams -): Future[?!Manifest] {.async.} = +): Future[?!Manifest] {.async: (raises: [CancelledError]).} = ## Encode blocks pointed to by the protected manifest ## ## `manifest` - the manifest to encode @@ -457,7 +457,7 @@ proc encode*( blocks: Natural, parity: Natural, strategy = SteppedStrategy, -): Future[?!Manifest] {.async.} = +): Future[?!Manifest] {.async: (raises: [CancelledError]).} = ## Encode a manifest into one that is erasure protected. ## ## `manifest` - the original manifest to be encoded @@ -548,7 +548,9 @@ proc asyncDecode*( success() -proc decode*(self: Erasure, encoded: Manifest): Future[?!Manifest] {.async.} = +proc decode*( + self: Erasure, encoded: Manifest +): Future[?!Manifest] {.async: (raises: [CancelledError]).} = ## Decode a protected manifest into it's original ## manifest ## From 25eb2374aa69279072a9cf2079246142354d7047 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 28 May 2025 19:37:17 -0600 Subject: [PATCH 160/178] Update subproject commits for circom-witnessgen and nim-groth16 --- vendor/circom-witnessgen | 2 +- vendor/nim-groth16 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/circom-witnessgen b/vendor/circom-witnessgen index 2420269dc4..1291cf0e62 160000 --- a/vendor/circom-witnessgen +++ b/vendor/circom-witnessgen @@ -1 +1 @@ -Subproject commit 2420269dc47ed2cdf376051976e7c61310f48c2c +Subproject commit 1291cf0e62ddd829b7be14cccc301af82e033391 diff --git a/vendor/nim-groth16 b/vendor/nim-groth16 index bc72efc545..434170541e 160000 --- a/vendor/nim-groth16 +++ b/vendor/nim-groth16 @@ -1 +1 @@ -Subproject commit bc72efc54558b452a25e39f3fa901b81b14db8ea +Subproject commit 434170541e154bcac37a3306d835d2dfe1e81549 From 8b1d9b86c4dd306348e0c03f105aab8241361dc2 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Wed, 28 May 2025 19:40:36 -0600 Subject: [PATCH 161/178] restore tests --- tests/codex/slots/backends/testnimgroth16.nim | 134 +++++++++--------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/tests/codex/slots/backends/testnimgroth16.nim b/tests/codex/slots/backends/testnimgroth16.nim index e7c6625bba..a7156fcc85 100644 --- a/tests/codex/slots/backends/testnimgroth16.nim +++ b/tests/codex/slots/backends/testnimgroth16.nim @@ -50,70 +50,70 @@ suite "Test NimGoth16 Backend - control inputs": let proof = (await nimGroth16.prove(proofInputs)).tryGet check (await nimGroth16.verify(proof)).tryGet -# test "Should not verify with incorrect inputs": -# proofInputs.slotIndex = 1 # change slot index - -# let proof = (await nimGroth16.prove(proofInputs)).tryGet -# check (await nimGroth16.verify(proof)).tryGet == false - -# suite "Test NimGoth16 Backend": -# let -# ecK = 2 -# ecM = 2 -# slotId = 3 -# samples = 5 -# numDatasetBlocks = 8 -# blockSize = DefaultBlockSize -# cellSize = DefaultCellSize - -# graph = "tests/circuits/fixtures/proof_main.bin" -# r1cs = "tests/circuits/fixtures/proof_main.r1cs" -# zkey = "tests/circuits/fixtures/proof_main.zkey" - -# repoTmp = TempLevelDb.new() -# metaTmp = TempLevelDb.new() - -# var -# store: BlockStore -# manifest: Manifest -# protected: Manifest -# verifiable: Manifest -# nimGroth16: NimGroth16BackendRef -# proofInputs: ProofInputs[Poseidon2Hash] -# challenge: array[32, byte] -# builder: Poseidon2Builder -# sampler: Poseidon2Sampler - -# setup: -# let -# repoDs = repoTmp.newDb() -# metaDs = metaTmp.newDb() - -# store = RepoStore.new(repoDs, metaDs) - -# (manifest, protected, verifiable) = await createVerifiableManifest( -# store, numDatasetBlocks, ecK, ecM, blockSize, cellSize -# ) - -# builder = Poseidon2Builder.new(store, verifiable).tryGet -# sampler = Poseidon2Sampler.new(slotId, store, builder).tryGet - -# nimGroth16 = NimGroth16BackendRef.new(graph, r1cs, zkey, tp = Taskpool.new()).tryGet -# challenge = 1234567.toF.toBytes.toArray32 - -# proofInputs = (await sampler.getProofInput(challenge, samples)).tryGet - -# teardown: -# nimGroth16.release() -# await repoTmp.destroyDb() -# await metaTmp.destroyDb() - -# test "Should verify with correct input": -# var proof = (await nimGroth16.prove(proofInputs)).tryGet -# check (await nimGroth16.verify(proof)).tryGet - -# test "Should not verify with incorrect input": -# proofInputs.slotIndex = 1 # change slot index - -# let proof = (await nimGroth16.prove(proofInputs)).tryGet -# check (await nimGroth16.verify(proof)).tryGet == false + test "Should not verify with incorrect inputs": + proofInputs.slotIndex = 1 # change slot index + + let proof = (await nimGroth16.prove(proofInputs)).tryGet + check (await nimGroth16.verify(proof)).tryGet == false + +suite "Test NimGoth16 Backend": + let + ecK = 2 + ecM = 2 + slotId = 3 + samples = 5 + numDatasetBlocks = 8 + blockSize = DefaultBlockSize + cellSize = DefaultCellSize + + graph = "tests/circuits/fixtures/proof_main.bin" + r1cs = "tests/circuits/fixtures/proof_main.r1cs" + zkey = "tests/circuits/fixtures/proof_main.zkey" + + repoTmp = TempLevelDb.new() + metaTmp = TempLevelDb.new() + + var + store: BlockStore + manifest: Manifest + protected: Manifest + verifiable: Manifest + nimGroth16: NimGroth16BackendRef + proofInputs: ProofInputs[Poseidon2Hash] + challenge: array[32, byte] + builder: Poseidon2Builder + sampler: Poseidon2Sampler + + setup: + let + repoDs = repoTmp.newDb() + metaDs = metaTmp.newDb() + + store = RepoStore.new(repoDs, metaDs) + + (manifest, protected, verifiable) = await createVerifiableManifest( + store, numDatasetBlocks, ecK, ecM, blockSize, cellSize + ) + + builder = Poseidon2Builder.new(store, verifiable).tryGet + sampler = Poseidon2Sampler.new(slotId, store, builder).tryGet + + nimGroth16 = NimGroth16BackendRef.new(graph, r1cs, zkey, tp = Taskpool.new()).tryGet + challenge = 1234567.toF.toBytes.toArray32 + + proofInputs = (await sampler.getProofInput(challenge, samples)).tryGet + + teardown: + nimGroth16.release() + await repoTmp.destroyDb() + await metaTmp.destroyDb() + + test "Should verify with correct input": + var proof = (await nimGroth16.prove(proofInputs)).tryGet + check (await nimGroth16.verify(proof)).tryGet + + test "Should not verify with incorrect input": + proofInputs.slotIndex = 1 # change slot index + + let proof = (await nimGroth16.prove(proofInputs)).tryGet + check (await nimGroth16.verify(proof)).tryGet == false From a202eb89380bfcb1c267822048e1478dc4026e04 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Thu, 29 May 2025 21:39:19 -0600 Subject: [PATCH 162/178] refactor: rename proverBackendCmd to proverBackend and standardize enum values --- codex.nim | 1 - codex/codex.nim | 8 ++- codex/conf.nim | 93 +++++++++++++------------ codex/slots/proofs/prover.nim | 27 ++++--- codex/slots/proofs/proverfactory.nim | 8 +-- tests/codex/slots/testproverfactory.nim | 10 +-- 6 files changed, 78 insertions(+), 69 deletions(-) diff --git a/codex.nim b/codex.nim index 7749bdee2a..b534a0b346 100644 --- a/codex.nim +++ b/codex.nim @@ -10,7 +10,6 @@ import pkg/chronos import pkg/questionable import pkg/confutils -import pkg/confutils/defs import pkg/confutils/std/net import pkg/confutils/toml/defs as confTomlDefs import pkg/confutils/toml/std/net as confTomlNet diff --git a/codex/codex.nim b/codex/codex.nim index 234f2d7fab..ccef82e14a 100644 --- a/codex/codex.nim +++ b/codex/codex.nim @@ -208,9 +208,15 @@ proc new*( .withTcpTransport({ServerFlags.ReuseAddr}) .build() + let numThreads = + if int(config.numThreads) == 0: + countProcessors() + else: + int(config.numThreads) + var tp = try: - Taskpool.new(numThreads = int(config.numThreads)) + Taskpool.new(numThreads) except CatchableError as exc: raiseAssert("Failure in tp initialization:" & exc.msg) diff --git a/codex/conf.nim b/codex/conf.nim index 40e21c4b02..44e6d3f418 100644 --- a/codex/conf.nim +++ b/codex/conf.nim @@ -18,6 +18,7 @@ import std/terminal # Is not used in tests import std/options import std/strutils import std/typetraits +import std/cpuinfo import pkg/chronos import pkg/chronicles/helpers @@ -54,9 +55,7 @@ export DefaultQuotaBytes, DefaultBlockTtl, DefaultBlockInterval, DefaultNumBlocksPerInterval, DefaultRequestCacheSize -type ThreadCount* = distinct Natural - -proc `==`*(a, b: ThreadCount): bool {.borrow.} +type ThreadCount* = range[0 .. 256] proc defaultDataDir*(): string = let dataDir = @@ -76,7 +75,6 @@ const DefaultDataDir* = defaultDataDir() DefaultCircuitDir* = defaultDataDir() / "circuits" - DefaultThreadCount* = ThreadCount(0) type StartUpCmd* {.pure.} = enum @@ -88,8 +86,11 @@ type prover ProverBackendCmd* {.pure.} = enum - nimGroth16 - circomCompat + nimgroth16 + circomcompat + + Curves* {.pure.} = enum + bn128 = "bn128" LogKind* {.pure.} = enum Auto = "auto" @@ -197,7 +198,8 @@ type numThreads* {. desc: "Number of worker threads (\"0\" = use as many threads as there are CPU cores available)", - defaultValue: DefaultThreadCount, + defaultValueDesc: "0", + defaultValue: ThreadCount(0), name: "num-threads" .}: ThreadCount @@ -384,6 +386,22 @@ type name: "circuit-dir" .}: OutDir + proverBackend* {. + desc: + "The backend to use for the prover. " & + "Must be one of: nimgroth16, circomcompat", + defaultValue: ProverBackendCmd.nimgroth16, + defaultValueDesc: "nimgroth16", + name: "prover-backend" + .}: ProverBackendCmd + + curve* {. + desc: "The curve to use for the storage circuit", + defaultValue: Curves.bn128, + defaultValueDesc: $Curves.bn128, + name: "curve" + .}: Curves + circomR1cs* {. desc: "The r1cs file for the storage circuit", defaultValue: $DefaultCircuitDir / "proof_main.r1cs", @@ -391,28 +409,21 @@ type name: "circom-r1cs" .}: InputFile - case proverBackendCmd*: ProverBackendCmd - of ProverBackendCmd.nimGroth16: - nimGroth16Curve* {. - desc: "The curve to use for the storage circuit", - defaultValue: "bn128", - name: "nim-groth16-curve" - .}: string - - circomGraph* {. - desc: "The graph file for the storage circuit", - defaultValue: $DefaultCircuitDir / "graph.bin", - defaultValueDesc: $DefaultDataDir & "/circuits/graph.bin", - name: "nim-groth16-graph" - .}: InputFile - of ProverBackendCmd.circomCompat: - circomWasm* {. - desc: - "The wasm file for the storage circuit - DEPRECATED: use the default nimGroth16 backend", - defaultValue: $DefaultCircuitDir / "proof_main.wasm", - defaultValueDesc: $DefaultDataDir & "/circuits/proof_main.wasm", - name: "circom-wasm" - .}: InputFile + circomGraph* {. + desc: + "The graph file for the storage circuit (only used with nimgroth16 backend)", + defaultValue: $DefaultCircuitDir / "proof_main.bin", + defaultValueDesc: $DefaultDataDir & "/circuits/proof_main.bin", + name: "circom-graph" + .}: InputFile + + circomWasm* {. + desc: + "The wasm file for the storage circuit (only used with circomcompat backend)", + defaultValue: $DefaultCircuitDir / "proof_main.wasm", + defaultValueDesc: $DefaultDataDir & "/circuits/proof_main.wasm", + name: "circom-wasm" + .}: InputFile circomZkey* {. desc: "The zkey file for the storage circuit", @@ -421,11 +432,11 @@ type name: "circom-zkey" .}: InputFile - # TODO: should probably be hidden and behind a feature flag circomNoZkey* {. desc: "Ignore the zkey file - use only for testing!", defaultValue: false, - name: "circom-no-zkey" + name: "circom-no-zkey", + hidden .}: bool numProofSamples* {. @@ -516,7 +527,7 @@ const proc parseCmdArg*( T: typedesc[MultiAddress], input: string -): MultiAddress {.upraises: [ValueError].} = +): MultiAddress {.raises: [ValueError].} = var ma: MultiAddress try: let res = MultiAddress.init(input) @@ -530,12 +541,8 @@ proc parseCmdArg*( quit QuitFailure ma -proc parseCmdArg*(T: type ThreadCount, input: string): T {.upraises: [ValueError].} = - let count = parseInt(input) - if count != 0 and count < 2: - warn "Invalid number of threads", input = input - quit QuitFailure - ThreadCount(count) +proc parseCmdArg*(T: type ThreadCount, val: string): T {.raises: [ValueError].} = + ThreadCount(val.parseUInt()) proc parseCmdArg*(T: type SignedPeerRecord, uri: string): T = var res: SignedPeerRecord @@ -597,7 +604,7 @@ proc parseCmdArg*(T: type Duration, val: string): T = proc readValue*( r: var TomlReader, val: var EthAddress -) {.upraises: [SerializationError, IOError].} = +) {.raises: [SerializationError, IOError].} = val = EthAddress.init(r.readValue(string)).get() proc readValue*(r: var TomlReader, val: var SignedPeerRecord) = @@ -625,7 +632,7 @@ proc readValue*(r: var TomlReader, val: var MultiAddress) = proc readValue*( r: var TomlReader, val: var NBytes -) {.upraises: [SerializationError, IOError].} = +) {.raises: [SerializationError, IOError].} = var value = 0'i64 var str = r.readValue(string) let count = parseSize(str, value, alwaysBin = true) @@ -636,7 +643,7 @@ proc readValue*( proc readValue*( r: var TomlReader, val: var ThreadCount -) {.upraises: [SerializationError, IOError].} = +) {.raises: [SerializationError, IOError].} = var str = r.readValue(string) try: val = parseCmdArg(ThreadCount, str) @@ -645,7 +652,7 @@ proc readValue*( proc readValue*( r: var TomlReader, val: var Duration -) {.upraises: [SerializationError, IOError].} = +) {.raises: [SerializationError, IOError].} = var str = r.readValue(string) var dur: Duration let count = parseDuration(str, dur) @@ -712,7 +719,7 @@ proc stripAnsi*(v: string): string = res -proc updateLogLevel*(logLevel: string) {.upraises: [ValueError].} = +proc updateLogLevel*(logLevel: string) {.raises: [ValueError].} = # Updates log levels (without clearing old ones) let directives = logLevel.split(";") try: diff --git a/codex/slots/proofs/prover.nim b/codex/slots/proofs/prover.nim index 861ad627b6..b98aabe4b4 100644 --- a/codex/slots/proofs/prover.nim +++ b/codex/slots/proofs/prover.nim @@ -35,17 +35,14 @@ export backends logScope: topics = "codex prover" -type - Prover* = ref object - case backendKind: ProverBackendCmd - of ProverBackendCmd.nimGroth16: - groth16Backend*: NimGroth16BackendRef - of ProverBackendCmd.circomCompat: - circomCompatBackend*: CircomCompatBackendRef - nSamples: int - tp: Taskpool - - AnyBackend* = NimGroth16BackendRef or CircomCompatBackendRef +type Prover* = ref object + case backendKind: ProverBackendCmd + of ProverBackendCmd.nimgroth16: + groth16Backend*: NimGroth16BackendRef + of ProverBackendCmd.circomcompat: + circomCompatBackend*: CircomCompatBackendRef + nSamples: int + tp: Taskpool proc prove*[SomeSampler]( self: Prover, @@ -69,7 +66,7 @@ proc prove*[SomeSampler]( # prove slot case self.backendKind - of ProverBackendCmd.nimGroth16: + of ProverBackendCmd.nimgroth16: let proof = ?await self.groth16Backend.prove(proofInput) verified = @@ -78,7 +75,7 @@ proc prove*[SomeSampler]( else: bool.none return success (proof.toGroth16Proof, verified) - of ProverBackendCmd.circomCompat: + of ProverBackendCmd.circomcompat: let proof = ?await self.circomCompatBackend.prove(proofInput) verified = @@ -93,7 +90,7 @@ proc new*( ): Prover = Prover( circomCompatBackend: backend, - backendKind: ProverBackendCmd.circomCompat, + backendKind: ProverBackendCmd.circomcompat, nSamples: nSamples, tp: tp, ) @@ -103,7 +100,7 @@ proc new*( ): Prover = Prover( groth16Backend: backend, - backendKind: ProverBackendCmd.nimGroth16, + backendKind: ProverBackendCmd.nimgroth16, nSamples: nSamples, tp: tp, ) diff --git a/codex/slots/proofs/proverfactory.nim b/codex/slots/proofs/proverfactory.nim index 6f2795d774..6259b611bf 100644 --- a/codex/slots/proofs/proverfactory.nim +++ b/codex/slots/proofs/proverfactory.nim @@ -91,7 +91,7 @@ proc initializeNimGroth16Backend( $graphFile, $r1csFile, $zkeyFile, - config.nimGroth16Curve, + $config.curve, config.maxSlotDepth, config.maxDatasetDepth, config.maxBlockDepth, @@ -121,14 +121,14 @@ proc initializeCircomCompatBackend( proc initializeProver*(config: CodexConf, tp: Taskpool): ?!Prover = let prover = - case config.proverBackendCmd - of ProverBackendCmd.nimGroth16: + case config.proverBackend + of ProverBackendCmd.nimgroth16: without backend =? initializeNimGroth16Backend(config, tp), err: suggestDownloadTool(config) return failure("Unable to initialize NimGroth16 backend") Prover.new(backend, config.numProofSamples, tp) - of ProverBackendCmd.circomCompat: + of ProverBackendCmd.circomcompat: without backend =? initializeCircomCompatBackend(config, tp), err: suggestDownloadTool(config) return failure("Unable to initialize CircomCompat backend") diff --git a/tests/codex/slots/testproverfactory.nim b/tests/codex/slots/testproverfactory.nim index 4d4b571457..e3a3f2113e 100644 --- a/tests/codex/slots/testproverfactory.nim +++ b/tests/codex/slots/testproverfactory.nim @@ -29,7 +29,7 @@ suite "Test BackendFactory": metricsAddress: parseIpAddress("127.0.0.1"), persistenceCmd: PersistenceCmd.prover, marketplaceAddress: EthAddress.example.some, - proverBackendCmd: ProverBackendCmd.nimGroth16, + proverBackend: ProverBackendCmd.nimgroth16, circomGraph: InputFile("tests/circuits/fixtures/proof_main.bin"), circomR1cs: InputFile("tests/circuits/fixtures/proof_main.r1cs"), circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"), @@ -47,7 +47,7 @@ suite "Test BackendFactory": metricsAddress: parseIpAddress("127.0.0.1"), persistenceCmd: PersistenceCmd.prover, marketplaceAddress: EthAddress.example.some, - proverBackendCmd: ProverBackendCmd.circomCompat, + proverBackend: ProverBackendCmd.circomcompat, circomWasm: InputFile("tests/circuits/fixtures/proof_main.wasm"), circomR1cs: InputFile("tests/circuits/fixtures/proof_main.r1cs"), circomZkey: InputFile("tests/circuits/fixtures/proof_main.zkey"), @@ -65,7 +65,7 @@ suite "Test BackendFactory": metricsAddress: parseIpAddress("127.0.0.1"), persistenceCmd: PersistenceCmd.prover, marketplaceAddress: EthAddress.example.some, - proverBackendCmd: ProverBackendCmd.circomCompat, + proverBackend: ProverBackendCmd.circomcompat, # Set the circuitDir such that the tests/circuits/fixtures/ files # will be picked up as local files: circuitDir: OutDir("tests/circuits/fixtures"), @@ -83,7 +83,7 @@ suite "Test BackendFactory": metricsAddress: parseIpAddress("127.0.0.1"), persistenceCmd: PersistenceCmd.prover, marketplaceAddress: EthAddress.example.some, - proverBackendCmd: ProverBackendCmd.nimGroth16, + proverBackend: ProverBackendCmd.nimgroth16, # Set the circuitDir such that the tests/circuits/fixtures/ files # will be picked up as local files: circuitDir: OutDir("tests/circuits/fixtures"), @@ -101,7 +101,7 @@ suite "Test BackendFactory": nat: NatConfig(hasExtIp: false, nat: NatNone), metricsAddress: parseIpAddress("127.0.0.1"), persistenceCmd: PersistenceCmd.prover, - proverBackendCmd: ProverBackendCmd.nimGroth16, + proverBackend: ProverBackendCmd.nimgroth16, marketplaceAddress: EthAddress.example.some, circuitDir: OutDir(circuitDir), ) From 959241e8e561c9b84f4e26858496caf2ac8abb64 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Thu, 29 May 2025 23:32:55 -0600 Subject: [PATCH 163/178] feat: improve prover logging and add NimGroth16 prover tests --- codex/slots/proofs/proverfactory.nim | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/codex/slots/proofs/proverfactory.nim b/codex/slots/proofs/proverfactory.nim index 6259b611bf..9924c2943c 100644 --- a/codex/slots/proofs/proverfactory.nim +++ b/codex/slots/proofs/proverfactory.nim @@ -14,6 +14,9 @@ import ../../conf import ./backends import ./prover +logScope: + topics = "codex slots proverfactory" + template graphFilePath(config: CodexConf): string = config.circuitDir / "proof_main.bin" @@ -82,6 +85,8 @@ proc suggestDownloadTool(config: CodexConf) = proc initializeNimGroth16Backend( config: CodexConf, tp: Taskpool ): ?!NimGroth16BackendRef = + trace "Initializing NimGroth16 backend" + let graphFile = ?getGraphFile(config) r1csFile = ?getR1csFile(config) @@ -103,6 +108,8 @@ proc initializeNimGroth16Backend( proc initializeCircomCompatBackend( config: CodexConf, tp: Taskpool ): ?!CircomCompatBackendRef = + trace "Initializing CircomCompat backend" + let r1csFile = ?getR1csFile(config) wasmFile = ?getWasmFile(config) @@ -124,14 +131,16 @@ proc initializeProver*(config: CodexConf, tp: Taskpool): ?!Prover = case config.proverBackend of ProverBackendCmd.nimgroth16: without backend =? initializeNimGroth16Backend(config, tp), err: + trace "Unable to initialize NimGroth16 backend: ", err = err.msg suggestDownloadTool(config) - return failure("Unable to initialize NimGroth16 backend") + return failure(err) Prover.new(backend, config.numProofSamples, tp) of ProverBackendCmd.circomcompat: without backend =? initializeCircomCompatBackend(config, tp), err: + trace "Unable to initialize CircomCompat backend: ", err = err.msg suggestDownloadTool(config) - return failure("Unable to initialize CircomCompat backend") + return failure(err) Prover.new(backend, config.numProofSamples, tp) From 878063cafd213cb69ae7c0436f091c497c7ba5b7 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Thu, 29 May 2025 23:33:35 -0600 Subject: [PATCH 164/178] refactor: replace circom-wasm with circom-graph and update G1/G2 point conversions --- codex/slots/proofs/backends/converters.nim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/codex/slots/proofs/backends/converters.nim b/codex/slots/proofs/backends/converters.nim index 46db7c8b05..65007d84a2 100644 --- a/codex/slots/proofs/backends/converters.nim +++ b/codex/slots/proofs/backends/converters.nim @@ -61,8 +61,8 @@ func toGroth16Proof*(proof: CircomCompatProof): Groth16Proof = func toG1*(g: NimGroth16G1): G1Point = var - x: seq[byte] - y: seq[byte] + x: array[32, byte] + y: array[32, byte] assert x.marshal(g.x, Endianness.littleEndian) assert y.marshal(g.y, Endianness.littleEndian) @@ -71,8 +71,8 @@ func toG1*(g: NimGroth16G1): G1Point = func toG2*(g: NimGroth16G2): G2Point = var - x: array[2, seq[byte]] - y: array[2, seq[byte]] + x: array[2, array[32, byte]] + y: array[2, array[32, byte]] assert x[0].marshal(g.x.coords[0], Endianness.littleEndian) assert x[1].marshal(g.x.coords[1], Endianness.littleEndian) From 6201ce0ed8b27434ffb19680ce169bc06fcd8259 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Thu, 29 May 2025 23:33:57 -0600 Subject: [PATCH 165/178] feat: add single-block slot proof tests and update NimGroth16 backend configuration --- codex/slots/proofs/backends/nimgroth16.nim | 4 +- tests/codex/slots/testprover.nim | 77 ++++++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/codex/slots/proofs/backends/nimgroth16.nim b/codex/slots/proofs/backends/nimgroth16.nim index e51edd448b..5c38fc2335 100644 --- a/codex/slots/proofs/backends/nimgroth16.nim +++ b/codex/slots/proofs/backends/nimgroth16.nim @@ -175,7 +175,7 @@ proc verify*( proc new*( _: type NimGroth16BackendRef, - graph: string, + graphPath: string, r1csPath: string, zkeyPath: string, curve = DefaultCurve, @@ -190,7 +190,7 @@ proc new*( ## let - graph = ?loadGraph(graph).catch + graph = ?loadGraph(graphPath).catch r1cs = ?parseR1CS(r1csPath).catch zkey = ?parseZKey(zkeyPath).catch diff --git a/tests/codex/slots/testprover.nim b/tests/codex/slots/testprover.nim index 8f7695e52d..4d13a9a444 100644 --- a/tests/codex/slots/testprover.nim +++ b/tests/codex/slots/testprover.nim @@ -93,3 +93,80 @@ suite "Test CircomCompat Prover": check: checked.isSome and checked.get == true + +suite "Test NimGroth16 Prover": + let + samples = 5 + blockSize = DefaultBlockSize + cellSize = DefaultCellSize + repoTmp = TempLevelDb.new() + metaTmp = TempLevelDb.new() + tp = Taskpool.new() + challenge = 1234567.toF.toBytes.toArray32 + + var + store: BlockStore + prover: Prover + + setup: + let + tp = Taskpool.new() + repoDs = repoTmp.newDb() + metaDs = metaTmp.newDb() + backend = NimGroth16BackendRef.new( + r1csPath = "tests/circuits/fixtures/proof_main.r1cs", + graphPath = "tests/circuits/fixtures/proof_main.bin", + zkeyPath = "tests/circuits/fixtures/proof_main.zkey", + tp = tp, + ).tryGet + + store = RepoStore.new(repoDs, metaDs) + prover = Prover.new(backend, samples, tp) + + teardown: + await repoTmp.destroyDb() + await metaTmp.destroyDb() + + test "Should sample and prove a slot": + let + (_, _, verifiable) = await createVerifiableManifest( + store, + 8, # number of blocks in the original dataset (before EC) + 5, # ecK + 3, # ecM + blockSize, + cellSize, + ) + + builder = + Poseidon2Builder.new(store, verifiable, verifiable.verifiableStrategy).tryGet + sampler = Poseidon2Sampler.new(1, store, builder).tryGet + (_, checked) = + (await prover.prove(sampler, verifiable, challenge, verify = true)).tryGet + + check: + checked.isSome and checked.get == true + + test "Should generate valid proofs when slots consist of single blocks": + # To get single-block slots, we just need to set the number of blocks in + # the original dataset to be the same as ecK. The total number of blocks + # after generating random data for parity will be ecK + ecM, which will + # match the number of slots. + let + (_, _, verifiable) = await createVerifiableManifest( + store, + 2, # number of blocks in the original dataset (before EC) + 2, # ecK + 1, # ecM + blockSize, + cellSize, + ) + + builder = + Poseidon2Builder.new(store, verifiable, verifiable.verifiableStrategy).tryGet + sampler = Poseidon2Sampler.new(1, store, builder).tryGet + (_, checked) = + (await prover.prove(sampler, verifiable, challenge, verify = true)).tryGet + + check: + checked.isSome and checked.get == true From ebf4ce4c6f5765920d315940e76e4021a422a32b Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Thu, 29 May 2025 23:34:34 -0600 Subject: [PATCH 166/178] chore: add project documentation and update test configurations --- codex/slots/proofs/prover.nim | 1 - 1 file changed, 1 deletion(-) diff --git a/codex/slots/proofs/prover.nim b/codex/slots/proofs/prover.nim index b98aabe4b4..b49ab02182 100644 --- a/codex/slots/proofs/prover.nim +++ b/codex/slots/proofs/prover.nim @@ -56,7 +56,6 @@ proc prove*[SomeSampler]( logScope: cid = manifest.treeCid - slot = slotIdx challenge = challenge trace "Received proof challenge" From 71fdf952cf9b284583a042094739fc7e168fd68c Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Fri, 30 May 2025 18:25:06 -0600 Subject: [PATCH 167/178] refactor: simplify error handling in suggestDownloadTool and enhance test setup for CLI --- codex/slots/proofs/proverfactory.nim | 4 +--- tests/integration/testcli.nim | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/codex/slots/proofs/proverfactory.nim b/codex/slots/proofs/proverfactory.nim index 9924c2943c..419b0fa504 100644 --- a/codex/slots/proofs/proverfactory.nim +++ b/codex/slots/proofs/proverfactory.nim @@ -71,9 +71,7 @@ proc getZkeyFile*(config: CodexConf): ?!string = proc suggestDownloadTool(config: CodexConf) = without address =? config.marketplaceAddress: - raise (ref Defect)( - msg: "Proving backend initializing while marketplace address not set." - ) + raiseAssert("Proving backend initializing while marketplace address not set.") let tokens = ["cirdl", "\"" & $config.circuitDir & "\"", config.ethProvider, $address] diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index f5dd3e6288..aa57ed7396 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -65,6 +65,10 @@ asyncchecksuite "Command line interface": test "complains when persistence is enabled without ethereum account": let node = await startCodex(@["persistence"]) + + defer: + await node.stop() + await node.waitUntilOutput("Persistence enabled, but no Ethereum account was set") await node.stop(expectedErrCode = 1) @@ -84,10 +88,8 @@ asyncchecksuite "Command line interface": 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:" + let 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]) @@ -104,6 +106,10 @@ asyncchecksuite "Command line interface": "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", ] ) + + defer: + await node.stop() + await node.waitUntilOutput(expectedDownloadInstruction) await node.stop(expectedErrCode = 1) @@ -115,8 +121,11 @@ asyncchecksuite "Command line interface": "prover", marketplaceArg, "--circom-r1cs=tests/circuits/fixtures/proof_main.r1cs", - "--circom-wasm=tests/circuits/fixtures/proof_main.wasm", ] ) + + defer: + await node.stop() + await node.waitUntilOutput(expectedDownloadInstruction) await node.stop(expectedErrCode = 1) From 0442b8f23caef2ec43b61b72950830a3cf142360 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Fri, 30 May 2025 18:25:40 -0600 Subject: [PATCH 168/178] remove echo (todo: fix trace log) --- codex/nat.nim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/codex/nat.nim b/codex/nat.nim index d022dad6cb..f11f16ea5a 100644 --- a/codex/nat.nim +++ b/codex/nat.nim @@ -423,10 +423,12 @@ proc nattedAddress*( it.remapAddr(ip = newIP, port = tcp) else: # NAT mapping failed - use original address - echo "Failed to get external IP, using original address", it + # TODO: `trace` breaks in the mapIt template + # trace "Failed to get external IP, using original address", it discoveryAddrs.add(getMultiAddrWithIPAndUDPPort(ipPart.get, udpPort)) it else: # Invalid multiaddress format - return as is it + (newAddrs, discoveryAddrs) From c4c454e6cd2053a82da45bd09d7f42eab71d2471 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 16:00:06 +1000 Subject: [PATCH 169/178] contracts: fix hardhat modifier error --- vendor/codex-contracts-eth | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/codex-contracts-eth b/vendor/codex-contracts-eth index 68e66f3888..98669298a1 160000 --- a/vendor/codex-contracts-eth +++ b/vendor/codex-contracts-eth @@ -1 +1 @@ -Subproject commit 68e66f3888cda9376aef08ca130b1914b3307a83 +Subproject commit 98669298a107de735e5798d0160822e59f30a20e From 4dec2e90dc17eb4e3b42095ffb177435d94b8f6a Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 16:26:02 +1000 Subject: [PATCH 170/178] fix rebase --- tests/integration/multinodes.nim | 8 ++++---- tests/integration/testcli.nim | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/integration/multinodes.nim b/tests/integration/multinodes.nim index 552e7c37ea..841f8ef248 100644 --- a/tests/integration/multinodes.nim +++ b/tests/integration/multinodes.nim @@ -268,15 +268,15 @@ template multinodesuite*(suiteName: string, body: untyped) = ) config.addCliOption( PersistenceCmd.prover, "--circom-r1cs", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.r1cs", + "tests/circuits/fixtures/proof_main.r1cs", ) config.addCliOption( - PersistenceCmd.prover, "--circom-wasm", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.wasm", + PersistenceCmd.prover, "--circom-graph", + "tests/circuits/fixtures/proof_main.bin", ) config.addCliOption( PersistenceCmd.prover, "--circom-zkey", - "vendor/codex-contracts-eth/verifier/networks/hardhat/proof_main.zkey", + "tests/circuits/fixtures/proof_main.zkey", ) return await newCodexProcess(providerIdx, config, Role.Provider) diff --git a/tests/integration/testcli.nim b/tests/integration/testcli.nim index aa57ed7396..2c6422bab6 100644 --- a/tests/integration/testcli.nim +++ b/tests/integration/testcli.nim @@ -88,8 +88,10 @@ asyncchecksuite "Command line interface": await node.stop(expectedErrCode = 1) discard removeFile(unsafeKeyFile) - let expectedDownloadInstruction = - "Proving circuit files are not found. Please run the following to download them:" + 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]) From f0c4338ded75c6c93f1c7bc9d3058e50d7d9a0ee Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 18:28:20 +1000 Subject: [PATCH 171/178] fix(integration): Increase poll interval on codex client calls To hopefully prevent the http client from crashing in CI --- tests/integration/testmarketplace.nim | 9 +++++++-- tests/integration/testpurchasing.nim | 8 ++++++-- tests/integration/testsales.nim | 4 +++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/tests/integration/testmarketplace.nim b/tests/integration/testmarketplace.nim index f881a6aea1..b7a6791faf 100644 --- a/tests/integration/testmarketplace.nim +++ b/tests/integration/testmarketplace.nim @@ -178,7 +178,7 @@ marketplacesuite "Marketplace": let requestId = (await client0.client.requestId(purchaseId)).get # We wait that the 3 slots are filled by the first SP - check eventually( + check eventuallySafe( await client0.client.purchaseStateIs(purchaseId, "started"), timeout = 10 * 60.int * 1000, ) @@ -209,10 +209,13 @@ marketplacesuite "Marketplace": check eventually( await client0.client.purchaseStateIs(purchaseId2, "started"), timeout = 10 * 60.int * 1000, + pollInterval = 100, ) # Double check, verify that our second SP hosts the 3 slots - check eventually ((await provider1.client.getSlots()).get).len == 3 + check eventually ( + ((await provider1.client.getSlots()).get).len == 3, pollInterval = 100 + ) marketplacesuite "Marketplace payouts": const minPricePerBytePerSecond = 1.u256 @@ -380,6 +383,7 @@ marketplacesuite "Marketplace payouts": check eventually( await client0.client.purchaseStateIs(purchaseId, "started"), timeout = 10 * 60.int * 1000, + pollInterval = 100, ) # Here we will check that for each provider, the total remaining collateral @@ -398,4 +402,5 @@ marketplacesuite "Marketplace payouts": availability.totalRemainingCollateral == availableSlots * slotSize * minPricePerBytePerSecond, timeout = 30 * 1000, + pollInterval = 100 ) diff --git a/tests/integration/testpurchasing.nim b/tests/integration/testpurchasing.nim index ba8dd1907f..227df02ea7 100644 --- a/tests/integration/testpurchasing.nim +++ b/tests/integration/testpurchasing.nim @@ -95,13 +95,17 @@ twonodessuite "Purchasing": ) ).get check eventually( - await client1.purchaseStateIs(id, "submitted"), timeout = 3 * 60 * 1000 + await client1.purchaseStateIs(id, "submitted"), + timeout = 3 * 60 * 1000, + pollInterval = 100, ) await node1.restart() check eventually( - await client1.purchaseStateIs(id, "submitted"), timeout = 3 * 60 * 1000 + await client1.purchaseStateIs(id, "submitted"), + timeout = 3 * 60 * 1000, + pollInterval = 100, ) let request = (await client1.getPurchase(id)).get.request.get check request.ask.duration == (10 * 60).uint64 diff --git a/tests/integration/testsales.nim b/tests/integration/testsales.nim index ce32a3ef41..6a908e840b 100644 --- a/tests/integration/testsales.nim +++ b/tests/integration/testsales.nim @@ -218,7 +218,9 @@ multinodesuite "Sales": ).get check eventually( - await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 + await client.purchaseStateIs(id, "started"), + timeout = 10 * 60 * 1000, + pollInterval = 100, ) let purchase = (await client.getPurchase(id)).get check purchase.error == none string From d9e864c8ffa0ddffd1d37de05b3539e5ab049526 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 18:51:07 +1000 Subject: [PATCH 172/178] fix(integration): remove eventually where not necessarily needed --- tests/integration/testmarketplace.nim | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/integration/testmarketplace.nim b/tests/integration/testmarketplace.nim index b7a6791faf..7da9f35ba2 100644 --- a/tests/integration/testmarketplace.nim +++ b/tests/integration/testmarketplace.nim @@ -213,9 +213,7 @@ marketplacesuite "Marketplace": ) # Double check, verify that our second SP hosts the 3 slots - check eventually ( - ((await provider1.client.getSlots()).get).len == 3, pollInterval = 100 - ) + check (await provider1.client.getSlots()).get.len == 3 marketplacesuite "Marketplace payouts": const minPricePerBytePerSecond = 1.u256 From bfccbce5fbb035e609c902bbf6eb45445c6602f1 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 23:06:41 +1000 Subject: [PATCH 173/178] fix(ci): Revert to arm64 for all other tests besides integration tests --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e7353f26c5..4fc0a573e7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ env: nim_version: v2.2.4 builder_integration_from_vars: true builder_integration_linux: runner-node-01-linux-03-eu-hel1 - builder_integration_macos: macos-14-large + builder_integration_macos: macos-14-xlarge builder_integration_windows: windows-latest-amd64-32vcpu concurrency: @@ -43,10 +43,10 @@ jobs: os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {linux}, cpu {amd64}, builder {${{ env.builder_integration_linux }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {amd64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {amd64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {arm64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {arm64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {amd64}, builder {${{ env.builder_integration_macos }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {amd64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {arm64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {windows}, cpu {amd64}, builder {windows-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {msys2} os {windows}, cpu {amd64}, builder {windows-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {msys2} os {windows}, cpu {amd64}, builder {${{ env.builder_integration_windows }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {msys2} From c391f03e894e3b2612ecf809ea56ab2daaabf694 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Thu, 5 Jun 2025 23:42:12 +1000 Subject: [PATCH 174/178] fix(ci): macos-14-xlarge is arm64 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4fc0a573e7..41537a05d0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: os {linux}, cpu {amd64}, builder {ubuntu-latest}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {arm64}, builder {macos-14}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {arm64}, builder {macos-14}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} - os {macos}, cpu {amd64}, builder {${{ env.builder_integration_macos }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} + os {macos}, cpu {arm64}, builder {${{ env.builder_integration_macos }}}, tests {integration}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {macos}, cpu {arm64}, builder {macos-14}, tests {tools}, nim_version {${{ env.nim_version }}}, shell {bash --noprofile --norc -e -o pipefail} os {windows}, cpu {amd64}, builder {windows-latest}, tests {unittest}, nim_version {${{ env.nim_version }}}, shell {msys2} os {windows}, cpu {amd64}, builder {windows-latest}, tests {contract}, nim_version {${{ env.nim_version }}}, shell {msys2} From 38d8692515ceff7cff09438de2d9a5bb357dce1c Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 6 Jun 2025 12:53:07 +1000 Subject: [PATCH 175/178] fix(integration): replace polling with started event subscription --- tests/integration/testmarketplace.nim | 86 +++++++++++++++++---------- tests/integration/testproofs.nim | 16 +++-- tests/integration/testsales.nim | 41 +++++++------ 3 files changed, 88 insertions(+), 55 deletions(-) diff --git a/tests/integration/testmarketplace.nim b/tests/integration/testmarketplace.nim index 7da9f35ba2..3fff77e26e 100644 --- a/tests/integration/testmarketplace.nim +++ b/tests/integration/testmarketplace.nim @@ -50,6 +50,14 @@ marketplacesuite "Marketplace": # client requests storage let cid = (await client.upload(data)).get + + var requestStartedFut = Future[void].Raising([CancelledError]).init() + proc onRequestStarted(eventResult: ?!RequestFulfilled) {.raises: [].} = + requestStartedFut.complete() + + let startedSubscription = + await marketplace.subscribe(RequestFulfilled, onRequestStarted) + let id = await client.requestStorage( cid, duration = 20 * 60.uint64, @@ -61,9 +69,9 @@ marketplacesuite "Marketplace": tolerance = ecTolerance, ) - check eventuallySafe( - await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 - ) + # wait for request to start + await requestStartedFut + let purchase = (await client.getPurchase(id)).get check purchase.error == none string let availabilities = (await host.getAvailabilities()).get @@ -75,6 +83,8 @@ marketplacesuite "Marketplace": check reservations.len == 3 check reservations[0].requestId == purchase.requestId + await startedSubscription.unsubscribe() + test "node slots gets paid out and rest of tokens are returned to client", marketplaceConfig: let size = 0xFFFFFF.uint64 @@ -226,23 +236,25 @@ marketplacesuite "Marketplace payouts": NodeConfigs( # Uncomment to start Hardhat automatically, typically so logs can be inspected locally hardhat: HardhatConfig.none, - clients: CodexConfigs.init(nodes = 1) - # .debug() # uncomment to enable console log output.debug() - # .withLogFile() - # # uncomment to output log file to tests/integration/logs/ //_.log - # .withLogTopics("node", "erasure") - .some, - providers: CodexConfigs.init(nodes = 1) - # .debug() # uncomment to enable console log output - # .withLogFile() - # # uncomment to output log file to tests/integration/logs/ //_.log - # .withLogTopics( - # "node", "marketplace", "sales", "reservations", "node", "statemachine" - # ) - .some, + clients: CodexConfigs + .init(nodes = 1) + .debug() + .withLogFile() + .withLogTopics( + "codex", "codex slots builder", "codex slots sampler", "marketplace", "sales", + "statemachine", "slotqueue", "reservations", "erasure", "ethers", + ).some, + providers: CodexConfigs + .init(nodes = 1) + .debug() + .withLogFile() + .withLogTopics( + "codex", "codex slots builder", "codex slots sampler", "marketplace", "sales", + "statemachine", "slotqueue", "reservations", "erasure", "ethers", + ).some, ): - let duration = 20.periods - let expiry = 10.periods + let duration = 6.periods + let expiry = 4.periods let data = await RandomChunker.example(blocks = blocks) let client = clients()[0] let provider = providers()[0] @@ -252,15 +264,15 @@ marketplacesuite "Marketplace payouts": let startBalanceClient = await token.balanceOf(client.ethAccount) # provider makes storage available - let datasetSize = datasetSize(blocks, ecNodes, ecTolerance) - let totalAvailabilitySize = (datasetSize div 2).truncate(uint64) + let slotSize = slotSize(blocks, ecNodes, ecTolerance) + echo "slotSize: ", $slotSize.truncate(uint64) discard await providerApi.postAvailability( # make availability size small enough that we can't fill all the slots, # thus causing a cancellation - totalSize = totalAvailabilitySize, + totalSize = slotSize.truncate(uint64), duration = duration.uint64, minPricePerBytePerSecond = minPricePerBytePerSecond, - totalCollateral = collateralPerByte * totalAvailabilitySize.u256, + totalCollateral = collateralPerByte * slotSize, ) let cid = (await clientApi.upload(data)).get @@ -270,7 +282,15 @@ marketplacesuite "Marketplace payouts": assert not eventResult.isErr slotIdxFilled = some (!eventResult).slotIndex - let subscription = await marketplace.subscribe(SlotFilled, onSlotFilled) + var requestCancelledFut = Future[void].Raising([CancelledError]).init() + proc onRequestCancelled(eventResult: ?!RequestCancelled) {.raises: [].} = + echo "onRequestCancelled ", $eventResult + trace "onRequestCancelled", eventResult + requestCancelledFut.complete() + + let cancelledSubscription = + await marketplace.subscribe(RequestCancelled, onRequestCancelled) + let filledSubscription = await marketplace.subscribe(SlotFilled, onSlotFilled) # client requests storage but requires multiple slots to host the content let id = await clientApi.requestStorage( @@ -287,24 +307,25 @@ marketplacesuite "Marketplace payouts": check eventually(slotIdxFilled.isSome, timeout = expiry.int * 1000) let slotId = slotId(!(await clientApi.requestId(id)), !slotIdxFilled) + # check eventually( + # await providerApi.saleStateIs(slotId, "SaleCancelled"), timeout = expiry.int * 1000, pollInterval = 100 + # ) + # wait until sale is cancelled await ethProvider.advanceTime(expiry.u256) - check eventually( - await providerApi.saleStateIs(slotId, "SaleCancelled"), pollInterval = 100 - ) + await requestCancelledFut.wait(timeout = (expiry.uint32 + 10'u32).seconds) await advanceToNextPeriod() - let slotSize = slotSize(blocks, ecNodes, ecTolerance) let pricePerSlotPerSecond = minPricePerBytePerSecond * slotSize - check eventuallySafe ( + check eventually ( let endBalanceProvider = (await token.balanceOf(provider.ethAccount)) endBalanceProvider > startBalanceProvider and endBalanceProvider < startBalanceProvider + expiry.u256 * pricePerSlotPerSecond ) - check eventuallySafe( + check eventually( ( let endBalanceClient = (await token.balanceOf(client.ethAccount)) let endBalanceProvider = (await token.balanceOf(provider.ethAccount)) @@ -314,7 +335,8 @@ marketplacesuite "Marketplace payouts": timeout = 10 * 1000, # give client a bit of time to withdraw its funds ) - await subscription.unsubscribe() + await filledSubscription.unsubscribe() + await cancelledSubscription.unsubscribe() test "the collateral is returned after a sale is ignored", NodeConfigs( @@ -400,5 +422,5 @@ marketplacesuite "Marketplace payouts": availability.totalRemainingCollateral == availableSlots * slotSize * minPricePerBytePerSecond, timeout = 30 * 1000, - pollInterval = 100 + pollInterval = 100, ) diff --git a/tests/integration/testproofs.nim b/tests/integration/testproofs.nim index b8586fba90..19965d4b64 100644 --- a/tests/integration/testproofs.nim +++ b/tests/integration/testproofs.nim @@ -51,6 +51,13 @@ marketplacesuite "Hosts submit regular proofs": let cid = (await client0.upload(data)).get + var requestStartedFut = Future[void].Raising([CancelledError]).init() + proc onRequestStarted(eventResult: ?!RequestFulfilled) {.raises: [].} = + requestStartedFut.complete() + + let startedSubscription = + await marketplace.subscribe(RequestFulfilled, onRequestStarted) + let purchaseId = await client0.requestStorage( cid, expiry = expiry, @@ -64,19 +71,18 @@ marketplacesuite "Hosts submit regular proofs": let slotSize = slotSize(blocks, ecNodes, ecTolerance) - check eventuallySafe( - await client0.purchaseStateIs(purchaseId, "started"), timeout = expiry.int * 1000 - ) + await requestStartedFut var proofWasSubmitted = false proc onProofSubmitted(event: ?!ProofSubmitted) = proofWasSubmitted = event.isOk - let subscription = await marketplace.subscribe(ProofSubmitted, onProofSubmitted) + let proofSubmittedSubscription = await marketplace.subscribe(ProofSubmitted, onProofSubmitted) check eventually(proofWasSubmitted, timeout = (duration - expiry).int * 1000) - await subscription.unsubscribe() + await proofSubmittedSubscription.unsubscribe() + await startedSubscription.unsubscribe() marketplacesuite "Simulate invalid proofs": # TODO: these are very loose tests in that they are not testing EXACTLY how diff --git a/tests/integration/testsales.nim b/tests/integration/testsales.nim index 6a908e840b..1c1026109c 100644 --- a/tests/integration/testsales.nim +++ b/tests/integration/testsales.nim @@ -8,6 +8,7 @@ import ../contracts/time import ./codexconfig import ./codexclient import ./nodeconfigs +import ./marketplacesuite proc findItem[T](items: seq[T], item: T): ?!T = for tmp in items: @@ -16,7 +17,7 @@ proc findItem[T](items: seq[T], item: T): ?!T = return failure("Not found") -multinodesuite "Sales": +marketplacesuite "Sales": let salesConfig = NodeConfigs( clients: CodexConfigs.init(nodes = 1).some, providers: CodexConfigs.init(nodes = 1) @@ -128,18 +129,16 @@ multinodesuite "Sales": # Lets create storage request that will utilize some of the availability's space let cid = (await client.upload(data)).get - let id = ( - await client.requestStorage( - cid, - duration = 20 * 60.uint64, - pricePerBytePerSecond = minPricePerBytePerSecond, - proofProbability = 3.u256, - expiry = (10 * 60).uint64, - collateralPerByte = collateralPerByte, - nodes = 3, - tolerance = 1, - ) - ).get + let id = await client.requestStorage( + cid, + duration = 20 * 60.uint64, + pricePerBytePerSecond = minPricePerBytePerSecond, + proofProbability = 3.u256, + expiry = (10 * 60).uint64, + collateralPerByte = collateralPerByte, + nodes = 3, + tolerance = 1, + ) check eventuallySafe( await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 @@ -202,6 +201,13 @@ multinodesuite "Sales": ) ).get + var requestStartedFut = Future[void].Raising([CancelledError]).init() + proc onRequestStarted(eventResult: ?!RequestFulfilled) {.raises: [].} = + requestStartedFut.complete() + + let startedSubscription = + await marketplace.subscribe(RequestFulfilled, onRequestStarted) + # client requests storage let cid = (await client.upload(data)).get let id = ( @@ -217,11 +223,8 @@ multinodesuite "Sales": ) ).get - check eventually( - await client.purchaseStateIs(id, "started"), - timeout = 10 * 60 * 1000, - pollInterval = 100, - ) + await requestStartedFut + let purchase = (await client.getPurchase(id)).get check purchase.error == none string @@ -236,3 +239,5 @@ multinodesuite "Sales": response.status == 422 (await response.body) == "Until parameter must be greater or equal to the longest currently hosted slot" + + await startedSubscription.unsubscribe() From c04eee72a3cba04590374f257184e4f55f7aadcc Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:27:37 +1000 Subject: [PATCH 176/178] fix(integration): Use RequestFulfilled events instead of querying the purchase state --- tests/integration/testmarketplace.nim | 14 +++++++++++--- tests/integration/testproofs.nim | 5 +++-- tests/integration/testsales.nim | 14 +++++++++++--- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/tests/integration/testmarketplace.nim b/tests/integration/testmarketplace.nim index 3fff77e26e..86b67c0543 100644 --- a/tests/integration/testmarketplace.nim +++ b/tests/integration/testmarketplace.nim @@ -107,6 +107,14 @@ marketplacesuite "Marketplace": # client requests storage let cid = (await client.upload(data)).get + + var requestStartedFut = Future[void].Raising([CancelledError]).init() + proc onRequestStarted(eventResult: ?!RequestFulfilled) {.raises: [].} = + requestStartedFut.complete() + + let startedSubscription = + await marketplace.subscribe(RequestFulfilled, onRequestStarted) + let id = await client.requestStorage( cid, duration = duration, @@ -118,9 +126,8 @@ marketplacesuite "Marketplace": tolerance = ecTolerance, ) - check eventuallySafe( - await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 - ) + await requestStartedFut + let purchase = (await client.getPurchase(id)).get check purchase.error == none string @@ -142,6 +149,7 @@ marketplacesuite "Marketplace": (await token.balanceOf(clientAccount)) - clientBalanceBeforeFinished > 0, timeout = 10 * 1000, # give client a bit of time to withdraw its funds ) + await startedSubscription.unsubscribe() test "SP are able to process slots after workers were busy with other slots and ignored them", NodeConfigs( diff --git a/tests/integration/testproofs.nim b/tests/integration/testproofs.nim index 19965d4b64..6fc42a490c 100644 --- a/tests/integration/testproofs.nim +++ b/tests/integration/testproofs.nim @@ -77,7 +77,8 @@ marketplacesuite "Hosts submit regular proofs": proc onProofSubmitted(event: ?!ProofSubmitted) = proofWasSubmitted = event.isOk - let proofSubmittedSubscription = await marketplace.subscribe(ProofSubmitted, onProofSubmitted) + let proofSubmittedSubscription = + await marketplace.subscribe(ProofSubmitted, onProofSubmitted) check eventually(proofWasSubmitted, timeout = (duration - expiry).int * 1000) @@ -119,7 +120,7 @@ marketplacesuite "Simulate invalid proofs": .some, ): let client0 = clients()[0].client - let expiry = 10.periods + let expiry = 15.periods let duration = expiry + 10.periods let data = await RandomChunker.example(blocks = blocks) diff --git a/tests/integration/testsales.nim b/tests/integration/testsales.nim index 1c1026109c..5e406e81a1 100644 --- a/tests/integration/testsales.nim +++ b/tests/integration/testsales.nim @@ -129,6 +129,14 @@ marketplacesuite "Sales": # Lets create storage request that will utilize some of the availability's space let cid = (await client.upload(data)).get + + var requestStartedFut = Future[void].Raising([CancelledError]).init() + proc onRequestStarted(eventResult: ?!RequestFulfilled) {.raises: [].} = + requestStartedFut.complete() + + let startedSubscription = + await marketplace.subscribe(RequestFulfilled, onRequestStarted) + let id = await client.requestStorage( cid, duration = 20 * 60.uint64, @@ -140,9 +148,8 @@ marketplacesuite "Sales": tolerance = 1, ) - check eventuallySafe( - await client.purchaseStateIs(id, "started"), timeout = 10 * 60 * 1000 - ) + await requestStartedFut + let updatedAvailability = ((await host.getAvailabilities()).get).findItem(availability).get check updatedAvailability.totalSize != updatedAvailability.freeSize @@ -164,6 +171,7 @@ marketplacesuite "Sales": ((await host.getAvailabilities()).get).findItem(availability).get check newUpdatedAvailability.totalSize == originalSize + 20000 check newUpdatedAvailability.freeSize - updatedAvailability.freeSize == 20000 + await startedSubscription.unsubscribe() test "updating availability fails with until negative", salesConfig: let availability = ( From 63a28b91a7b0b562b56fc709f436c228a4a3e080 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:33:19 +1000 Subject: [PATCH 177/178] fix(integration): add timeouts to waiting for started futures --- tests/integration/testmarketplace.nim | 6 +++--- tests/integration/testproofs.nim | 2 +- tests/integration/testsales.nim | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/integration/testmarketplace.nim b/tests/integration/testmarketplace.nim index 86b67c0543..407d0c7ee1 100644 --- a/tests/integration/testmarketplace.nim +++ b/tests/integration/testmarketplace.nim @@ -70,7 +70,7 @@ marketplacesuite "Marketplace": ) # wait for request to start - await requestStartedFut + await requestStartedFut.wait(timeout = chronos.seconds((10 * 60) + 10)) let purchase = (await client.getPurchase(id)).get check purchase.error == none string @@ -126,7 +126,7 @@ marketplacesuite "Marketplace": tolerance = ecTolerance, ) - await requestStartedFut + await requestStartedFut.wait(timeout = chronos.seconds((10 * 60) + 10)) let purchase = (await client.getPurchase(id)).get check purchase.error == none string @@ -322,7 +322,7 @@ marketplacesuite "Marketplace payouts": # wait until sale is cancelled await ethProvider.advanceTime(expiry.u256) - await requestCancelledFut.wait(timeout = (expiry.uint32 + 10'u32).seconds) + await requestCancelledFut.wait(timeout = chronos.seconds(expiry.int + 10)) await advanceToNextPeriod() diff --git a/tests/integration/testproofs.nim b/tests/integration/testproofs.nim index 6fc42a490c..26fe59212a 100644 --- a/tests/integration/testproofs.nim +++ b/tests/integration/testproofs.nim @@ -71,7 +71,7 @@ marketplacesuite "Hosts submit regular proofs": let slotSize = slotSize(blocks, ecNodes, ecTolerance) - await requestStartedFut + await requestStartedFut.wait(timeout = chronos.seconds(10.periods.int + 10)) var proofWasSubmitted = false proc onProofSubmitted(event: ?!ProofSubmitted) = diff --git a/tests/integration/testsales.nim b/tests/integration/testsales.nim index 5e406e81a1..66287bdb79 100644 --- a/tests/integration/testsales.nim +++ b/tests/integration/testsales.nim @@ -148,7 +148,7 @@ marketplacesuite "Sales": tolerance = 1, ) - await requestStartedFut + await requestStartedFut.wait(timeout = chronos.seconds((10 * 60) + 10)) let updatedAvailability = ((await host.getAvailabilities()).get).findItem(availability).get @@ -231,7 +231,7 @@ marketplacesuite "Sales": ) ).get - await requestStartedFut + await requestStartedFut.wait(timeout = chronos.seconds((10 * 60) + 10)) let purchase = (await client.getPurchase(id)).get check purchase.error == none string From 4063e350547e5cb37642e4698e5dcb2712213f75 Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Sat, 7 Jun 2025 08:49:03 +1000 Subject: [PATCH 178/178] increase period duration to try to fix invalid proof errors --- vendor/codex-contracts-eth | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/codex-contracts-eth b/vendor/codex-contracts-eth index 98669298a1..de392769ec 160000 --- a/vendor/codex-contracts-eth +++ b/vendor/codex-contracts-eth @@ -1 +1 @@ -Subproject commit 98669298a107de735e5798d0160822e59f30a20e +Subproject commit de392769ec051e488aa7898aa2cd704823bcec26