Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
c8f6e3e
tests: add patchbay netsim tests
Frando Mar 5, 2026
43d46a5
chore: skip patchbay tests on cross
Frando Mar 5, 2026
3fc0f9c
deps: use released patchbay
Frando Mar 12, 2026
fbd6103
add more netsim tests
Frando Mar 13, 2026
ad932af
fixup
Frando Mar 13, 2026
e8fb2da
Merge remote-tracking branch 'origin/main' into Frando/netsim
Frando Mar 13, 2026
53c76e4
make netsim tests serial
Frando Mar 13, 2026
062f958
fix: rename tests and adjust ci setup
Frando Mar 20, 2026
29abe30
chore: tempfix to run patchbay ci
Frando Mar 20, 2026
47b72bf
chore: fixup ci
Frando Mar 20, 2026
83ad4f8
chore: fixup ci
Frando Mar 20, 2026
7e333f8
feat: use patchbay TestGuard for per-test pass/fail reporting
Frando Mar 20, 2026
44a77d3
fix: return TestGuard from run_degrade_ladder so assertion failures a…
Frando Mar 20, 2026
1107c08
chore: update patchbay to latest feat/server-push
Frando Mar 20, 2026
af7c79d
chore: update patchbay to sync final state.json write
Frando Mar 20, 2026
e8955cd
feat: port all netsim simulations from chuck to patchbay
Frando Mar 5, 2026
2a720b5
fix(sims): remove --remote-direct-address from relay-only sims
Frando Mar 5, 2026
ce90c8d
refactor: consolidate sims with matrix expansion
Frando Mar 6, 2026
c79cf3c
refactor(sims): reorganize into integration/ and perf/ groups
Frando Mar 23, 2026
e23b569
chore: simplify patchbay-runner CI, add test branch trigger
Frando Mar 23, 2026
097270d
fix(ci): fix patchbay install command
Frando Mar 23, 2026
511b53d
refactor(sims): consolidate integration sims with matrix expansion
Frando Mar 23, 2026
173b938
fix(ci): install patchbay-runner without UI/server
Frando Mar 23, 2026
6ddac9d
fix(sims): expand matrix params in condition fields to literal values
Frando Mar 23, 2026
0aee8e8
fix(sims): expand all matrix sims to individual files
Frando Mar 23, 2026
77182ba
refactor(sims): consolidate sim files using patchbay matrix expansion
Frando Mar 23, 2026
ef04fa1
refactor(sims): unify topology files by always including relay+dns nodes
Frando Mar 23, 2026
09081be
fix(ci): add patchbay prepare step to build sim binaries
Frando Mar 23, 2026
2b174cb
fix(ci): use --no-build for patchbay run after prepare step
Frando Mar 23, 2026
268b306
fixup
Frando Mar 23, 2026
c452c0e
fix: don't use pkarr/dns if there's no dns server configured
Frando Mar 23, 2026
9779556
fix(sims): fix CI failures in multi-provider and high-latency sims
Frando Mar 23, 2026
854ef49
remote_state: probe unknown paths and add unit test
rklaehn Mar 27, 2026
671412e
tests(patchbay): add dual-link topology test without public IP probing
rklaehn Mar 27, 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
58 changes: 58 additions & 0 deletions .github/sims-patchbay/integration/1to1-nat.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# 1-to-1 transfer through NAT with relay.
# Both: no direct connectivity expected. Fetcher/provider: holepunch should succeed.

[[extends]]
file = "../iroh-defaults.toml"

[matrix]
variant = ["both", "fetcher", "provider"]

[matrix.params.variant]
both = { topo = "1to1-nat", expect_direct = "false" }
fetcher = { topo = "1to1-nat-fetcher", expect_direct = "true" }
provider = { topo = "1to1-nat-provider", expect_direct = "true" }

[sim]
name = "1to1-nat-${matrix.variant}"
topology = "${matrix.topo}"

[[step]]
use = "relay-setup"
vars = { device = "relay" }

[[step]]
use = "transfer-provider"
id = "provider"
device = "provider"
requires = ["relay.ready"]
args = ["--no-pkarr-publish", "--no-dns-resolve",
"--relay-url", "https://$NETSIM_IP_relay:3340"]

[[step]]
use = "transfer-fetcher"
id = "fetcher"
device = "fetcher"
args = ["${provider.endpoint_id}",
"--no-pkarr-publish", "--no-dns-resolve",
"--duration=20",
"--relay-url", "https://$NETSIM_IP_relay:3340",
"--remote-relay-url", "https://$NETSIM_IP_relay:3340",
"--remote-direct-address", "${provider.direct_addr}"]

[[step]]
action = "wait-for"
id = "fetcher"
timeout = "60s"

