Skip to content

Commit

Permalink
Using LogMessageWaitStrategy for VncRecordingContainer (#2063) (#2547)
Browse files Browse the repository at this point in the history
Co-authored-by: Stefan Rempfer <srempfer@rt.ipnt.de>
Co-authored-by: Richard North <rich.north@gmail.com>
Co-authored-by: Sergei Egorov <bsideup@gmail.com>
  • Loading branch information
4 people committed Apr 12, 2020
1 parent c6e0cd9 commit 34b8d7e
Showing 1 changed file with 7 additions and 40 deletions.
@@ -1,24 +1,21 @@
package org.testcontainers.containers;

import com.github.dockerjava.api.model.Frame;
import lombok.Getter;
import lombok.NonNull;
import lombok.SneakyThrows;
import lombok.ToString;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.rnorth.ducttape.TimeoutException;
import org.rnorth.ducttape.unreliables.Unreliables;
import org.testcontainers.containers.output.FrameConsumerResultCallback;
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
import org.testcontainers.utility.TestcontainersConfiguration;

import java.io.Closeable;
import java.io.File;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.time.Duration;
import java.util.Base64;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import static java.time.temporal.ChronoUnit.SECONDS;

/**
* 'Sidekick container' with the sole purpose of recording the VNC screen output from another container.
Expand Down Expand Up @@ -59,39 +56,9 @@ public VncRecordingContainer(@NonNull Network network, @NonNull String targetNet

this.targetNetworkAlias = targetNetworkAlias;
withNetwork(network);

waitingFor(new AbstractWaitStrategy() {

@Override
protected void waitUntilReady() {
try {
Unreliables.retryUntilTrue((int) startupTimeout.toMillis(), TimeUnit.MILLISECONDS, () -> {
CountDownLatch latch = new CountDownLatch(1);

FrameConsumerResultCallback callback = new FrameConsumerResultCallback() {
@Override
public void onNext(Frame frame) {
if (frame != null && new String(frame.getPayload()).contains("Connected")) {
latch.countDown();
}
}
};

try (
Closeable __ = dockerClient.logContainerCmd(getContainerId())
.withFollowStream(true)
.withSince(0)
.withStdErr(true)
.exec(callback)
) {
return latch.await(1, TimeUnit.SECONDS);
}
});
} catch (TimeoutException e) {
throw new ContainerLaunchException("Timed out waiting for log output", e);
}
}
});
waitingFor(new LogMessageWaitStrategy()
.withRegEx(".*Connected.*")
.withStartupTimeout(Duration.of(15, SECONDS)));
}

public VncRecordingContainer withVncPassword(@NonNull String vncPassword) {
Expand Down

0 comments on commit 34b8d7e

Please sign in to comment.