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.
6b1dcda on 16 Oct 2026·Nightly properties 17 Oct 2026·Fuzzing 16 Oct 2026·Live network 16 Oct 2026Coverage
While the tests run, a tool watches which lines of code actually get used. Code that no test ever runs is where bugs can hide. Higher is better, but 100% isn’t the goal: some code, like the stress-test tools, never ships. A branch is each way an if can go. Open a crate (a package of Rust code) to see its files, lowest first.
- Rust, shipping crates
- 90.6% 78.5% branches
- Rust, whole workspace
- 88.4% 76.1% branches
- Browser
- 95.0% 78.6% branches
- WooCommerce
- 95.6% 91.2% branches
monokulo 96 files95.7%52,221 / 54,56678.0%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/main.rs | 0.0% | 0 / 261 | 0 / 20 |
| src/webhooks/subscriber.rs | 71.1% | 86 / 121 | 2 / 6 |
| src/embed_domains.rs | 81.5% | 357 / 438 | 48 / 60 |
| src/http/setup.rs | 83.0% | 323 / 389 | 20 / 24 |
| src/http/signup.rs | 84.9% | 107 / 126 | 24 / 30 |
| src/http/wallet_service.rs | 85.5% | 159 / 186 | 22 / 32 |
| src/http/store_site.rs | 86.3% | 272 / 315 | 25 / 38 |
| src/http/store_settings.rs | 87.2% | 381 / 437 | 106 / 122 |
| src/webhooks/mod.rs | 87.8% | 86 / 98 | 10 / 14 |
| src/db/webhooks.rs | 89.7% | 356 / 397 | 16 / 18 |
| src/webhooks/delivery.rs | 89.7% | 331 / 369 | 40 / 52 |
| src/http/connections.rs | 89.7% | 350 / 390 | 8 / 18 |
| src/abuse/proxy_protocol.rs | 90.1% | 163 / 181 | 21 / 22 |
| src/http/webhooks.rs | 90.7% | 262 / 289 | 11 / 12 |
| src/cli.rs | 90.9% | 120 / 132 | 2 / 2 |
| src/http/logout.rs | 90.9% | 10 / 11 | – |
| src/views/engine.rs | 91.3% | 637 / 698 | 62 / 102 |
| src/db/order_changes.rs | 91.4% | 32 / 35 | 3 / 4 |
| src/http/logs_page.rs | 92.0% | 1,168 / 1,269 | 102 / 142 |
| src/views/controls.rs | 92.1% | 58 / 63 | 8 / 12 |
| src/engine_view/relay.rs | 92.2% | 226 / 245 | 25 / 32 |
| src/views/key_entry.rs | 92.5% | 147 / 159 | 10 / 12 |
| src/http/login.rs | 92.6% | 63 / 68 | 3 / 4 |
| src/http/store_key.rs | 92.7% | 38 / 41 | 6 / 6 |
| src/live.rs | 92.7% | 511 / 551 | 62 / 86 |
| src/http/invites.rs | 93.0% | 760 / 817 | 28 / 46 |
| src/http/dashboard.rs | 93.4% | 324 / 347 | 15 / 18 |
| src/confirmation_thresholds.rs | 93.9% | 340 / 362 | 28 / 38 |
| src/http/checkout.rs | 94.1% | 1,192 / 1,267 | 59 / 78 |
| src/settings.rs | 94.1% | 859 / 913 | 39 / 50 |
| src/http/account.rs | 94.1% | 176 / 187 | 28 / 32 |
| src/views/webhooks.rs | 94.3% | 461 / 489 | 81 / 114 |
| src/http/admin_setup.rs | 94.3% | 247 / 262 | 8 / 8 |
| src/http/embed_domains.rs | 94.4% | 1,337 / 1,416 | 44 / 54 |
| src/logs.rs | 94.5% | 277 / 293 | 8 / 10 |
| src/http/key_entry.rs | 94.7% | 609 / 643 | 56 / 74 |
| src/http/wallets.rs | 94.8% | 1,636 / 1,725 | 65 / 112 |
| src/http/telemetry_client.rs | 95.6% | 129 / 135 | 18 / 22 |
| src/wallets.rs | 95.7% | 90 / 94 | 19 / 24 |
| src/http/engine_page.rs | 95.9% | 703 / 733 | 21 / 28 |
| src/abuse/streams.rs | 95.9% | 118 / 123 | 14 / 18 |
| src/views/time.rs | 96.2% | 126 / 131 | 15 / 20 |
| src/abuse/limiter.rs | 96.2% | 202 / 210 | 25 / 32 |
| src/qr.rs | 96.3% | 26 / 27 | – |
| src/abuse/identity.rs | 96.4% | 163 / 169 | 18 / 20 |
| src/http/pos.rs | 96.5% | 2,072 / 2,148 | 48 / 68 |
| src/http/status_page.rs | 96.6% | 1,198 / 1,240 | 87 / 110 |
| src/engine_view/present.rs | 96.8% | 716 / 740 | 77 / 84 |
| src/engine_client.rs | 96.9% | 1,307 / 1,349 | 53 / 64 |
| src/http/csrf.rs | 97.0% | 64 / 66 | 6 / 6 |
| src/http/orders.rs | 97.1% | 4,516 / 4,653 | 87 / 142 |
| src/http/admin_settings.rs | 97.1% | 3,722 / 3,834 | 195 / 270 |
| src/views/scaling.rs | 97.2% | 927 / 954 | 91 / 106 |
| src/http/pos_logs.rs | 97.2% | 176 / 181 | 45 / 54 |
| src/crypto.rs | 97.5% | 119 / 122 | 2 / 2 |
| src/views/mod.rs | 97.6% | 522 / 535 | 55 / 70 |
| src/views/setup.rs | 97.8% | 408 / 417 | 37 / 40 |
| src/http/abuse.rs | 98.0% | 765 / 781 | 39 / 48 |
| src/abuse/challenge.rs | 98.0% | 300 / 306 | 31 / 34 |
| src/http/home.rs | 98.1% | 307 / 313 | 9 / 12 |
| src/exchange_rate_config.rs | 98.3% | 634 / 645 | 32 / 38 |
| src/db.rs | 98.3% | 3,694 / 3,758 | 37 / 48 |
| src/http/test_support.rs | 98.4% | 120 / 122 | 3 / 4 |
| src/views/store_settings.rs | 98.4% | 988 / 1,004 | 63 / 80 |
| src/views/admin.rs | 98.4% | 2,100 / 2,134 | 240 / 276 |
| src/views/checkout.rs | 98.4% | 624 / 634 | 96 / 118 |
| src/http/pay.rs | 98.4% | 1,639 / 1,665 | 21 / 32 |
| src/http/connect.rs | 98.4% | 1,266 / 1,286 | 38 / 52 |
| src/currencies.rs | 98.7% | 151 / 153 | 8 / 8 |
| src/views/wallets.rs | 98.7% | 1,234 / 1,250 | 109 / 138 |
| src/stores.rs | 98.8% | 80 / 81 | 20 / 24 |
| src/fx_provider_settings.rs | 98.9% | 264 / 267 | 22 / 28 |
| src/views/logs.rs | 98.9% | 368 / 372 | 54 / 66 |
| src/http/mod.rs | 99.0% | 711 / 718 | 26 / 30 |
| src/engine_view/history.rs | 99.1% | 214 / 216 | 32 / 34 |
| src/assets.rs | 99.2% | 117 / 118 | 8 / 12 |
| src/views/orders.rs | 99.2% | 395 / 398 | 33 / 38 |
| src/views/store_detail.rs | 99.3% | 305 / 307 | 18 / 20 |
| src/views/store_site.rs | 99.5% | 438 / 440 | 59 / 82 |
| src/engine_view/machine.rs | 99.7% | 624 / 626 | 75 / 76 |
| src/views/account.rs | 99.8% | 447 / 448 | 14 / 18 |
| src/admin_nodes.rs | 99.8% | 586 / 587 | 75 / 88 |
| src/views/status.rs | 99.9% | 687 / 688 | 60 / 66 |
| src/abuse/mod.rs | 100.0% | 68 / 68 | 4 / 4 |
| src/abuse/stats.rs | 100.0% | 51 / 51 | 3 / 4 |
| src/http/fx.rs | 100.0% | 101 / 101 | 6 / 8 |
| src/templates.rs | 100.0% | 90 / 90 | 20 / 20 |
| src/views/auth.rs | 100.0% | 189 / 189 | 11 / 12 |
| src/views/challenge.rs | 100.0% | 54 / 54 | 2 / 2 |
| src/views/connect.rs | 100.0% | 77 / 77 | 3 / 4 |
| src/views/create_order.rs | 100.0% | 94 / 94 | 4 / 4 |
| src/views/home.rs | 100.0% | 164 / 164 | 10 / 12 |
| src/views/pos.rs | 100.0% | 49 / 49 | 2 / 2 |
| src/views/settings.rs | 100.0% | 280 / 280 | 8 / 8 |
| src/views/shorten.rs | 100.0% | 38 / 38 | – |
| src/webhooks/body.rs | 100.0% | 143 / 143 | 4 / 4 |
| src/engine_view/mod.rs | not instrumented | ||
| src/lib.rs | not instrumented | ||
| src/views/logo_art.rs | not instrumented | ||
engine 54 files87.6%14,311 / 16,33085.4%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/bin/round_sweep.rs tool binary | 0.0% | 0 / 342 | 0 / 10 |
| src/bin/stress_common/mod.rs tool binary | 0.0% | 0 / 37 | 0 / 2 |
| src/bin/stress_fixture.rs tool binary | 0.0% | 0 / 521 | 0 / 44 |
| src/main.rs | 0.0% | 0 / 82 | 0 / 14 |
| src/key_custody/mod.rs | 13.0% | 3 / 23 | – |
| src/http/logs.rs | 67.5% | 56 / 83 | 2 / 4 |
| src/key_custody/snp_slot.rs | 71.0% | 93 / 131 | 6 / 12 |
| src/threads.rs | 77.8% | 77 / 99 | 15 / 24 |
| src/run.rs | 81.1% | 180 / 222 | 4 / 8 |
| src/pow/hasher.rs | 83.8% | 119 / 142 | 12 / 20 |
| src/proof/anchor.rs | 84.6% | 253 / 299 | 33 / 46 |
| src/work/reservations.rs | 84.6% | 33 / 39 | 4 / 4 |
| src/daemon.rs | 85.9% | 73 / 85 | – |
| src/http/admin.rs | 86.4% | 875 / 1,013 | 77 / 98 |
| src/daemon_rpc.rs | 88.3% | 815 / 923 | 108 / 130 |
| src/work/observe.rs | 89.8% | 53 / 59 | 0 / 2 |
| src/engine_settings.rs | 90.3% | 438 / 485 | 16 / 21 |
| src/proof/mod.rs | 90.5% | 697 / 770 | 105 / 124 |
| src/settings.rs | 90.7% | 39 / 43 | 23 / 24 |
| src/http/mod.rs | 91.3% | 397 / 435 | 19 / 22 |
| src/daemon_fallback.rs | 91.4% | 363 / 397 | 11 / 16 |
| src/http/status_page.rs | 91.4% | 267 / 292 | 23 / 26 |
| src/store/proof.rs | 91.5% | 301 / 329 | 13 / 14 |
| src/activity.rs | 91.8% | 89 / 97 | 12 / 12 |
| src/http/order_events.rs | 91.8% | 78 / 85 | 6 / 8 |
| src/work/tuning.rs | 91.8% | 90 / 98 | 52 / 54 |
| src/http/instance_admin.rs | 92.5% | 392 / 424 | 47 / 54 |
| src/loops.rs | 93.7% | 371 / 396 | 34 / 44 |
| src/node_events.rs | 93.9% | 169 / 180 | 19 / 22 |
| src/store/order_events.rs | 95.6% | 108 / 113 | 4 / 4 |
| src/store/conflicts.rs | 95.7% | 110 / 115 | 24 / 24 |
| src/work/chain.rs | 95.8% | 429 / 448 | 86 / 94 |
| src/work/settlement.rs | 96.1% | 198 / 206 | 48 / 48 |
| src/scanner.rs | 96.4% | 877 / 910 | 111 / 114 |
| src/store/mod.rs | 96.7% | 1,716 / 1,775 | 116 / 126 |
| src/work/upkeep.rs | 96.8% | 152 / 157 | 32 / 32 |
| src/pow/mod.rs | 96.9% | 186 / 192 | 34 / 36 |
| src/work/blocks.rs | 97.0% | 1,353 / 1,395 | 203 / 216 |
| src/work/mod.rs | 97.7% | 293 / 300 | 10 / 10 |
| src/http/orders.rs | 98.2% | 107 / 109 | 19 / 20 |
| src/store/db.rs | 98.2% | 163 / 166 | 14 / 14 |
| src/pow/test_chain.rs | 98.3% | 177 / 180 | 2 / 2 |
| src/scaling.rs | 98.8% | 252 / 255 | 29 / 32 |
| src/link.rs | 99.2% | 260 / 262 | 11 / 14 |
| src/work/mempool.rs | 99.3% | 541 / 545 | 64 / 64 |
| src/store/work.rs | 99.6% | 775 / 778 | 42 / 42 |
| src/cli.rs | 100.0% | 24 / 24 | 2 / 2 |
| src/http/activity.rs | 100.0% | 32 / 32 | – |
| src/http/rate_limit.rs | 100.0% | 28 / 28 | 2 / 2 |
| src/scanner_status.rs | 100.0% | 46 / 46 | – |
| src/status.rs | 100.0% | 39 / 39 | 15 / 16 |
| src/store/dispatch.rs | 100.0% | 7 / 7 | – |
| src/work/retry.rs | 100.0% | 21 / 21 | 2 / 2 |
| src/work/scheduler.rs | 100.0% | 96 / 96 | 18 / 18 |
| src/auth.rs | not instrumented | ||
| src/lib.rs | not instrumented | ||
| src/network.rs | not instrumented | ||
shared 23 files95.1%4,155 / 4,37181.5%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/shutdown.rs | 0.0% | 0 / 18 | 0 / 2 |
| src/unreachable.rs | 82.8% | 24 / 29 | – |
| src/ids.rs | 87.8% | 43 / 49 | – |
| src/monero_tx.rs | 90.1% | 91 / 101 | 8 / 16 |
| src/resources.rs | 90.5% | 218 / 241 | 13 / 18 |
| src/supervise.rs | 92.0% | 196 / 213 | 7 / 12 |
| src/haveno.rs | 94.3% | 910 / 965 | 48 / 60 |
| src/exchange_rate.rs | 94.4% | 654 / 693 | 39 / 48 |
| src/coinmarketcap.rs | 95.2% | 319 / 335 | 17 / 18 |
| src/xmr_amount.rs | 95.7% | 111 / 116 | 15 / 16 |
| src/migrations.rs | 96.2% | 127 / 132 | 13 / 14 |
| src/network.rs | 96.6% | 28 / 29 | – |
| src/sqlite.rs | 97.0% | 224 / 231 | 4 / 4 |
| src/log.rs | 97.3% | 73 / 75 | 3 / 4 |
| src/auth.rs | 97.4% | 114 / 117 | 3 / 4 |
| src/http_cache.rs | 98.8% | 331 / 335 | 7 / 8 |
| src/activity.rs | 100.0% | 96 / 96 | – |
| src/order_status.rs | 100.0% | 27 / 27 | – |
| src/password.rs | 100.0% | 96 / 96 | 2 / 2 |
| src/rate_limit.rs | 100.0% | 128 / 128 | 11 / 12 |
| src/scaling.rs | 100.0% | 46 / 46 | 4 / 4 |
| src/time.rs | 100.0% | 17 / 17 | – |
| src/webhook_sign.rs | 100.0% | 282 / 282 | 44 / 50 |
| src/announcements.rs | not instrumented | ||
| src/lib.rs | not instrumented | ||
| src/proof.rs | not instrumented | ||
ui 18 files20.8%622 / 2,98826.4%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/book.rs | 0.0% | 0 / 295 | 0 / 22 |
| src/components/mod.rs | 0.0% | 0 / 79 | – |
| src/solid.rs | 0.0% | 0 / 602 | 0 / 126 |
| src/components/steps.rs | 4.3% | 6 / 139 | – |
| src/components/tabs.rs | 5.8% | 3 / 52 | – |
| src/components/copy.rs | 7.5% | 3 / 40 | – |
| src/components/settings.rs | 9.0% | 15 / 167 | – |
| src/components/actions.rs | 10.0% | 9 / 90 | – |
| src/components/content.rs | 12.1% | 45 / 373 | – |
| src/components/dialog.rs | 15.6% | 12 / 77 | – |
| src/components/chrome.rs | 16.1% | 24 / 149 | – |
| src/components/forms.rs | 16.2% | 38 / 234 | 2 / 2 |
| src/components/sortable.rs | 16.7% | 9 / 54 | – |
| src/components/select.rs | 44.6% | 86 / 193 | 20 / 20 |
| src/ir.rs | 66.7% | 40 / 60 | 2 / 4 |
| src/json.rs | 77.3% | 51 / 66 | 2 / 2 |
| src/lib.rs | 78.2% | 86 / 110 | 3 / 4 |
| src/render.rs | 93.8% | 195 / 208 | 27 / 32 |
| src/assets.rs | not instrumented | ||
telemetry 9 files90.2%2,079 / 2,30680.6%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/store/api.rs | 75.0% | 21 / 28 | 4 / 4 |
| src/lib.rs | 86.5% | 283 / 327 | 37 / 50 |
| src/store/mod.rs | 87.1% | 425 / 488 | 43 / 60 |
| src/query.rs | 88.6% | 473 / 534 | 82 / 96 |
| src/json.rs | 89.0% | 170 / 191 | 23 / 30 |
| src/otlp.rs | 89.4% | 245 / 274 | 27 / 36 |
| src/trace.rs | 98.2% | 54 / 55 | 16 / 20 |
| src/http.rs | 99.5% | 209 / 210 | 13 / 14 |
| src/redact.rs | 100.0% | 199 / 199 | 55 / 62 |
live-settings 8 files89.1%1,713 / 1,92281.8%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/section.rs | 73.6% | 39 / 53 | – |
| src/setting.rs | 84.1% | 292 / 347 | 48 / 68 |
| src/options.rs | 87.0% | 423 / 486 | 56 / 68 |
| src/store.rs | 87.5% | 21 / 24 | – |
| src/cli.rs | 92.0% | 173 / 188 | 13 / 16 |
| src/paths.rs | 92.1% | 70 / 76 | 11 / 12 |
| src/registry.rs | 92.1% | 502 / 545 | 77 / 86 |
| src/value.rs | 95.1% | 193 / 203 | 19 / 24 |
| src/lib.rs | not instrumented | ||
key-custody 8 files91.4%1,559 / 1,70682.9%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/property_support.rs | 78.6% | 33 / 42 | 3 / 4 |
| src/custody.rs | 86.7% | 189 / 218 | 10 / 12 |
| src/snp.rs | 87.0% | 395 / 454 | 26 / 36 |
| src/test_log.rs | 89.2% | 33 / 37 | 1 / 2 |
| src/plain.rs | 93.3% | 168 / 180 | 25 / 28 |
| src/router.rs | 93.8% | 167 / 178 | 11 / 14 |
| src/transport.rs | 96.0% | 522 / 544 | 29 / 32 |
| src/outputs.rs | 98.1% | 52 / 53 | 11 / 12 |
| src/lib.rs | not instrumented | ||
| src/plain_properties.rs | not instrumented | ||
| src/router_properties.rs | not instrumented | ||
| src/wasm.rs | not instrumented | ||
snp-attest 7 files67.7%907 / 1,33947.8%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/bin/verify-snp-attestation.rs tool binary | 0.0% | 0 / 149 | – |
| src/kds.rs | 60.0% | 81 / 135 | 0 / 12 |
| src/verify.rs | 68.4% | 322 / 471 | 26 / 50 |
| src/guest.rs | 72.0% | 195 / 271 | 7 / 14 |
| src/report.rs | 98.1% | 205 / 209 | 10 / 14 |
| src/id_block.rs | 100.0% | 92 / 92 | – |
| src/pinned_ark.rs | 100.0% | 12 / 12 | – |
| src/lib.rs | not instrumented | ||
ui-macros 1 file89.2%1,127 / 1,26480.4%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/lib.rs | 89.2% | 1,127 / 1,264 | 225 / 280 |
key-custody-cli 2 files55.9%128 / 22966.7%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/main.rs | 0.0% | 0 / 82 | – |
| src/lib.rs | 87.1% | 128 / 147 | 4 / 6 |
short-id 1 file100.0%106 / 106100.0%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/lib.rs | 100.0% | 106 / 106 | 8 / 8 |
wallet-setup 1 file87.3%89 / 10237.5%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/lib.rs | 87.3% | 89 / 102 | 3 / 8 |
| src/wasm.rs | not instrumented | ||
static-assets 1 file98.7%75 / 76100.0%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/lib.rs | 98.7% | 75 / 76 | 4 / 4 |
cli-wallet 13 files56.4%3,185 / 5,64843.8%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/bin/refresh_decoy_pool.rs tool binary | 0.0% | 0 / 40 | – |
| src/bin/cli/commands.rs | 17.4% | 232 / 1,332 | 15 / 136 |
| src/wallet.rs | 27.0% | 224 / 830 | 13 / 78 |
| src/bin/cli/editor.rs | 47.6% | 305 / 641 | 30 / 76 |
| src/lib.rs | 73.5% | 581 / 790 | 16 / 36 |
| src/bin/cli/main.rs | 75.1% | 127 / 169 | 24 / 30 |
| src/file.rs | 88.3% | 218 / 247 | 14 / 20 |
| src/faucet.rs | 91.1% | 246 / 270 | 9 / 16 |
| src/store.rs | 93.0% | 535 / 575 | 12 / 14 |
| src/amount.rs | 93.9% | 92 / 98 | 16 / 16 |
| src/meta.rs | 94.0% | 109 / 116 | 5 / 8 |
| src/bin/cli/args.rs | 94.3% | 395 / 419 | 61 / 76 |
| src/block_range.rs | 100.0% | 121 / 121 | 12 / 12 |
engine-test-support 2 files75.0%841 / 1,12137.0%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/bin/fake-monerod.rs tool binary | 0.0% | 0 / 181 | 0 / 22 |
| src/lib.rs | 89.5% | 841 / 940 | 17 / 24 |
mock-woocommerce 2 files92.2%942 / 1,02272.9%
| File | Lines | Covered | Branches |
|---|---|---|---|
| src/main.rs | 0.0% | 0 / 28 | – |
| src/lib.rs | 94.8% | 942 / 994 | 35 / 48 |
Measured with cargo-llvm-cov 0.9.1, istanbul-lib-instrument 6.0.3 and PHPUnit 9.6.37 / Xdebug 3.5.3. Files that can’t be instrumented are listed under their crate rather than counted as 0%.