[[step]]
action = "assert"
checks = [
"fetcher.size matches [0-9]+",
]

[[step]]
when = "${matrix.expect_direct}"
action = "assert"
checks = [
"fetcher.conn_type contains Ip",
]
47 changes: 47 additions & 0 deletions .github/sims-patchbay/integration/direct-adverse.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Direct transfer with adverse network conditions.

[[extends]]
file = "../iroh-defaults.toml"

[matrix]
cond = ["lossy", "throttled"]

[matrix.params.cond]
lossy = { latency = "200", rate = "8000", loss = "1.0" }
throttled = { latency = "200", rate = "4000", loss = "0" }

[sim]
name = "direct-${matrix.cond}"
topology = "1to1"

[[step]]
action = "set-link-condition"
device = "fetcher"
condition = { latency_ms = "${matrix.latency}", rate_kbit = "${matrix.rate}", loss_pct = "${matrix.loss}" }

[[step]]
use = "transfer-provider"
id = "provider"
device = "provider"
args = ["--no-pkarr-publish", "--no-dns-resolve"]

[[step]]
use = "transfer-fetcher"
id = "fetcher"
device = "fetcher"
args = ["${provider.endpoint_id}",
"--no-pkarr-publish", "--no-dns-resolve",
"--duration=30",
"--remote-direct-address", "${provider.direct_addr}"]

[[step]]
action = "wait-for"
id = "fetcher"
timeout = "120s"

[[step]]
action = "assert"
checks = [
"fetcher.size matches [0-9]+",
"fetcher.conn_type contains Ip",
]
60 changes: 60 additions & 0 deletions .github/sims-patchbay/integration/interface-down-up.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
[[extends]]
file = "../iroh-defaults.toml"

[sim]
name = "interface-down-up"
topology = "1to1-nat-down-up"

[[step]]
use = "relay-setup"
vars = { device = "relay" }

[[step]]
use = "transfer-provider"
id = "provider"
device = "provider"
requires = ["relay.ready"]
args = ["--no-pkarr-publish", "--no-dns-resolve",
"--relay-url", "https://$NETSIM_IP_relay:3340"]

[[step]]
use = "transfer-fetcher"
id = "fetcher"
device = "fetcher"
args = ["${provider.endpoint_id}",
"--no-pkarr-publish", "--no-dns-resolve",
"--duration=15",
"--relay-url", "https://$NETSIM_IP_relay:3340",
"--remote-relay-url", "https://$NETSIM_IP_relay:3340",
"--remote-direct-address", "${provider.direct_addr}"]

# After 5s, bring interface down
[[step]]
action = "wait"
duration = "5s"

[[step]]
action = "link-down"
device = "fetcher"
interface = "eth0"

# After 10s total, bring interface back up
[[step]]
action = "wait"
duration = "5s"

[[step]]
action = "link-up"
device = "fetcher"
interface = "eth0"

[[step]]
action = "wait-for"
id = "fetcher"
timeout = "60s"

[[step]]
action = "assert"
checks = [
"fetcher.size matches [0-9]+",
]
41 changes: 41 additions & 0 deletions .github/sims-patchbay/integration/intg-1to1-relay.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[[extends]]
file = "../iroh-defaults.toml"

[sim]
name = "intg-1to1-relay"
topology = "1to1"

[[step]]
use = "relay-setup"
vars = { device = "relay" }

[[step]]
use = "transfer-provider"
id = "provider"
device = "provider"
requires = ["relay.ready"]
args = ["--no-pkarr-publish", "--no-dns-resolve",
"--relay-url", "https://$NETSIM_IP_relay:3340"]

[[step]]
use = "transfer-fetcher"
id = "fetcher"
device = "fetcher"
args = ["${provider.endpoint_id}",
"--no-pkarr-publish", "--no-dns-resolve",
"--duration=20",
"--relay-url", "https://$NETSIM_IP_relay:3340",
"--remote-relay-url", "https://$NETSIM_IP_relay:3340",
"--remote-direct-address", "${provider.direct_addr}"]

[[step]]
action = "wait-for"
id = "fetcher"
timeout = "60s"

[[step]]
action = "assert"
checks = [
"fetcher.size matches [0-9]+",
"fetcher.conn_type contains Ip",
]
38 changes: 38 additions & 0 deletions .github/sims-patchbay/integration/intg-direct.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Integration test: single-provider direct transfer.

[[extends]]
file = "../iroh-defaults.toml"

[matrix]
topo = ["1to1", "1to3"]

[sim]
name = "intg-${matrix.topo}-public"
topology = "${matrix.topo}"

