podman-compose up -dPostgreSQL, Redis, Ory Kratos, Ory Hydra が起動します。
- Kratos (Identity Management): http://localhost:4433
- Test user: testuser@example.com / testuser
- Hydra (OAuth2/OIDC): http://localhost:4444
cp .env.example .envpodman-compose で PostgreSQL が起動します。手動起動する場合:
podman run --rm --name emumet-postgres -e POSTGRES_PASSWORD=develop -p 5432:5432 docker.io/postgresUser: postgres / Password: develop
ActivityPub 連携の E2E テストは Iceshrimp インスタンスを含む Docker Compose 環境で実行します。
- Docker Compose v2 (または Podman Compose)
- Rust ツールチェーン (cargo)
- openssl (証明書生成用)
- curl (ヘルスチェック用)
# オーバーライドとして使用:
docker compose --profile ap-e2e -f compose.yml -f compose.ap-e2e.yml up -dIceshrimp (iceshrimp.dev/iceshrimp/iceshrimp:v2026.5.1) を含む全サービスが起動します。
nginx リバースプロキシが HTTPS (port 8443) で全ドメインを統一的にルーティング:
| Domain | Backend | 説明 |
|---|---|---|
emumet.127.0.0.1.nip.io:8443 |
host.docker.internal:8080 | Emumet (ホスト実行) |
peer.127.0.0.1.nip.io:8443 |
host.docker.internal:18081 | Mock AP Peer (テスト内実行) |
iceshrimp.127.0.0.1.nip.io:8443 |
iceshrimp:3000 | Iceshrimp (Docker) |
# 全自動: cert生成 → compose起動 → サーバー起動 → テスト実行
bash e2e/run-ap-e2e.sh# 1. 証明書生成
bash e2e/certs/gen-cert.sh
# 2. マスターキーパスワード
echo "develop" > master-key-password && chmod 600 master-key-password
# 3. ビルド
cargo build -p server --features test-mode
# 4. インフラ起動
docker compose --profile ap-e2e -f compose.yml -f compose.ap-e2e.yml up -d
# 5. サーバー起動
export AP_TEST_ALLOWED_FETCH_HOSTS="127.0.0.1,iceshrimp.127.0.0.1.nip.io"
export AP_TEST_ACCEPT_INVALID_CERTS=1
export EMUMET_TEST_MODE_TOKEN=<your-token>
export EMUMET_E2E_EXTERNAL_SERVER=1
export EMUMET_E2E_SERVER_BASE_URL="http://localhost:8080"
export EMUMET_E2E_PUBLIC_BASE_URL="https://emumet.127.0.0.1.nip.io"
export PUBLIC_BASE_URL="https://emumet.127.0.0.1.nip.io"
export ICESHRIMP_BASE_URL="https://iceshrimp.127.0.0.1.nip.io:8443"
cargo run -p server --features test-mode &
# 6. テスト実行
cargo test -p server --test e2e_basic_flow -- --ignored --test-threads=1 --nocapture
cargo test -p server --test e2e_ap_mock -- --ignored --test-threads=1 --nocapture
cargo test -p server --test e2e_ap_iceshrimp -- --ignored --test-threads=1 --nocapture
# 7. 後片付け
kill %1 2>/dev/null; wait 2>/dev/null
docker compose --profile ap-e2e -f compose.yml -f compose.ap-e2e.yml downテスト実行後、クリーンアップ(サーバー停止・コンテナ破棄)の直前に一時停止し、ブラウザから Iceshrimp の状態を確認できるモードです。
EMUMET_E2E_PAUSE_BEFORE_CLEANUP=1 bash e2e/run-ap-e2e.sh停止中にアクセス可能なURL:
| URL | 対象 |
|---|---|
https://iceshrimp.127.0.0.1.nip.io:8443 |
Iceshrimp |
https://emumet.127.0.0.1.nip.io:8443 |
Emumet |
Iceshrimp のテストユーザー認証情報は run-ap-e2e.sh の出力から確認できます(ユーザー名は e2e_<timestamp> 形式、パスワードは test-pass)。確認が終わったら Enter キーを押すとクリーンアップが続行されます。
| ID | テスト | 説明 |
|---|---|---|
| S1 | webfinger_resolves_account |
WebFinger アカウント解決 |
| S2 | actor_document_is_valid_activitypub |
Actor 文書 + publicKey |
| S3 | outbound_follow_sends_activity_to_remote_inbox |
Mock peer への Follow 配送 |
| S4 | inbound_follow_creates_follower_and_sends_accept |
Cavage 署名 Follow → followers 反映 |
| S5 | followers_and_following_collections_are_accurate |
コレクション整合性 |
| S6 | inbox_rejects_unsigned_requests |
未署名リクエスト拒否 |
| S7-S9 | iceshrimp_full_federation_scenario |
クロスインスタンス連携統合: Iceshrimp → Emumet Follow → Emumet → Iceshrimp Follow → 署名付きCreate/Note配送 |
server/tests/
├── e2e_ap_mock.rs # S1-S6 Mock peer テスト
├── e2e_ap_iceshrimp.rs # S7-S9 Iceshrimp 連携テスト
└── support/
├── ap_peer.rs # Mock AP peer + HTTP Signature
├── iceshrimp.rs # Iceshrimp REST API クライアント
├── account_helper.rs # 共通テストヘルパー
├── config.rs # E2E 設定 (env var)
└── server.rs # EmumetServer (ext-server mode)
e2e/
├── run-ap-e2e.sh # 自動ランナー (AP E2E)
├── certs/
│ ├── gen-cert.sh # 証明書生成 (3 SAN ドメイン)
│ └── nginx.conf # nginx リバースプロキシ設定
└── iceshrimp/
└── .config/
├── default.yml # Iceshrimp 設定
└── docker.env # Iceshrimp DB 認証
EMU(Extravehicular Mobility Unit) + Helmet