@Mohitingale13 poprosił wprost o zadanie programistyczne wychodzące poza dane
o urządzeniach. To jest to zadanie, i nie jest wymyślone na tę okazję — to
prawdziwa luka, przez którą już raz przeszła cicha usterka.
Stan faktyczny
packages/zerosmtp-check nie ma żadnych testów. W package.json pole
scripts jest puste. CI wykonuje trzy sprawdzenia dymne wpisane wprost
w lint.yml: --help, nieistniejący host i --json. To sprawdza, że program
się uruchamia — nie sprawdza, czy odpowiada poprawnie.
Dlaczego to ma znaczenie akurat tutaj
Logika dopasowania błędów już raz zepsuła się po cichu. W wyrażeniu regularnym
szukającym kodu panelu drukarki \b zamieniło się w prawdziwy znak backspace.
Kod wyglądał poprawnie, nic się nie wysypało, a wyszukiwanie przestało cokolwiek
znajdować. Test na jednym znanym kodzie panelu wywaliłby się natychmiast.
Zakres
Cała testowana logika jest czysta — nie potrzeba sieci ani serwera SMTP:
errors.js (166 linii) eksportuje ERRORS i DEVICE_CODES
index.js ma tryb --explain, który dopasowuje wklejony tekst błędu do wpisu
Co zrobić
- Dodaj
packages/zerosmtp-check/test/ z testami na wbudowanym
node:test — bez nowych zależności, CI ma Node 22, który to ma.
- Pokryj co najmniej:
- każdy wpis w
ERRORS jest dopasowywany przez własny ciąg wzorcowy
- kod panelu z
DEVICE_CODES jest znajdowany w tekście, który go zawiera,
i nie jest znajdowany w tekście, który zawiera tylko podobne cyfry
--explain na nieznanym tekście kończy się sensownie, a nie wyjątkiem
- Dodaj
"test": "node --test test/" do scripts w package.json.
- Dopisz krok do zadania
zerosmtp-check w .github/workflows/lint.yml,
który to uruchamia.
Gotowe, gdy
node --test packages/zerosmtp-check/test/ przechodzi lokalnie i w CI, a test
kodów paneli wywala się, jeśli celowo zepsujesz wyrażenie regularne
w index.js. Sprawdź to — bramka, której nie widziałeś jak się wywala, nie
jest sprawdzona.
Uwaga
files w package.json wymienia, co trafia do paczki npm. Katalog testów
nie powinien tam wejść — użytkownik pobiera narzędzie, nie nasze testy.
@Mohitingale13 poprosił wprost o zadanie programistyczne wychodzące poza dane
o urządzeniach. To jest to zadanie, i nie jest wymyślone na tę okazję — to
prawdziwa luka, przez którą już raz przeszła cicha usterka.
Stan faktyczny
packages/zerosmtp-checknie ma żadnych testów. Wpackage.jsonpolescriptsjest puste. CI wykonuje trzy sprawdzenia dymne wpisane wprostw
lint.yml:--help, nieistniejący host i--json. To sprawdza, że programsię uruchamia — nie sprawdza, czy odpowiada poprawnie.
Dlaczego to ma znaczenie akurat tutaj
Logika dopasowania błędów już raz zepsuła się po cichu. W wyrażeniu regularnym
szukającym kodu panelu drukarki
\bzamieniło się w prawdziwy znak backspace.Kod wyglądał poprawnie, nic się nie wysypało, a wyszukiwanie przestało cokolwiek
znajdować. Test na jednym znanym kodzie panelu wywaliłby się natychmiast.
Zakres
Cała testowana logika jest czysta — nie potrzeba sieci ani serwera SMTP:
errors.js(166 linii) eksportujeERRORSiDEVICE_CODESindex.jsma tryb--explain, który dopasowuje wklejony tekst błędu do wpisuCo zrobić
packages/zerosmtp-check/test/z testami na wbudowanymnode:test— bez nowych zależności, CI ma Node 22, który to ma.ERRORSjest dopasowywany przez własny ciąg wzorcowyDEVICE_CODESjest znajdowany w tekście, który go zawiera,i nie jest znajdowany w tekście, który zawiera tylko podobne cyfry
--explainna nieznanym tekście kończy się sensownie, a nie wyjątkiem"test": "node --test test/"doscriptswpackage.json.zerosmtp-checkw.github/workflows/lint.yml,który to uruchamia.
Gotowe, gdy
node --test packages/zerosmtp-check/test/przechodzi lokalnie i w CI, a testkodów paneli wywala się, jeśli celowo zepsujesz wyrażenie regularne
w
index.js. Sprawdź to — bramka, której nie widziałeś jak się wywala, niejest sprawdzona.
Uwaga
fileswpackage.jsonwymienia, co trafia do paczki npm. Katalog testównie powinien tam wejść — użytkownik pobiera narzędzie, nie nasze testy.