Files
Sprinter-SDCC/applications/Volkov/docs/test-media.md
T
snark13 8e389c03f8 Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
2026-09-10 10:45:30 +03:00

91 lines
5.9 KiB
Markdown

# Носители для тестов Commander
Дата: 8 сентября 2026 года.
## Решение
Стандартный носитель интеграционных и нагрузочных тестов Commander —
отдельный FAT16 HDD-образ, подключаемый к MAME как `hard2`. DSS видит его как
диск `D:`; системный `hard1` остаётся диском `C:`.
MAME качественно эмулирует механические задержки FDD. Это полезно для проверки
совместимости, но делает повторяющиеся scan/copy-прогоны на порядок медленнее и
не даёт пользы большинству функциональных тестов. Поэтому FDD `A:` сохраняется
только для отдельных smoke-тестов чтения/запуска с дискеты.
## Образы
Все рабочие образы Commander лежат локально в `build/hdd/` и не подменяют
общий `mame/v306/IMG/test_hdd.chd`:
```sh
make hdd # только SPRCMD.EXE -> build/hdd/sprcmd.chd
make hdd-stress # P3: EMPTY/MANY/BIGDIR -> build/hdd/p3_stress.chd
make hdd-copy # P4: COPYFROM/COPYTO -> build/hdd/p4_copy.chd
make hdd-exec # P4: EXECLEFT/EXECRGHT -> build/hdd/p4_exec.chd
make hdd-p5 # P5: 20 copy + resource cycles -> p5_stability.chd
make hdd-p5-enospc # P5: почти полный HDD -> p5_enospc.chd
make hdd-p5-panels # P5: 27/28 записей -> p5_panel_edges.chd
make hdd-p5-copy-faults # P5: copy/EXEC fault matrix -> p5_copy_faults.chd
make hdd-p5-viewer # P5: SPRCMD + реальный mdview2 -> p5_viewer.chd
make hdd-p5-media # P5: hot-unplug hard2 во время F5 -> p5_media.chd
make hdd-p6-sort # 0.2: target/UI сортировки -> p6_sort.chd
make hdd-p7-select # 0.2: target/UI выбора -> p7_select.chd
make hdd-p8-masks # 0.2: расширение того же образа масками +/−
make hdd-p9-mkdir # 0.2: validator и UI F7 mkdir -> p9_mkdir.chd
make hdd-p10-rename # 0.2: file/dir rename и UI F6 -> p10_rename.chd
make hdd-p11-delete # 0.2: confirm/cancel и UI F8 -> p11_delete.chd
make hdd-p12-group-copy # 0.2: выбранные файлы -> p12_group_copy.chd
make hdd-p13-group-delete # 0.2: выбранные файлы -> p13_group_delete.chd
make hdd-p14-default-colors # UI: dir/EXE/file -> p14_default_colors.chd
make hdd-p15-tree-copy # 0.2: recursive current dir -> p15_tree_copy.chd
make hdd-p15-tree-cancel # 0.2: cancel/cleanup -> p15_tree_cancel.chd
make hdd-p15-tree-self # 0.2: self-target guard -> p15_tree_self.chd
make hdd-p16-group-tree-copy # 0.2: multi-root F5 -> p16_group_tree_copy.chd
make hdd-p17-tree-delete # 0.2: recursive group F8 -> p17_tree_delete.chd
make hdd-p17-tree-delete-cancel # runtime Esc -> p17_tree_delete_cancel.chd
make hdd-p18-metadata # exact FAT metadata F5 -> p18_metadata.chd
make hdd-p19-overwrite # backup/rollback probe -> p19_overwrite.chd
make hdd-p19-policy # UI conflict policy -> p19_policy.chd
```
Сборщик `toolchain/make_hdd.sh` принимает как отдельные файлы, так и готовые
деревья каталогов. Рекурсивное копирование дерева одной командой особенно
важно для `BIGDIR`: 680 файлов не требуют 680 отдельных запусков `mcopy`.
## Запуск и проверка
Lua-сценарий сначала вводит `D:`, а затем запускает `SPRCMD.EXE`. Благодаря
этому текущий диск DSS и оба относительных контекста панелей находятся на
тестовом HDD, а не на системном `C:` или медленном `A:`.
Пример полного теста F5:
```sh
make hdd-copy ALLOCS=3000
tests/run_mame_hdd.sh \
build/hdd/p4_copy.chd tests/mame_p4_copy_hdd.lua \
artifacts/mame-p4/copy-hdd-local 75
tests/check_p4_copy_hdd.sh build/hdd/p4_copy.chd
```
После пересборки CHD MAME требуется полностью перезапустить. Нельзя извлекать
или проверять образ во время работающего MAME: окончательное состояние
валидируется только после чистого выхода эмулятора.
Скриншоты подтверждают состояние интерфейса, но не заменяют файловую
проверку. Для copy-теста после MAME CHD преобразуется обратно в RAW, файлы
извлекаются через mtools и сравниваются с детерминированными шаблонами.
Для EXEC-теста аналогичная тройка команд использует
`tests/mame_p4_exec_hdd.lua` и `tests/check_p4_exec_hdd.sh`. Все имена,
которые должен открыть DSS, задаются в формате 8.3: VFAT long name на образе
не является доступным DSS-именем и может отображаться как alias с `~1`.
Сценарий смены носителя управляет только тестовым `hard2`. Перед запуском
любой автоматизации проверяется, что другого экземпляра MAME Sprinter нет:
одновременный доступ двух процессов к CHD запрещён. После физического unload
DSS может ожидать возврата устройства внутри системного вызова; Lua возвращает
тот же образ, после чего Commander получает управляемую ошибку и продолжает
работу.