@Test public void call_up_only_once_if_successful() throws IOException, InterruptedException { ConflictingContainerRemovingDockerCompose conflictingContainerRemovingDockerCompose = new ConflictingContainerRemovingDockerCompose(dockerCompose, docker); conflictingContainerRemovingDockerCompose.up(); verify(dockerCompose, times(1)).up(); verifyZeroInteractions(docker); }
@Test public void call_rm_and_retry_up_if_conflicting_containers_exist() throws IOException, InterruptedException { String conflictingContainer = "conflictingContainer"; doThrow(new DockerExecutionException("The name \"" + conflictingContainer + "\" is already in use")) .doNothing() .when(dockerCompose).up(); ConflictingContainerRemovingDockerCompose conflictingContainerRemovingDockerCompose = new ConflictingContainerRemovingDockerCompose(dockerCompose, docker); conflictingContainerRemovingDockerCompose.up(); verify(dockerCompose, times(2)).up(); verify(docker).rm(ImmutableSet.of(conflictingContainer)); }
@Test public void ignore_docker_execution_exceptions_in_rm() throws IOException, InterruptedException { String conflictingContainer = "conflictingContainer"; doThrow(new DockerExecutionException("The name \"" + conflictingContainer + "\" is already in use")) .doNothing() .when(dockerCompose).up(); doThrow(DockerExecutionException.class).when(docker).rm(anySetOf(String.class)); ConflictingContainerRemovingDockerCompose conflictingContainerRemovingDockerCompose = new ConflictingContainerRemovingDockerCompose(dockerCompose, docker); conflictingContainerRemovingDockerCompose.up(); verify(dockerCompose, times(2)).up(); verify(docker).rm(ImmutableSet.of(conflictingContainer)); }
@Test public void retry_specified_number_of_times() throws IOException, InterruptedException { String conflictingContainer = "conflictingContainer"; DockerExecutionException dockerException = new DockerExecutionException( "The name \"" + conflictingContainer + "\" is already in use"); doThrow(dockerException) .doThrow(dockerException) .doNothing() .when(dockerCompose).up(); ConflictingContainerRemovingDockerCompose conflictingContainerRemovingDockerCompose = new ConflictingContainerRemovingDockerCompose(dockerCompose, docker, 3); conflictingContainerRemovingDockerCompose.up(); verify(dockerCompose, times(3)).up(); verify(docker, times(2)).rm(ImmutableSet.of(conflictingContainer)); }
@Test public void fail_on_non_docker_execution_exceptions_in_rm() throws IOException, InterruptedException { String conflictingContainer = "conflictingContainer"; doThrow(new DockerExecutionException("The name \"" + conflictingContainer + "\" is already in use")) .doNothing() .when(dockerCompose).up(); doThrow(RuntimeException.class).when(docker).rm(anySetOf(String.class)); exception.expect(RuntimeException.class); ConflictingContainerRemovingDockerCompose conflictingContainerRemovingDockerCompose = new ConflictingContainerRemovingDockerCompose(dockerCompose, docker); conflictingContainerRemovingDockerCompose.up(); }
@Test public void throw_exception_if_retry_attempts_exceeded() throws IOException, InterruptedException { String conflictingContainer = "conflictingContainer"; doThrow(new DockerExecutionException("The name \"" + conflictingContainer + "\" is already in use")) .when(dockerCompose).up(); exception.expect(DockerExecutionException.class); exception.expectMessage("docker-compose up failed"); ConflictingContainerRemovingDockerCompose conflictingContainerRemovingDockerCompose = new ConflictingContainerRemovingDockerCompose(dockerCompose, docker); conflictingContainerRemovingDockerCompose.up(); }