Naprawa CI: testy awarii magazynu nie mogą zależeć od praw pliku #73

Merged
gitea merged 1 commits from fix/testy-magazynu-jako-root into master 2026-08-11 14:38:15 +00:00
Owner

Dwa testy z #71 przechodziły lokalnie i padały w CI. Przyczyna nie miała nic wspólnego z badaną rzeczą.

Wymuszały awarię przez chmod 000 i chmod 555, a CI działa jako root — root omija bity uprawnień w Linuksie. Odczyt i zapis się udawały, więc asercje leciały na komunikat, którego nie było. Widać to zresztą w samym logu: /tmp/pytest-of-root/…, a drugi test dostał Założono konto „ala” zamiast odmowy.

Lokalnie działałem jako zwykły użytkownik (uid 501), więc prawa obowiązywały.

Dlaczego to poważniejsze niż literówka

Test zależny od tego, kto go uruchamia, jest gorszy niż jego brak: daje fałszywe poczucie pokrycia i zapala się w miejscu niezwiązanym z tym, co sprawdza.

Co teraz

Awarię wymuszamy podmianą dokładnie tego punktu, w którym system plików mówi „nie":

  • odczyt pliku kont — osłona przepuszcza wszystko inne, żeby szablony nadal się wczytywały
  • mkstemp przy zapisie — celowo właśnie ono, bo przy katalogu tylko do odczytu wywala się pierwsze, jeszcze zanim dojdzie do zapisu i podmiany. Tego dotyczyła naprawiana poprawka.

Podmiana jest przy okazji celniejsza: sprawdza wprost ten punkt, zamiast liczyć, że da się do niego zmusić system plików.

Sprawdzian na prawdziwych prawach zostaje, z skipif przy uruchomieniu z roota — jako kontrola, że podmiana odpowiada rzeczywistości, a nie tylko sama sobie. W CI się nie wykona i to jest w porządku: znaczyłby tam tyle co nic.

Sprawdziłem też, czy nie mam tej samej miny gdzie indziej — chmod/geteuid nie występują w żadnym innym teście.

Weryfikacja

Prezentacja 303, dane 32, logika 342, render 41 — zielone.

🤖 Generated with Claude Code

Dwa testy z #71 przechodziły lokalnie i padały w CI. **Przyczyna nie miała nic wspólnego z badaną rzeczą.** Wymuszały awarię przez `chmod 000` i `chmod 555`, a **CI działa jako root** — root omija bity uprawnień w Linuksie. Odczyt i zapis się udawały, więc asercje leciały na komunikat, którego nie było. Widać to zresztą w samym logu: `/tmp/pytest-of-root/…`, a drugi test dostał `Założono konto „ala”` zamiast odmowy. Lokalnie działałem jako zwykły użytkownik (`uid 501`), więc prawa obowiązywały. ## Dlaczego to poważniejsze niż literówka Test zależny od tego, **kto go uruchamia**, jest gorszy niż jego brak: daje fałszywe poczucie pokrycia i zapala się w miejscu niezwiązanym z tym, co sprawdza. ## Co teraz Awarię wymuszamy podmianą dokładnie tego punktu, w którym system plików mówi „nie": - **odczyt pliku kont** — osłona przepuszcza wszystko inne, żeby szablony nadal się wczytywały - **`mkstemp` przy zapisie** — celowo właśnie ono, bo przy katalogu tylko do odczytu wywala się **pierwsze**, jeszcze zanim dojdzie do zapisu i podmiany. Tego dotyczyła naprawiana poprawka. Podmiana jest przy okazji celniejsza: sprawdza wprost ten punkt, zamiast liczyć, że da się do niego zmusić system plików. Sprawdzian na **prawdziwych prawach zostaje**, z `skipif` przy uruchomieniu z roota — jako kontrola, że podmiana odpowiada rzeczywistości, a nie tylko sama sobie. W CI się nie wykona i to jest w porządku: znaczyłby tam tyle co nic. Sprawdziłem też, czy nie mam tej samej miny gdzie indziej — `chmod`/`geteuid` nie występują w żadnym innym teście. ## Weryfikacja Prezentacja 303, dane 32, logika 342, render 41 — zielone. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
gitea added 1 commit 2026-08-11 12:40:43 +00:00
fix(testy): awaria magazynu kont wymuszana podmianą, nie prawami pliku
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 10m31s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m29s
Testy / Testy warstwy bazodanowej (ochrona baz) (pull_request) Successful in 9m25s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 7s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 6s
Testy / Testy warstwy logicznej (silnik) (push) Successful in 10m26s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m29s
Testy / Testy warstwy bazodanowej (ochrona baz) (push) Successful in 9m25s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 7s
Testy / Kontrola składni wszystkich warstw (push) Successful in 5s
0a1a0a3499
Dwa testy z PR #71 przechodziły lokalnie i padały w CI. Przyczyna nie miała nic
wspólnego z badaną rzeczą: wymuszały awarię przez chmod 000 i chmod 555, a CI
działa jako ROOT — root omija bity uprawnień w Linuksie, więc odczyt i zapis się
udawały i asercje leciały na komunikat, którego nie było.

Test zależny od tego, KTO go uruchamia, jest gorszy niż jego brak: daje fałszywe
poczucie pokrycia i zapala się w miejscu niezwiązanym z tym, co sprawdza.

Teraz awarię wymuszamy podmianą dokładnie tego punktu, w którym system plików
mówi „nie": odczytu pliku kont (osłona przepuszcza wszystko inne, żeby szablony
nadal się wczytywały) oraz mkstemp przy zapisie. To drugie jest celowe — mkstemp
wywala się PIERWSZY przy katalogu tylko do odczytu, jeszcze zanim dojdzie do
zapisu i podmiany, i właśnie tego dotyczyła naprawiana poprawka.

Sprawdzian na PRAWDZIWYCH prawach zostaje, ale z pominięciem przy uruchomieniu
z roota — jako kontrola, że podmiana odpowiada rzeczywistości, a nie tylko sama
sobie. W CI się nie wykona i to jest w porządku: znaczyłby tam tyle co nic.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gitea merged commit ee3c515d59 into master 2026-08-11 14:38:15 +00:00
gitea deleted branch fix/testy-magazynu-jako-root 2026-08-11 14:38:15 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gitea/astrololo#73