diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java index bca4a202830065e4a2d7018a430f9e3e28db61d1..79202e12775045ecd6767e4fd6f2841358ccee5b 100644 --- a/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ b/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java @@ -144,6 +144,7 @@ public abstract class BaseUnitTest { .driverClass(IMAGE_1_DRIVER) .compiled(IMAGE_1_BUILT) .size(IMAGE_1_SIZE) + .environment(IMAGE_1_ENV) .defaultPort(IMAGE_1_PORT) .build(); diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9a1ccac5d973086bd8e3d3521515490f75f6789b --- /dev/null +++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java @@ -0,0 +1,72 @@ +package at.tuwien.service; + +import at.tuwien.BaseUnitTest; +import at.tuwien.api.container.ContainerCreateRequestDto; +import at.tuwien.config.ReadyConfig; +import at.tuwien.entities.container.Container; +import at.tuwien.exception.ContainerAlreadyExistsException; +import at.tuwien.exception.DockerClientException; +import at.tuwien.exception.ImageNotFoundException; +import at.tuwien.exception.UserNotFoundException; +import at.tuwien.repository.jpa.ContainerRepository; +import at.tuwien.repository.jpa.ImageRepository; +import at.tuwien.repository.jpa.UserRepository; +import lombok.extern.log4j.Log4j2; +import org.apache.http.auth.BasicUserPrincipal; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.security.Principal; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +@Log4j2 +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@SpringBootTest +@ExtendWith(SpringExtension.class) +public class ContainerServiceUnitTest extends BaseUnitTest { + + @MockBean + private ReadyConfig readyConfig; + + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private ImageRepository imageRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private ContainerService containerService; + + @BeforeEach + public void beforeEach() { + /* mock data */ + userRepository.save(USER_1); + imageRepository.save(IMAGE_1); + containerRepository.save(CONTAINER_1); + } + + @Test + public void create_nameExists_fails() { + final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() + .name(CONTAINER_1_NAME) + .repository(IMAGE_1_REPOSITORY) + .tag(IMAGE_1_TAG) + .build(); + final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + + /* test */ + assertThrows(ContainerAlreadyExistsException.class, () -> { + containerService.create(request, principal); + }); + } +} 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 c5cbc523a9a0b671ce526efb025264f31ace729d..eadb36f909a72347ac0a858b5f59aa5d645e6f00 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 @@ -110,7 +110,7 @@ public class ContainerServiceImpl implements ContainerService { .exec(); } catch (ConflictException e) { log.error("Conflicting names {}, reason: {}", createDto.getName(), e.getMessage()); - throw new ContainerAlreadyExistsException("Unexpected behavior", e); + throw new ContainerAlreadyExistsException("Conflicting names", e); } catch (NotFoundException e) { log.error("The image {}:{} not available on the container service", createDto.getRepository(), createDto.getTag()); diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java index 8704b32853c007cb7dcb10b01e00546065f404df..1be33c681fc8a34199c864057e08b72cb5627845 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java @@ -61,6 +61,7 @@ public class ContainerImage { @Column(nullable = false) private Integer defaultPort; + @ToString.Exclude @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "iid", insertable = false, updatable = false) private List<ContainerImageEnvironmentItem> environment; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java index 208c2143cdbe26817ef19ee812eca4ba62c49406..3b0df1ac6d8e5d0b0c7b9750b0cfaa71a6d35d63 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java @@ -46,6 +46,7 @@ public class ContainerImageEnvironmentItem { @Enumerated(EnumType.STRING) private ContainerImageEnvironmentItemType type; + @ToString.Exclude @org.springframework.data.annotation.Transient @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumns({