| .. | ||
| README.md | ||
| test_update_policy.c | ||
test_update_policy
Модуль под тестом
firmware/bootloader/src/update_policy.c (update_policy.h) — чистая
логика решения «устанавливать ли SD-кандидат и в какой слот», без
аппаратных зависимостей (flash/FatFS). Часть Фазы 3 (SD update path), см.
firmware/bootloader/PLAN.md.
Категория
A — платформонезависимый модуль. Зависит только от типа
struct image_version из bootutil/image.h, сам bootutil не линкуется.
Только Unity.
Моки
Нет — тестируется напрямую, без фейков/стабов. Для сборки нужны только
include-пути до bootutil/image.h (mcuboot_config), реальный bootutil
в тест не линкуется.
Что проверяется
- image_version_compare() — старшинство
majorпобеждаетminorпобеждаетrevision;build_numигнорируется (версии, отличающиеся только номером сборки, считаются равными). - update_policy_decide() — нет валидных слотов — установка по умолчанию в Slot A.
- Валиден только Slot Б — установка всё равно в Slot A, т.к. активный слот — валидный Slot Б, а целевой слот установки всегда не активный.
- Кандидат новее активного — установка в неактивный слот.
- Кандидат старше/равен активному без удержания кнопки —
SKIP. - Кандидат старше активного с удержанием кнопки (форсированный
даунгрейд) —
INSTALL. - Кандидат равен активному с удержанием кнопки — всё равно
SKIP(переустановка той же версии не форсируется). - Оба слота валидны — активным считается слот с более высокой версией, установка идёт в другой.
Гарантии
- Целевой слот установки всегда противоположен активному — активный слот решением никогда не затрагивается.
- При отсутствии валидных слотов по умолчанию выбирается Slot A.
- Форсированный даунгрейд возможен только явным удержанием кнопки и только если кандидат строго старше активного — при равенстве версий переустановка не форсируется.
- Сравнение версий игнорирует
build_num— тот же контракт, что уboot_version_cmp()вbootutil/loader.c.
Запуск
ctest --preset host-debug-test -R test_update_policy -V