tiketit ja featuret vaihe 1
CI — gitea-ci-library / feature (push) Failing after 1s
CI — gitea-ci-library / master (push) Has been skipped

This commit is contained in:
moilanik
2026-06-08 09:34:47 +03:00
parent 2f1e983c9d
commit 9a59cbc185
18 changed files with 1666 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
# 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ö 14 → `{"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