diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/config/DockerUtil.java b/fda-container-service/rest-service/src/test/java/at/tuwien/config/DockerUtil.java index 3d2d8fe81e3b2d188e8709cd38950bb7f70fc6aa..30567feaf2bebd34f3158de5244517623625c5f6 100644 --- a/fda-container-service/rest-service/src/test/java/at/tuwien/config/DockerUtil.java +++ b/fda-container-service/rest-service/src/test/java/at/tuwien/config/DockerUtil.java @@ -33,7 +33,7 @@ public class DockerUtil { .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=weather") .exec(); container.setHash(create.getId()); - log.trace("container {} needs to be started", container.getHash()); + log.info("container {} needs to be started", container.getHash()); } public void startContainer(Container container) throws InterruptedException { @@ -47,7 +47,7 @@ public class DockerUtil { dockerClient.startContainerCmd(container.getHash()) .exec(); Thread.sleep(12 * 1000L); - log.debug("container {} was started", container.getHash()); + log.info("container {} was started", container.getHash()); } public void stopContainer(Container container) { @@ -60,7 +60,7 @@ public class DockerUtil { log.trace("container {} needs to be stopped", container.getHash()); dockerClient.stopContainerCmd(container.getHash()) .exec(); - log.debug("container {} was stopped", container.getHash()); + log.info("container {} was stopped", container.getHash()); } public void removeContainer(Container container) { @@ -68,7 +68,7 @@ public class DockerUtil { log.trace("container {} needs to be removed", container.getHash()); dockerClient.removeContainerCmd(container.getHash()) .exec(); - log.debug("container {} was removed", container.getHash()); + log.info("container {} was removed", container.getHash()); } } 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 f8ca6a0891f6135831e2a913a814ad541fef6515..2c7297c3583502f59f99f668c45fd9655f65ad43 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 @@ -6,10 +6,7 @@ import at.tuwien.config.DockerUtil; import at.tuwien.config.ReadyConfig; import at.tuwien.entities.container.Container; import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.exception.ContainerAlreadyExistsException; -import at.tuwien.exception.DockerClientException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.exception.UserNotFoundException; +import at.tuwien.exception.*; import at.tuwien.repository.jpa.ContainerRepository; import at.tuwien.repository.jpa.ImageRepository; import at.tuwien.repository.jpa.UserRepository; @@ -29,8 +26,10 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; +import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; @Log4j2 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @@ -134,11 +133,259 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { .build(); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); - /* mock */ - /* test */ final Container container = containerService.create(request, principal); assertEquals(CONTAINER_1_NAME, container.getName()); assertEquals(1, userRepository.findAll().size()); } + + @Test + 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 */ + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(ContainerAlreadyExistsException.class, () -> { + containerService.create(request, principal); + }); + } + + @Test + public void remove_alreadyRemoved_fails() { + + /* test */ + assertThrows(ContainerNotFoundException.class, () -> { + containerService.remove(CONTAINER_1_ID); + }); + } + + @Test + public void create_notFound_fails() { + final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() + .repository(IMAGE_2_REPOSITORY) + .tag(IMAGE_2_TAG) + .name(CONTAINER_3_NAME) + .build(); + final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + + /* test */ + assertThrows(ImageNotFoundException.class, () -> { + containerService.create(request, principal); + }); + } + + @Test + public void findById_notFound_fails() { + + /* test */ + assertThrows(ContainerNotFoundException.class, () -> { + containerService.find(CONTAINER_1_ID); + }); + } + + @Test + public void change_start_succeeds() throws DockerClientException, ContainerNotFoundException { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + containerRepository.save(CONTAINER_1); + + /* test */ + containerService.start(CONTAINER_1_ID); + } + + @Test + public void change_stop_succeeds() throws DockerClientException, InterruptedException, ContainerNotFoundException { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + dockerUtil.startContainer(CONTAINER_1); + containerRepository.save(CONTAINER_1); + + /* test */ + containerService.stop(CONTAINER_1_ID); + } + + @Test + public void change_startSavedButNotFound_fails() { + + /* mock */ + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(DockerClientException.class, () -> { + containerService.start(CONTAINER_1_ID); + }); + } + + @Test + public void change_removeSavedButNotFound_fails() { + + /* mock */ + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(DockerClientException.class, () -> { + containerService.remove(CONTAINER_1_ID); + }); + } + + @Test + public void getAll_succeeds() { + + /* mock */ + containerRepository.save(CONTAINER_1); + containerRepository.save(CONTAINER_2); + + /* test */ + final List<Container> response = containerService.getAll(); + assertEquals(2, response.size()); + } + + @Test + public void remove_succeeds() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + dockerUtil.stopContainer(CONTAINER_1); + containerRepository.save(CONTAINER_1); + + /* test */ + containerService.remove(CONTAINER_1_ID); + } + + @Test + public void remove_notFound_fails() { + + /* test */ + assertThrows(ContainerNotFoundException.class, () -> { + containerService.remove(CONTAINER_1_ID); + }); + } + + @Test + public void remove_stillRunning_fails() throws InterruptedException { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + dockerUtil.startContainer(CONTAINER_1); + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(ContainerStillRunningException.class, () -> { + containerService.remove(CONTAINER_1_ID); + }); + } + + @Test + public void change_alreadyRunning_fails() throws InterruptedException { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + dockerUtil.startContainer(CONTAINER_1); + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(DockerClientException.class, () -> { + containerService.start(CONTAINER_1_ID); + }); + } + + @Test + public void change_startNotFound_fails() { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + + /* test */ + assertThrows(ContainerNotFoundException.class, () -> { + containerService.start(CONTAINER_1_ID); + }); + } + + @Test + public void change_alreadyStopped_fails() throws InterruptedException { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + dockerUtil.startContainer(CONTAINER_1); + dockerUtil.stopContainer(CONTAINER_1); + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(DockerClientException.class, () -> { + containerService.stop(CONTAINER_1_ID); + }); + } + + @Test + public void change_stopNeverStarted_fails() { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(DockerClientException.class, () -> { + containerService.stop(CONTAINER_1_ID); + }); + } + + @Test + public void change_stopSavedButNotFound_fails() { + + /* mock */ + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(DockerClientException.class, () -> { + containerService.stop(CONTAINER_1_ID); + }); + } + + @Test + public void inspect_succeeds() throws InterruptedException, DockerClientException, ContainerNotFoundException, + ContainerNotRunningException { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + dockerUtil.startContainer(CONTAINER_1); + containerRepository.save(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()); + } + + @Test + public void inspect_notFound_fails() { + + /* test */ + assertThrows(ContainerNotFoundException.class, () -> { + containerService.inspect(CONTAINER_2_ID); + }); + } + + @Test + public void inspect_notRunning_fails() { + + /* mock */ + dockerUtil.createContainer(CONTAINER_1); + containerRepository.save(CONTAINER_1); + + /* test */ + assertThrows(ContainerNotRunningException.class, () -> { + containerService.inspect(CONTAINER_1_ID); + }); + } }