ComfyUI/tests-unit
Vishnu Jayavel 3b5af89abf Fix confusing ValueError when VAELoader (aimdo mmap path) reads a truncated safetensors file
comfy.utils.load_safetensors() (used by VAELoader and other loaders when
the DynamicVRAM/aimdo backend is active) never validated that the
memory-mapped file actually contained as many bytes as the safetensors
header declared. When a .safetensors file was truncated -- e.g. still
downloading, or an interrupted/partial download -- Python's silent slice
clipping handed torch.frombuffer() a short buffer, producing the
inscrutable low-level error:

    ValueError: buffer length (N bytes) after offset (0 bytes) must be
    a multiple of element size (4)

instead of the clear "corrupt/incomplete file" message already produced
by the sibling (non-aimdo) safetensors.safe_open() code path for the same
underlying condition.

This adds an explicit bounds check against the header's declared data
size and raises the same friendly, actionable ValueError used elsewhere
in load_torch_file() for corrupt/incomplete files.

Fixes #14784 (reported by xnx20050723-lgtm).

Since comfy_aimdo's ModelMMAP requires a compiled, GPU-platform-specific
native backend unavailable in CI/dev environments without a real GPU, the
added test monkeypatches ModelMMAP with a fake backed by a real,
synthetic, truncated safetensors buffer, letting
comfy.utils.load_safetensors() itself be exercised deterministically.
Verified revert-proof: reverting the fix reproduces the exact reported
error string, `buffer length (37 bytes) after offset (0 bytes) must be a
multiple of element size (4)`.
2026-07-17 00:19:27 -07:00
..
app_test feat(api): expose registered extension filters on /experiment/models (#14797) 2026-07-09 12:59:30 -07:00
assets_test feat(assets): add namespaced model_type tags and align tag semantics (#14511) 2026-07-08 22:00:08 -07:00
comfy_api_test fix(Video): stream the video transcode instead of buffering every frame in RAM (CORE-353) (CORE-351) (#14813) 2026-07-15 15:23:43 +08:00
comfy_extras_test Add SeedVR2 support (CORE-6) (#14424) 2026-07-10 15:07:42 +08:00
comfy_quant Support convrot int4 models. (#14859) 2026-07-09 18:57:09 -04:00
comfy_test Fix confusing ValueError when VAELoader (aimdo mmap path) reads a truncated safetensors file 2026-07-17 00:19:27 -07:00
execution_test feat(assets): include asset id in executed WebSocket message (#13862) 2026-06-10 17:04:52 -07:00
folder_paths_test feat(security): add System User protection with `__` prefix (#10966) 2025-11-28 21:28:42 -05:00
jobs_cancel_test Add jobs-namespace cancel endpoints (POST /api/jobs/{job_id}/cancel, POST /api/jobs/cancel) (#14493) 2026-06-19 16:39:35 -07:00
prompt_server_test fix: return millisecond timestamps from get_file_info() (#12996) 2026-05-06 10:56:09 +08:00
security_test security: fix four vulnerabilities (GHSA-779p-m5rp-r4h4) (#14734) 2026-07-02 20:44:54 -07:00
seeder_test feat(assets): register output files as assets after prompt execution (#12812) 2026-03-24 20:48:55 -07:00
server/utils Remove unused GET /files API endpoint (#6714) 2025-02-05 18:48:36 -05:00
server_test fix: use no-store cache headers to prevent stale frontend chunks (#12911) 2026-03-14 18:25:09 -04:00
utils Normalize extra_model_config.yaml paths to prevent duplicates. (#6885) 2025-02-20 07:09:45 -05:00
README.md Minor: update tests-unit README.md (#4896) 2024-09-12 04:53:08 -04:00
deploy_environment_test.py Add deploy environment header (Comfy-Env) to partner node API calls (#13425) 2026-05-04 20:17:56 -07:00
feature_flags_test.py feat: allow --comfy-api-base target ephemeral testenvs (#14569) 2026-07-08 23:20:10 -07:00
requirements.txt refactor(assets): modular architecture + async two-phase scanner & background seeder (#12621) 2026-03-07 20:37:25 -05:00
websocket_feature_flags_test.py feat(assets): add namespaced model_type tags and align tag semantics (#14511) 2026-07-08 22:00:08 -07:00

README.md

Pytest Unit Tests

Install test dependencies

pip install -r tests-unit/requirements.txt

Run tests

pytest tests-unit/