Skip to content

Commit

Permalink
Change PostgreSQLContainer to use LogMessageWaitStrategy (testcontain…
Browse files Browse the repository at this point in the history
  • Loading branch information
Kevin Wittek committed Apr 21, 2017
1 parent 5bfd7f4 commit 9b627c8
Showing 1 changed file with 11 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package org.testcontainers.containers;

import org.testcontainers.containers.output.OutputFrame;
import org.testcontainers.containers.output.WaitingConsumer;
import org.testcontainers.containers.wait.LogMessageWaitStrategy;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.function.Predicate;
import java.time.Duration;

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

/**
* @author richardnorth
*/
public class PostgreSQLContainer<SELF extends PostgreSQLContainer<SELF>> extends JdbcDatabaseContainer<SELF> {
public static final String NAME = "postgresql";
public static final String IMAGE = "postgres";
static final String NAME = "postgresql";
static final String IMAGE = "postgres";
public static final Integer POSTGRESQL_PORT = 5432;
private String databaseName = "test";
private String username = "test";
Expand All @@ -24,6 +23,10 @@ public PostgreSQLContainer() {

public PostgreSQLContainer(final String dockerImageName) {
super(dockerImageName);
this.waitStrategy = new LogMessageWaitStrategy()
.withRegEx(".*database system is ready to accept connections.*\\s")
.withTimes(2)
.withStartupTimeout(Duration.of(60, SECONDS));
}

@Override
Expand Down Expand Up @@ -83,20 +86,6 @@ public SELF withPassword(final String password) {

@Override
protected void waitUntilContainerStarted() {
String regEx = ".*database system is ready to accept connections.*\\s";
logger().info("Waiting for database to log '{}'", regEx);

WaitingConsumer waitingConsumer = new WaitingConsumer();
this.followOutput(waitingConsumer);


Predicate<OutputFrame> waitPredicate = outputFrame ->
outputFrame.getUtf8String().matches(regEx);

try {
waitingConsumer.waitUntil(waitPredicate, 120, TimeUnit.SECONDS, 2);
} catch (TimeoutException e) {
throw new ContainerLaunchException("Timed out waiting for log output matching '" + regEx + "'");
}
getWaitStrategy().waitUntilReady(this);
}
}

0 comments on commit 9b627c8

Please sign in to comment.