0

Junit 4 テストで Oryd/Hydra コンテナーを作成するテストコンテナーがあります。

@Bean
public GenericContainer hydra() {
    WaitStrategy waitStrategy = Wait.forHttp("/health/ready").forStatusCode(200);

    GenericContainer hydra =
        new GenericContainer("oryd/hydra:1.4.8")
            .withCommand("serve all --dangerous-force-http")
            .withEnv("URLS_SELF_ISSUER", "http://127.0.0.1:4444/")
            .withEnv("DSN", "memory")
            .withEnv("SECRETS_SYSTEM", "youReallyNeedToChangeThis")
            .withEnv("OIDC_SUBJECT_IDENTIFIERS_SUPPORTED_TYPES", "public,pairwise")
            .withEnv("OIDC_SUBJECT_IDENTIFIERS_PAIRWISE_SALT", "youReallyNeedToChangeThis")
            .withEnv("STRATEGIES_ACCESS_TOKEN", "jwt")
            .withEnv("OIDC_SUBJECT_IDENTIFIERS_SUPPORTED_TYPES", "public")
            .withEnv("URLS_CONSENT", "http://127.0.0.1:3000/consent")
            .withEnv("URLS_LOGIN", "http://127.0.0.1:3000/login")
            .withExposedPorts(4444, 4445)
            .waitingFor(waitStrategy)
            .withNetwork(network)
            .withLogConsumer(consumer);
    hydra.start();
    return hydra;
}

問題は、環境変数「URLS_SELF_ISSUER」にあります。Hydra サーバーのクライアントは、サーバーの URL が「URLS_SELF_ISSUER」の値と一致することを検証します。その値はクライアントに公開されている URL と一致する必要がありますが、testcontainers は公開ポート 4444 をランダムなポートにバインドします。そのため、ほとんどの場合、URL は 127.0.0.1:4444 とは異なります。

これは鶏が先か卵が先かの問題です。コンテナーが起動するまでポートが何であるかはわかりません。変数を更新するには遅すぎます。

コンテナー変数「URLS_SELF_ISSUER」を正しい URL で構成できるように、公開されているポートを知る方法はありますか?

4

0 に答える 0