104 lines
2.5 KiB
Markdown
104 lines
2.5 KiB
Markdown
# 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 <version_api_url> <expected_version>
|
||
```
|
||
|
||
- 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
|