How Monokulo is tested

Monokulo handles other people’s money, so it gets tested hard. Every change runs more than 2,600 automatic tests. Every night, two kinds of robot tester invent thousands of strange situations and check that no payment goes missing. This page rebuilds itself from those runs. Open any section to see the details.

Some checks failed·Tests and coverage from 4176f6b on 18 Oct 2026·Nightly properties 23 Oct 2026·Fuzzing 23 Oct 2026·Live network 22 Oct 2026
Tests2,6572,657 passed · 0 skipped
Engine and server90.5%of 92,270 Rust lines
Checkout and POS95.1%of 1,666 browser lines
Properties nightly212plus 10 fuzz targets · 27 live daily

Live tests

Once a day, the tests that need the outside world run against it: real Monero nodes on mainnet and stagenet, the exchange-rate services Monokulo can price with, DNS, the Tor network, and real stagenet payments from a pair of test wallets. None of these is Monokulo’s, so each is checked just before the tests start. A test that failed while a service it needs wasn’t answering is shown as that service’s outage, not as a failure of the code.

Run of 22 Oct 2026
Tests
27 3 failed
Passed
24
Service outages
0 0 tests hit one
Services answering
7 of 7 checked
ServiceBefore the testsWhat it said
Monero mainnet nodeAnsweringhttps://node.hollingworth.xyz:443/get_height answered HTTP 200
Monero stagenet nodes (monerodevs.org)Answeringhttp://node.monerodevs.org:38089/get_height answered HTTP 200; http://node2.monerodevs.org:38089/get_height answered HTTP 200
Funded stagenet test walletsAnsweringthe spender in e2e/wallets/ci can pay a run
Coingecko APIAnsweringhttps://api.coingecko.com/api/v3/ping answered HTTP 200
CoinMarketCap public APIAnsweringhttps://pro-api.coinmarketcap.com/public-api/ answered HTTP 200
haveno.marketsAnsweringhttps://haveno.markets/ answered HTTP 200
DNSAnsweringgoogle.com is 172.253.115.139
Tor networkNot checkedonly the test itself can tell whether it works

Test wallets

The stagenet wallets the paid tests use (e2e/wallets/ci), as the run left them. After the tests, what the merchant was paid goes back to the spender, so only the fees are lost. “Ready to pay” counts the unlocked outputs big enough to pay one test order; a run makes 6 payments.

WalletBalance (XMR)UnlockedOutputsReady to pay
Spender53etP59TCSWcnK3cJUyEdQAgTNCLWX92m39NJSHt3qnyVVYzqQEtXHnEF1Y7UkrfgwhndYnHmwxDu9RBAryjP2MHKWrENMo1.0927516800000.5962770400005246
Merchant52Ed34jp4AE2bpkCPdcUM44h4jepS59LgCj42xAtVGExBkhxBdqqjZ4UHHY4FmJLmaEhNQnUEfX9J88fYfTdiZ3QAo3Gxo70.0010050000000.00000000000030
After the testsSwept 0.001676000000 XMR from the merchant to the spender

Tests

Every live test of the run, with the services it needs. A failure’s first line says what went wrong.

TestNeedsResultTime
✕ Tor takes our torrc and hands monokulo a circuit identityRust · monokulo::e2e_torthread 'live_tor_takes_our_torrc_and_hands_monokulo_a_circuit_identity' (10727) panicked at crates/monokulo/tests/e2e_tor.rs:174:65Tor networkFailed345 ms
✕ Stagenet order resolves and enforces a non default confirmation thresholdRust · mock-woocommerce::e2e_stagenet_confirmation_thresholdthread 'live_stagenet_order_resolves_and_enforces_a_non_default_confirmation_threshold' (10793) panicked at crates/mock-woocommerce/tests/e2e_stagenet_confirmation_threshold.rs:353:5Monero stagenet nodes (monerodevs.org), Funded stagenet test walletsFailed225 ms
✕ POS terminal - real stagenet payments › a confirming payment can be backgrounded and completes in the top stackBrowser · pos-stagenet-payments.spec.jsexpect(locator).toBeHidden() failedMonero stagenet nodes (monerodevs.org), Funded stagenet test walletsFailed5 min
✓ Coinmarketcap api quotes usdRust · sharedCoinMarketCap public APIPassed317 ms
✓ Txt records are read from the root servers downRust · sharedDNSPassed102 ms
✓ Coingecko api quotes usd and lists it as supportedRust · sharedCoingecko APIPassed134 ms
✓ Haveno markets api prices fiat under both policiesRust · sharedhaveno.marketsPassed418 ms
✓ Stagenet payment shows up in the dashboard with the correct total receivedRust · e2e-harness::e2e_dashboard_stagenetMonero stagenet nodes (monerodevs.org), Funded stagenet test walletsPassed704 ms
✓ Node block transactions all parse as valid monero transactionsRust · engineMonero mainnet nodePassed1.7 s
✓ Node end to end scan of live mempool never panics and finds no false matchesRust · engineMonero mainnet nodePassed3.5 s
✓ Node find transaction finds nothing for a bogus hashRust · engineMonero mainnet nodePassed1.0 s
✓ Node find transaction matches the same tx in its blockRust · engineMonero mainnet nodePassed1.8 s
✓ Node get block hash matches a known immutable blockRust · engineMonero mainnet nodePassed1.1 s
✓ Node get height returns a plausible valueRust · engineMonero mainnet nodePassed1.0 s
✓ Node header matches a known immutable blockRust · engineMonero mainnet nodePassed1.0 s
✓ Node is key image spent reports unspent for a null imageRust · engineMonero mainnet nodePassed1.3 s
✓ Node locate transaction finds a known confirmed txRust · engineMonero mainnet nodePassed1.0 s
✓ Node locate transaction reports not found for a bogus hashRust · engineMonero mainnet nodePassed1.0 s
✓ Node pool is followed by its changesRust · engineMonero mainnet nodePassed2.9 s
✓ Node pool transactions fetched by id hash to their idsRust · engineMonero mainnet nodePassed1.6 s
✓ Node pruned chain blocks match the whole onesRust · engineMonero mainnet nodePassed5.1 s
✓ Node says the tip has not moved with the pools changesRust · engineMonero mainnet nodePassed3.8 s
✓ Stagenet payment is detected end to endRust · e2e-harness::e2e_stagenetMonero stagenet nodes (monerodevs.org), Funded stagenet test walletsPassed10.6 s
✓ Stagenet node answers as recordedRust · engine::daemon_rpc_replayMonero stagenet nodes (monerodevs.org)Passed2.5 s
✓ Stagenet connect flow pays a real order end to endRust · mock-woocommerce::e2e_stagenet_connect_flowMonero stagenet nodes (monerodevs.org), Funded stagenet test walletsPassed754 ms
✓ Tor inside monokulo serves its onion address and checks onion shopsRust · monokulo::e2e_artiTor networkPassed2 min
✓ POS terminal - real stagenet payments › a 0-conf-trusted payment shows shared success and stays reviewableBrowser · pos-stagenet-payments.spec.jsMonero stagenet nodes (monerodevs.org), Funded stagenet test walletsPassed8.2 s