2.5 KiB
2.5 KiB
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.mdtests/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
bats tests/check-version.bats
# FAIL
Green
Toteuta scripts/check-version.sh Fibonacci-backoffilla.
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
check-version.sh <version_api_url> <expected_version>
- Exit 0: versiot täsmäävät
- Exit 1: versiota ei löytynyt
MAX_RETRIESyrityksen 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
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:
- Pyyntö 1–4 →
{"version": "1.2.3.41"}(vanha versio) - 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.ymlversion-check-steppi