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.

All checks passed·Tests and coverage from 6b1dcda on 16 Oct 2026·Nightly properties 17 Oct 2026·Fuzzing 16 Oct 2026·Live network 16 Oct 2026
Tests2,6072,607 passed · 0 skipped
Engine and server90.6%of 87,305 Rust lines
Checkout and POS95.0%of 1,655 browser lines
WooCommerce95.6%of 502 PHP lines
Properties nightly211plus 9 fuzz targets · 26 live daily

Coverage

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
CrateLinesCovered / totalBranches
monokulo 96 files
95.7%
52,221 / 54,56678.0%
FileLinesCoveredBranches
src/main.rs
0.0%
0 / 2610 / 20
src/webhooks/subscriber.rs
71.1%
86 / 1212 / 6
src/embed_domains.rs
81.5%
357 / 43848 / 60
src/http/setup.rs
83.0%
323 / 38920 / 24
src/http/signup.rs
84.9%
107 / 12624 / 30
src/http/wallet_service.rs
85.5%
159 / 18622 / 32
src/http/store_site.rs
86.3%
272 / 31525 / 38
src/http/store_settings.rs
87.2%
381 / 437106 / 122
src/webhooks/mod.rs
87.8%
86 / 9810 / 14
src/db/webhooks.rs
89.7%
356 / 39716 / 18
src/webhooks/delivery.rs
89.7%
331 / 36940 / 52
src/http/connections.rs
89.7%
350 / 3908 / 18
src/abuse/proxy_protocol.rs
90.1%
163 / 18121 / 22
src/http/webhooks.rs
90.7%
262 / 28911 / 12
src/cli.rs
90.9%
120 / 1322 / 2
src/http/logout.rs
90.9%
10 / 11–
src/views/engine.rs
91.3%
637 / 69862 / 102
src/db/order_changes.rs
91.4%
32 / 353 / 4
src/http/logs_page.rs
92.0%
1,168 / 1,269102 / 142
src/views/controls.rs
92.1%
58 / 638 / 12
src/engine_view/relay.rs
92.2%
226 / 24525 / 32
src/views/key_entry.rs
92.5%
147 / 15910 / 12
src/http/login.rs
92.6%
63 / 683 / 4
src/http/store_key.rs
92.7%
38 / 416 / 6
src/live.rs
92.7%
511 / 55162 / 86
src/http/invites.rs
93.0%
760 / 81728 / 46
src/http/dashboard.rs
93.4%
324 / 34715 / 18
src/confirmation_thresholds.rs
93.9%
340 / 36228 / 38
src/http/checkout.rs
94.1%
1,192 / 1,26759 / 78
src/settings.rs
94.1%
859 / 91339 / 50
src/http/account.rs
94.1%
176 / 18728 / 32
src/views/webhooks.rs
94.3%
461 / 48981 / 114
src/http/admin_setup.rs
94.3%
247 / 2628 / 8
src/http/embed_domains.rs
94.4%
1,337 / 1,41644 / 54
src/logs.rs
94.5%
277 / 2938 / 10
src/http/key_entry.rs
94.7%
609 / 64356 / 74
src/http/wallets.rs
94.8%
1,636 / 1,72565 / 112
src/http/telemetry_client.rs
95.6%
129 / 13518 / 22
src/wallets.rs
95.7%
90 / 9419 / 24
src/http/engine_page.rs
95.9%
703 / 73321 / 28
src/abuse/streams.rs
95.9%
118 / 12314 / 18
src/views/time.rs
96.2%
126 / 13115 / 20
src/abuse/limiter.rs
96.2%
202 / 21025 / 32
src/qr.rs
96.3%
26 / 27–
src/abuse/identity.rs
96.4%
163 / 16918 / 20
src/http/pos.rs
96.5%
2,072 / 2,14848 / 68
src/http/status_page.rs
96.6%
1,198 / 1,24087 / 110
src/engine_view/present.rs
96.8%
716 / 74077 / 84
src/engine_client.rs
96.9%
1,307 / 1,34953 / 64
src/http/csrf.rs
97.0%
64 / 666 / 6
src/http/orders.rs
97.1%
4,516 / 4,65387 / 142
src/http/admin_settings.rs
97.1%
3,722 / 3,834195 / 270
src/views/scaling.rs
97.2%
927 / 95491 / 106
src/http/pos_logs.rs
97.2%
176 / 18145 / 54
src/crypto.rs
97.5%
119 / 1222 / 2
src/views/mod.rs
97.6%
522 / 53555 / 70
src/views/setup.rs
97.8%
408 / 41737 / 40
src/http/abuse.rs
98.0%
765 / 78139 / 48
src/abuse/challenge.rs
98.0%
300 / 30631 / 34
src/http/home.rs
98.1%
307 / 3139 / 12
src/exchange_rate_config.rs
98.3%
634 / 64532 / 38
src/db.rs
98.3%
3,694 / 3,75837 / 48
src/http/test_support.rs
98.4%
120 / 1223 / 4
src/views/store_settings.rs
98.4%
988 / 1,00463 / 80
src/views/admin.rs
98.4%
2,100 / 2,134240 / 276
src/views/checkout.rs
98.4%
624 / 63496 / 118
src/http/pay.rs
98.4%
1,639 / 1,66521 / 32
src/http/connect.rs
98.4%
1,266 / 1,28638 / 52
src/currencies.rs
98.7%
151 / 1538 / 8
src/views/wallets.rs
98.7%
1,234 / 1,250109 / 138
src/stores.rs
98.8%
80 / 8120 / 24
src/fx_provider_settings.rs
98.9%
264 / 26722 / 28
src/views/logs.rs
98.9%
368 / 37254 / 66
src/http/mod.rs
99.0%
711 / 71826 / 30
src/engine_view/history.rs
99.1%
214 / 21632 / 34
src/assets.rs
99.2%
117 / 1188 / 12
src/views/orders.rs
99.2%
395 / 39833 / 38
src/views/store_detail.rs
99.3%
305 / 30718 / 20
src/views/store_site.rs
99.5%
438 / 44059 / 82
src/engine_view/machine.rs
99.7%
624 / 62675 / 76
src/views/account.rs
99.8%
447 / 44814 / 18
src/admin_nodes.rs
99.8%
586 / 58775 / 88
src/views/status.rs
99.9%
687 / 68860 / 66
src/abuse/mod.rs
100.0%
68 / 684 / 4
src/abuse/stats.rs
100.0%
51 / 513 / 4
src/http/fx.rs
100.0%
101 / 1016 / 8
src/templates.rs
100.0%
90 / 9020 / 20
src/views/auth.rs
100.0%
189 / 18911 / 12
src/views/challenge.rs
100.0%
54 / 542 / 2
src/views/connect.rs
100.0%
77 / 773 / 4
src/views/create_order.rs
100.0%
94 / 944 / 4
src/views/home.rs
100.0%
164 / 16410 / 12
src/views/pos.rs
100.0%
49 / 492 / 2
src/views/settings.rs
100.0%
280 / 2808 / 8
src/views/shorten.rs
100.0%
38 / 38–
src/webhooks/body.rs
100.0%
143 / 1434 / 4
src/engine_view/mod.rsnot instrumented
src/lib.rsnot instrumented
src/views/logo_art.rsnot instrumented
engine 54 files
87.6%
14,311 / 16,33085.4%
FileLinesCoveredBranches
src/bin/round_sweep.rs tool binary
0.0%
0 / 3420 / 10
src/bin/stress_common/mod.rs tool binary
0.0%
0 / 370 / 2
src/bin/stress_fixture.rs tool binary
0.0%
0 / 5210 / 44
src/main.rs
0.0%
0 / 820 / 14
src/key_custody/mod.rs
13.0%
3 / 23–
src/http/logs.rs
67.5%
56 / 832 / 4
src/key_custody/snp_slot.rs
71.0%
93 / 1316 / 12
src/threads.rs
77.8%
77 / 9915 / 24
src/run.rs
81.1%
180 / 2224 / 8
src/pow/hasher.rs
83.8%
119 / 14212 / 20
src/proof/anchor.rs
84.6%
253 / 29933 / 46
src/work/reservations.rs
84.6%
33 / 394 / 4
src/daemon.rs
85.9%
73 / 85–
src/http/admin.rs
86.4%
875 / 1,01377 / 98
src/daemon_rpc.rs
88.3%
815 / 923108 / 130
src/work/observe.rs
89.8%
53 / 590 / 2
src/engine_settings.rs
90.3%
438 / 48516 / 21
src/proof/mod.rs
90.5%
697 / 770105 / 124
src/settings.rs
90.7%
39 / 4323 / 24
src/http/mod.rs
91.3%
397 / 43519 / 22
src/daemon_fallback.rs
91.4%
363 / 39711 / 16
src/http/status_page.rs
91.4%
267 / 29223 / 26
src/store/proof.rs
91.5%
301 / 32913 / 14
src/activity.rs
91.8%
89 / 9712 / 12
src/http/order_events.rs
91.8%
78 / 856 / 8
src/work/tuning.rs
91.8%
90 / 9852 / 54
src/http/instance_admin.rs
92.5%
392 / 42447 / 54
src/loops.rs
93.7%
371 / 39634 / 44
src/node_events.rs
93.9%
169 / 18019 / 22
src/store/order_events.rs
95.6%
108 / 1134 / 4
src/store/conflicts.rs
95.7%
110 / 11524 / 24
src/work/chain.rs
95.8%
429 / 44886 / 94
src/work/settlement.rs
96.1%
198 / 20648 / 48
src/scanner.rs
96.4%
877 / 910111 / 114
src/store/mod.rs
96.7%
1,716 / 1,775116 / 126
src/work/upkeep.rs
96.8%
152 / 15732 / 32
src/pow/mod.rs
96.9%
186 / 19234 / 36
src/work/blocks.rs
97.0%
1,353 / 1,395203 / 216
src/work/mod.rs
97.7%
293 / 30010 / 10
src/http/orders.rs
98.2%
107 / 10919 / 20
src/store/db.rs
98.2%
163 / 16614 / 14
src/pow/test_chain.rs
98.3%
177 / 1802 / 2
src/scaling.rs
98.8%
252 / 25529 / 32
src/link.rs
99.2%
260 / 26211 / 14
src/work/mempool.rs
99.3%
541 / 54564 / 64
src/store/work.rs
99.6%
775 / 77842 / 42
src/cli.rs
100.0%
24 / 242 / 2
src/http/activity.rs
100.0%
32 / 32–
src/http/rate_limit.rs
100.0%
28 / 282 / 2
src/scanner_status.rs
100.0%
46 / 46–
src/status.rs
100.0%
39 / 3915 / 16
src/store/dispatch.rs
100.0%
7 / 7–
src/work/retry.rs
100.0%
21 / 212 / 2
src/work/scheduler.rs
100.0%
96 / 9618 / 18
src/auth.rsnot instrumented
src/lib.rsnot instrumented
src/network.rsnot instrumented
shared 23 files
95.1%
4,155 / 4,37181.5%
FileLinesCoveredBranches
src/shutdown.rs
0.0%
0 / 180 / 2
src/unreachable.rs
82.8%
24 / 29–
src/ids.rs
87.8%
43 / 49–
src/monero_tx.rs
90.1%
91 / 1018 / 16
src/resources.rs
90.5%
218 / 24113 / 18
src/supervise.rs
92.0%
196 / 2137 / 12
src/haveno.rs
94.3%
910 / 96548 / 60
src/exchange_rate.rs
94.4%
654 / 69339 / 48
src/coinmarketcap.rs
95.2%
319 / 33517 / 18
src/xmr_amount.rs
95.7%
111 / 11615 / 16
src/migrations.rs
96.2%
127 / 13213 / 14
src/network.rs
96.6%
28 / 29–
src/sqlite.rs
97.0%
224 / 2314 / 4
src/log.rs
97.3%
73 / 753 / 4
src/auth.rs
97.4%
114 / 1173 / 4
src/http_cache.rs
98.8%
331 / 3357 / 8
src/activity.rs
100.0%
96 / 96–
src/order_status.rs
100.0%
27 / 27–
src/password.rs
100.0%
96 / 962 / 2
src/rate_limit.rs
100.0%
128 / 12811 / 12
src/scaling.rs
100.0%
46 / 464 / 4
src/time.rs
100.0%
17 / 17–
src/webhook_sign.rs
100.0%
282 / 28244 / 50
src/announcements.rsnot instrumented
src/lib.rsnot instrumented
src/proof.rsnot instrumented
ui 18 files
20.8%
622 / 2,98826.4%
FileLinesCoveredBranches
src/book.rs
0.0%
0 / 2950 / 22
src/components/mod.rs
0.0%
0 / 79–
src/solid.rs
0.0%
0 / 6020 / 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 / 2342 / 2
src/components/sortable.rs
16.7%
9 / 54–
src/components/select.rs
44.6%
86 / 19320 / 20
src/ir.rs
66.7%
40 / 602 / 4
src/json.rs
77.3%
51 / 662 / 2
src/lib.rs
78.2%
86 / 1103 / 4
src/render.rs
93.8%
195 / 20827 / 32
src/assets.rsnot instrumented
telemetry 9 files
90.2%
2,079 / 2,30680.6%
FileLinesCoveredBranches
src/store/api.rs
75.0%
21 / 284 / 4
src/lib.rs
86.5%
283 / 32737 / 50
src/store/mod.rs
87.1%
425 / 48843 / 60
src/query.rs
88.6%
473 / 53482 / 96
src/json.rs
89.0%
170 / 19123 / 30
src/otlp.rs
89.4%
245 / 27427 / 36
src/trace.rs
98.2%
54 / 5516 / 20
src/http.rs
99.5%
209 / 21013 / 14
src/redact.rs
100.0%
199 / 19955 / 62
live-settings 8 files
89.1%
1,713 / 1,92281.8%
FileLinesCoveredBranches
src/section.rs
73.6%
39 / 53–
src/setting.rs
84.1%
292 / 34748 / 68
src/options.rs
87.0%
423 / 48656 / 68
src/store.rs
87.5%
21 / 24–
src/cli.rs
92.0%
173 / 18813 / 16
src/paths.rs
92.1%
70 / 7611 / 12
src/registry.rs
92.1%
502 / 54577 / 86
src/value.rs
95.1%
193 / 20319 / 24
src/lib.rsnot instrumented
key-custody 8 files
91.4%
1,559 / 1,70682.9%
FileLinesCoveredBranches
src/property_support.rs
78.6%
33 / 423 / 4
src/custody.rs
86.7%
189 / 21810 / 12
src/snp.rs
87.0%
395 / 45426 / 36
src/test_log.rs
89.2%
33 / 371 / 2
src/plain.rs
93.3%
168 / 18025 / 28
src/router.rs
93.8%
167 / 17811 / 14
src/transport.rs
96.0%
522 / 54429 / 32
src/outputs.rs
98.1%
52 / 5311 / 12
src/lib.rsnot instrumented
src/plain_properties.rsnot instrumented
src/router_properties.rsnot instrumented
src/wasm.rsnot instrumented
snp-attest 7 files
67.7%
907 / 1,33947.8%
FileLinesCoveredBranches
src/bin/verify-snp-attestation.rs tool binary
0.0%
0 / 149–
src/kds.rs
60.0%
81 / 1350 / 12
src/verify.rs
68.4%
322 / 47126 / 50
src/guest.rs
72.0%
195 / 2717 / 14
src/report.rs
98.1%
205 / 20910 / 14
src/id_block.rs
100.0%
92 / 92–
src/pinned_ark.rs
100.0%
12 / 12–
src/lib.rsnot instrumented
ui-macros 1 file
89.2%
1,127 / 1,26480.4%
FileLinesCoveredBranches
src/lib.rs
89.2%
1,127 / 1,264225 / 280
key-custody-cli 2 files
55.9%
128 / 22966.7%
FileLinesCoveredBranches
src/main.rs
0.0%
0 / 82–
src/lib.rs
87.1%
128 / 1474 / 6
short-id 1 file
100.0%
106 / 106100.0%
FileLinesCoveredBranches
src/lib.rs
100.0%
106 / 1068 / 8
wallet-setup 1 file
87.3%
89 / 10237.5%
FileLinesCoveredBranches
src/lib.rs
87.3%
89 / 1023 / 8
src/wasm.rsnot instrumented
static-assets 1 file
98.7%
75 / 76100.0%
FileLinesCoveredBranches
src/lib.rs
98.7%
75 / 764 / 4
Test tools
cli-wallet 13 files
56.4%
3,185 / 5,64843.8%
FileLinesCoveredBranches
src/bin/refresh_decoy_pool.rs tool binary
0.0%
0 / 40–
src/bin/cli/commands.rs
17.4%
232 / 1,33215 / 136
src/wallet.rs
27.0%
224 / 83013 / 78
src/bin/cli/editor.rs
47.6%
305 / 64130 / 76
src/lib.rs
73.5%
581 / 79016 / 36
src/bin/cli/main.rs
75.1%
127 / 16924 / 30
src/file.rs
88.3%
218 / 24714 / 20
src/faucet.rs
91.1%
246 / 2709 / 16
src/store.rs
93.0%
535 / 57512 / 14
src/amount.rs
93.9%
92 / 9816 / 16
src/meta.rs
94.0%
109 / 1165 / 8
src/bin/cli/args.rs
94.3%
395 / 41961 / 76
src/block_range.rs
100.0%
121 / 12112 / 12
engine-test-support 2 files
75.0%
841 / 1,12137.0%
FileLinesCoveredBranches
src/bin/fake-monerod.rs tool binary
0.0%
0 / 1810 / 22
src/lib.rs
89.5%
841 / 94017 / 24
mock-woocommerce 2 files
92.2%
942 / 1,02272.9%
FileLinesCoveredBranches
src/main.rs
0.0%
0 / 28–
src/lib.rs
94.8%
942 / 99435 / 48
Other reports
Browser checkout, embed, POS
95.0%
1,573 / 1,65578.6%
WooCommerce plugin
95.6%
480 / 50291.2%

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%.