package org.arquillian.cube.docker.impl.requirement;
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.Collections;
import org.arquillian.cube.docker.impl.util.CommandLineExecutor;
import org.arquillian.cube.spi.requirement.UnsatisfiedRequirementException;
import org.arquillian.spacelift.execution.ExecutionException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.Matchers.anyVararg;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class DockerMachineRequirementTest {
@Mock
CommandLineExecutor commandLineExecutor;
@Test(expected = UnsatisfiedRequirementException.class)
public void estDockerMachineRequirementCheckWhenExecutionExceptionThrown() throws UnsatisfiedRequirementException {
when(commandLineExecutor.execCommandAsArray(anyVararg())).thenThrow(ExecutionException.class);
DockerMachineRequirement dockerMachineRequirement = new DockerMachineRequirement(commandLineExecutor);
dockerMachineRequirement.check(createContext("testing"));
}
@Test(expected = UnsatisfiedRequirementException.class)
public void testDockerMachineRequirementCheckNoMatchingNameFound() throws Exception {
when(commandLineExecutor.execCommandAsArray(anyVararg())).thenReturn(Collections.emptyList());
DockerMachineRequirement dockerMachineRequirement = new DockerMachineRequirement(commandLineExecutor);
dockerMachineRequirement.check(createContext("testing"));
}
@Test(expected = UnsatisfiedRequirementException.class)
public void testDockerMachineRequirementCheckNoMachineFound() throws Exception {
when(commandLineExecutor.execCommandAsArray(anyVararg())).thenReturn(Arrays.asList(new String[] {"foo", "bar"}));
DockerMachineRequirement dockerMachineRequirement = new DockerMachineRequirement(commandLineExecutor);
dockerMachineRequirement.check(createContext(""));
}
@Test(expected = UnsatisfiedRequirementException.class)
public void testDockerMachineRequirementCheckNoMatchingNameNotMatched() throws Exception {
when(commandLineExecutor.execCommandAsArray(anyVararg())).thenReturn(Arrays.asList(new String[] {"my-docker-machine"}));
DockerMachineRequirement dockerMachineRequirement = new DockerMachineRequirement(commandLineExecutor);
dockerMachineRequirement.check(createContext("testing"));
}
@Test
public void testDockerMachineRequirementCheckNoMatchingNameMatched() throws Exception {
when(commandLineExecutor.execCommandAsArray(anyVararg())).thenReturn(Arrays.asList(new String[] {"testing"}));
DockerMachineRequirement dockerMachineRequirement = new DockerMachineRequirement(commandLineExecutor);
dockerMachineRequirement.check(createContext("testing"));
}
private RequiresDockerMachine createContext(String machineName) {
return new RequiresDockerMachine() {
@Override
public Class<? extends Annotation> annotationType() {
return RequiresDockerMachine.class;
}
@Override
public String name() {
return machineName;
}
};
}
}