Skip to content

test(backend): e2eでDBリセット前にテストサーバーを停止するよう順序を変更し不安定な失敗を解消 - #1314

Draft
4ster1sk wants to merge 2 commits into
yojo-art:developfrom
4ster1sk:fix/e2e-test-server-race
Draft

4ster1sk wants to merge 2 commits into
yojo-art:developfrom
4ster1sk:fix/e2e-test-server-race

Conversation

@4ster1sk

Copy link
Copy Markdown
Contributor

What

backend e2e テストにおいて、DB リセット(initTestDb(false) の dropSchema + synchronize)の前に必ずテストサーバーを停止するよう順序を変更しました。

  • test-server/entry.ts: コントローラーエンドポイントに /dispose/launch を追加
  • test/setup.e2e.ts: stopTestServer() → initTestDb(false) → startTestServer() の順に変更
  • test/utils.ts: stopTestServer() / startTestServer() ヘルパーを追加し、利用されなくなった sendEnvResetRequest() を削除
  • killTestServer() に自プロセスを kill しないガードを追加

Why

2026.6.0 マージ以降、test-backend の E2E が不安定で develop の CI 失敗率が約 3 割に達していました。

各テストファイルの beforeAll では dropSchema + synchronize で全テーブルを再作成しますが、globalSetup のテストサーバーはその間も起動し続けているため、

  • サーバー側の非同期処理が drop 中のテーブルにアクセスして Unhandled Rejection (relation "user" does not exist) となり、テストアノテーション無しでジョブ全体が落ちる
  • サーバーの接続ロックにより DROP がブロックされ、hookTimeout (10s) 超過でファイル単位で落ちる

という 2 形態のフレーキーな失敗が発生していました(例: https://github.com/yojo-art/cherrypick/actions/runs/32644421590 )。

本 PR は DB リセット時にアプリが一切接続を持たない状態を作ることでレースを構造的に排除します。サーバーの再起動は従来も毎ファイル行われていたため、実行時間の増加はありません。

Additional info (optional)

Node v24.18.0 + PostgreSQL 18 + Redis 8 のローカル環境での検証結果:

修正前 修正後
フル E2E (35 files / 1503 tests) Test Files 3 failed(hook timeout ×2 ほか) Test Files 1 failed*
テスト通過数 1286 passed 1471 passed
所要時間 1522s 1098s

* 失敗は endpoints.ts のファイルアップロード 3 テストのみで、Node 24 の undici における FormData ブランドチェックの問題です。

なお move.ts がファイル内で initTestDb(false) を呼ぶ箇所は既存パターンとして残っていますが、今回の実行では問題は観測されていません。

Checklist

  • コントリビューションガイドを読みました( Read the contribution guide)
  • ローカル環境で動作しました(Test working in a local environment)
  • (必要なら)CHANGELOG_YOJO.mdの更新((If needed) Update CHANGELOG_YOJO.md)
  • (必要なら)テストの追加((If possible) Add tests)

各テストファイルの beforeAll では initTestDb(false) が
dropSchema + synchronize で全テーブルを再作成するが、
globalSetup のテストサーバーはその間も起動し続けているため、

- サーバー側の非同期処理が drop 中のテーブルにアクセスして
  Unhandled Rejection (relation "user" does not exist) となり
  テストアノテーション無しでジョブ全体が落ちる
- サーバーの接続ロックにより DROP がブロックされ
  hookTimeout (10s) 超過でファイル単位で落ちる

という2形態のフレーキーな失敗が発生していた。

テストサーバーのコントローラーエンドポイントに /dispose と
/launch を追加し、setup.e2e.ts を「サーバー停止 → DBリセット →
サーバー起動」の順に変更することで、DB リセット時にアプリが
接続を持たない状態を作りレースを構造的に排除する。
併せて使用されなくなった /env-reset と sendEnvResetRequest を削除し、
killTestServer が自プロセスを kill しないようにガードを追加した。
@codecov

codecov Bot commented Aug 24, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 23.28%. Comparing base (2fb73f0) to head (f528b3a).
⚠️ Report is 2 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #1314      +/-   ##
===========================================
+ Coverage    23.14%   23.28%   +0.14%     
===========================================
  Files         1259     1259              
  Lines        48348    48348              
  Branches     14258    14259       +1     
===========================================
+ Hits         11188    11257      +69     
+ Misses       29335    29274      -61     
+ Partials      7825     7817       -8     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Backend memory usage comparison

Before GC

Metric base (MB) head (MB) Diff (MB) Diff (%)
VmRSS 427.37 MB 439.55 MB +12.18 MB +2.85%
VmHWM 427.37 MB 439.55 MB +12.18 MB +2.85%
VmSize 3208.26 MB 3221.59 MB +13.33 MB +0.41%
VmData 2009.90 MB 2021.73 MB +11.82 MB +0.58%

After GC

Metric base (MB) head (MB) Diff (MB) Diff (%)
VmRSS 427.37 MB 439.55 MB +12.18 MB +2.85%
VmHWM 427.37 MB 439.55 MB +12.18 MB +2.85%
VmSize 3208.26 MB 3221.59 MB +13.33 MB +0.41%
VmData 2009.90 MB 2021.73 MB +11.82 MB +0.58%

After Request

Metric base (MB) head (MB) Diff (MB) Diff (%)
VmRSS 427.10 MB 439.44 MB +12.34 MB +2.88%
VmHWM 427.45 MB 439.57 MB +12.12 MB +2.83%
VmSize 3208.26 MB 3221.59 MB +13.33 MB +0.41%
VmData 2009.90 MB 2021.73 MB +11.82 MB +0.58%

See workflow logs for details

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

このPRによるapi.jsonの差分
差分はありません。
Get diff files from Workflow Page

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant