active: true
derived: false
groups:
- LIMIT
header: |
  TokenBucket テスト
level: 2.18
links:
- SPEC018: 9V3ZL1YmsyAAkEPOT3n03pex9KYUI2udZcsUYYKIYNY=
normative: true
ref: ''
references:
- path: tests/unit/test_limiter.py
  type: file
reviewed: 2qyTcso1fylOxxf0M1eHC6-cmw4T9swgMSx9zwTty2I=
text: |
  ## 目的

  `TokenBucket` はAPI呼び出しやリソースアクセスのレート制限を実現する。レートリミッターの不具合はAPIの過負荷（制限が甘い場合）やスループットの不必要な低下（制限が厳しすぎる場合）を招く。GCRA アルゴリズムのスムーズなレート制御を検証する。

  ## 検証観点

  - **初期化バリデーション**: rate ≤ 0 や capacity ≤ 0 などの不正パラメータが拒否されること
  - **max_cost 超過拒否**: 1回のリクエストコストがバケット容量を超える場合に即座に拒否されること（無限待機にならないこと）
  - **GCRA 待機動作**: バケットが空の状態でリクエストした場合に、トークン補充まで適切な時間だけ待機すること。待機時間がレートに基づいて正確であること
  - **バースト許容**: 容量分のリクエストがバーストで処理でき、超過分からスロットリングが開始されること
