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 8be30d7e90f8f3d8f0dd91e0b39a574996eb8e5e..c2a05be2b992993450fa11cf157704af1fe0c55d 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 @@ -6,10 +6,10 @@ import at.tuwien.auth.PermissionEvaluatorImpl; import at.tuwien.config.ReadyConfig; import at.tuwien.endpoints.ContainerEndpoint; import at.tuwien.exception.*; +import at.tuwien.repository.jpa.ContainerRepository; import at.tuwien.repository.jpa.ImageRepository; import at.tuwien.service.impl.ContainerServiceImpl; import org.apache.http.auth.BasicUserPrincipal; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -17,11 +17,11 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException; import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.security.test.context.support.WithUserDetails; import org.springframework.test.context.junit.jupiter.SpringExtension; -import javax.persistence.Basic; import java.security.Principal; import java.util.List; import java.util.Objects; @@ -39,10 +39,10 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { private ReadyConfig readyConfig; @MockBean - private ContainerServiceImpl containerService; + private ImageRepository imageRepository; @MockBean - private ImageRepository imageRepository; + private ContainerRepository containerRepository; @MockBean private PermissionEvaluatorImpl permissionEvaluator; @@ -50,6 +50,9 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { @Autowired private ContainerEndpoint containerEndpoint; + @Autowired + private ContainerServiceImpl containerService; + @Test public void listAllDatabases_succeeds() { when(containerService.getAll()) @@ -83,45 +86,37 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { assertEquals(CONTAINER_1_NAME, Objects.requireNonNull(response.getBody()).getName()); } - @Disabled @Test - public void create_noImage_fails() throws DockerClientException, ImageNotFoundException, UserNotFoundException, ContainerAlreadyExistsException { + @WithMockUser(roles = "RESEARCHER") + public void create_noImage_fails() { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .name(CONTAINER_1_NAME) - .repository("image") - .tag("notexisting") + .repository(IMAGE_1_REPOSITORY) + .tag(IMAGE_1_TAG) .build(); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* mock */ - when(imageRepository.findByRepositoryAndTag(request.getRepository(), request.getTag())) + when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG)) .thenReturn(Optional.empty()); - final ResponseEntity<ContainerBriefDto> response = containerEndpoint.create(request, principal); - - /* test */ - assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + assertThrows(ImageNotFoundException.class, () -> { + containerEndpoint.create(request, principal); + }); } - @Disabled - @WithMockUser(username = "not3x1st1ng", roles = {"ROLE_RESEARCHER"}) @Test - public void create_docker_fails() throws DockerClientException, ImageNotFoundException, UserNotFoundException, ContainerAlreadyExistsException { + public void create_noAuth_fails() { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .name(CONTAINER_1_NAME) - .repository(IMAGE_1.getRepository()) - .tag(IMAGE_1.getTag()) + .repository(IMAGE_1_REPOSITORY) + .tag(IMAGE_1_TAG) .build(); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); - /* mock */ - when(imageRepository.findByRepositoryAndTag(request.getRepository(), request.getTag())) - .thenReturn(Optional.of(IMAGE_1)); - - final ResponseEntity<ContainerBriefDto> response = containerEndpoint.create(request, principal); - - /* test */ - assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + assertThrows(AuthenticationCredentialsNotFoundException.class, () -> { + containerEndpoint.create(request, principal); + }); } @Test @@ -246,12 +241,8 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test - @WithMockUser(roles = "RESEARCHER") - public void delete_noContainer_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { - doThrow(new ContainerNotFoundException("no container")) - .when(containerService) - .remove(CONTAINER_1_ID); - + @WithMockUser(roles = "DEVELOPER") + public void delete_noContainer_fails() { doReturn(true) .when(permissionEvaluator) .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); @@ -263,16 +254,16 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test - @WithMockUser(roles = "RESEARCHER") + @WithMockUser(roles = "DEVELOPER") public void delete_success() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException { - doNothing() - .when(containerService) - .remove(CONTAINER_1_ID); - doReturn(true) .when(permissionEvaluator) .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); + /* mock */ + when(containerRepository.findById(CONTAINER_1_ID)) + .thenReturn(Optional.of(CONTAINER_1)); + /* test */ final ResponseEntity<?> response = containerEndpoint.delete(CONTAINER_1_ID); assertEquals(HttpStatus.OK, response.getStatusCode()); @@ -280,11 +271,20 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(roles = "RESEARCHER") - public void delete_docker_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { - doThrow(new DockerClientException("docker failed")) - .when(containerService) - .remove(CONTAINER_1_ID); + public void delete_notDeveloper_fails() { + doReturn(true) + .when(permissionEvaluator) + .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); + + /* test */ + assertThrows(AccessDeniedException.class, () -> { + containerEndpoint.delete(CONTAINER_1_ID); + }); + } + @Test + @WithMockUser(roles = "DEVELOPER") + public void delete_docker_fails() { doReturn(true) .when(permissionEvaluator) .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); @@ -296,12 +296,8 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test - @WithMockUser(roles = "RESEARCHER") - public void delete_dockerStillRunning_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { - doThrow(new ContainerStillRunningException("container running")) - .when(containerService) - .remove(CONTAINER_1_ID); - + @WithMockUser(roles = "DEVELOPER") + public void delete_dockerStillRunning_fails() { doReturn(true) .when(permissionEvaluator) .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); 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 7dea52ef1dd0d9ef701dba5f8bf800a924b85f52..353804e9f5bdb431bd1408979f8c7a9761aba982 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 @@ -31,7 +31,6 @@ import java.security.Principal; import java.util.List; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; @Log4j2 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @@ -99,20 +98,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { CONTAINER_1.setHash(request.getId()); /* mock data */ - log.debug("save image {}", ContainerImage.builder() - .id(IMAGE_1_ID) - .repository(IMAGE_1_REPOSITORY) - .tag(IMAGE_1_TAG) - .hash(IMAGE_1_HASH) - .jdbcMethod(IMAGE_1_JDBC) - .dialect(IMAGE_1_DIALECT) - .driverClass(IMAGE_1_DRIVER) - .containers(List.of()) - .compiled(IMAGE_1_BUILT) - .size(IMAGE_1_SIZE) - .environment(IMAGE_1_ENV) - .defaultPort(IMAGE_1_PORT) - .build()); + log.debug("save image {}", IMAGE_1); imageRepository.save(IMAGE_1); log.debug("save container {}", CONTAINER_1); containerRepository.save(CONTAINER_1); diff --git a/fda-container-service/rest-service/src/test/resources/application.properties b/fda-container-service/rest-service/src/test/resources/application.properties index 88c58a85e34098a6ef1eddde183d20544dc6fb1c..9e91f5d06816149f227fac67a310e4074f67c564 100644 --- a/fda-container-service/rest-service/src/test/resources/application.properties +++ b/fda-container-service/rest-service/src/test/resources/application.properties @@ -15,4 +15,7 @@ spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=create-drop -spring.jpa.show-sql=false \ No newline at end of file +spring.jpa.show-sql=false + +# additional logging +logging.level.org.hibernate.SQL=DEBUG \ No newline at end of file