Skip to content

ShuttlePub/Emumet

Repository files navigation

Emumet

Setup

Services

podman-compose up -d

PostgreSQL, Redis, Ory Kratos, Ory Hydra が起動します。

Auth: Ory Kratos + Hydra

Environment

cp .env.example .env

DB

podman-compose で PostgreSQL が起動します。手動起動する場合:

podman run --rm --name emumet-postgres -e POSTGRES_PASSWORD=develop -p 5432:5432 docker.io/postgres

User: postgres / Password: develop

ActivityPub Federation E2E Tests

ActivityPub 連携の E2E テストは Iceshrimp インスタンスを含む Docker Compose 環境で実行します。

Prerequisites

  • Docker Compose v2 (または Podman Compose)
  • Rust ツールチェーン (cargo)
  • openssl (証明書生成用)
  • curl (ヘルスチェック用)

インフラ構成 (compose.ap-e2e.yml)

# オーバーライドとして使用:
docker compose --profile ap-e2e -f compose.yml -f compose.ap-e2e.yml up -d

Iceshrimp (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

Pause Before Cleanup Mode

テスト実行後、クリーンアップ(サーバー停止・コンテナ破棄)の直前に一時停止し、ブラウザから 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 認証

Etymology

EMU(Extravehicular Mobility Unit) + Helmet

About

👪Account Service for ShuttlePub🚀

Resources

License

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages