lift_indicator_suite/tests/host/log
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_log.c # 10 2026-03-23 12:19:39 +03:00

test_log

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

utils/log/log.c (utils/log/log.h)

Категория

A с fff-хуками — log.c не зависит от fsl_*.h, но имеет weak-хуки (mutex, timestamp), которые в тесте переопределяются строгими fff-фейками; линковщик выбирает их поверх слабых реализаций из log.c автоматически.

Моки

  • log_mutex_init / log_mutex_lock / log_mutex_unlock — fff void-фейки, переопределяющие weak-реализации. Для проверки порядка вызовов lock/unlock используют custom_fake, инкрементирующий общий монотонный счётчик.
  • log_get_timestamp_ms — fff value-фейк, управляет значением метки времени в выводе.
  • capture_cb — тестовый callback вместо реального UART-транспорта: сохраняет содержимое и длину каждого вызова в g_s_capture для проверки через strstr().

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

  • Init — отсутствие вывода до log_init() и при NULL-callback; callback вызывается один раз на каждый LOG_*; повторный log_init() заменяет предыдущий callback.
  • Output — наличие символа уровня ([E]/[W]/[I]/[D]/[V]), тега, текста сообщения (включая форматирование с аргументами) и \r\n в конце строки.
  • Timestamplog_get_timestamp_ms() вызывается ровно один раз на каждый LOG_*, возвращённое значение попадает в вывод.
  • Overflow — строка длиннее LOG_BUF_SIZE (256 байт) обрезается, callback не получает больше LOG_BUF_SIZE байт, \r\n сохраняется в конце даже при обрезке.
  • Mutex — порядок lock → callback → unlock проверяется через монотонный счётчик последовательности; lock/unlock вызываются ровно один раз на лог.
  • Context — указатель контекста, переданный в log_init(), доходит до callback без изменений (NULL и ненулевой указатель).

Гарантии

  • Без вызова log_init() (или с NULL-callback) логгер не производит вывод.
  • Вывод никогда не превышает LOG_BUF_SIZE байт и всегда заканчивается \r\n, даже при переполнении входной строки.
  • Каждый лог-вызов оборачивается ровно одной парой lock/unlock, callback вызывается строго между ними.
  • Контекст, переданный в log_init(), не искажается при передаче в callback.

Запуск

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