diff --git a/tests/e2e/run.sh b/tests/e2e/run.sh index 046baef..5413ac7 100644 --- a/tests/e2e/run.sh +++ b/tests/e2e/run.sh @@ -199,6 +199,9 @@ echo " $(systemd-analyze time 2>/dev/null | head -1 || echo 'systemd-analyze н # ---- power-safe (v0.3): FSM ShutdownImminent + N циклов зажигания + abort + power-cut ---- info "power-safe: ShutdownImminent + N=3 цикла зажигания + abort + power-cut" # Чистый FSM Running для циклов (свежий бинарь + сброс любого «залипшего» состояния от §5 fake-ACC). +# reset-failed: блок ниже намеренно рестартит power N+ раз — сбрасываем счётчик StartLimitBurst (дефолт 5/10s), +# иначе systemd ловит start-limit-hit и power падает в failed (имя ru.shturman.Power на шине теряется). +sudo systemctl reset-failed shturman-power.service shturman-settings.service 2>/dev/null || true sudo systemctl restart shturman-power.service for _ in $(seq 1 10); do systemctl is-active --quiet shturman-power && break; sleep 1; done sleep 1 # дать power re-acquire ru.shturman.Power на шине @@ -223,8 +226,13 @@ for i in 1 2 3; do sudo umount /etc/machine-id 2>/dev/null || true # снять machineid-bind, иначе /data busy sync; sudo umount /data || fail "цикл $i: umount /data (PONR)" findmnt /data >/dev/null && fail "цикл $i: /data не размонтирован (PONR не достигнут)" - sudo systemctl start shturman.target # re-mount data.mount + сервисы (machineid re-bind) - for _ in $(seq 1 15); do systemctl is-active --quiet shturman-settings && break; sleep 1; done + sudo systemctl reset-failed shturman-power.service shturman-settings.service 2>/dev/null || true + sudo systemctl start shturman.target # re-mount data.mount + сервисы + # machineid — oneshot RemainAfterExit (уже active): plain start его НЕ перезапускает, bind не вернётся. + # restart форсит ExecStart → пере-bind /data/state/machine-id поверх снятого выше. Без этого /etc/machine-id + # залипает на нижнем rootfs-значении, и POST-чек стабильности machine-id (§9.3.4) падает после reboot. + sudo systemctl restart shturman-machineid.service + for _ in $(seq 1 15); do systemctl is-active --quiet shturman-settings && systemctl is-active --quiet shturman-power && break; sleep 1; done findmnt /data >/dev/null || fail "цикл $i: /data не вернулся после remount" echo "$n" | sudo tee /data/state/power-cycles >/dev/null pass "цикл зажигания $i: stop→umount(PONR)→remount→restart, /data вернулся" @@ -254,8 +262,10 @@ sudo umount /etc/machine-id 2>/dev/null || true sudo umount /data 2>/dev/null || sudo umount -l /data 2>/dev/null || true findmnt /data >/dev/null && fail "power-cut: /data не размонтирован (fsck был бы на смонтированном)" sudo fsck.ext4 -n /var/lib/shturman/data.img >/dev/null 2>&1 || fail "fsck /data не clean после power-cut" +sudo systemctl reset-failed shturman-power.service shturman-settings.service 2>/dev/null || true sudo systemctl start shturman.target # re-mount + restart -for _ in $(seq 1 15); do systemctl is-active --quiet shturman-settings && break; sleep 1; done +sudo systemctl restart shturman-machineid.service # пере-bind machine-id (plain start не перезапускает oneshot — см. цикл) +for _ in $(seq 1 15); do systemctl is-active --quiet shturman-settings && systemctl is-active --quiet shturman-power && break; sleep 1; done sudo grep -q night /data/settings/settings.json || fail "last durable value потерян после power-cut" pass "power-cut-сим: /data консистентен (fsck clean, night present)"