lift_indicator_suite/tests/host/update_policy
2026-07-16 16:17:55 +03:00
..
README.md # bootloader: Phase 3 - checked and done 580e5f5 2026-07-10 15:02:18 +03:00
test_update_policy.c # bootloader: Phase 6 - done 2026-07-16 16:17:55 +03:00

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