diff --git a/src/devnet/integrated-devnet.ts b/src/devnet/integrated-devnet.ts index d310004c..456c9b98 100644 --- a/src/devnet/integrated-devnet.ts +++ b/src/devnet/integrated-devnet.ts @@ -1,5 +1,7 @@ import axios from "axios"; import { ChildProcess } from "child_process"; +import { HardhatPluginError } from "hardhat/plugins"; +import { PLUGIN_NAME } from "../constants"; function sleep(amountMillis: number): Promise { return new Promise((resolve) => { @@ -11,6 +13,7 @@ const DEVNET_ALIVE_URL = "is_alive"; export abstract class IntegratedDevnet { protected childProcess: ChildProcess; + private stderr = ""; constructor(protected host: string, protected port: string) { IntegratedDevnet.cleanupFns.push(this.cleanup.bind(this)); @@ -29,6 +32,15 @@ export abstract class IntegratedDevnet { public async start(): Promise { this.childProcess = await this.spawnChildProcess(); + this.childProcess.stderr.on("data", (chunk) => (this.stderr += chunk.toString())); + + this.childProcess.on("close", (code) => { + if (code !== 0) { + const msg = `Integrated devnet exited with code ${code}.\n${this.stderr}`; + throw new HardhatPluginError(PLUGIN_NAME, msg); + } + }); + return new Promise((resolve, reject) => { this.childProcess.on("spawn", async () => { const maxWaitMillis = 60_000; diff --git a/test/integrated-devnet-tests/with-docker-fail/check.sh b/test/integrated-devnet-tests/with-docker-fail/check.sh new file mode 100755 index 00000000..53524ea3 --- /dev/null +++ b/test/integrated-devnet-tests/with-docker-fail/check.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -e + +# TODO decide how it will fail - address already in use or invalid cli arg + +# TODO change to use ../ +source ~/shardlabs/starknet-hardhat-plugin/scripts/check-devnet-is-not-running.sh + +check_devnet_is_not_running + +# run devnet which will cause integrated-devnet to fail +starknet-devnet --host 127.0.0.1 --port 5050 & + +npx hardhat starknet-compile contracts/contract.cairo + +npx hardhat test --no-compile test/integrated-devnet.test.ts | + ~/shardlabs/starknet-hardhat-plugin/scripts/assert_contains.py "Address already in use" diff --git a/test/integrated-devnet-tests/with-docker-fail/hardhat.config.ts b/test/integrated-devnet-tests/with-docker-fail/hardhat.config.ts new file mode 100644 index 00000000..64707a22 --- /dev/null +++ b/test/integrated-devnet-tests/with-docker-fail/hardhat.config.ts @@ -0,0 +1,13 @@ +import "../dist/src/index.js"; + +module.exports = { + starknet: { + network: process.env.NETWORK + }, + networks: { + integratedDevnet: { + dockerizedVersion: process.env.STARKNET_DEVNET, + url: "http://127.0.0.1:5050" + } + } +}; diff --git a/test/integrated-devnet-tests/with-docker-fail/network.json b/test/integrated-devnet-tests/with-docker-fail/network.json new file mode 100644 index 00000000..116400d7 --- /dev/null +++ b/test/integrated-devnet-tests/with-docker-fail/network.json @@ -0,0 +1,4 @@ +{ + "$schema": "../../network.schema", + "integrated-devnet": true +} diff --git a/test/integrated-devnet-tests/with-venv-fail/check.sh b/test/integrated-devnet-tests/with-venv-fail/check.sh new file mode 100755 index 00000000..f55aa26f --- /dev/null +++ b/test/integrated-devnet-tests/with-venv-fail/check.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -e + +source ../scripts/check-devnet-is-not-running.sh + +check_devnet_is_not_running +starknet-devnet --host 127.0.0.1 --port 5050 & + +npx hardhat starknet-compile contracts/contract.cairo +npx hardhat test --no-compile test/integrated-devnet.test.ts | + ../scripts/assert_contains.py "address already in use" \ No newline at end of file diff --git a/test/integrated-devnet-tests/with-venv-fail/hardhat.config.ts b/test/integrated-devnet-tests/with-venv-fail/hardhat.config.ts new file mode 100644 index 00000000..8db81f16 --- /dev/null +++ b/test/integrated-devnet-tests/with-venv-fail/hardhat.config.ts @@ -0,0 +1,13 @@ +import "../dist/src/index.js"; + +module.exports = { + starknet: { + network: process.env.NETWORK + }, + networks: { + integratedDevnet: { + venv: process.env.STARKNET_DEVNET_PATH, + url: "http://127.0.0.1:5050" + } + } +}; diff --git a/test/integrated-devnet-tests/with-venv-fail/network.json b/test/integrated-devnet-tests/with-venv-fail/network.json new file mode 100644 index 00000000..116400d7 --- /dev/null +++ b/test/integrated-devnet-tests/with-venv-fail/network.json @@ -0,0 +1,4 @@ +{ + "$schema": "../../network.schema", + "integrated-devnet": true +}