diff --git a/.fda-deployment/teardown b/.fda-deployment/teardown index 3e6b1e5ba2aa9a4c4eb4941c04b9a86a26ee6788..bda6f753d428d987de9fc655567f3b7861354f50 100755 --- a/.fda-deployment/teardown +++ b/.fda-deployment/teardown @@ -1,6 +1,6 @@ #!/bin/bash -docker container stop $(docker container ls -aq) || true -docker container rm $(docker container ls -aq) || true +docker container stop $(docker container ls -aq -f name=^/fda-.*) || true +docker container rm $(docker container ls -aq -f name=^/fda-.*) || true docker volume rm $(docker volume ls -q) || true docker network rm fda-userdb || true docker network rm fda-public || true \ No newline at end of file diff --git a/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java index 9eb1460800e3e665bfb9fc4fa3925b38c2a749be..fcbd14d942cdacead1bf513b9e4642ad9f265b2e 100644 --- a/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ b/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java @@ -64,7 +64,7 @@ public class ContainerEndpoint { @ApiResponse(code = 404, message = "The container was not found after creation."), }) public ResponseEntity<ContainerBriefDto> create(@Valid @RequestBody ContainerCreateRequestDto data) - throws ImageNotFoundException, DockerClientException { + throws ImageNotFoundException, DockerClientException, ContainerAlreadyExistsException { final Container container = containerService.create(data); final ContainerBriefDto response = containerMapper.containerToDatabaseContainerBriefDto(container); return ResponseEntity.status(HttpStatus.CREATED) diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java index cec3ce6acf1b1ca2fc1fae4de876bf898879a7df..ef8d4d557b19c73b836716136ec64fd2d244e300 100644 --- a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java +++ b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java @@ -54,7 +54,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test - public void create_succeeds() throws ImageNotFoundException, DockerClientException { + public void create_succeeds() throws ImageNotFoundException, DockerClientException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .name(CONTAINER_1_NAME) .repository(IMAGE_1.getRepository()) @@ -72,7 +72,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { @Disabled @Test - public void create_noImage_fails() throws DockerClientException, ImageNotFoundException { + public void create_noImage_fails() throws DockerClientException, ImageNotFoundException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .name(CONTAINER_1_NAME) .repository("image") @@ -89,7 +89,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { @Disabled @Test - public void create_docker_fails() throws DockerClientException, ImageNotFoundException { + public void create_docker_fails() throws DockerClientException, ImageNotFoundException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .name(CONTAINER_1_NAME) .repository(IMAGE_1.getRepository()) diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java index ebbbc7bb993311e85a97f376af124dd2dcfab99c..a478b2a6c1eb27e49c6c221c21805cba34c5a370 100644 --- a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java +++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java @@ -146,7 +146,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { } @Test - public void create_succeeds() throws DockerClientException, ImageNotFoundException { + public void create_succeeds() throws DockerClientException, ImageNotFoundException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .repository(IMAGE_1_REPOSITORY) .tag(IMAGE_1_TAG) @@ -159,7 +159,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { } @Test - public void create_conflictingNames_fails() throws DockerClientException, ImageNotFoundException { + public void create_conflictingNames_fails() throws DockerClientException, ImageNotFoundException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .repository(IMAGE_1_REPOSITORY) .tag(IMAGE_1_TAG) diff --git a/fda-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java b/fda-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java new file mode 100644 index 0000000000000000000000000000000000000000..fb7031bfba06ce80083116aa84b16b67d6873f48 --- /dev/null +++ b/fda-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.CONFLICT, reason = "Container name exists") +public class ContainerAlreadyExistsException extends Exception { + + public ContainerAlreadyExistsException(String message) { + super(message); + } + + public ContainerAlreadyExistsException(String message, Throwable thr) { + super(message, thr); + } + + public ContainerAlreadyExistsException(Throwable thr) { + super(thr); + } + +} diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java b/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java index 346d7034df532e5537a6826fecf478f7ccb9457b..1b0c7db4066c57526883614290b40dc110d47c05 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ b/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java @@ -9,7 +9,7 @@ import java.util.List; public interface ContainerService { @Transactional - Container create(ContainerCreateRequestDto createDto) throws ImageNotFoundException, DockerClientException; + Container create(ContainerCreateRequestDto createDto) throws ImageNotFoundException, DockerClientException, ContainerAlreadyExistsException; @Transactional Container stop(Long containerId) throws ContainerNotFoundException, DockerClientException; diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java index 3662f91b11d206a5834babdba82fe5b59c3372b2..d930f276d55bc44a215d01838e4fb644dd202b5c 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java +++ b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java @@ -53,7 +53,7 @@ public class ContainerServiceImpl implements ContainerService { @Override @Transactional - public Container create(ContainerCreateRequestDto createDto) throws ImageNotFoundException, DockerClientException { + public Container create(ContainerCreateRequestDto createDto) throws ImageNotFoundException, DockerClientException, ContainerAlreadyExistsException { final Optional<ContainerImage> image = imageRepository.findByRepositoryAndTag(createDto.getRepository(), createDto.getTag()); if (image.isEmpty()) { log.error("failed to get image with name {}:{}", createDto.getRepository(), createDto.getTag()); @@ -82,7 +82,7 @@ public class ContainerServiceImpl implements ContainerService { .exec(); } catch (ConflictException e) { log.error("Conflicting names {}", createDto.getName()); - throw new DockerClientException("Unexpected behavior", e); + throw new ContainerAlreadyExistsException("Unexpected behavior", e); } catch (NotFoundException e) { log.error("The image {}:{} not available on the container service", createDto.getRepository(), createDto.getTag()); log.debug("payload was {}", createDto);