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 で構成できるように、公開されているポートを知る方法はありますか?