标签: testcontainers

java.lang.IllegalStateException:无法连接到 localhost:49167 的 Ryuk

我正在使用测试容器库来启动容器。它工作了一段时间,但目前遇到了这个

java.lang.IllegalStateException: Could not connect to Ryuk at localhost:49167

    at org.testcontainers.utility.ResourceReaper.start(ResourceReaper.java:201)
    at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:205)
    at org.testcontainers.LazyDockerClient.getDockerClient(LazyDockerClient.java:14)
    at org.testcontainers.LazyDockerClient.authConfig(LazyDockerClient.java:12)
    at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:310)
Run Code Online (Sandbox Code Playgroud)

我查看了资源收割机代码,它似乎在这里失败了

public synchronized void performCleanup() {
    this.registeredContainers.forEach(this::stopContainer);
    this.registeredNetworks.forEach(this::removeNetwork); //FAILS HERE
    this.registeredImages.forEach(this::removeImage);
}
Run Code Online (Sandbox Code Playgroud)

docker testcontainers

29
推荐指数
4
解决办法
3万
查看次数

带有 @Testcontainers 的 Mongo 驱动程序在测试成功运行后抛出异常

我正在使用 testcontainers:mongodb 在示例 spring boot kotlin 项目中设置集成测试。

我已经设置了 MongoDBContaine,一切都按预期工作 - 应用程序连接到 mongodb 并使用存储库进行测试(例如保存、删除)工作得很好,但我注意到测试运行(成功)后 mongodb.driver最后抛出异常 - 看起来容器没有被优雅地关闭/停止 - 这可能吗?

我如何启动容器的示例

companion object {
        @Container
        var mongoDBContainer = MongoDBContainer("mongo:4.4.2")

        @JvmStatic
        @DynamicPropertySource
        fun setProperties(registry: DynamicPropertyRegistry) {
            registry.add("spring.data.mongodb.uri") { mongoDBContainer.replicaSetUrl }
        }
    }
Run Code Online (Sandbox Code Playgroud)

测试方法

@Test fun someTest() {
   autowiredRepository.save(document)
   ...
   ...
}
Run Code Online (Sandbox Code Playgroud)

至于运行类,我只是在其之上使用 @Testcontainers 注释和 @SpringBootTest,没有其​​他任何东西。

我最后得到的例外是

com.mongodb.MongoSocketReadException: Prematurely reached end of stream
    at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:112) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:131) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:647) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:512) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:355) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.receive(InternalStreamConnection.java:315) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:215) ~[mongodb-driver-core-4.2.3.jar:na] …
Run Code Online (Sandbox Code Playgroud)

mongodb kotlin spring-boot testcontainers testcontainers-junit5

18
推荐指数
2
解决办法
3140
查看次数

在 Java 测试中使用 Podman 测试容器

是否可以在 Java 测试中将 Testcontainers 与 Podman 一起使用?

截至 2022 年 3 月,Testcontainers 库未将已安装的 Podman 检测为有效的 Docker 环境。

Podman 可以在采用 Apple 芯片的 MacOS(本地开发环境)和 Linux x86_64(CI/CD 环境)上替代 Docker 吗?

testcontainers podman testcontainers-junit5

14
推荐指数
3
解决办法
2万
查看次数

在 SpringBoot 集成测试中使用 TestContainers 填充数据库

我正在测试 TestContainers,我想知道如何填充执行 .sql 文件的数据库以创建结构并添加一些行。

怎么做?

@Rule
public PostgreSQLContainer postgres = new PostgreSQLContainer();
Run Code Online (Sandbox Code Playgroud)

spring-boot testcontainers

12
推荐指数
5
解决办法
1万
查看次数

测试容器无法拉出 ryuk 图像:无法访问 quay.io

我遇到了 testcontainers 无法从 quay.io 中提取“ryuk”图像的问题。