[[step]]
use = "transfer-provider"
id = "provider"
device = "provider"
args = ["--no-pkarr-publish", "--no-dns-resolve"]

[[step]]
use = "transfer-fetcher"
id = "fetcher"
device = "fetcher"
args = ["${provider.endpoint_id}",
"--no-pkarr-publish", "--no-dns-resolve",
"--duration=10",
"--remote-direct-address", "${provider.direct_addr}"]

[[step]]
action = "wait-for"
id = "fetcher"
timeout = "60s"

[[step]]
action = "assert"
checks = [
"fetcher.size matches [0-9]+",
"fetcher.conn_type contains Ip",
]
31 changes: 31 additions & 0 deletions .github/sims-patchbay/integration/intg-multi-direct.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Integration test: multi-provider direct transfer.

[[extends]]
file = "../iroh-defaults.toml"

[matrix]
topo = ["2to2", "2to4"]

[sim]
name = "intg-${matrix.topo}-public"
topology = "${matrix.topo}"

[[step]]
use = "transfer-provider"
id = "provider"
device = "provider"
args = ["--no-pkarr-publish", "--no-dns-resolve"]

[[step]]
use = "transfer-fetcher"
id = "fetcher"
device = "fetcher"
args = ["${provider.endpoint_id}",
"--no-pkarr-publish", "--no-dns-resolve",
"--duration=10",
"--remote-direct-address", "${provider.direct_addr}"]

[[step]]
action = "wait-for"
id = "fetcher"
timeout = "60s"
50 changes: 50 additions & 0 deletions .github/sims-patchbay/integration/intg-relay-dns-relay-only.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Integration test: relay-only transfer with full relay + DNS stack.
# Ported from iroh_full.json 1_to_1ro case.

[[extends]]
file = "../iroh-defaults.toml"

[sim]
name = "intg-1to1-relay-dns-relay-only"
topology = "1to1"

[[step]]
use = "relay-setup"
vars = { device = "relay" }

[[step]]
use = "dns-setup"
vars = { device = "dns" }

[[step]]
use = "transfer-provider"
id = "provider"
device = "provider"
requires = ["relay.ready", "dns.ready"]
args = ["--relay-only",
"--relay-url", "https://$NETSIM_IP_relay:3340",
"--pkarr-relay-url", "http://$NETSIM_IP_dns:8080/pkarr",
"--dns-origin-domain", "$NETSIM_IP_dns:5300"]

[[step]]
use = "transfer-fetcher"
id = "fetcher"
device = "fetcher"
args = ["${provider.endpoint_id}",
"--relay-only",
"--size=1G",
"--relay-url", "https://$NETSIM_IP_relay:3340",
"--remote-relay-url", "https://$NETSIM_IP_relay:3340",
"--pkarr-relay-url", "http://$NETSIM_IP_dns:8080/pkarr",
"--dns-origin-domain", "$NETSIM_IP_dns:5300"]

[[step]]
action = "wait-for"
id = "fetcher"
timeout = "120s"

[[step]]
action = "assert"
checks = [
"fetcher.size matches [0-9]+",
]
52 changes: 52 additions & 0 deletions .github/sims-patchbay/integration/intg-relay-dns.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Integration test: relay + DNS discovery.

[[extends]]
file = "../iroh-defaults.toml"

[matrix]
topo = ["1to1", "1to3"]

[sim]
name = "intg-${matrix.topo}-relay-dns"
topology = "${matrix.topo}"

[[step]]
use = "relay-setup"
vars = { device = "relay" }

[[step]]
use = "dns-setup"
vars = { device = "dns" }

[[step]]
use = "transfer-provider"
id = "provider"
device = "provider"
requires = ["relay.ready", "dns.ready"]
args = ["--relay-url", "https://$NETSIM_IP_relay:3340",
"--pkarr-relay-url", "http://$NETSIM_IP_dns:8080/pkarr",
"--dns-origin-domain", "$NETSIM_IP_dns:5300"]

[[step]]
use = "transfer-fetcher"
id = "fetcher"
device = "fetcher"
args = ["${provider.endpoint_id}",
"--size=1G",
"--relay-url", "https://$NETSIM_IP_relay:3340",
"--remote-relay-url", "https://$NETSIM_IP_relay:3340",
"--pkarr-relay-url", "http://$NETSIM_IP_dns:8080/pkarr",
"--dns-origin-domain", "$NETSIM_IP_dns:5300",
"--remote-direct-address", "${provider.direct_addr}"]

[[step]]
action = "wait-for"
id = "fetcher"
timeout = "60s"

[[step]]
action = "assert"
checks = [
"fetcher.size matches [0-9]+",
"fetcher.conn_type contains Ip",
]
Loading