リモート実行テストは、アプリサーバーと実行サーバーの分割をテストし、エージェント機能がローカルおよびリモート実行環境の両方で動作することを確認します。
リモート実行テストには現在、x86_64 Linuxホストマシンが必要です。次の2つの種類があります:
- Docker(Linux exec-server)
- Wine(Windows exec-server)
テストフィクスチャ
個々のテストケースはリモート実行環境でのテストに明示的にオプトインする必要があります。
codex_core
コア統合テストでリモート実行を有効にするには、TestCodexBuilder::build_with_auto_env() を使用します。ただし、テストで実行環境をより細かく制御する必要がある場合は除きます。
app-server
TestAppServer::new_with_auto_env() を使用してサーバーを起動します。ただし、テストが独自の $CODEX_HOME/environments.toml を定義する場合、または実行時にカスタム環境を定義する場合は除きます。
auto_env アプローチでサーバーを作成した場合は、TestAppServer::send_thread_start_request_with_auto_env() を使用してスレッドを開始します。その際、ThreadStartParams.environments は省略(None のまま)します。
テストスキップ
特定のリモート実行環境設定でテストがパスしない場合、その設定のみテストをスキップできます。選択したスキップマクロが対応している場合は、将来の読者のために理由を示す文字列を含めてください。
テストが失敗する原因に応じてスキップマクロを選択します:
skip_if_target_windows!:Windowsターゲットの動作。skip_if_wine_exec!:Wine実行環境の制約。skip_if_host_windows!:Windowsホストの制約。skip_if_remote!:ローカル専用テストの動作。skip_if_no_remote_env!:リモート専用テストの動作。
デフォルトでは、すべてのホスト/ターゲット設定で動作するテストを定義することを推奨します。テストを互換性のあるものにするために必要な最も一般的な変更については、$path-types スキルを参照してください。
Docker
Dockerコンテナは、./scripts/test-remote-env.sh を使用してビルドおよび初期化されます。このスクリプトをbashでソースすると、テスト後に使用する codex_remote_env_cleanup 関数も利用可能になります。
Dockerリモート実行環境に対してコア統合テストを実行するには:
bash -c '
set -euo pipefail
unset CODEX_TEST_REMOTE_EXEC_SERVER_URL
source scripts/test-remote-env.sh
trap codex_remote_env_cleanup EXIT
cd codex-rs
just test -p codex-core --test all
'
Dockerリモート実行環境に対してアプリサーバー統合テストを実行するには:
bash -c '
set -euo pipefail
unset CODEX_TEST_REMOTE_EXEC_SERVER_URL
source scripts/test-remote-env.sh
trap codex_remote_env_cleanup EXIT
cd codex-rs
just test -p codex-app-server --test all
'
Wine
これらのテストはWindows用のexec-serverをビルドし、Wineで実行します。アプリサーバーはLinuxホスト上に残ります。クロスプラットフォームビルドの依存関係があるため、これらのテストはBazelでのみ実行されます。
コア統合テストの場合:
bazel test //codex-rs/core:core-all-wine-exec-test
アプリサーバー統合テストの場合:
bazel test //codex-rs/app-server:app-server-all-wine-exec-test
Devbox
macOSマシンで実行している場合、devboxを使用してこれらのテストを実行できます。
applied_devbox ls でdevboxを一覧表示し、名前に codex が含まれるものを選択します。
ssh <devbox_name> でdevboxに接続します。
~/code/codex にある同じcodexのチェックアウトを再利用します。必要に応じてファイルをリセットします。複数のチェックアウトがあるとビルドに時間がかかり、ディスク容量も増えます。
SHAと変更されたファイルがリモートとローカルで同期していることを確認します。