[32m01:23:19.732[0;39m [35m[main][0;39m [39mDEBUG[0;39m [36mo.t.d.a.AuthDelegatingDockerClientConfig[0;39m - Effective auth config [null] 
[32m01:23:30.281[0;39m [35m[tc-okhttp-stream-308592104][0;39m [1;31mERROR[0;39m [36mc.g.d.a.async.ResultCallbackTemplate[0;39m - Error during callback 
com.github.dockerjava.api.exception.InternalServerErrorException: {"message":"Get https://quay.io/v2/testcontainers/ryuk/manifests/0.2.3: received unexpected HTTP status: 500 Internal Server Error"}
Run Code Online (Sandbox Code Playgroud)

testcontainers

12
推荐指数
3
解决办法
1万
查看次数

Localstack 抛出请求中包含的安全令牌无效

我将 Localstack 与 Testcontainers((testcontainers:localstack:1.15.2 )) 一起使用进行集成测试,并在测试设置中设置秘密,如下所示:代码示例

 import com.amazonaws.services.secretsmanager.AWSSecretsManager;
import com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder;
import com.amazonaws.services.secretsmanager.model.CreateSecretRequest; 
import org.junit.Rule;
import org.junit.Test;
import org.testcontainers.containers.localstack.LocalStackContainer;
import org.testcontainers.utility.DockerImageName; 
import static org.testcontainers.containers.localstack.LocalStackContainer.Service.SECRETSMANAGER;

public class QueueServiceTest {

    DockerImageName localstackImage = DockerImageName.parse("localstack/localstack:0.11.3");
    @Rule
    public LocalStackContainer localstack = new LocalStackContainer(localstackImage)
            .withServices(SECRETSMANAGER).withEnv("LOCALSTACK_HOSTNAME", "localhost").withEnv("HOSTNAME", "localhost");
    @Test
    public void someTestMethod() {
        AWSSecretsManager secretsManager = AWSSecretsManagerClientBuilder.standard()
                .withCredentials(localstack.getDefaultCredentialsProvider()).withRegion(localstack.getRegion())
                .build();

        String secretString = "usrnme";
        CreateSecretRequest request = new CreateSecretRequest().withName("test")
                .withSecretString(secretString)
     .withRequestCredentialsProvider(localstack.getDefaultCredentialsProvider());
        secretsManager.createSecret(request);
    }

}
Run Code Online (Sandbox Code Playgroud)

现在测试崩溃并出现错误:

com.amazonaws.services.secretsmanager.model.AWSSecretsManagerException:请求中包含的安全令牌无效。(服务:AWSSecretsManager;状态代码:400;错误代码:UnrecognizedClientException;请求 ID:314b0dee-69ed-4b08-9cd0-2618b8e14b25;代理:null)

在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1819) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1403) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest (AmazonHttpClient.java:1372) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1145) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:802) …

amazon-web-services secret-manager testcontainers localstack

12
推荐指数
1
解决办法
2万
查看次数

GitHub Actions:如何缓存测试容器的 Docker 镜像?

我使用 Testcontainers 在 GitHub Actions 中执行一些测试。

Testcontainers 提取我的测试中使用的图像。不幸的是,每次构建时都会再次提取图像。

如何在 GitHub Actions 中缓存图像?

caching testcontainers github-actions

11
推荐指数
1
解决办法
5873
查看次数

带有 Kotlin 单元测试的 TestContainers PostgreSQLContainer:“没有足够的信息来推断类型变量 SELF”

我试图使用PostgreSQLContainerTestContainershttps://github.com/testcontainers/testcontainers-java + https://www.testcontainers.org/按顺序)进行单元测试我的JPA库。

我这样声明我的容器:

private val postgresqlContainer = PostgreSQLContainer("postgres:12-alpine")
Run Code Online (Sandbox Code Playgroud)

但是,我在Intellij IDE 中遇到以下错误:

没有足够的信息来推断类型变量 SELF

我尝试启动服务时的完整错误是:

错误:(26, 43) Kotlin:类型推断失败:没有足够的信息来推断构造函数中的参数 SELF PostgreSQLContainer<SELF : PostgreSQLContainer<SELF!>!>(p0: String!) 请明确指定。

java kotlin spring-boot testcontainers

10
推荐指数
3
解决办法
3146
查看次数

Spring testcontainers 驱动程序 org.testcontainers.jdbc.ContainerDatabaseDriver 声称不接受 jdbcUrl

为我的集成测试进行以下配置后,我遇到了以下异常:

Driver org.testcontainers.jdbc.ContainerDatabaseDriver claims to not accept jdbcUrl, jdbc:postgresql://localhost:32864/test?loggerLevel=OFF

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = WebApplication.class)
@AutoConfigureMockMvc
@Testcontainers
@TestPropertySource(ResourceUtils.CLASSPATH_URL_PREFIX + "application-test.properties")
public abstract class AbstractIntegrationTest {

    @Autowired
    protected MockMvc mockMvc;

    @Container
    protected static PostgreSQLContainer<?> postgresqlContainer = new PostgreSQLContainer<>();

    @DynamicPropertySource
    static void postgresqlProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", postgresqlContainer::getJdbcUrl);
        registry.add("spring.datasource.username", postgresqlContainer::getUsername);
        registry.add("spring.datasource.password", postgresqlContainer::getPassword);
    }

    @Test
    void contextLoads() {
        Assertions.assertThat(mockMvc).isNotNull();
        Assertions.assertThat(postgresqlContainer.isRunning()).isTrue();
    }
}
Run Code Online (Sandbox Code Playgroud)

返回 但它应该返回postgresqlContainer.getJdbcUrl(),它缺少tc部分。jdbc:postgresql://localhost:32864/test?loggerLevel=OFFjdbc:tc:postgresql://...

有什么办法解决这个问题吗?

对其进行硬编码:String.format("jdbc:tc:postgresql://localhost:%s/%s", postgresqlContainer.getFirstMappedPort(), postgresqlContainer.getDatabaseName())似乎有效。

我在这里做错了什么?

spring integration-testing spring-boot testcontainers

10
推荐指数
1
解决办法
2万
查看次数

运行测试套件时测试容器初始化错误

我有多个测试类使用testcontainer运行相同的 docker-compose 。

initializationError尽管单独执行时每个测试都通过了,但该套件还是失败了。

这是第二次测试期间发生的堆栈跟踪的相关部分。 ./gradlew e2e:test -i

io.foo.e2e.AuthTest > initializationError FAILED
    org.testcontainers.containers.ContainerLaunchException: Container startup failed
        at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:330)
        at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:311)
        at org.testcontainers.containers.DockerComposeContainer.startAmbassadorContainers(DockerComposeContainer.java:331)
        at org.testcontainers.containers.DockerComposeContainer.start(DockerComposeContainer.java:178)
        at io.foo.e2e.bases.BaseE2eTest$Companion.beforeAll$e2e(BaseE2eTest.kt:62)
        at io.foo.e2e.bases.BaseE2eTest.beforeAll$e2e(BaseE2eTest.kt)
       ...

        Caused by:
        org.rnorth.ducttape.RetryCountExceededException: Retry limit hit with exception
            at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:88)
            at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:323)
            ... 83 more

            Caused by:
            org.testcontainers.containers.ContainerLaunchException: Could not create/start container
                at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:497)
                at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:325)
                at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
                ... 84 more

                Caused by:
                org.testcontainers.containers.ContainerLaunchException: Aborting attempt to link to container btraq5fzahac_worker_1 as it is not running
                    at org.testcontainers.containers.GenericContainer.applyConfiguration(GenericContainer.java:779)
                    at …
Run Code Online (Sandbox Code Playgroud)

docker-compose testcontainers testcontainers-junit5

10
推荐指数
1
解决办法
2万
查看次数