Skip to content
Snippets Groups Projects
Unverified Commit 94f0ea81 authored by Martin Weise's avatar Martin Weise
Browse files

Added some mocks to container service

parent a44282fc
No related branches found
No related tags found
1 merge request!106Dev
...@@ -6,10 +6,10 @@ import at.tuwien.auth.PermissionEvaluatorImpl; ...@@ -6,10 +6,10 @@ import at.tuwien.auth.PermissionEvaluatorImpl;
import at.tuwien.config.ReadyConfig; import at.tuwien.config.ReadyConfig;
import at.tuwien.endpoints.ContainerEndpoint; import at.tuwien.endpoints.ContainerEndpoint;
import at.tuwien.exception.*; import at.tuwien.exception.*;
import at.tuwien.repository.jpa.ContainerRepository;
import at.tuwien.repository.jpa.ImageRepository; import at.tuwien.repository.jpa.ImageRepository;
import at.tuwien.service.impl.ContainerServiceImpl; import at.tuwien.service.impl.ContainerServiceImpl;
import org.apache.http.auth.BasicUserPrincipal; import org.apache.http.auth.BasicUserPrincipal;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -17,11 +17,11 @@ import org.springframework.boot.test.context.SpringBootTest; ...@@ -17,11 +17,11 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; 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.WithMockUser;
import org.springframework.security.test.context.support.WithUserDetails;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import javax.persistence.Basic;
import java.security.Principal; import java.security.Principal;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
...@@ -39,10 +39,10 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -39,10 +39,10 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
private ReadyConfig readyConfig; private ReadyConfig readyConfig;
@MockBean @MockBean
private ContainerServiceImpl containerService; private ImageRepository imageRepository;
@MockBean @MockBean
private ImageRepository imageRepository; private ContainerRepository containerRepository;
@MockBean @MockBean
private PermissionEvaluatorImpl permissionEvaluator; private PermissionEvaluatorImpl permissionEvaluator;
...@@ -50,6 +50,9 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -50,6 +50,9 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
@Autowired @Autowired
private ContainerEndpoint containerEndpoint; private ContainerEndpoint containerEndpoint;
@Autowired
private ContainerServiceImpl containerService;
@Test @Test
public void listAllDatabases_succeeds() { public void listAllDatabases_succeeds() {
when(containerService.getAll()) when(containerService.getAll())
...@@ -83,45 +86,37 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -83,45 +86,37 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
assertEquals(CONTAINER_1_NAME, Objects.requireNonNull(response.getBody()).getName()); assertEquals(CONTAINER_1_NAME, Objects.requireNonNull(response.getBody()).getName());
} }
@Disabled
@Test @Test
public void create_noImage_fails() throws DockerClientException, ImageNotFoundException, UserNotFoundException, ContainerAlreadyExistsException { @WithMockUser(roles = "RESEARCHER")
public void create_noImage_fails() {
final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
.name(CONTAINER_1_NAME) .name(CONTAINER_1_NAME)
.repository("image") .repository(IMAGE_1_REPOSITORY)
.tag("notexisting") .tag(IMAGE_1_TAG)
.build(); .build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* mock */ /* mock */
when(imageRepository.findByRepositoryAndTag(request.getRepository(), request.getTag())) when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
.thenReturn(Optional.empty()); .thenReturn(Optional.empty());
final ResponseEntity<ContainerBriefDto> response = containerEndpoint.create(request, principal); assertThrows(ImageNotFoundException.class, () -> {
containerEndpoint.create(request, principal);
/* test */ });
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
} }
@Disabled
@WithMockUser(username = "not3x1st1ng", roles = {"ROLE_RESEARCHER"})
@Test @Test
public void create_docker_fails() throws DockerClientException, ImageNotFoundException, UserNotFoundException, ContainerAlreadyExistsException { public void create_noAuth_fails() {
final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
.name(CONTAINER_1_NAME) .name(CONTAINER_1_NAME)
.repository(IMAGE_1.getRepository()) .repository(IMAGE_1_REPOSITORY)
.tag(IMAGE_1.getTag()) .tag(IMAGE_1_TAG)
.build(); .build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* mock */ assertThrows(AuthenticationCredentialsNotFoundException.class, () -> {
when(imageRepository.findByRepositoryAndTag(request.getRepository(), request.getTag())) containerEndpoint.create(request, principal);
.thenReturn(Optional.of(IMAGE_1)); });
final ResponseEntity<ContainerBriefDto> response = containerEndpoint.create(request, principal);
/* test */
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
} }
@Test @Test
...@@ -246,12 +241,8 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -246,12 +241,8 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER") @WithMockUser(roles = "DEVELOPER")
public void delete_noContainer_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { public void delete_noContainer_fails() {
doThrow(new ContainerNotFoundException("no container"))
.when(containerService)
.remove(CONTAINER_1_ID);
doReturn(true) doReturn(true)
.when(permissionEvaluator) .when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
...@@ -263,16 +254,16 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -263,16 +254,16 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER") @WithMockUser(roles = "DEVELOPER")
public void delete_success() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException { public void delete_success() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException {
doNothing()
.when(containerService)
.remove(CONTAINER_1_ID);
doReturn(true) doReturn(true)
.when(permissionEvaluator) .when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
/* mock */
when(containerRepository.findById(CONTAINER_1_ID))
.thenReturn(Optional.of(CONTAINER_1));
/* test */ /* test */
final ResponseEntity<?> response = containerEndpoint.delete(CONTAINER_1_ID); final ResponseEntity<?> response = containerEndpoint.delete(CONTAINER_1_ID);
assertEquals(HttpStatus.OK, response.getStatusCode()); assertEquals(HttpStatus.OK, response.getStatusCode());
...@@ -280,11 +271,20 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -280,11 +271,20 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
@Test @Test
@WithMockUser(roles = "RESEARCHER") @WithMockUser(roles = "RESEARCHER")
public void delete_docker_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { public void delete_notDeveloper_fails() {
doThrow(new DockerClientException("docker failed")) doReturn(true)
.when(containerService) .when(permissionEvaluator)
.remove(CONTAINER_1_ID); .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) doReturn(true)
.when(permissionEvaluator) .when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
...@@ -296,12 +296,8 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -296,12 +296,8 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER") @WithMockUser(roles = "DEVELOPER")
public void delete_dockerStillRunning_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { public void delete_dockerStillRunning_fails() {
doThrow(new ContainerStillRunningException("container running"))
.when(containerService)
.remove(CONTAINER_1_ID);
doReturn(true) doReturn(true)
.when(permissionEvaluator) .when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
......
...@@ -31,7 +31,6 @@ import java.security.Principal; ...@@ -31,7 +31,6 @@ import java.security.Principal;
import java.util.List; import java.util.List;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
@Log4j2 @Log4j2
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
...@@ -99,20 +98,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { ...@@ -99,20 +98,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
CONTAINER_1.setHash(request.getId()); CONTAINER_1.setHash(request.getId());
/* mock data */ /* mock data */
log.debug("save image {}", ContainerImage.builder() log.debug("save image {}", IMAGE_1);
.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());
imageRepository.save(IMAGE_1); imageRepository.save(IMAGE_1);
log.debug("save container {}", CONTAINER_1); log.debug("save container {}", CONTAINER_1);
containerRepository.save(CONTAINER_1); containerRepository.save(CONTAINER_1);
......
...@@ -16,3 +16,6 @@ spring.datasource.password=password ...@@ -16,3 +16,6 @@ spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=false spring.jpa.show-sql=false
# additional logging
logging.level.org.hibernate.SQL=DEBUG
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment