active: true
derived: false
groups:
- BGIO
header: |
  BackgroundLoop テスト
level: 2.14
links:
- SPEC014: pkInSzq6O5bGmsKnq9Em7kgUyb1295Ahec124gS5Iyg=
normative: true
ref: ''
references:
- path: tests/integration/core/test_background_loop.py
  type: file
reviewed: iPlwAeEE4q0lc4OcueTUbvHvGVHEAt4hZqKdBXtrYgM=
text: |
  ## 目的

  `_BackgroundLoop` はデーモンスレッドで asyncio イベントループを駆動し、非同期キャッシュ保存を処理する。スレッド間のコルーチン受け渡しは競合状態やデッドロックが発生しやすく、シャットダウン時のタスク消失はデータロスに直結する。

  ## 検証観点

  - **保存の正確性**: `submit(coro)` で投入したコルーチンが正しく実行され、結果がDBとストレージに反映されること
  - **直列化保証**: 同一キーへの保存が投入順に処理され、最終状態が最後に投入されたデータであること
  - **ゾンビスレッド防止**: シャットダウン後にアクティブタスクが `drain_timeout` 秒以内に完了すること。タイムアウト後は強制終了されること
  - **atexit 安全網**: プロセス終了時に atexit ハンドラが発火し、未完了タスクの drain が試行されること
  - **新規受付停止**: シャットダウン後の `submit()` 呼び出しが受け付けられないこと
