Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
7f7dd72
feat(test-harness): scaffold wavs-test-harness crate (#1147)
JakeHartnell May 16, 2026
0721885
feat(test-harness): chain control layer — anvil, fork, snapshot, impe…
JakeHartnell May 16, 2026
71425d2
feat(test-harness): TOML chain profiles + typed Addresses (#1147)
JakeHartnell May 16, 2026
2b4051e
feat(test-harness): service spec + operator middleware re-exports (#1…
JakeHartnell May 16, 2026
6bad36a
feat(test-harness): in-process runner + lifecycle helpers (#1147)
JakeHartnell May 16, 2026
21bbd1c
feat(test-harness): canonical envelope + ECDSA signing helpers (#1147)
JakeHartnell May 16, 2026
978f201
feat(test-harness): subprocess runner preview shape (#1147)
JakeHartnell May 16, 2026
87207c0
feat(test-harness): TestHarness builder + working examples + justfile…
JakeHartnell May 16, 2026
d416e67
docs(test-harness): comprehensive README with tier matrix + CI guidan…
JakeHartnell May 16, 2026
cd41fd3
chore(test-harness): refresh Cargo.lock with wavs-engine + wasmtime e…
JakeHartnell May 16, 2026
e5e2f91
style(test-harness): apply cargo fmt to satisfy Lint CI (#1147)
JakeHartnell May 16, 2026
7c700f6
feat(test-harness): wire FORK_BLOCK_NUMBER env + ForkOptions::from_pr…
JakeHartnell May 16, 2026
3ce1e1d
feat(test-harness): end-to-end on-chain submission lifecycle (#1147)
JakeHartnell May 16, 2026
1c3f834
feat(test-harness): Chainlink oracle mocking via anvil_setCode (#1147)
JakeHartnell May 16, 2026
ccb318c
feat(test-harness): functional subprocess runner (#1147)
JakeHartnell May 16, 2026
e526954
docs(test-harness): README reflects E2E lifecycle, oracle, subprocess…
JakeHartnell May 16, 2026
e3528de
fix(test-harness): satisfy clippy -D warnings (#1147)
JakeHartnell May 16, 2026
d247c8e
feat(test-harness): wire aggregator stage into end-to-end lifecycle (…
JakeHartnell May 16, 2026
5a1231b
chore(deps): loosen exact alloy pins to caret to allow downstream uni…
JakeHartnell May 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 21 additions & 19 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ members = [
"packages/engine",
"packages/gui/shared",
"packages/layer-tests",
"packages/test-harness",
"packages/types",
"packages/utils",
"packages/version-pins",
Expand Down Expand Up @@ -125,30 +126,30 @@ walkdir = "2.5.0"
wildmatch = "2.5.0"

# EVM-specific dependencies
alloy-node-bindings = "=1.0.42"
alloy-node-bindings = "1.0.42"
alloy-json-abi = "1.4.1"
alloy-primitives = { version = "1.4.1", features = ["serde"] }
alloy-provider = { version = "=1.0.42", features = ["ws", "pubsub"] }
alloy-provider = { version = "1.0.42", features = ["ws", "pubsub"] }
alloy-sol-types = "1.4.1"
alloy-sol-macro = { version = "1.4.1", features = ["json"] }
alloy-transport = "=1.0.42"
alloy-transport-http = "=1.0.42"
alloy-rpc-client = "=1.0.42"
alloy-contract = "=1.0.42"
alloy-signer = "=1.0.42"
alloy-signer-local = { version = "=1.0.42", features = ["mnemonic"] }
alloy-network = "=1.0.42"
alloy-rpc-types-eth = "=1.0.42"
alloy-transport = "1.0.42"
alloy-transport-http = "1.0.42"
alloy-rpc-client = "1.0.42"
alloy-contract = "1.0.42"
alloy-signer = "1.0.42"
alloy-signer-local = { version = "1.0.42", features = ["mnemonic"] }
alloy-network = "1.0.42"
alloy-rpc-types-eth = "1.0.42"

alloy-consensus-any = "=1.0.42"
alloy-consensus = "=1.0.42"
alloy-eips = "=1.0.42"
alloy-network-primitives = "=1.0.42"
alloy-serde = "=1.0.42"
alloy-tx-macros = "=1.0.42"
alloy-eip2930 = "=0.2.1"
alloy-eip7702 = "=0.6.1"
alloy-json-rpc = "=1.6.3"
alloy-consensus-any = "1.0.42"
alloy-consensus = "1.0.42"
alloy-eips = "1.0.42"
alloy-network-primitives = "1.0.42"
alloy-serde = "1.0.42"
alloy-tx-macros = "1.0.42"
alloy-eip2930 = "0.2.1"
alloy-eip7702 = "0.6.1"
alloy-json-rpc = "1.6.3"

layer-climb = "0.9.0"
layer-climb-address = { version = "0.9.0", features = [
Expand Down Expand Up @@ -282,6 +283,7 @@ awsm_web = {version = "0.45.0", default-features = false, features = ["dom", "fi
# local
utils = { path = "packages/utils" }
wavs = { path = "packages/wavs" }
wavs-test-harness = { path = "packages/test-harness" }
wavs-engine = { path = "packages/engine" }
wavs-types = { path = "packages/types" }
wavs-cli = { path = "packages/cli" }
Expand Down
8 changes: 8 additions & 0 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,14 @@ cosmwasm-build-inner CONTRACT_PATH:
test-wavs-e2e:
ulimit -n 65536 && RUST_LOG=debug,alloy_rpc=off,alloy_provider=off,wasmtime=off,cranelift=off,hyper_util=off cargo test -p layer-tests

# reusable integration test harness — local Anvil + in-process runner (deterministic, no fork required)
test-harness:
cargo test -p wavs-test-harness

# reusable integration test harness — pinned-fork tier (requires FORK_RPC_URL)
test-harness-fork:
cargo test -p wavs-test-harness --features fork

update-submodules:
git submodule update --init --recursive

Expand Down
63 changes: 63 additions & 0 deletions packages/test-harness/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
[package]
name = "wavs-test-harness"
description = "Reusable integration test harness for WAVS apps — chain control, service lifecycle, and contract assertions"
version.workspace = true
edition.workspace = true
authors.workspace = true
rust-version.workspace = true
repository.workspace = true
license.workspace = true
publish = false

# Features are additive. `fork` and `inproc` are on by default because the harness
# is only useful when at least one runner tier is enabled. `subprocess` is preview
# and stays off by default to keep the dep graph small.
#
# Consumers should add `wavs-test-harness` as a [dev-dependencies] entry only —
# never as a regular dependency — to keep the `utils/test-utils` feature out of
# their production builds.
[features]
default = ["fork", "inproc"]
fork = []
inproc = []
subprocess = []

[dependencies]
utils = { workspace = true, features = ["test-utils"] }
wavs-types = { workspace = true, features = ["full"] }
wavs-engine = { workspace = true }
wasmtime = { workspace = true }
tempfile = { workspace = true }

anyhow = { workspace = true }
async-trait = { workspace = true }
futures = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
thiserror = { workspace = true }
tokio = { workspace = true }
toml = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }

alloy-contract = { workspace = true }
alloy-network = { workspace = true }
alloy-node-bindings = { workspace = true }
alloy-primitives = { workspace = true }
alloy-provider = { workspace = true, features = ["anvil-api", "anvil-node"] }
alloy-signer = { workspace = true }
alloy-signer-local = { workspace = true }
alloy-sol-types = { workspace = true }
alloy-sol-macro = { workspace = true }
alloy-rpc-types-eth = { workspace = true }

# Subprocess runner-only deps. Cheap enough to leave outside the feature gate.
reqwest = { workspace = true, features = ["json"] }

[target.'cfg(unix)'.dependencies]
libc = "0.2"

[dev-dependencies]
tokio = { workspace = true }
tempfile = { workspace = true }
temp-env = { workspace = true }
Loading
Loading