3.2 KiB
3.2 KiB
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в конце строки. - Timestamp —
log_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