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 2816a2a1d846375c9a1c04e3e02475180ad7e699..a942bde097e8e6edaa853a01b8340cfe67f2e67b 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 @@ -148,6 +148,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); containerRepository.save(CONTAINER_1); /* test */ @@ -193,6 +202,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void change_start_succeeds() throws DockerClientException, ContainerNotFoundException { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); dockerUtil.createContainer(CONTAINER_1); containerRepository.save(CONTAINER_1); @@ -204,6 +222,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void change_stop_succeeds() throws DockerClientException, InterruptedException, ContainerNotFoundException { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); dockerUtil.createContainer(CONTAINER_1); dockerUtil.startContainer(CONTAINER_1); containerRepository.save(CONTAINER_1); @@ -228,6 +255,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void change_removeSavedButNotFound_fails() { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); containerRepository.save(CONTAINER_1); /* test */ @@ -240,6 +276,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void getAll_succeeds() { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); containerRepository.save(CONTAINER_1); containerRepository.save(CONTAINER_2); @@ -252,6 +297,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void remove_succeeds() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); dockerUtil.createContainer(CONTAINER_1); dockerUtil.stopContainer(CONTAINER_1); containerRepository.save(CONTAINER_1); @@ -273,6 +327,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void remove_stillRunning_fails() throws InterruptedException { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); dockerUtil.createContainer(CONTAINER_1); dockerUtil.startContainer(CONTAINER_1); containerRepository.save(CONTAINER_1); @@ -287,6 +350,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void change_alreadyRunning_fails() throws InterruptedException { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); dockerUtil.createContainer(CONTAINER_1); dockerUtil.startContainer(CONTAINER_1); containerRepository.save(CONTAINER_1); @@ -313,6 +385,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void change_alreadyStopped_fails() throws InterruptedException { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); dockerUtil.createContainer(CONTAINER_1); dockerUtil.startContainer(CONTAINER_1); dockerUtil.stopContainer(CONTAINER_1); @@ -328,6 +409,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void change_stopNeverStarted_fails() { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); dockerUtil.createContainer(CONTAINER_1); containerRepository.save(CONTAINER_1); @@ -341,6 +431,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void change_stopSavedButNotFound_fails() { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); containerRepository.save(CONTAINER_1); /* test */ @@ -354,6 +453,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { ContainerNotRunningException { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); dockerUtil.createContainer(CONTAINER_1); dockerUtil.startContainer(CONTAINER_1); containerRepository.save(CONTAINER_1); @@ -379,6 +487,15 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { public void inspect_notRunning_fails() { /* mock */ + final Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(IMAGE_1) + .hash(CONTAINER_1_HASH) + .ipAddress(CONTAINER_1_IP) + .created(CONTAINER_1_CREATED) + .build(); dockerUtil.createContainer(CONTAINER_1); containerRepository.save(CONTAINER_1); diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/Old.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/Old.java deleted file mode 100644 index 660a44e4def42a0bd418279de0790cdf8a826997..0000000000000000000000000000000000000000 --- a/fda-container-service/rest-service/src/test/java/at/tuwien/service/Old.java +++ /dev/null @@ -1,412 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.container.ContainerCreateRequestDto; -import at.tuwien.config.DockerUtil; -import at.tuwien.config.ReadyConfig; -import at.tuwien.entities.container.Container; -import at.tuwien.exception.*; -import at.tuwien.repository.jpa.ContainerRepository; -import at.tuwien.repository.jpa.ImageRepository; -import at.tuwien.repository.jpa.UserRepository; -import com.github.dockerjava.api.DockerClient; -import com.github.dockerjava.api.exception.NotModifiedException; -import com.github.dockerjava.api.model.Network; -import lombok.extern.log4j.Log4j2; -import org.apache.http.auth.BasicUserPrincipal; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -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 java.util.List; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; - -@Log4j2 -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ExtendWith(SpringExtension.class) -public class Old extends BaseUnitTest { - - @MockBean - private ReadyConfig readyConfig; - - @MockBean - private ContainerRepository containerRepository; - - @Autowired - private ImageRepository imageRepository; - - @Autowired - private DockerClient dockerClient; - - @Autowired - private ContainerService containerService; - - @Autowired - private DockerUtil dockerUtil; - - @Autowired - private UserRepository userRepository; - - @BeforeEach - public void beforeEach() { - afterEach(); - /* create networks */ - dockerClient.createNetworkCmd() - .withName("fda-userdb") - .withIpam(new Network.Ipam() - .withConfig(new Network.Ipam.Config() - .withSubnet("172.28.0.0/16"))) - .withEnableIpv6(false) - .exec(); - dockerClient.createNetworkCmd() - .withName("fda-public") - .withIpam(new Network.Ipam() - .withConfig(new Network.Ipam.Config() - .withSubnet("172.29.0.0/16"))) - .withEnableIpv6(false) - .exec(); - - /* mock data */ - userRepository.save(USER_1); - imageRepository.save(IMAGE_1); - } - - @AfterEach - public void afterEach() { - /* stop containers and remove them */ - dockerClient.listContainersCmd() - .withShowAll(true) - .exec() - .forEach(container -> { - log.info("Delete container {}", container.getNames()[0]); - try { - dockerClient.stopContainerCmd(container.getId()).exec(); - } catch (NotModifiedException e) { - // ignore - } - dockerClient.removeContainerCmd(container.getId()).exec(); - }); - - /* remove networks */ - dockerClient.listNetworksCmd() - .exec() - .stream() - .filter(n -> n.getName().startsWith("fda")) - .forEach(network -> { - log.info("Delete network {}", network.getName()); - dockerClient.removeNetworkCmd(network.getId()).exec(); - }); - } - - - public void create_succeeds() - throws DockerClientException, ImageNotFoundException, ContainerAlreadyExistsException, - UserNotFoundException { - final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() - .repository(IMAGE_1_REPOSITORY) - .tag(IMAGE_1_TAG) - .name(CONTAINER_1_NAME) - .build(); - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); - - /* mock */ - when(containerRepository.findByInternalName(CONTAINER_1_INTERNALNAME)) - .thenReturn(Optional.empty()); - when(containerRepository.save(any(Container.class))) - .thenReturn(CONTAINER_1); - - /* test */ - final Container container = containerService.create(request, principal); - assertEquals(CONTAINER_1_NAME, container.getName()); - assertEquals(1, userRepository.findAll().size()); - } - - - public void create_conflictingNames_fails() { - final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() - .repository(IMAGE_1_REPOSITORY) - .tag(IMAGE_1_TAG) - .name(CONTAINER_1_NAME) - .build(); - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); - - /* mock */ - when(containerRepository.findByInternalName(CONTAINER_1_INTERNALNAME)) - .thenReturn(Optional.of(CONTAINER_1)); - - /* test */ - assertThrows(ContainerAlreadyExistsException.class, () -> { - containerService.create(request, principal); - }); - } - - - public void remove_alreadyRemoved_fails() { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.empty()); - - /* test */ - assertThrows(ContainerNotFoundException.class, () -> { - containerService.remove(CONTAINER_1_ID); - }); - } - - - public void create_notFound_fails() { - final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() - .repository(IMAGE_1_REPOSITORY) - .tag(IMAGE_1_TAG) - .name(CONTAINER_3_NAME) - .build(); - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); - - /* mock */ - - /* test */ - assertThrows(ImageNotFoundException.class, () -> { - containerService.create(request, principal); - }); - } - - - - public void findById_notFound_fails() { - - /* mock */ - - /* test */ - assertThrows(ContainerNotFoundException.class, () -> { - containerService.find(CONTAINER_1_ID); - }); - } - - - public void change_start_succeeds() throws DockerClientException, ContainerNotFoundException { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - dockerUtil.createContainer(CONTAINER_1); - - /* test */ - containerService.start(CONTAINER_1_ID); - } - - - public void change_stop_succeeds() throws DockerClientException, InterruptedException, ContainerNotFoundException { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - dockerUtil.createContainer(CONTAINER_1); - dockerUtil.startContainer(CONTAINER_1); - - /* test */ - containerService.stop(CONTAINER_1_ID); - } - - - public void change_startSavedButNotFound_fails() { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - - /* test */ - assertThrows(DockerClientException.class, () -> { - containerService.start(CONTAINER_1_ID); - }); - } - - - public void change_removeSavedButNotFound_fails() { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - - /* test */ - assertThrows(DockerClientException.class, () -> { - containerService.remove(CONTAINER_1_ID); - }); - } - - - public void getAll_succeeds() { - - /* mock */ - when(containerRepository.findAll()) - .thenReturn(List.of(CONTAINER_1, CONTAINER_2)); - - /* test */ - final List<Container> response = containerService.getAll(); - assertEquals(2, response.size()); - } - - - public void remove_succeeds() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - dockerUtil.createContainer(CONTAINER_1); - dockerUtil.stopContainer(CONTAINER_1); - - /* test */ - containerService.remove(CONTAINER_1_ID); - } - - - public void remove_notFound_fails() { - - /* test */ - assertThrows(ContainerNotFoundException.class, () -> { - containerService.remove(CONTAINER_1_ID); - }); - } - - - public void remove_stillRunning_fails() throws InterruptedException { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - dockerUtil.createContainer(CONTAINER_1); - dockerUtil.startContainer(CONTAINER_1); - - /* test */ - assertThrows(ContainerStillRunningException.class, () -> { - containerService.remove(CONTAINER_1_ID); - }); - } - - - public void change_alreadyRunning_fails() throws InterruptedException { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - dockerUtil.createContainer(CONTAINER_1); - dockerUtil.startContainer(CONTAINER_1); - - /* test */ - assertThrows(DockerClientException.class, () -> { - containerService.start(CONTAINER_1_ID); - }); - } - - - public void change_startNotFound_fails() { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.empty()); - dockerUtil.createContainer(CONTAINER_1); - - /* test */ - assertThrows(ContainerNotFoundException.class, () -> { - containerService.start(CONTAINER_1_ID); - }); - } - - - public void change_alreadyStopped_fails() throws InterruptedException { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - dockerUtil.createContainer(CONTAINER_1); - dockerUtil.startContainer(CONTAINER_1); - dockerUtil.stopContainer(CONTAINER_1); - - /* test */ - assertThrows(DockerClientException.class, () -> { - containerService.stop(CONTAINER_1_ID); - }); - } - - - public void change_stopNeverStarted_fails() { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - dockerUtil.createContainer(CONTAINER_1); - - /* test */ - assertThrows(DockerClientException.class, () -> { - containerService.stop(CONTAINER_1_ID); - }); - } - - - public void change_stopSavedButNotFound_fails() { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - - /* test */ - assertThrows(DockerClientException.class, () -> { - containerService.stop(CONTAINER_1_ID); - }); - } - - - public void inspect_succeeds() throws InterruptedException, DockerClientException, ContainerNotFoundException, - ContainerNotRunningException { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - dockerUtil.createContainer(CONTAINER_1); - dockerUtil.startContainer(CONTAINER_1); - - /* test */ - final Container response = containerService.inspect(CONTAINER_1_ID); - assertEquals(CONTAINER_1_ID, response.getId()); - assertEquals(CONTAINER_1_NAME, response.getName()); - assertEquals(CONTAINER_1_INTERNALNAME, response.getInternalName()); - assertEquals(CONTAINER_1_IP, response.getIpAddress()); - } - - - public void inspect_notFound_fails() { - - /* mock */ - - /* test */ - assertThrows(ContainerNotFoundException.class, () -> { - containerService.inspect(CONTAINER_2_ID); - }); - } - - - public void inspect_notRunning_fails() { - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(CONTAINER_1)); - dockerUtil.createContainer(CONTAINER_1); - - /* test */ - assertThrows(ContainerNotRunningException.class, () -> { - containerService.inspect(CONTAINER_1_ID); - }); - } - -} 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 1be33c681fc8a34199c864057e08b72cb5627845..a22793bcd050687147f464f65252ad111d2f8d21 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 @@ -69,8 +69,8 @@ public class ContainerImage { @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "image") private List<ContainerImageDate> dateFormats; - @org.springframework.data.annotation.Transient @ToString.Exclude + @org.springframework.data.annotation.Transient @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE, mappedBy = "image") private List<Container> containers;