Files
gitea-ci-library/docs/tickets/0011-check-version-sh.md
moilanik 9a59cbc185
CI — gitea-ci-library / feature (push) Failing after 1s
CI — gitea-ci-library / master (push) Has been skipped
tiketit ja featuret vaihe 1
2026-06-08 09:34:47 +03:00

2.5 KiB
Raw Permalink Blame History

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
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_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

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.mdtest.yml version-check-steppi