Skip to content

Commit

Permalink
docker utility for DBT tests
Browse files Browse the repository at this point in the history
Change-Id: I894ddf2a64ec3b6efdacb8bd4ea1bec1b9da69fe
Signed-off-by: Stéphane Thibaudeau <stephane.thibaudeau@obeo.fr>
  • Loading branch information
sthibaudeau committed Jul 8, 2019
1 parent 6ffc598 commit 5b645fc
Showing 1 changed file with 48 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,24 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.time.Duration;
import java.time.Instant;
import java.util.List;

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerCmd;
import com.github.dockerjava.api.command.HealthState;
import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.command.InspectContainerResponse.ContainerState;
import com.github.dockerjava.api.command.ListImagesCmd;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.Image;
import com.github.dockerjava.core.DefaultDockerClientConfig;
import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.DockerClientConfig;
import com.google.common.base.Predicate;

public class DockerUtils {

Expand All @@ -33,6 +41,37 @@ public List<Container> getContainers(boolean showAll) {
return dockerClient.listContainersCmd().withShowAll(showAll).exec();
}

public boolean waitUntilContainerIsStarted(String containerId, long timeoutMillis) {
return waitUntilContainerStateVerify(containerId,
new Predicate<ContainerState>() {

@Override
public boolean apply(ContainerState state) {
HealthState health = state.getHealth();
return health != null && "healthy".equals(health.getStatus());
}
},
timeoutMillis);
}

public boolean waitUntilContainerStateVerify(String containerId, Predicate<ContainerState> predicate, long timeoutMillis) {
boolean timeoutOccured = false;
boolean predicateVerified = false;
Instant start = Instant.now();
while (predicateVerified == false && timeoutOccured == false) {
ContainerState state = getContainerState(containerId);
predicateVerified = predicate.apply(state);
timeoutOccured = Duration.between(start, Instant.now()).toMillis() > timeoutMillis;
}

return predicateVerified;
}

public ContainerState getContainerState(String containerId) {
InspectContainerResponse exec = dockerClient.inspectContainerCmd(containerId).exec();
return exec.getState();
}

public CreateContainerCmd createContainerCmd(String image) {
return dockerClient.createContainerCmd(image);
}
Expand All @@ -57,11 +96,20 @@ public List<Image> getImages(String imageNameFilter) {
return listImagesCmd.exec();
}

// public void pullImage(String image) {
// dockerClient.pullImageCmd(image).exec(image);
// }

public void loadImage(String filename) throws FileNotFoundException{
File imageFile = new File(filename);
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(imageFile));
dockerClient.loadImageCmd(inputStream).exec();
}

public void loadImage(URL url) throws IOException {
dockerClient.loadImageCmd(url.openStream()).exec();
}


public DockerClient getDockerClient() {
return dockerClient;
Expand Down

0 comments on commit 5b645fc

Please sign in to comment.