package com.github.dockerjava.assertions;
import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.model.ContainerConfig;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.assertj.core.api.AbstractAssert;
import org.assertj.core.data.MapEntry;
import org.assertj.core.util.Objects;
import static org.assertj.core.api.Assertions.assertThat;
/**
* @author EddĂș MelĂ©ndez
*/
public class ContainerAssert extends AbstractAssert<ContainerAssert, InspectContainerResponse> {
public ContainerAssert(InspectContainerResponse actual) {
super(actual, ContainerAssert.class);
}
public ContainerAssert hasExposedPorts(String... ports) {
isNotNull();
List<ExposedPort> exposedPorts = new ArrayList<ExposedPort>();
for (String port : ports) {
exposedPorts.add(ExposedPort.parse(port));
}
ExposedPort[] myports = new ExposedPort[exposedPorts.size()];
exposedPorts.toArray(myports);
assertThat(getContainerConfig().getExposedPorts())
.overridingErrorMessage("%nExpecting:%n <%s>%nto contain:%n <%s>", getContainerConfig().getExposedPorts(),
Arrays.asList(ports))
.contains(myports);
return this;
}
public ContainerAssert hasBindPorts(String... ports) {
isNotNull();
List<ExposedPort> exposedPorts = new ArrayList<ExposedPort>();
for (String port : ports) {
exposedPorts.add(ExposedPort.parse(port));
}
ExposedPort[] myports = new ExposedPort[exposedPorts.size()];
exposedPorts.toArray(myports);
assertThat(getHostConfig().getPortBindings().getBindings())
.overridingErrorMessage("%nExpecting:%n <%s>%nto contain:%n <%s>",
getHostConfig().getPortBindings().getBindings().keySet(), Arrays.asList(ports))
.containsKeys(myports);
return this;
}
public ContainerAssert hasName(String name) {
isNotNull();
if (!Objects.areEqual(this.actual.getName(), name)) {
failWithMessage("Expected container's name to be %s but was %s", name, this.actual.getName());
}
return this;
}
public ContainerAssert hasVolumes(String... volumes) {
isNotNull();
assertThat(getContainerConfig().getVolumes())
.overridingErrorMessage("%nExpecting:%n <%s>%nto contain:%n <%s>", getContainerConfig().getVolumes().keySet(),
Arrays.asList(volumes))
.containsOnlyKeys(volumes);
return this;
}
public ContainerAssert hasVolumes(int size) {
isNotNull();
assertThat(getContainerConfig().getVolumes().size())
.overridingErrorMessage("Expected container's volumes to be %s but was %s", size,
getContainerConfig().getVolumes().size())
.isEqualTo(size);
return this;
}
public ContainerAssert hasStatus(String status) {
ContainerStateAssert stateAssert = new ContainerStateAssert(getContainerState());
stateAssert.isNotNull();
if (!Objects.areEqual(getContainerState().getStatus(), status)) {
failWithMessage("Expected container's status to be %s but was %s", status, getContainerState().getStatus());
}
return this;
}
public ContainerAssert isRunning() {
ContainerStateAssert stateAssert = new ContainerStateAssert(getContainerState());
stateAssert.isNotNull();
if (!getContainerState().getRunning()) {
failWithMessage("Expected container's state running to be %s but was %s", true, false);
}
return this;
}
public ContainerAssert isPaused() {
isNotNull();
ContainerStateAssert stateAssert = new ContainerStateAssert(getContainerState());
stateAssert.isNotNull();
if (!getContainerState().getPaused()) {
failWithMessage("Expected container's state paused to be %s but was %s", true, false);
}
return this;
}
public ContainerAssert isRestarting() {
isNotNull();
if (getContainerState() != null && !getContainerState().getRestarting()) {
failWithMessage("Expected container's state restarting to be %s but was %s", true, false);
}
return this;
}
public ContainerAssert hasImage(String name) {
isNotNull();
if (getContainerConfig() != null && !Objects.areEqual(getContainerConfig().getImage(), name)) {
failWithMessage("Expected container's image name to be %s but was %s", name,
this.actual.getConfig().getImage());
}
return this;
}
public ContainerAssert hasNetworkMode(String networkMode) {
isNotNull();
if (getHostConfig() != null && !Objects.areEqual(getHostConfig().getNetworkMode(), networkMode)) {
failWithMessage("Expected container's networkMode to be %s but was %s", networkMode,
getHostConfig().getNetworkMode());
}
return this;
}
public ContainerAssert hasMountSize(int size) {
isNotNull();
if (this.actual.getMounts().size() != size) {
failWithMessage("Expected container's mounts size to be %s but was %s", size, this.actual.getMounts().size());
}
return this;
}
public ContainerAssert hasLabels(String... labels) {
isNotNull();
assertThat(getContainerConfig().getLabels())
.overridingErrorMessage("%nExpecting:%n <%s>%nto contain:%n <%s>", getContainerConfig().getLabels().keySet(),
Arrays.asList(labels))
.containsKeys(labels);
return this;
}
public ContainerAssert hasLabel(String label, String value) {
isNotNull();
assertThat(getContainerConfig().getLabels())
.overridingErrorMessage("%nExpecting:%n <%s>%nto contain:%n <%s>", getContainerConfig().getLabels(),
MapEntry.entry(label, value))
.containsEntry(label, value);
return this;
}
private InspectContainerResponse.ContainerState getContainerState() {
return this.actual.getState();
}
private HostConfig getHostConfig() {
return this.actual.getHostConfig();
}
private ContainerConfig getContainerConfig() {
return this.actual.getConfig();
}
}