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 不同。

这是一个先有鸡还是先有蛋的问题。直到容器启动后我才知道端口是什么,然后更新变量为时已晚。

有没有办法知道暴露的端口,所以我可以用正确的 URL 配置容器变量“URLS_SELF_ISSUER”?

4

0 回答 0