# Ticket 0011: `check-version.sh` (Fibonacci-backoff) **Vaihe:** 11/12 **Status:** pending **Feature branch:** `feature/0011-check-version-sh` **TDD required:** Yes **Feature file required:** Yes **Required context:** - `docs/test-plan/tdd-guide.md` - `tests/features/0011-check-version.feature` - Skills: `tdd`, `implementation`, `clean-code`, `bash-script` --- ## TDD — Red-Green-Refactor ### Red Kirjoita `tests/check-version.bats` mock-API:a vasten: - Mock palauttaa oikean version 5. yrityksellä → exit 0 - Mock ei koskaan palauta oikeaa versiota → exit 1 (MAX_RETRIES täyttyy) - Fibonacci-välit: 1 2 3 5 8 13 ... (tarkista sleep-kutsut) - API ei vastaa (timeout) → exit 1 - Tyhjä URL → exit 1 ```bash bats tests/check-version.bats # FAIL ``` ### Green Toteuta `scripts/check-version.sh` Fibonacci-backoffilla. ```bash bats tests/check-version.bats # PASS ``` ### Refactor Varmista curl-aikakatkaisu, paranna lokitusta. ## DoD - [ ] Cucumber: `@ticket-0011 and @mock` → kaikki skenaariot GREEN - [ ] `tests/check-version.bats` — kaikki testit läpi - [ ] Fibonacci-sekvenssi: 1 2 3 5 8 13 21 34 55 89 - [ ] Maksimiaika ~231 s, MAX_RETRIES=10 - [ ] Exit 0: versio löytyi, exit 1: ei löytynyt --- ## Toiminto Pollaa ympäristössä deployatun konttiversion API:a Fibonacci-backoffilla, kunnes haluttu versio on havaittu. Kutsutaan `test.yml`:n `version-check`-stepistä ennen testien ajoa. ## Rajapinta ```bash check-version.sh ``` - Exit 0: versiot täsmäävät - Exit 1: versiota ei löytynyt `MAX_RETRIES` yrityksen jälkeen ## Fibonacci-sekvenssi ``` 1s → 2s → 3s → 5s → 8s → 13s → 21s → 34s → 55s → 89s ``` Maksimiaika: ~231 sekuntia (1+2+3+5+8+13+21+34+55+89). ## Pseudokoodi ```bash MAX_RETRIES=10 FIB=(1 2 3 5 8 13 21 34 55 89) for i in $(seq 1 $MAX_RETRIES); do ACTUAL=$(curl -s "$URL" | jq -r '.version // empty') if [ "$ACTUAL" = "$EXPECTED" ]; then echo "Version match: $ACTUAL" exit 0 fi echo "Attempt $i/$MAX_RETRIES: $ACTUAL != $EXPECTED, waiting ${FIB[$i-1]}s..." sleep ${FIB[$i-1]} done echo "Version mismatch after $MAX_RETRIES attempts" exit 1 ``` ## Verifiointi Mock-API, jossa: 1. Pyyntö 1–4 → `{"version": "1.2.3.41"}` (vanha versio) 2. Pyyntö 5 → `{"version": "1.2.3.42"}` (odotettu versio) Skripti pollaa ja löytää oikean version 5. yrityksellä → exit 0. ## Viitteet - `docs/config-model.md` — Version check (Fibonacci-backoff) - `docs/workflows.md` — `test.yml` version-check-steppi