我使用以下函数来阻止surefire测试,直到docker容器启动。
这几乎总是有效,但有些时候我得到如下所示的异常。我不确定next
在LogStream
失败的情况下,或dockerClient.logs
如何获取日志流的问题。
我的问题是:
其他人如何使用docker客户端等待 日志?
什么会导致我看到异常?
public void waitForLog(String messageToMatch) throws Exception {
logger.info("Waiting for toc.log to signal start of service with log message: " + messageToMatch);
LogStream logs = dockerClient.logs(container.id(), follow(), stdout());
String log;
do {
LogMessage logMessage = logs.next();
ByteBuffer buffer = logMessage.content();
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
log = new String(bytes);
} while (!log.contains(messageToMatch));
}
我仍然不确定如何重现,因为它只在本地机器上很少发生,但总是在我们的Jenkins服务器上发生。
没有抛出任何异常,我们将阅读日志。
抛出异常。
Docker版本:
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 08:01:32 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 08:01:32 2017
OS/Arch: linux/amd64
Experimental: false
Spotify的docker-client版本:7.0.2
Caused by: java.util.NoSuchElementException: null
at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:154)
at com.support.test.core.docker.DockerProxy.waitForLog(DockerProxy.java:175)
at com.support.test.core.runner.TestListener.testRunStarted(TestListener.java:54)
at org.junit.runner.notification.SynchronizedRunListener.testRunStarted(SynchronizedRunListener.java:35)
at org.junit.runner.notification.RunNotifier$1.notifyListener(RunNotifier.java:91)
at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:72)
at org.junit.runner.notification.RunNotifier.fireTestRunStarted(RunNotifier.java:88)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:120)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)