为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过测试容器启动 Informix?

如何通过测试容器启动 Informix?

互换的青春 2023-03-09 14:17:17
我对在我的项目中使用测试容器非常感兴趣。但是,我很难将其设置为与 Informix 一起使用。请注意,我可以使用 Docker-for-Mac 启动一个 informix 容器,它将构建并启动。虽然不确定它是否可以与测试容器一起使用。我希望它会。这是我到目前为止所拥有的测试类package com.example.demo;import com.github.dockerjava.api.command.CreateContainerCmd;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import org.testcontainers.containers.GenericContainer;import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;import org.testcontainers.containers.wait.strategy.WaitAllStrategy;import java.time.Duration;import static org.junit.Assert.assertEquals;@RunWith(SpringRunner.class)@SpringBootTestpublic class DemoApplicationTests {  private static GenericContainer informix;  @BeforeClass  public static void init() {    informix = new GenericContainer("ibmcom/informix-innovator-c")        .withExposedPorts(9088)        .withEnv("LICENSE", "accept")        .withPrivilegedMode(true)        .withCreateContainerCmdModifier(command -> ((CreateContainerCmd)command).withTty(Boolean.TRUE))        .waitingFor(new WaitAllStrategy().withStrategy(new LogMessageWaitStrategy().withRegEx(".*listener on port.*\n"))            .withStrategy(new HostPortWaitStrategy())            .withStartupTimeout(Duration.ofMinutes(2)));    informix.start();  }  @AfterClass  public static void destroy(){    informix.close();  }  @Test  public void testDemo() {    int foo = 1;    assertEquals(foo, 1);  }}容器启动然后永远挂起,永远不会进入测试
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

Informix 的 docker 镜像配置错误。在 docker 容器中启动的服务器只会监听主机名,而不是本地主机。Testcontainers 使用“localhost”作为网络接口来连接到您的容器。因此,当您使用.withExposedPorts(9088)该端口时,该端口实际上并未暴露在 TestContainers 可以连接到的网络接口上。


这就是为什么即使您等待日志消息,您仍然很可能遇到问题,您也在端口上等待并且它永远不可用。


好消息是,这个问题现在已经修复,可以通过下载最新的 Informix docker 镜像来使用


ibmcom/informix-developer-database:latest获取最新的 14.10 docker 镜像


下面是我运行的代码,用于验证新图像是否与 TestContainers 一起更好地工作。

public class DockerTest {

    GenericContainer<?>container  = new GenericContainer<>("ibmcom/informix-developer-database:latest")

        .withExposedPorts(9088, 9089, 27017, 27018, 27883).withEnv("LICENSE", "accept");

@Test

public void testIfxContainer() throws Exception {

    container.start();

    System.out.println("Informix started");

    //test the connection

    try(Connection c = DriverManager.getConnection("jdbc:informix-sqli:localhost:"  + container.getFirstMappedPort() + "/sysmaster:user=informix;password=your-password")) {

      try(Statement s = c.createStatement(); ResultSet rs = s.executeQuery("SELECT FIRST 10 tabname from systables");) {

        while(rs.next()) {

          System.out.println(r.getString(1));

        }

      }

    }

  }

}


查看完整回答
反对 回复 2023-03-09
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信