package com.github.dockerjava.assertions; import com.github.dockerjava.CubeOutput; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.InspectContainerResponse; import com.github.dockerjava.api.command.InspectImageResponse; import com.github.dockerjava.api.model.Image; import com.github.dockerjava.api.model.Version; import com.github.dockerjava.core.command.ExecStartResultCallback; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; /** * @author EddĂș MelĂ©ndez */ public class DockerJavaAssert { private DockerClient client; public DockerJavaAssert(DockerClient client) { this.client = client; } public ImagesAssert hasImages(String... images) { List<Image> imageList = this.client.listImagesCmd().exec(); ImagesAssert imagesAssert = new ImagesAssert(imageList); imagesAssert.containsImages(images); return imagesAssert; } public ContainerAssert container(String name) { InspectContainerResponse container = getContainerInformation(name); return new ContainerAssert(container); } public ImageAssert image(String image) { InspectImageResponse imageInfo = this.client.inspectImageCmd(image).exec(); return new ImageAssert(imageInfo); } public VersionAssert version() { Version version = this.client.versionCmd().exec(); return new VersionAssert(version); } public CubeOutputAssert withContainer(String name) { String[] cmd = {"sh", "-c", "for i in $(ps -axo pid --no-headers); do echo `ps -p $i -o comm=`; done"}; return new CubeOutputAssert(getOutputOfCommand(name, cmd)); } public ContainersAssert containers(String... names) { List<InspectContainerResponse> containers = new ArrayList<InspectContainerResponse>(); for (String containerName : names) { InspectContainerResponse container = getContainerInformation(containerName); if (container != null) { containers.add(container); } } return new ContainersAssert(containers); } private InspectContainerResponse getContainerInformation(String name) { return this.client.inspectContainerCmd(name).exec(); } private CubeOutput getOutputOfCommand(String containerId, String[] command) { String execResponseId = execCreate(containerId, command); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); OutputStream errorStream = new ByteArrayOutputStream(); try { this.client.execStartCmd(execResponseId).withDetach(false) .exec(new ExecStartResultCallback(outputStream, errorStream)).awaitCompletion(); } catch (InterruptedException e) { return new CubeOutput("", ""); } return new CubeOutput(outputStream.toString().trim(), errorStream.toString().trim()); } private String execCreate(String containerId, String... command) { return this.client.execCreateCmd(containerId) .withAttachStdout(true).withAttachStderr(true) .withAttachStdin(true).withTty(false) .withCmd(command).exec().getId(); } }