package org.arquillian.cube.docker.impl.client; import java.util.HashMap; import java.util.List; import java.util.Map; import org.arquillian.cube.docker.impl.docker.DockerClientExecutor; import org.arquillian.cube.impl.model.LocalCubeRegistry; import org.arquillian.cube.spi.Cube; import org.arquillian.cube.spi.CubeConfiguration; import org.arquillian.cube.spi.CubeRegistry; import org.arquillian.cube.spi.event.lifecycle.AfterDestroy; import org.jboss.arquillian.core.api.annotation.ApplicationScoped; import org.jboss.arquillian.core.test.AbstractManagerTestBase; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import static org.mockito.Mockito.never; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class DockerImageControllerTest extends AbstractManagerTestBase { public static final String CUBE_ID = "pingpong"; @Mock Cube cube; @Override protected void addExtensions(List<Class<?>> extensions) { extensions.add(DockerImageController.class); super.addExtensions(extensions); } @Test public void should_remove_docker_image_if_built_by_cube() { DockerClientExecutor executor = Mockito.mock(DockerClientExecutor.class); String config = "pingpong:\n" + " buildImage:\n" + " dockerfileLocation: src/test/resources/tomcat\n" + " noCache: true\n" + " remove: true\n" + " exposedPorts: [8080/tcp]\n" + " portBindings: [8080->8080/tcp]\n"; Map<String, String> parameters = new HashMap<>(); parameters.put("dockerContainers", config); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeConfiguration cubeConfiguration = CubeConfiguration.fromMap(new HashMap<String, String>()); bind(ApplicationScoped.class, CubeConfiguration.class, cubeConfiguration); CubeDockerConfiguration dockerConfiguration = CubeDockerConfiguration.fromMap(parameters, null); when(cube.getId()).thenReturn(CUBE_ID); when(cube.configuration()).thenReturn(dockerConfiguration.getDockerContainersContent().get(CUBE_ID)); bind(ApplicationScoped.class, CubeDockerConfiguration.class, dockerConfiguration); final LocalCubeRegistry localCubeRegistry = new LocalCubeRegistry(); localCubeRegistry.addCube(cube); bind(ApplicationScoped.class, CubeRegistry.class, localCubeRegistry); bind(ApplicationScoped.class, DockerClientExecutor.class, executor); fire(new AfterDestroy(CUBE_ID)); Mockito.verify(executor).removeImage("pingpong:latest", false); } @Test public void should_not_remove_docker_image_as_not_built_by_cube() { DockerClientExecutor executor = Mockito.mock(DockerClientExecutor.class); String config = "pingpong:\n" + " image: jonmorehouse/ping-pong\n" + " exposedPorts: [8080/tcp]\n" + " portBindings: [8080->8080/tcp]\n"; Map<String, String> parameters = new HashMap<>(); parameters.put("dockerContainers", config); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeConfiguration cubeConfiguration = CubeConfiguration.fromMap(new HashMap<String, String>()); bind(ApplicationScoped.class, CubeConfiguration.class, cubeConfiguration); CubeDockerConfiguration dockerConfiguration = CubeDockerConfiguration.fromMap(parameters, null); when(cube.getId()).thenReturn(CUBE_ID); when(cube.configuration()).thenReturn(dockerConfiguration.getDockerContainersContent().get(CUBE_ID)); bind(ApplicationScoped.class, CubeDockerConfiguration.class, dockerConfiguration); final LocalCubeRegistry localCubeRegistry = new LocalCubeRegistry(); localCubeRegistry.addCube(cube); bind(ApplicationScoped.class, CubeRegistry.class, localCubeRegistry); bind(ApplicationScoped.class, DockerClientExecutor.class, executor); fire(new AfterDestroy(CUBE_ID)); Mockito.verify(executor, never()).removeImage("pingpong:latest", false); } }