lift_indicator_suite/tests/host/cli
2026-07-09 09:57:54 +03:00
..
README.md # bootloader: phase 2 + host test docs 2026-07-09 09:57:54 +03:00
test_cli.c # Fixes: unit test mocks + small fixes 2026-07-06 18:10:56 +03:00

test_cli

Модуль под тестом

firmware/test/src/cli.c — построчный разбор JSON-протокола от USB CDC и диспетчеризация команд.

Категория

B — зависит от bsp_usb_cdc, protocol_send_*, test_runner_*, bsp_prov_read_uid, подменяемых через fff.

Моки

bsp_usb_cdc_write/bsp_usb_cdc_read (чтение эмулируется хелпером inject(), который наполняет внутренний буфер «как будто USB» и вызывает cli_process()), protocol_send_pong, protocol_send_error, protocol_send_uid_response, protocol_send_version_response, test_runner_run_all, test_runner_run_single, test_runner_run_selected, test_runner_on_confirm, test_runner_send_list, bsp_prov_read_uid. Кастомные custom_fake (capture_run_single, capture_on_confirm, capture_uid_response, capture_run_selected) копируют строковые аргументы по значению, т.к. cli.c передаёt указатели на собственные локальные буферы, которые становятся dangling после возврата cli_process().

Что проверяется

  • Команды (type: cmd) — ping→pong, run_all→запуск всех, run+id→запуск одного с передачей id, get_uid (успех и ошибка чтения UID), get_version, list_tests, run_selected с массивом id.
  • Подтверждения (type: confirm) — диспетчеризация confirmed: true/false с корректным id.
  • Ошибки протокола — отсутствует type или обязательное поле (id/confirmed/tests) → PARSE_ERR; неизвестный type/cmdUNKNOWN_CMD; строка длиннее CLI_LINE_BUF_SIZELINE_TOO_LONG.
  • Построчный ввод — пустая строка игнорируется, \r\n обрабатывается как \n, две команды в одном чтении диспетчеризуются обе по отдельности.

Гарантии

  • Каждая валидная команда приводит ровно к одному вызову соответствующего обработчика (test_runner_*/protocol_send_*).
  • Любая ошибка парсинга или неизвестная команда отправляет ровно один protocol_send_error() с точным, стабильным кодом ошибки.
  • Построчный парсер корректно разделяет несколько команд в одном чтении и не путает \r\n и \n.
  • Переполнение буфера строки не приводит к падению — возвращается контролируемая ошибка LINE_TOO_LONG.

Запуск

ctest --preset host-debug-test -R test_cli -V