mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-10-17 00:29:19 +02:00
Przygotowanie exe pod środowisko testowe #541
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Zgodnie z #509 chcę już mniej więcej omówić jak środowisko testów automatycznych by mogło wyglądać.
Celem jest możliwość uruchomienia MaSzyny z konkretną scenerią jako ghostview, z nullrendererem i argumentem w commandline, np.
--test, który by przetestował scenerię i zwrócił wynik jako statuscode.Kilka spostrzeżeń:
Wynik testu
albo nieco prościej, używając istniejącego mechanizmu configów:
Stabilność
MaSzyna działa różnie na różnym sprzęcie, i czasem kilkukrotne uruchomienie tego samego scenariusza może dać różny rezultat (co swoją drogą warto poprawić jeżeli tak jest, kroków fizyki chyba zawsze się wywołuje 100 na sekundę). Testy raczej chcemy żeby były deterministyczne i trwały jak najkrócej, więc proponuję prostą pętlę która najszybciej jak to umie wykonuje stałe kroki symulacji bez zważania na czas rzeczywisty.
Proponuję emulowanie działania w 30fps i fizykę w 100Hz, bo im mniej dokładna fizyka tym mniejsza dokładność i tym samym mniejszy margines błędu.
Nie wiem czy uruchamianie exe z nullrendererem pomija nieistotne elementy takie jak wczytywanie tekstur. Nie powinny one być ładowane w trybie testów integracyjnych. Modele 3D chyba być muszą, bo są mierzone do uzyskania niektórych parametrów fizyki. Poprawcie mnie jak się mylę.
Zakres prac (po stronie EXE) dla minimalnego nakładu pracy do rozwinięcia później
__test.result0oznacza porażkę,1sukces, inne wartości ignorowaneevent test_pass PutValues 0 __test.result 0 0 0 * 1 * endevent--testktóry uruchomi tryb testów integracyjnych. W tym trybie:-sjest wymagany-vjest ignorowanynullrendererNadmienię, że do uruchomienia testów lokalnie potrzebna jest również prosta sceneria do testów (duh), a do uruchomienia testów z github api trzeba jakiejś czarnej magii, ale przynajmniej pobranego repo choćby i być może w okrojonej formie (np. bez tekstur, dźwięków czy modeli otoczenia).
Pytania, propozycje - piszcie śmiało.
Na 99% wynikiem testu będzie pozycja pojazdu, natomiast raczej nie wystarczy wywołanie eventu wpuszczonego w tor, bo test może się zaliczyć podczas gdy pociąg AI za chwilę na 100% przewaliłby S1. Może hybryda eventu zaliczenia + wszystkie pociągi stoją będzie wystarczające?
Możemy zrobić event0 na odcinku którego długość będzie buforem dokładności.
Przejechanie S1 jest chyba logowane, więc taka sytuacja automatycznie zakończyłaby scenariusz testowy niepowodzeniem.
Nie jest ale można ogarnąć w kodzie
Jeżeli test trwa zbyt długo, to powinien zostać przerwany z negatywnym wynikiem. Można spróbować kombinację warunków:
żaden pojazd się nie porusza
żaden pociąg AI nie ma nic w tabelce rozkazów
kolejka eventów jest pusta
Można rozpisać w watchdogu, że zakładamy pojawienie się logu wyzwolenia eventu x przez pojazd y w sekundzie a +- b - wtedy widać czy coś się opóźnia na bieżąco - tak trzeba w trybie testowym zapisywać czas z naliczonych kroków
Tutaj płynnie przechodzę do pomysłu że watchdog powinien być jakimś odrębnym programikiem (nawet w pythonie) co analizuje m.in. zużycie ramu procesu maszyny, ew kod zakończenia + stderr, no i analizowałby log.txt względem założeń.
Dokładnie tak pomyślałem. Zgadzam się.
Zgadza się
Analiza pliku log.txt nie jest złym pomysłem. Ale to już nie po stronie exe, do implementacji flow/CI testów jeszcze dojdziemy :)
Natomiast zapisywanie checkpointów to już wyższa szkoła jazdy. Da się zrobić :P