Skip to content

Characterization tests#164

Draft
lfagundes wants to merge 7 commits into
masterfrom
characterization-tests
Draft

Characterization tests#164
lfagundes wants to merge 7 commits into
masterfrom
characterization-tests

Conversation

@lfagundes

Copy link
Copy Markdown
Contributor

No description provided.

lfagundes and others added 7 commits July 9, 2026 13:06
pytest + tornado AsyncHTTPTestCase harness running against the real
web.Application with a faked audio backend (no JACK, mod-host or
hardware needed). Covers /files/list behavior (type mapping, extension
filtering, subfolder recursion, ordering, per-request freshness), the
index page render, and the CORS header conventions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CORS: split the hello tests into one allowed-origin base class with the
origin as a class property (subclassed per allowed origin variant) and a
separate foreign-origin class.

Conftest: point MOD_USER_PEDALBOARDS_DIR/MOD_USER_PLUGINS_DIR at the temp
tree (defaults are the real ~/.pedalboards and ~/.lv2), abort the run if
any writable mod.settings path escapes the test root, and document the
routes tests must never call.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Covers favorites, config/set, save_user_id, tokens, banks, system
info/prefs, hello, ping, template loaders, static-file and JSON handler
header conventions. Pins current behavior, including 500s on /auth/nonce
without device credentials, /tokens/save without expires_in_days, and
missing templates, plus the banks.json rewrite side effect of GET /banks/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Save/info/remove/load_bundle round trip against the sandboxed pedalboards
dir under the fake host, plus snapshot list/name/save/saveas behavior
(including the Default snapshot seeded by SESSION.reset).

Key finding recorded in the conftest never-call list: /pedalboard/list and
/banks/ segfault (lilv_new_uri on the uninitialized global lilv world) as
soon as a real pedalboard bundle exists on disk; both are only safe against
an empty pedalboards dir, so the round trip verifies bundle presence via
the filesystem and only lists once the dir is empty again. Conftest also
gains an autouse fixture resetting the pedalboards dir between tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pins webserver handler behavior under FakeHost/FakeHMI (not the production
mod-host protocol): connect/disconnect always true, parameter set
short-circuits on uninitialized HMI, reset, buffersize {ok:false,size:0}
in dev, xruns, midi device shapes (500 on missing body keys), truebypass
false, transport sync modes, cv port add 500 without plugin instances.

/effect/remove/<instance> is added to the never-call list: for any
unregistered instance the KeyError from mapper.get_id_without_creating is
swallowed by the gen.coroutine future in Host.remove_plugin, the callback
never fires, and the request hangs forever.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pins the connect-time report_current_state burst pushed to every socket
(sys_stats, stats, transport, truebypass, loading_start, size, then the
loading_end ready marker), payload shapes for transport/truebypass/size,
the identical burst on a second concurrent connection, and clean client
close tolerance. Prefixes and arg counts only; volatile payloads unpinned.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
/effect/* endpoints need the global lilv world initialized or they
segfault, so these tests are excluded from the default run via markers
(lilv: empty-world behavior; lilv_fixture: a binaryless .lv2 fixture
bundle). LV2_PATH points at an empty sandbox dir for determinism.

Pins: /effect/list -> [], /effect/get on unknown uri -> 404 HTML,
/effect/bulk skips unknown uris and 501s without a JSON content type,
/effect/add on unknown uri mutates host state before failing late with
404. The two marker sets must never run in one process: a second
modtools.utils.init() corrupts lilv's namespace singleton and segfaults
at interpreter exit (documented in pytest.ini and both test modules).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant