diff --git a/fda-authentication-service/rest-service/src/main/resources/application-local.yml b/fda-authentication-service/rest-service/src/main/resources/application-local.yml index 5fb6430cb6ee3d46b9a593f42d9cb2ccb1450082..95bf2eba31b51743612d0d680ecac54be1e32272 100644 --- a/fda-authentication-service/rest-service/src/main/resources/application-local.yml +++ b/fda-authentication-service/rest-service/src/main/resources/application-local.yml @@ -20,6 +20,10 @@ spring: name: authentication-service cloud: loadbalancer.ribbon.enabled: false + rabbitmq: + host: localhost + username: fda + password: fda mail: default-encoding: UTF-8 host: "" diff --git a/fda-authentication-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-authentication-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java index ef68ed84a85b12821b7040e434a222087bf099da..b228f91cb143ea25252ba1bb2e2dc248c633c0f1 100644 --- a/fda-authentication-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ b/fda-authentication-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java @@ -21,6 +21,10 @@ public abstract class BaseUnitTest { public final static String USER_1_TITLES_BEFORE = "Dr."; public final static String USER_1_TITLES_AFTER = "MSc BSc"; public final static Boolean USER_1_VERIFIED = true; + public final static Boolean USER_1_THEME_DARK = false; + public final static Instant USER_1_CREATED = Instant.now() + .minus(1, ChronoUnit.DAYS); + public final static Instant USER_1_LAST_MODIFIED = USER_1_CREATED; public final static User USER_1 = User.builder() .id(USER_1_ID) @@ -32,6 +36,9 @@ public abstract class BaseUnitTest { .titlesBefore(USER_1_TITLES_BEFORE) .titlesAfter(USER_1_TITLES_AFTER) .emailVerified(USER_1_VERIFIED) + .themeDark(USER_1_THEME_DARK) + .created(USER_1_CREATED) + .lastModified(USER_1_LAST_MODIFIED) .build(); public final static Long USER_2_ID = 2L; @@ -39,6 +46,10 @@ public abstract class BaseUnitTest { public final static String USER_2_USERNAME = "jdoe2"; public final static String USER_2_PASSWORD = "s3cr3t1nf0rm4t10n"; public final static Boolean USER_2_VERIFIED = false; + public final static Boolean USER_2_THEME_DARK = false; + public final static Instant USER_2_CREATED = Instant.now() + .minus(1, ChronoUnit.DAYS); + public final static Instant USER_2_LAST_MODIFIED = USER_1_CREATED; public final static User USER_2 = User.builder() .id(USER_2_ID) @@ -46,22 +57,27 @@ public abstract class BaseUnitTest { .email(USER_2_EMAIL) .password(USER_2_PASSWORD) .emailVerified(USER_2_VERIFIED) + .themeDark(USER_2_THEME_DARK) + .created(USER_2_CREATED) + .lastModified(USER_2_LAST_MODIFIED) .build(); public final static Long TOKEN_1_ID = 1L; - public final static Boolean TOKEN_1_PROCESSED = true; + public final static Boolean TOKEN_1_PROCESSED = false; public final static String TOKEN_1_TOKEN = "mysecrettokenrandomlygenerated"; public final static Instant TOKEN_1_VALID_TO = Instant.now() .plus(1, ChronoUnit.DAYS); public final static Long TOKEN_2_ID = 2L; - public final static Boolean TOKEN_2_PROCESSED = false; + public final static Boolean TOKEN_2_PROCESSED = true; public final static String TOKEN_2_TOKEN = "blahblahblah"; public final static Instant TOKEN_2_VALID_TO = Instant.now() .plus(1, ChronoUnit.DAYS); public final static TimeSecret TOKEN_1 = TimeSecret.builder() .id(TOKEN_1_ID) + .uid(USER_1_ID) + .user(USER_1) .token(TOKEN_1_TOKEN) .processed(TOKEN_1_PROCESSED) .validTo(TOKEN_1_VALID_TO) @@ -69,6 +85,8 @@ public abstract class BaseUnitTest { public final static TimeSecret TOKEN_2 = TimeSecret.builder() .id(TOKEN_2_ID) + .uid(USER_2_ID) + .user(USER_2) .token(TOKEN_2_TOKEN) .processed(TOKEN_2_PROCESSED) .validTo(TOKEN_2_VALID_TO) diff --git a/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceIntegrationTest.java b/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceUnitTest.java similarity index 56% rename from fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceIntegrationTest.java rename to fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceUnitTest.java index 63d0dcfb403d7404eab73786edaedef94dddc7b8..5cebcc365200c4789ba3b6c05e1b9cb99bafa386 100644 --- a/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceIntegrationTest.java +++ b/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/MailServiceUnitTest.java @@ -2,7 +2,6 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.config.ReadyConfig; -import at.tuwien.entities.user.User; import at.tuwien.exception.UserEmailFailedException; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; @@ -10,21 +9,24 @@ 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.mail.MailSendException; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.thymeleaf.context.Context; -import java.time.Instant; - -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.doThrow; @Log4j2 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@TestPropertySource(properties = {"spring.mail.username=test"}) @SpringBootTest @ExtendWith(SpringExtension.class) -public class MailServiceIntegrationTest extends BaseUnitTest { +public class MailServiceUnitTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; @@ -32,37 +34,32 @@ public class MailServiceIntegrationTest extends BaseUnitTest { @Autowired private MailService mailService; + @MockBean + private JavaMailSender mailSender; + @Test public void send_succeeds() throws UserEmailFailedException { - final User user = User.builder() - .username(USER_1_USERNAME) - .password(USER_1_PASSWORD) - .firstname(USER_1_FIRSTNAME) - .lastname(USER_1_LASTNAME) - .email("martinweiseat@gmail.com") - .build(); final Context context = new Context(); - context.setVariable("username", user.getUsername()); + context.setVariable("username", USER_1_USERNAME); + + /* mock */ /* test */ - mailService.send(user, "Test", "welcome-mail.txt", context); + mailService.send(USER_1, "Test", "welcome-mail.txt", context); } @Test public void send_fails() { - final User user = User.builder() - .username(USER_1_USERNAME) - .password(USER_1_PASSWORD) - .firstname(USER_1_FIRSTNAME) - .lastname(USER_1_LASTNAME) - .email("doesnotexist@gmail.com") - .build(); final Context context = new Context(); - context.setVariable("username", user.getUsername()); + context.setVariable("username", USER_1_USERNAME); + + /* mock */ + doThrow(MailSendException.class).when(mailSender) + .send(any(SimpleMailMessage.class)); /* test */ assertThrows(UserEmailFailedException.class, () -> { - mailService.send(user, "Test", "welcome-mail.txt", context); + mailService.send(USER_1, "Test", "welcome-mail.txt", context); }); } diff --git a/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java index e9bee850458e7705e1ff1be868cdd7b880a2331b..3313fd289535ca85d52f7d2d95a710061a401768 100644 --- a/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java +++ b/fda-authentication-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java @@ -5,9 +5,7 @@ import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.config.ReadyConfig; import at.tuwien.entities.user.User; import at.tuwien.exception.*; -import at.tuwien.repositories.TimeSecretRepository; import lombok.extern.log4j.Log4j2; -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; @@ -30,14 +28,6 @@ public class UserServiceIntegrationTest extends BaseUnitTest { @Autowired private UserService userService; - @Autowired - private TimeSecretRepository tokenRepository; - - @BeforeEach - public void beforeEach() { - tokenRepository.save(TOKEN_1); - } - @Test public void create_succeeds() throws UserNameExistsException, RoleNotFoundException, UserEmailExistsException { diff --git a/fda-authentication-service/rest-service/src/test/resources/application.properties b/fda-authentication-service/rest-service/src/test/resources/application.properties index 1f8a9f4089f393b2a8d25f28472a80a35658aab5..88c58a85e34098a6ef1eddde183d20544dc6fb1c 100644 --- a/fda-authentication-service/rest-service/src/test/resources/application.properties +++ b/fda-authentication-service/rest-service/src/test/resources/application.properties @@ -1,3 +1,6 @@ +# enable local spring profile +spring.profiles.active=local + # disable discovery spring.cloud.discovery.enabled = false 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 f3b39383019b258b79fe099be16db55b4f9d21c9..8be30d7e90f8f3d8f0dd91e0b39a574996eb8e5e 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 @@ -2,6 +2,7 @@ package at.tuwien.endpoint; import at.tuwien.BaseUnitTest; import at.tuwien.api.container.*; +import at.tuwien.auth.PermissionEvaluatorImpl; import at.tuwien.config.ReadyConfig; import at.tuwien.endpoints.ContainerEndpoint; import at.tuwien.exception.*; @@ -43,6 +44,9 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { @MockBean private ImageRepository imageRepository; + @MockBean + private PermissionEvaluatorImpl permissionEvaluator; + @Autowired private ContainerEndpoint containerEndpoint; @@ -59,6 +63,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "RESEARCHER") public void create_succeeds() throws ImageNotFoundException, DockerClientException, UserNotFoundException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .name(CONTAINER_1_NAME) @@ -166,6 +171,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "RESEARCHER") public void modify_start_succeeds() throws DockerClientException, ContainerNotFoundException { final ContainerChangeDto request = ContainerChangeDto.builder() .action(ContainerActionTypeDto.START) @@ -180,6 +186,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "RESEARCHER") public void modify_stop_succeeds() throws DockerClientException, ContainerNotFoundException, ContainerStillRunningException { final ContainerChangeDto request = ContainerChangeDto.builder() .action(ContainerActionTypeDto.STOP) @@ -194,6 +201,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "RESEARCHER") public void modify_startDocker_fails() throws DockerClientException, ContainerNotFoundException { final ContainerChangeDto request = ContainerChangeDto.builder() .action(ContainerActionTypeDto.START) @@ -208,6 +216,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "RESEARCHER") public void modify_stopDocker_fails() throws DockerClientException, ContainerNotFoundException { final ContainerChangeDto request = ContainerChangeDto.builder() .action(ContainerActionTypeDto.STOP) @@ -222,6 +231,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "RESEARCHER") public void modify_stopNoContainer_fails() throws DockerClientException, ContainerNotFoundException { final ContainerChangeDto request = ContainerChangeDto.builder() .action(ContainerActionTypeDto.STOP) @@ -236,11 +246,16 @@ 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); + doReturn(true) + .when(permissionEvaluator) + .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); + /* test */ assertThrows(ContainerNotFoundException.class, () -> { containerEndpoint.delete(CONTAINER_1_ID); @@ -248,22 +263,32 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "RESEARCHER") 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")); + /* test */ final ResponseEntity<?> response = containerEndpoint.delete(CONTAINER_1_ID); assertEquals(HttpStatus.OK, response.getStatusCode()); } @Test + @WithMockUser(roles = "RESEARCHER") public void delete_docker_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { doThrow(new DockerClientException("docker failed")) .when(containerService) .remove(CONTAINER_1_ID); + doReturn(true) + .when(permissionEvaluator) + .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); + /* test */ assertThrows(DockerClientException.class, () -> { containerEndpoint.delete(CONTAINER_1_ID); @@ -271,11 +296,16 @@ 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); + doReturn(true) + .when(permissionEvaluator) + .hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER")); + /* test */ assertThrows(ContainerStillRunningException.class, () -> { containerEndpoint.delete(CONTAINER_1_ID); diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java index 8f7943572c47095a5096be38babeeea462720486..a493798a86c5d0b237ece8732324af3347569b1a 100644 --- a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java +++ b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java @@ -17,6 +17,7 @@ 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.test.context.support.WithMockUser; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; @@ -53,6 +54,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "DEVELOPER") public void create_succeeds() throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException { final ImageCreateDto request = ImageCreateDto.builder() @@ -75,6 +77,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "DEVELOPER") public void create_duplicate_fails() throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException { final ImageCreateDto request = ImageCreateDto.builder() @@ -98,6 +101,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "DEVELOPER") public void create_notExists_fails() throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException { final ImageCreateDto request = ImageCreateDto.builder() @@ -148,6 +152,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "DEVELOPER") public void delete_success() throws ImageNotFoundException, PersistenceException { /* mock */ @@ -161,6 +166,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "DEVELOPER") public void delete_fails() throws ImageNotFoundException, PersistenceException { /* mock */ @@ -175,6 +181,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "DEVELOPER") public void update_succeeds() throws ImageNotFoundException, DockerClientException { final ImageChangeDto request = ImageChangeDto.builder() .defaultPort(1111) @@ -186,6 +193,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(roles = "DEVELOPER") public void update_notFound_fails() throws ImageNotFoundException, DockerClientException { final ImageChangeDto request = ImageChangeDto.builder() .defaultPort(1111) diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java index 058dc455054d2458d9c24004c40afd7eba9033a7..0ed93482e34f9262300863a8f9a08e5949ced292 100644 --- a/fda-container-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java +++ b/fda-container-service/rest-service/src/test/java/at/tuwien/mapper/BaseMappingTest.java @@ -6,10 +6,12 @@ import com.github.dockerjava.api.model.NetworkSettings; import lombok.SneakyThrows; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.TestPropertySource; import java.lang.reflect.Field; import java.util.Map; +@TestPropertySource(locations = "classpath:application.properties") public abstract class BaseMappingTest { @Configuration 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 5cf765ec8d460b0f2b1df66427dd534fd8939863..3bee59433e1f40b4902e510de7dde41644a37f86 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 @@ -30,6 +30,7 @@ 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) @@ -40,6 +41,9 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; + @MockBean + private UserService userService; + @Autowired private ContainerServiceImpl containerService; @@ -151,6 +155,11 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { .build(); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + /* mock */ + doReturn(null) + .when(userService) + .findByUsername(USER_1_USERNAME); + /* test */ final Container container = containerService.create(request, principal); assertEquals(CONTAINER_1_NAME, container.getName()); @@ -168,10 +177,13 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* mock */ + doReturn(null) + .when(userService) + .findByUsername(USER_1_USERNAME); containerService.create(request, principal); /* test */ - assertThrows(DockerClientException.class, () -> { + assertThrows(ContainerAlreadyExistsException.class, () -> { containerService.create(request, principal); }); } 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 1f8a9f4089f393b2a8d25f28472a80a35658aab5..88c58a85e34098a6ef1eddde183d20544dc6fb1c 100644 --- a/fda-container-service/rest-service/src/test/resources/application.properties +++ b/fda-container-service/rest-service/src/test/resources/application.properties @@ -1,3 +1,6 @@ +# enable local spring profile +spring.profiles.active=local + # disable discovery spring.cloud.discovery.enabled = false diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java index 3a80f1fae455c44a2f7e5276d2d77cbbd57b040e..914d6ffe388f0592c2ab1fae1118877ead00da38 100644 --- a/fda-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java +++ b/fda-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java @@ -9,6 +9,7 @@ import at.tuwien.service.impl.RabbitMqServiceImpl; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.api.model.PortBinding; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.apache.http.auth.BasicUserPrincipal; @@ -20,6 +21,8 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate; 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.context.annotation.Profile; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.IOException; @@ -32,6 +35,7 @@ import static at.tuwien.config.DockerConfig.hostConfig; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@ActiveProfiles("test-noelastic") public class AmqpServiceIntegrationTest extends BaseUnitTest { private static final String AMQP_EXCHANGE = "fda"; @@ -72,10 +76,15 @@ public class AmqpServiceIntegrationTest extends BaseUnitTest { /* create amqp */ final CreateContainerResponse request = dockerClient.createContainerCmd(BROKER_IMAGE + ":" + BROKER_TAG) - .withHostConfig(hostConfig.withNetworkMode("fda-public")) + .withHostConfig( + hostConfig + .withNetworkMode("fda-public") + .withPortBindings(PortBinding.parse("5671:5671"), PortBinding.parse("5672:5672")) + ) .withName(BROKER_NAME) .withIpv4Address(BROKER_IP) .withHostName(BROKER_HOSTNAME) + .withEnv("RABBITMQ_DEFAULT_USER=fda", "RABBITMQ_DEFAULT_PASS=fda") .exec(); dockerClient.startContainerCmd(request.getId()) .exec(); diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java index 03667028d238ebf169476e85b43db790bf6f7605..ec9236eedb60cde656223efaea5ad762a11de2fa 100644 --- a/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ b/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java @@ -17,6 +17,7 @@ import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.ExposedPort; import com.github.dockerjava.api.model.HostConfig; import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.api.model.PortBinding; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.apache.http.auth.BasicUserPrincipal; @@ -31,10 +32,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; import java.security.Principal; -import java.util.Optional; import static at.tuwien.config.DockerConfig.*; -import static org.junit.jupiter.api.Assertions.*; @Log4j2 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @@ -92,12 +91,14 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* create elastic search */ final CreateContainerResponse search = dockerClient.createContainerCmd(SEARCH_IMAGE + ":" + SEARCH_TAG) - .withHostConfig(hostConfig.withNetworkMode("fda-public")) + .withHostConfig( + hostConfig + .withNetworkMode("fda-public") + .withPortBindings(PortBinding.parse("9200:9200"), PortBinding.parse("9300:9300")) + ) .withName(SEARCH_NAME) .withIpv4Address(SEARCH_IP) .withHostName(SEARCH_HOSTNAME) - .withHostConfig(new HostConfig() - .withPortBindings()) .withEnv("discovery.type=single-node", "ES_JAVA_OPTS=-Xms512m -Xmx512m", "logger.level=WARN") .exec(); CONTAINER_SEARCH.setHash(search.getId()); diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java index 16e899bd7aba7789a658fb28a2269bc86f83008d..eba11700e14884b430a014642f1c1d1ce4eb6eef 100644 --- a/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java +++ b/fda-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java @@ -3,14 +3,17 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.config.ReadyConfig; +import at.tuwien.entities.container.Container; import at.tuwien.entities.database.Database; import at.tuwien.exception.*; import at.tuwien.repository.jpa.ContainerRepository; import at.tuwien.repository.jpa.DatabaseRepository; import at.tuwien.service.impl.MariaDbServiceImpl; +import at.tuwien.service.impl.RabbitMqServiceImpl; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.model.Network; +import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.apache.http.auth.BasicUserPrincipal; import org.hibernate.Session; @@ -21,9 +24,9 @@ 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.context.ActiveProfiles; import org.springframework.test.context.junit.jupiter.SpringExtension; -import java.nio.channels.Channel; import java.security.Principal; import java.util.List; import java.util.Optional; @@ -36,6 +39,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) +@ActiveProfiles("test-noelastic") public class DatabaseServiceUnitTest extends BaseUnitTest { @MockBean @@ -44,6 +48,9 @@ public class DatabaseServiceUnitTest extends BaseUnitTest { @MockBean private Channel channel; + @MockBean + private RabbitMqServiceImpl rabbitMqService; + @Autowired private MariaDbServiceImpl databaseService; @@ -53,137 +60,79 @@ public class DatabaseServiceUnitTest extends BaseUnitTest { @MockBean private ContainerRepository containerRepository; - @BeforeAll - public static void beforeAll() throws InterruptedException { - afterAll(); - /* 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(); - - /* create amqp */ - final CreateContainerResponse request = dockerClient.createContainerCmd(BROKER_IMAGE + ":" + BROKER_TAG) - .withHostConfig(hostConfig.withNetworkMode("fda-public")) - .withName(BROKER_NAME) - .withIpv4Address(BROKER_IP) - .withHostName(BROKER_HOSTNAME) - .exec(); - dockerClient.startContainerCmd(request.getId()) - .exec(); - Thread.sleep(12 * 1000); + @Test + public void findAll_succeeds() { + /* mock */ + when(databaseRepository.findAll(CONTAINER_1_ID)) + .thenReturn(List.of(DATABASE_1)); + + /* test */ + final List<Database> response = databaseService.findAll(CONTAINER_1_ID); + assertEquals(1, response.size()); + assertEquals(DATABASE_1, response.get(0)); } - @AfterAll - public static void afterAll() { - /* 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(); - }); + @Test + public void findById_succeeds() throws DatabaseNotFoundException { + final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + + /* mock */ + when(databaseRepository.findById(DATABASE_1_ID)) + .thenReturn(Optional.of(DATABASE_1)); + + final Database response = databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID); + + /* test */ + assertEquals(DATABASE_1, response); + } + + @Test + public void findById_notFound_fails() { + final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + + /* mock */ + when(databaseRepository.findById(DATABASE_1_ID)) + .thenReturn(Optional.empty()); + + /* test */ + assertThrows(DatabaseNotFoundException.class, () -> { + databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID); + }); + } + + @Test + public void delete_notFound_fails() { + final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + + /* mock */ + when(containerRepository.findById(CONTAINER_1_ID)) + .thenReturn(Optional.of(mock(Container.class))); + when(databaseRepository.findById(DATABASE_1_ID)) + .thenReturn(Optional.empty()); + + /* test */ + assertThrows(DatabaseNotFoundException.class, () -> { + databaseService.delete(CONTAINER_1_ID, DATABASE_1_ID, principal); + }); + } + + @Test + public void create_notFound_fails() { + final DatabaseCreateDto request = DatabaseCreateDto.builder() + .name(DATABASE_1_NAME) + .build(); + final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + + /* mock */ + when(containerRepository.findById(CONTAINER_1_ID)) + .thenReturn(Optional.empty()); + + /* test */ + assertThrows(ContainerNotFoundException.class, () -> { + databaseService.create(CONTAINER_1_ID, request, principal); + }); } -// @Test -// public void findAll_succeeds() { -// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); -// -// /* mock */ -// when(databaseRepository.findAllByPublicAndContainerIdOrMine(CONTAINER_1_ID, USER_1_USERNAME)) -// .thenReturn(List.of(DATABASE_1)); -// -// /* test */ -// final List<Database> response = databaseService.findAll(CONTAINER_1_ID, principal); -// assertEquals(1, response.size()); -// assertEquals(DATABASE_1, response.get(0)); -// } -// -// @Test -// public void findById_succeeds() throws DatabaseNotFoundException { -// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); -// -// /* mock */ -// when(databaseRepository.findById(DATABASE_1_ID)) -// .thenReturn(Optional.of(DATABASE_1)); -// -// final Database response = databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID, principal); -// -// /* test */ -// assertEquals(DATABASE_1, response); -// } -// -// @Test -// public void findById_notFound_fails() { -// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); -// -// /* mock */ -// when(databaseRepository.findById(DATABASE_1_ID)) -// .thenReturn(Optional.empty()); -// -// /* test */ -// assertThrows(DatabaseNotFoundException.class, () -> { -// databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID, principal); -// }); -// } -// -// @Test -// public void delete_notFound_fails() { -// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); -// -// /* mock */ -// when(databaseRepository.findById(DATABASE_1_ID)) -// .thenReturn(Optional.empty()); -// -// /* test */ -// assertThrows(DatabaseNotFoundException.class, () -> { -// databaseService.delete(CONTAINER_1_ID, DATABASE_1_ID, principal); -// }); -// } -// -// @Test -// public void create_notFound_fails() { -// final DatabaseCreateDto request = DatabaseCreateDto.builder() -// .name(DATABASE_1_NAME) -// .build(); -// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); -// -// /* mock */ -// when(containerRepository.findById(CONTAINER_1_ID)) -// .thenReturn(Optional.empty()); -// -// /* test */ -// assertThrows(ContainerNotFoundException.class, () -> { -// databaseService.create(CONTAINER_1_ID, request, principal); -// }); -// } -// // @Test // public void getSession_fails() { // /* no mock needed since unit test */ diff --git a/fda-database-service/rest-service/src/test/resources/application.properties b/fda-database-service/rest-service/src/test/resources/application.properties index 7676dffdf898557eec4630f71def8b976a3779c4..498d2d1a96bb71a90c77c1f4f72d27af55dc1ed2 100644 --- a/fda-database-service/rest-service/src/test/resources/application.properties +++ b/fda-database-service/rest-service/src/test/resources/application.properties @@ -1,3 +1,6 @@ +# enable local spring profile +spring.profiles.active=local + # disable discovery spring.cloud.discovery.enabled = false @@ -15,4 +18,6 @@ spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=false # disable elasticsearch -spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration \ No newline at end of file +spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration + +spring.rabbitmq.host=fda-broker-service \ No newline at end of file diff --git a/fda-identifier-service/rest-service/src/main/resources/application-local.yml b/fda-identifier-service/rest-service/src/main/resources/application-local.yml new file mode 100644 index 0000000000000000000000000000000000000000..63590d22680698edecf0b66a181f762752626cfb --- /dev/null +++ b/fda-identifier-service/rest-service/src/main/resources/application-local.yml @@ -0,0 +1,37 @@ +app.version: '@project.version@' +spring: + main.banner-mode: off + datasource: + url: jdbc:postgresql://localhost:5432/fda + driver-class-name: org.postgresql.Driver + username: postgres + password: postgres + jpa: + show-sql: false + database-platform: org.hibernate.dialect.PostgreSQLDialect + hibernate: + ddl-auto: validate + open-in-view: false + properties: + hibernate: + jdbc: + time_zone: UTC + application: + name: authentication-service + cloud: + loadbalancer.ribbon.enabled: false +server.port: 9096 +logging: + pattern.console: "%d %highlight(%-5level) %msg%n" + level: + root: warn + at.tuwien.: debug + at.tuwien.auth.UserPermissionEvaluator: trace + org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug +eureka: + instance.hostname: authentication-service + client.serviceUrl.defaultZone: http://localhost:9090/eureka/ +fda: + ready.path: ./ready + website: localhost:3000 + gateway.endpoint: http://localhost:9095 \ No newline at end of file diff --git a/fda-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java index c17eec400b6b20d290b8ba2e2469696e7854d9dc..7c053503858fa166e51149e910b0ca661260ec51 100644 --- a/fda-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ b/fda-identifier-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java @@ -11,11 +11,13 @@ import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; import at.tuwien.entities.identifier.Creator; import at.tuwien.entities.identifier.Identifier; +import at.tuwien.entities.identifier.IdentifierType; import at.tuwien.entities.identifier.VisibilityType; import at.tuwien.entities.user.User; import org.springframework.test.context.TestPropertySource; import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -27,12 +29,19 @@ public abstract class BaseUnitTest { public final static String USER_1_PASSWORD = "junit"; public final static String USER_1_EMAIL = "junit@example.com"; public final static Boolean USER_1_EMAIL_VERIFIED = true; + public final static Boolean USER_1_THEME_DARK = false; + public final static Instant USER_1_CREATED = Instant.now() + .minus(1, ChronoUnit.DAYS); + public final static Instant USER_1_LAST_MODIFIED = USER_1_CREATED; public final static User USER_1 = User.builder() .username(USER_1_USERNAME) .password(USER_1_PASSWORD) .email(USER_1_EMAIL) .emailVerified(USER_1_EMAIL_VERIFIED) + .themeDark(USER_1_THEME_DARK) + .created(USER_1_CREATED) + .lastModified(USER_1_LAST_MODIFIED) .build(); public final static Long DATABASE_1_ID = 1L; @@ -45,7 +54,7 @@ public abstract class BaseUnitTest { public final static String DATABASE_2_NAME = "Test Database 2"; public final static String DATABASE_2_INTERNAL_NAME = "test_database_2"; public final static String DATABASE_2_EXCHANGE = "fda." + DATABASE_2_INTERNAL_NAME; - public final static Boolean DATABASE_2_PUBLIC = true; + public final static Boolean DATABASE_2_PUBLIC = false; public final static Long TABLE_1_ID = 1L; public final static String TABLE_1_NAME = "Rainfall"; @@ -236,6 +245,7 @@ public abstract class BaseUnitTest { public final static Long IDENTIFIER_1_ID = 1L; public final static Long IDENTIFIER_1_QUERY_ID = QUERY_1_ID; + public final static Long IDENTIFIER_1_CONTAINER_ID = CONTAINER_1_ID; public final static Long IDENTIFIER_1_DATABASE_ID = DATABASE_1_ID; public final static String IDENTIFIER_1_DESCRIPTION = "Selecting all from the weather Australia table"; public final static String IDENTIFIER_1_TITLE = "Australia weather data"; @@ -251,15 +261,19 @@ public abstract class BaseUnitTest { public final static String IDENTIFIER_1_QUERY = "SELECT `id` FROM `foobar`"; public final static String IDENTIFIER_1_NORMALIZED = "SELECT `id` FROM `foobar`"; public final static Long IDENTIFIER_1_RESULT_NUMBER = 2L; + public final static String IDENTIFIER_1_PUBLISHER = "Australian Government"; + public final static IdentifierType IDENTIFIER_1_TYPE = IdentifierType.SUBSET; + public final static IdentifierTypeDto IDENTIFIER_1_TYPE_DTO = IdentifierTypeDto.SUBSET; public final static Long IDENTIFIER_2_ID = 2L; public final static Long IDENTIFIER_2_QUERY_ID = QUERY_2_ID; - public final static Long IDENTIFIER_2_DATABASE_ID = DATABASE_1_ID; + public final static Long IDENTIFIER_2_CONTAINER_ID = CONTAINER_2_ID; + public final static Long IDENTIFIER_2_DATABASE_ID = DATABASE_2_ID; public final static String IDENTIFIER_2_DESCRIPTION = "Selecting all from the weather Austria table"; public final static String IDENTIFIER_2_TITLE = "Austria weather data"; public final static String IDENTIFIER_2_DOI = "10.1000/183"; - public final static VisibilityType IDENTIFIER_2_VISIBILITY = VisibilityType.EVERYONE; - public final static VisibilityTypeDto IDENTIFIER_2_VISIBILITY_DTO = VisibilityTypeDto.EVERYONE; + public final static VisibilityType IDENTIFIER_2_VISIBILITY = VisibilityType.SELF; + public final static VisibilityTypeDto IDENTIFIER_2_VISIBILITY_DTO = VisibilityTypeDto.SELF; public final static Instant IDENTIFIER_2_CREATED = Instant.ofEpochSecond(1641588352); public final static Instant IDENTIFIER_2_MODIFIED = Instant.ofEpochSecond(1541588352); public final static Instant IDENTIFIER_2_EXECUTION = Instant.ofEpochSecond(1541588352); @@ -271,11 +285,14 @@ public abstract class BaseUnitTest { public final static String IDENTIFIER_2_QUERY = "SELECT `id` FROM `foobar`"; public final static String IDENTIFIER_2_NORMALIZED = "SELECT `id` FROM `foobar`"; public final static Long IDENTIFIER_2_RESULT_NUMBER = 2L; + public final static String IDENTIFIER_2_PUBLISHER = "Austrian Government"; + public final static IdentifierType IDENTIFIER_2_TYPE = IdentifierType.SUBSET; + public final static IdentifierTypeDto IDENTIFIER_2_TYPE_DTO = IdentifierTypeDto.SUBSET; public final static Identifier IDENTIFIER_1 = Identifier.builder() .id(IDENTIFIER_1_ID) - .containerId(CONTAINER_1_ID) - .databaseId(DATABASE_1_ID) + .containerId(IDENTIFIER_1_CONTAINER_ID) + .databaseId(IDENTIFIER_1_DATABASE_ID) .queryId(IDENTIFIER_1_QUERY_ID) .description(IDENTIFIER_1_DESCRIPTION) .title(IDENTIFIER_1_TITLE) @@ -290,12 +307,14 @@ public abstract class BaseUnitTest { .query(IDENTIFIER_1_QUERY) .queryNormalized(IDENTIFIER_1_NORMALIZED) .resultNumber(IDENTIFIER_1_RESULT_NUMBER) + .publisher(IDENTIFIER_1_PUBLISHER) + .type(IDENTIFIER_1_TYPE) .build(); public final static Identifier IDENTIFIER_2 = Identifier.builder() .id(IDENTIFIER_2_ID) - .containerId(CONTAINER_2_ID) - .databaseId(DATABASE_2_ID) + .containerId(IDENTIFIER_2_CONTAINER_ID) + .databaseId(IDENTIFIER_2_DATABASE_ID) .queryId(IDENTIFIER_2_QUERY_ID) .description(IDENTIFIER_2_DESCRIPTION) .title(IDENTIFIER_2_TITLE) @@ -312,6 +331,8 @@ public abstract class BaseUnitTest { .query(IDENTIFIER_2_QUERY) .queryNormalized(IDENTIFIER_2_NORMALIZED) .resultNumber(IDENTIFIER_2_RESULT_NUMBER) + .publisher(IDENTIFIER_2_PUBLISHER) + .type(IDENTIFIER_2_TYPE) .build(); public final static Creator CREATOR_1 = Creator.builder() @@ -401,12 +422,16 @@ public abstract class BaseUnitTest { public final static IdentifierCreateDto IDENTIFIER_1_DTO_REQUEST = IdentifierCreateDto.builder() .qid(IDENTIFIER_1_QUERY_ID) + .cid(IDENTIFIER_1_CONTAINER_ID) + .dbid(IDENTIFIER_1_DATABASE_ID) .description(IDENTIFIER_1_DESCRIPTION) .title(IDENTIFIER_1_TITLE) .doi(IDENTIFIER_1_DOI) .visibility(IDENTIFIER_1_VISIBILITY_DTO) .publicationYear(IDENTIFIER_1_PUBLICATION_YEAR) .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO)) + .publisher(IDENTIFIER_1_PUBLISHER) + .type(IDENTIFIER_1_TYPE_DTO) .build(); public final static String RELATED_IDENTIFIER_1_VALUE = "10.5281/zenodo.6637333"; @@ -421,6 +446,8 @@ public abstract class BaseUnitTest { public final static IdentifierCreateDto IDENTIFIER_2_DTO_REQUEST = IdentifierCreateDto.builder() .qid(IDENTIFIER_2_QUERY_ID) + .cid(IDENTIFIER_2_CONTAINER_ID) + .dbid(IDENTIFIER_2_DATABASE_ID) .description(IDENTIFIER_2_DESCRIPTION) .title(IDENTIFIER_2_TITLE) .doi(IDENTIFIER_2_DOI) @@ -430,6 +457,8 @@ public abstract class BaseUnitTest { .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO)) + .publisher(IDENTIFIER_2_PUBLISHER) + .type(IDENTIFIER_2_TYPE_DTO) .build(); public final static String COLUMN_1_INTERNAL_NAME = "id"; diff --git a/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java index c63498e58ae6a9b3c5d5823f79b1d0da8f56948b..3ce48e11a5e94b3ed2d37f62965e42d26097116d 100644 --- a/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java +++ b/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java @@ -67,6 +67,9 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { creatorRepository.save(CREATOR_1); creatorRepository.save(CREATOR_2); IDENTIFIER_1.setCreators(List.of(CREATOR_1, CREATOR_2)); + identifierRepository.save(IDENTIFIER_1); + containerRepository.save(CONTAINER_2); + databaseRepository.save(DATABASE_2); } @Test @@ -76,6 +79,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { /* mock */ identifierRepository.save(Identifier.builder() .id(IDENTIFIER_2_ID) + .containerId(IDENTIFIER_2_CONTAINER_ID) .queryId(IDENTIFIER_2_QUERY_ID) .databaseId(IDENTIFIER_2_DATABASE_ID) .description(IDENTIFIER_2_DESCRIPTION) @@ -84,8 +88,10 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { .visibility(IDENTIFIER_2_VISIBILITY) .created(IDENTIFIER_2_CREATED) .lastModified(IDENTIFIER_2_MODIFIED) - .creators(List.of(CREATOR_1, CREATOR_2)) + .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) .deleted(Instant.now().minus(4, ChronoUnit.MINUTES)) + .publisher(IDENTIFIER_2_PUBLISHER) + .type(IDENTIFIER_2_TYPE) .build()); /* test */ @@ -100,6 +106,8 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { assertEquals(2, response.get(0).getCreators().size()); assertEquals(CREATOR_1_ID, response.get(0).getCreators().get(0).getId()); assertEquals(CREATOR_2_ID, response.get(0).getCreators().get(1).getId()); + assertEquals(IDENTIFIER_1_PUBLISHER, response.get(0).getPublisher()); + assertEquals(IDENTIFIER_1_TYPE, response.get(0).getType()); } @Test @@ -110,11 +118,11 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { final String bearer = "Bearer abcxyz"; /* mock */ - when(queryServiceGateway.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer)) + when(queryServiceGateway.find(CONTAINER_2_ID, DATABASE_2_ID, IDENTIFIER_2_DTO_REQUEST, bearer)) .thenReturn(QUERY_2_DTO); /* test */ - final Identifier response = identifierService.create(IDENTIFIER_2_DTO_REQUEST, principal, bearer); + final Identifier response = identifierService.create(IDENTIFIER_2_DTO_REQUEST, principal, bearer); assertEquals(IDENTIFIER_2_ID, response.getId()); assertEquals(IDENTIFIER_2_DATABASE_ID, response.getDatabaseId()); assertEquals(IDENTIFIER_2_QUERY_ID, response.getQueryId()); @@ -126,13 +134,17 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { @Test public void create_queryNotExists_fails() throws QueryNotFoundException, RemoteUnavailableException { - final IdentifierCreateDto request = IdentifierCreateDto.builder() + IdentifierCreateDto request = IdentifierCreateDto.builder() .qid(IDENTIFIER_2_QUERY_ID) + .cid(IDENTIFIER_2_CONTAINER_ID) + .dbid(IDENTIFIER_2_DATABASE_ID) .description(IDENTIFIER_2_DESCRIPTION) .title(IDENTIFIER_2_TITLE) .doi(IDENTIFIER_2_DOI) .visibility(IDENTIFIER_2_VISIBILITY_DTO) - .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO)) + .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) + .publisher(IDENTIFIER_2_PUBLISHER) + .type(IDENTIFIER_2_TYPE_DTO) .build(); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final String bearer = "Bearer abcxyz"; @@ -140,7 +152,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { /* mock */ doThrow(QueryNotFoundException.class) .when(queryServiceGateway) - .find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer); + .find(CONTAINER_2_ID, DATABASE_2_ID, request, bearer); /* test */ assertThrows(QueryNotFoundException.class, () -> { @@ -149,21 +161,23 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { } @Test - public void create_identifierAlreadyExists_fails() throws QueryNotFoundException, RemoteUnavailableException { - final IdentifierCreateDto request = IdentifierCreateDto.builder() + public void create_identifierAlreadyExists_fails() { + IdentifierCreateDto request = IdentifierCreateDto.builder() .qid(IDENTIFIER_1_QUERY_ID) - .description(IDENTIFIER_2_DESCRIPTION) - .title(IDENTIFIER_2_TITLE) - .doi(IDENTIFIER_2_DOI) - .visibility(IDENTIFIER_2_VISIBILITY_DTO) - .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO)) + .cid(IDENTIFIER_1_CONTAINER_ID) + .dbid(IDENTIFIER_1_DATABASE_ID) + .description(IDENTIFIER_1_DESCRIPTION) + .title(IDENTIFIER_1_TITLE) + .doi(IDENTIFIER_1_DOI) + .visibility(IDENTIFIER_1_VISIBILITY_DTO) + .publicationYear(IDENTIFIER_1_PUBLICATION_YEAR) + .publisher(IDENTIFIER_1_PUBLISHER) + .type(IDENTIFIER_1_TYPE_DTO) .build(); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final String bearer = "Bearer abcxyz"; /* mock */ - when(queryServiceGateway.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_1_DTO_REQUEST, bearer)) - .thenReturn(QUERY_1_DTO); /* test */ assertThrows(IdentifierAlreadyExistsException.class, () -> { @@ -179,7 +193,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { /* mock */ doThrow(RemoteUnavailableException.class) .when(queryServiceGateway) - .find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer); + .find(CONTAINER_2_ID, DATABASE_2_ID, IDENTIFIER_2_DTO_REQUEST, bearer); /* test */ assertThrows(RemoteUnavailableException.class, () -> { @@ -224,7 +238,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { public void update_succeeds() throws IdentifierNotFoundException { /* test */ - final Identifier response = identifierService.update( IDENTIFIER_1_ID, IDENTIFIER_1_DTO); + final Identifier response = identifierService.update(IDENTIFIER_1_ID, IDENTIFIER_1_DTO); assertEquals(IDENTIFIER_1_ID, response.getId()); assertEquals(IDENTIFIER_1_DATABASE_ID, response.getDatabaseId()); assertEquals(IDENTIFIER_1_QUERY_ID, response.getQueryId()); @@ -236,16 +250,18 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { @Test public void publish_everyone_succeeds() throws IdentifierAlreadyPublishedException, IdentifierNotFoundException { + identifierRepository.save(IDENTIFIER_2); /* test */ - identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.EVERYONE); + identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE); } @Test public void publish_trusted_succeeds() throws IdentifierAlreadyPublishedException, IdentifierNotFoundException { + identifierRepository.save(IDENTIFIER_2); /* test */ - identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.TRUSTED); + identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.TRUSTED); } @Test @@ -261,42 +277,13 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { @Transactional public void publish_alreadyPublished_fails() throws IdentifierAlreadyPublishedException, IdentifierNotFoundException { + identifierRepository.save(IDENTIFIER_2); /* mock */ - identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.EVERYONE); + identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE); /* test */ assertThrows(IdentifierAlreadyPublishedException.class, () -> { - identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.EVERYONE); - }); - } - - @Test - public void publish_queryNotFound_fails() throws QueryNotFoundException, RemoteUnavailableException { - final String bearer = "Bearer abcxyz"; - - /* mock */ - doThrow(QueryNotFoundException.class) - .when(queryServiceGateway) - .find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer); - - /* test */ - assertThrows(IdentifierNotFoundException.class, () -> { - identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE); - }); - } - - @Test - public void publish_serviceUnavailable_fails() throws QueryNotFoundException, RemoteUnavailableException { - final String bearer = "Bearer abcxyz"; - - /* mock */ - doThrow(RemoteUnavailableException.class) - .when(queryServiceGateway) - .find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer); - - /* test */ - assertThrows(IdentifierNotFoundException.class, () -> { identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE); }); } diff --git a/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java b/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java index d5ac9887b370727dd79ce32c9f078bf791276f2e..a52662d6ffd1ff9cbca7adc8bde3abbe1e7c7222 100644 --- a/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java +++ b/fda-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java @@ -3,6 +3,7 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.api.database.query.QueryDto; import at.tuwien.api.identifier.IdentifierCreateDto; +import at.tuwien.api.identifier.IdentifierTypeDto; import at.tuwien.api.identifier.VisibilityTypeDto; import at.tuwien.entities.identifier.Identifier; import at.tuwien.exception.*; @@ -56,7 +57,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { .thenReturn(List.of(IDENTIFIER_1)); /* test */ - final List<Identifier> response = identifierService.findAll(CONTAINER_1_ID, DATABASE_1_ID); + final List<Identifier> response = identifierService.findAll(DATABASE_1_ID, null); assertEquals(1, response.size()); assertEquals(IDENTIFIER_1, response.get(0)); } @@ -106,6 +107,9 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException { final IdentifierCreateDto request = IdentifierCreateDto.builder() + .cid(CONTAINER_1_ID) + .dbid(DATABASE_1_ID) + .type(IdentifierTypeDto.SUBSET) .qid(IDENTIFIER_1_QUERY_ID) .description(IDENTIFIER_1_DESCRIPTION) .title(IDENTIFIER_1_TITLE) diff --git a/fda-identifier-service/rest-service/src/test/resources/application.properties b/fda-identifier-service/rest-service/src/test/resources/application.properties index 1226b46442ad34bf669e591ee5b99d5ca29ce823..66bbc590167342f17c9e94c07cba9d1dffc0680c 100644 --- a/fda-identifier-service/rest-service/src/test/resources/application.properties +++ b/fda-identifier-service/rest-service/src/test/resources/application.properties @@ -1,3 +1,6 @@ +# enable local spring profile +spring.profiles.active=local + # disable discovery spring.cloud.discovery.enabled = false diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java index 7e4c8beaa63577324bcc2598326f28e5068a5da6..f39af4ee7b302650ba31b46a711577e70cb60d57 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java @@ -34,6 +34,7 @@ public class QueryDto { private Long dbid; @JsonIgnore + @EqualsAndHashCode.Exclude @NotNull(message = "created by is required") private Long createdBy; diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java index ec6dc13ee2e386e1ca397fd3ecaa440f94f73cff..3ed32c1cb646a0033b0569c82ea1867144ee843f 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java @@ -9,6 +9,7 @@ import lombok.*; @Builder @AllArgsConstructor @NoArgsConstructor +@EqualsAndHashCode public class GrantedAuthorityDto { @Schema(example = "ROLE_RESEARCHER") diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java index 87e543d7696e802dc59032111ac290396447a43e..04cc9be61a59f3c91a9dc3e9e7bed57a845fc2eb 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java @@ -15,6 +15,7 @@ import java.util.List; @Builder @AllArgsConstructor @NoArgsConstructor +@EqualsAndHashCode public class UserDto { @NotNull @@ -51,13 +52,17 @@ public class UserDto { @Schema(example = "true") private Boolean themeDark; + @EqualsAndHashCode.Exclude private List<ContainerDto> containers; + @EqualsAndHashCode.Exclude private List<ContainerDto> databases; + @EqualsAndHashCode.Exclude private List<ContainerDto> identifiers; @ToString.Exclude + @EqualsAndHashCode.Exclude @JsonIgnore private String password; diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java index 66690f544def964c23c4b647d16036e137525d60..c54769404bc35fe1bfa03c472de3a0cfc84dda0c 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java @@ -1,8 +1,12 @@ package at.tuwien; +import at.tuwien.api.database.query.QueryBriefDto; import at.tuwien.api.database.query.QueryDto; +import at.tuwien.api.user.UserDto; import at.tuwien.entities.container.image.ContainerImageDate; import at.tuwien.entities.database.table.columns.concepts.Concept; +import at.tuwien.entities.user.RoleType; +import at.tuwien.entities.user.User; import at.tuwien.querystore.Query; import at.tuwien.entities.container.Container; import at.tuwien.entities.container.image.ContainerImage; @@ -15,6 +19,7 @@ import at.tuwien.entities.database.table.columns.TableColumnType; import org.springframework.test.context.TestPropertySource; import java.time.Instant; +import java.util.Collections; import java.util.List; import static java.time.temporal.ChronoUnit.*; @@ -22,7 +27,29 @@ import static java.time.temporal.ChronoUnit.*; @TestPropertySource(locations = "classpath:application.properties") public abstract class BaseUnitTest { + public final static long USER_1_ID = 1; public final static String USER_1_USERNAME = "junit"; + public final static String USER_1_EMAIL = "junit@example.com"; + public final static Instant USER_1_CREATED = Instant.now().minus(1, HOURS); + public final static User USER_1 = User.builder() + .id(USER_1_ID) + .username(USER_1_USERNAME) + .email(USER_1_EMAIL) + .emailVerified(true) + .themeDark(false) + .password("password") + .roles(Collections.singletonList(RoleType.ROLE_RESEARCHER)) + .created(USER_1_CREATED) + .lastModified(USER_1_CREATED) + .build(); + public final static UserDto USER_1_DTO = UserDto.builder() + .id(USER_1_ID) + .username(USER_1_USERNAME) + .email(USER_1_EMAIL) + .emailVerified(true) + .themeDark(false) + .password("password") + .build(); public final static String DATABASE_NET = "fda-userdb"; @@ -322,8 +349,8 @@ public abstract class BaseUnitTest { public final static Long COLUMN_4_5_ID = 13L; public final static Integer COLUMN_4_5_ORDINALPOS = 4; public final static Boolean COLUMN_4_5_PRIMARY = false; - public final static String COLUMN_4_5_NAME = "Eggs"; - public final static String COLUMN_4_5_INTERNAL_NAME = "eggs"; + public final static String COLUMN_4_5_NAME = "Bread"; + public final static String COLUMN_4_5_INTERNAL_NAME = "bread"; public final static TableColumnType COLUMN_4_5_TYPE = TableColumnType.BOOLEAN; public final static Long COLUMN_4_5_DATE_FORMAT = null; public final static Boolean COLUMN_4_5_NULL = true; @@ -364,8 +391,8 @@ public abstract class BaseUnitTest { public final static Long COLUMN_4_8_ID = 16L; public final static Integer COLUMN_4_8_ORDINALPOS = 7; public final static Boolean COLUMN_4_8_PRIMARY = false; - public final static String COLUMN_4_8_NAME = "Milk"; - public final static String COLUMN_4_8_INTERNAL_NAME = "milk"; + public final static String COLUMN_4_8_NAME = "Water"; + public final static String COLUMN_4_8_INTERNAL_NAME = "water"; public final static TableColumnType COLUMN_4_8_TYPE = TableColumnType.BOOLEAN; public final static Long COLUMN_4_8_DATE_FORMAT = null; public final static Boolean COLUMN_4_8_NULL = true; @@ -392,8 +419,8 @@ public abstract class BaseUnitTest { public final static Long COLUMN_4_10_ID = 18L; public final static Integer COLUMN_4_10_ORDINALPOS = 9; public final static Boolean COLUMN_4_10_PRIMARY = false; - public final static String COLUMN_4_10_NAME = "Airborne"; - public final static String COLUMN_4_10_INTERNAL_NAME = "airborne"; + public final static String COLUMN_4_10_NAME = "Waterborne"; + public final static String COLUMN_4_10_INTERNAL_NAME = "waterborne"; public final static TableColumnType COLUMN_4_10_TYPE = TableColumnType.BOOLEAN; public final static Long COLUMN_4_10_DATE_FORMAT = null; public final static Boolean COLUMN_4_10_NULL = true; @@ -736,6 +763,7 @@ public abstract class BaseUnitTest { .resultHash(QUERY_1_RESULT_HASH) .created(QUERY_1_CREATED) .execution(QUERY_1_EXECUTION) + .createdBy(USER_1_ID) .build(); public final static QueryDto QUERY_1_DTO = QueryDto.builder() @@ -746,6 +774,20 @@ public abstract class BaseUnitTest { .resultHash(QUERY_1_RESULT_HASH) .created(QUERY_1_CREATED) .execution(QUERY_1_EXECUTION) + .createdBy(USER_1_ID) + .creator(USER_1_DTO) + .build(); + + public final static QueryBriefDto QUERY_1_BRIEF_DTO = QueryBriefDto.builder() + .id(QUERY_1_ID) + .cid(QUERY_1_CONTAINER_ID) + .dbid(QUERY_1_DATABASE_ID) + .query(QUERY_1_STATEMENT) + .resultHash(QUERY_1_RESULT_HASH) + .created(QUERY_1_CREATED) + .execution(QUERY_1_EXECUTION) + .createdBy(USER_1_ID) + .creator(USER_1_DTO) .build(); public final static List<TableColumn> TABLE_1_COLUMNS = List.of(TableColumn.builder() @@ -772,6 +814,7 @@ public abstract class BaseUnitTest { .internalName(COLUMN_1_2_INTERNAL_NAME) .columnType(COLUMN_1_2_TYPE) .dfid(COLUMN_1_2_DATE_FORMAT) + .dateFormat(IMAGE_DATE_1) .isNullAllowed(COLUMN_1_2_NULL) .isUnique(COLUMN_1_2_UNIQUE) .autoGenerated(COLUMN_1_2_AUTO_GENERATED) @@ -1822,6 +1865,7 @@ public abstract class BaseUnitTest { .container(CONTAINER_1) .internalName(DATABASE_1_INTERNALNAME) .exchange(DATABASE_1_EXCHANGE) + .creator(USER_1) .build(); public final static Database DATABASE_2 = Database.builder() diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java index 2d438aad87ded46447f7b3409c16d092700e2091..08c6dea41bcff66418c0400e185b6221f05e3e50 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java @@ -1,25 +1,38 @@ package at.tuwien.endpoint; import at.tuwien.BaseUnitTest; +import at.tuwien.ExportResource; import at.tuwien.config.ReadyConfig; import at.tuwien.exception.*; +import at.tuwien.listener.impl.RabbitMqListenerImpl; +import at.tuwien.service.DatabaseService; +import at.tuwien.service.QueryService; +import at.tuwien.service.TableService; import at.tuwien.service.impl.QueryServiceImpl; +import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.apache.http.auth.BasicUserPrincipal; +import org.apache.http.impl.io.EmptyInputStream; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; 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.core.io.InputStreamResource; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.security.test.context.support.WithSecurityContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; import java.time.Instant; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; @Log4j2 @SpringBootTest @@ -29,11 +42,20 @@ public class ExportEndpointUnitTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; + @MockBean + private Channel channel; + + @MockBean + private RabbitMqListenerImpl rabbitMqListener; + @Autowired private ExportEndpoint exportEndpoint; @MockBean - private QueryServiceImpl queryService; + private QueryService queryService; + + @MockBean + private DatabaseService databaseService; @Test public void export_timestampNull_succeeds() throws TableNotFoundException, DatabaseConnectionException, @@ -41,6 +63,17 @@ public class ExportEndpointUnitTest extends BaseUnitTest { PaginationException, ContainerNotFoundException, NotAllowedException, QueryMalformedException { final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + /* mock */ + doReturn(DATABASE_1, DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); + doReturn( + ExportResource.builder() + .resource(new InputStreamResource(EmptyInputStream.nullInputStream())) + .filename("/tmp/filename") + .build() + ).when(queryService) + .findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, null); + /* test */ final ResponseEntity<InputStreamResource> response = exportEndpoint.export(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, null, principal); @@ -56,6 +89,17 @@ public class ExportEndpointUnitTest extends BaseUnitTest { .minusMillis(1000 * 1000); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + /* mock */ + doReturn(DATABASE_1, DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); + doReturn( + ExportResource.builder() + .resource(new InputStreamResource(EmptyInputStream.nullInputStream())) + .filename("/tmp/filename") + .build() + ).when(queryService) + .findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request); + /* test */ final ResponseEntity<InputStreamResource> response = exportEndpoint.export(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request, principal); @@ -72,6 +116,17 @@ public class ExportEndpointUnitTest extends BaseUnitTest { .plusMillis(1000 * 1000); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + /* mock */ + doReturn(DATABASE_1, DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); + doReturn( + ExportResource.builder() + .resource(new InputStreamResource(EmptyInputStream.nullInputStream())) + .filename("/tmp/filename") + .build() + ).when(queryService) + .findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request); + /* test */ final ResponseEntity<InputStreamResource> response = exportEndpoint.export(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request, principal); diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java index a01d82a75ac70bf94d6cd6cd3984032d252c07f9..7d53a289675c58b64d13628c7b8aca173d1920ad 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java @@ -1,9 +1,13 @@ package at.tuwien.endpoint; import at.tuwien.BaseUnitTest; +import at.tuwien.config.ReadyConfig; +import at.tuwien.listener.impl.RabbitMqListenerImpl; +import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.junit.jupiter.SpringExtension; @Log4j2 @@ -11,4 +15,13 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; @ExtendWith(SpringExtension.class) public class QueryEndpointUnitTest extends BaseUnitTest { + @MockBean + private ReadyConfig readyConfig; + + @MockBean + private Channel channel; + + @MockBean + private RabbitMqListenerImpl rabbitMqListener; + } diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java index 5b33e69326dfc7a0a7e402add1418671dce31326..362d7d12b9348e91265abc2edfd8d123072a2083 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java @@ -5,8 +5,12 @@ import at.tuwien.api.database.query.QueryBriefDto; import at.tuwien.api.database.query.QueryDto; import at.tuwien.config.ReadyConfig; import at.tuwien.exception.*; +import at.tuwien.listener.impl.RabbitMqListenerImpl; +import at.tuwien.service.DatabaseService; import at.tuwien.service.QueryService; +import at.tuwien.service.UserService; import at.tuwien.service.impl.StoreServiceImpl; +import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.apache.http.auth.BasicUserPrincipal; import org.junit.jupiter.api.Test; @@ -16,12 +20,18 @@ 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.authentication.TestingAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; +import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; @Log4j2 @@ -32,6 +42,12 @@ public class StoreEndpointUnitTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; + @MockBean + private Channel channel; + + @MockBean + private RabbitMqListenerImpl rabbitMqListener; + @Autowired private StoreEndpoint storeEndpoint; @@ -41,31 +57,47 @@ public class StoreEndpointUnitTest extends BaseUnitTest { @MockBean private StoreServiceImpl storeService; + @MockBean + private UserService userService; + + @MockBean + private DatabaseService databaseService; + @Test + @WithMockUser(username = USER_1_USERNAME) public void findAll_succeeds() throws QueryStoreException, DatabaseNotFoundException, ImageNotSupportedException, ContainerNotFoundException, NotAllowedException, DatabaseConnectionException, TableMalformedException { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); /* mock */ - when(storeService.findAll(CONTAINER_1_ID, DATABASE_1_ID, true)) - .thenReturn(List.of(QUERY_1)); + doReturn(List.of(QUERY_1)).when(storeService) + .findAll(CONTAINER_1_ID, DATABASE_1_ID, true); + doReturn(Collections.singletonList(USER_1)).when(userService) + .findAll(); + doReturn(DATABASE_1, DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ final ResponseEntity<List<QueryBriefDto>> response = storeEndpoint.findAll(CONTAINER_1_ID, DATABASE_1_ID, true, principal); assertEquals(HttpStatus.OK, response.getStatusCode()); assertNotNull(response.getBody()); assertEquals(1, response.getBody().size()); - assertEquals(QUERY_1_DTO, response.getBody().get(0)); + assertEquals(QUERY_1_BRIEF_DTO, response.getBody().get(0)); } @Test + @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER") public void find_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException, ImageNotSupportedException, ContainerNotFoundException, UserNotFoundException, NotAllowedException, DatabaseConnectionException { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); /* mock */ - when(storeService.findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID)) - .thenReturn(QUERY_1); + doReturn(QUERY_1).when(storeService) + .findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID); + doReturn(USER_1).when(userService) + .find(USER_1_ID); + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ final ResponseEntity<QueryDto> response = storeEndpoint.find(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID, principal); @@ -74,13 +106,16 @@ public class StoreEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER") public void find_notFound_fails() throws QueryNotFoundException, DatabaseNotFoundException, ImageNotSupportedException, ContainerNotFoundException, QueryStoreException, DatabaseConnectionException { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); /* mock */ - when(storeService.findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID)) - .thenThrow(QueryNotFoundException.class); + doThrow(QueryNotFoundException.class).when(storeService) + .findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID); + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ assertThrows(QueryNotFoundException.class, () -> { @@ -89,13 +124,16 @@ public class StoreEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER") public void find_dbNotFound_fails() throws QueryNotFoundException, DatabaseNotFoundException, ImageNotSupportedException, ContainerNotFoundException, QueryStoreException, DatabaseConnectionException { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); /* mock */ - when(storeService.findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID)) - .thenThrow(DatabaseNotFoundException.class); + doThrow(DatabaseNotFoundException.class).when(storeService) + .findOne(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID); + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ assertThrows(DatabaseNotFoundException.class, () -> { diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java index 4b93f6ab3eaead520d3356ed1b86f777f4868a33..71be63fc134cbf6c3b3a669b50b0dd90efad06e9 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java @@ -6,7 +6,10 @@ import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.TableCsvDto; import at.tuwien.config.ReadyConfig; import at.tuwien.exception.*; +import at.tuwien.listener.impl.RabbitMqListenerImpl; +import at.tuwien.service.DatabaseService; import at.tuwien.service.impl.QueryServiceImpl; +import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.apache.http.auth.BasicUserPrincipal; import org.junit.jupiter.api.Test; @@ -16,6 +19,8 @@ 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.core.context.SecurityContextHolder; +import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; @@ -23,6 +28,9 @@ import java.time.Instant; import java.util.Map; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.doCallRealMethod; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; @Log4j2 @SpringBootTest @@ -32,19 +40,33 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; + @MockBean + private Channel channel; + + @MockBean + private RabbitMqListenerImpl rabbitMqListener; + @Autowired private TableDataEndpoint dataEndpoint; @MockBean private QueryServiceImpl queryService; + @MockBean + private DatabaseService databaseService; + @Test + @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER") public void insert_succeeds() throws TableNotFoundException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, ContainerNotFoundException, NotAllowedException, DatabaseConnectionException, QueryMalformedException { final ImportDto request = ImportDto.builder() .location("test:csv/csv_01.csv") .build(); - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ final ResponseEntity<?> response = dataEndpoint.importCsv(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request, @@ -54,13 +76,18 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(username = USER_1_USERNAME) public void insert_locationNull_succeeds() throws TableNotFoundException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, ContainerNotFoundException, NotAllowedException, DatabaseConnectionException { final TableCsvDto request = TableCsvDto.builder() .data(Map.of("key", "value")) .build(); - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ final ResponseEntity<?> response = dataEndpoint.insert(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request, @@ -70,8 +97,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test - public void insert_locationAndDataNull_fails() { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + @WithMockUser(username = USER_1_USERNAME) + public void insert_locationAndDataNull_fails() throws DatabaseNotFoundException, TableNotFoundException, TableMalformedException, DatabaseConnectionException, ImageNotSupportedException, ContainerNotFoundException { + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1, DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); + doThrow(TableMalformedException.class).when(queryService) + .insert(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, (TableCsvDto) null); /* test */ assertThrows(TableMalformedException.class, () -> { @@ -80,32 +114,47 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(username = USER_1_USERNAME) public void getAll_succeeds() throws TableNotFoundException, DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException, ContainerNotFoundException, QueryStoreException, NotAllowedException, QueryMalformedException, SortException { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ dataEndpoint.getAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, principal, null, null, null, null, null); } @Test + @WithMockUser(username = USER_1_USERNAME) public void findAll_noPagination_succeeds() throws TableNotFoundException, DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException, ContainerNotFoundException, QueryStoreException, NotAllowedException, QueryMalformedException, SortException { final Long page = null; final Long size = null; - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ dataEndpoint.getAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, principal, DATABASE_1_CREATED, page, size, null, null); } @Test - public void findAll_pageNull_fails() { + @WithMockUser(username = USER_1_USERNAME) + public void findAll_pageNull_fails() throws DatabaseNotFoundException { final Long page = null; final Long size = 1L; - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ assertThrows(PaginationException.class, () -> { @@ -114,10 +163,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test - public void findAll_sizeNull_fails() { + @WithMockUser(username = USER_1_USERNAME) + public void findAll_sizeNull_fails() throws DatabaseNotFoundException { final Long page = 1L; final Long size = null; - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ assertThrows(PaginationException.class, () -> { @@ -126,10 +180,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test - public void findAll_negativePage_fails() { + @WithMockUser(username = USER_1_USERNAME) + public void findAll_negativePage_fails() throws DatabaseNotFoundException { final Long page = -1L; final Long size = 1L /* arbitrary */; - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ assertThrows(PaginationException.class, () -> { @@ -138,10 +197,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test - public void findAll_sizeZero_fails() { + @WithMockUser(username = USER_1_USERNAME) + public void findAll_sizeZero_fails() throws DatabaseNotFoundException { final Long page = 1L /* arbitrary */; final Long size = 0L; - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ assertThrows(PaginationException.class, () -> { @@ -150,10 +214,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test - public void findAll_sizeNegative_fails() { + @WithMockUser(username = USER_1_USERNAME) + public void findAll_sizeNegative_fails() throws DatabaseNotFoundException { final Long page = 1L /* arbitrary */; final Long size = -1L; - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ assertThrows(PaginationException.class, () -> { @@ -162,10 +231,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test - public void getAll_parameter2_fails() { + @WithMockUser(username = USER_1_USERNAME) + public void getAll_parameter2_fails() throws DatabaseNotFoundException { final Long page = 1L; final Long size = 0L; - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ assertThrows(PaginationException.class, () -> { @@ -174,10 +248,15 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test - public void getAll_parameter_fails() { + @WithMockUser(username = USER_1_USERNAME) + public void getAll_parameter_fails() throws DatabaseNotFoundException { final Long page = -1L; final Long size = 10L; - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ assertThrows(PaginationException.class, () -> { @@ -186,12 +265,17 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(username = USER_1_USERNAME) public void getAllTotal_succeeds() throws TableNotFoundException, DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException, ContainerNotFoundException, QueryStoreException, NotAllowedException, QueryMalformedException, SortException { final Instant timestamp = Instant.now(); - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ final ResponseEntity<QueryResultDto> response = dataEndpoint.getAll(CONTAINER_1_ID, DATABASE_1_ID, @@ -201,12 +285,17 @@ public class TableDataEndpointUnitTest extends BaseUnitTest { } @Test + @WithMockUser(username = USER_1_USERNAME) public void getAllCount_succeeds() throws TableNotFoundException, DatabaseConnectionException, TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException, ContainerNotFoundException, QueryStoreException, NotAllowedException, QueryMalformedException, SortException { final Instant timestamp = Instant.now(); - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); + final Principal principal = SecurityContextHolder.getContext().getAuthentication(); + + /* mock */ + doReturn(DATABASE_1).when(databaseService) + .find(CONTAINER_1_ID, DATABASE_1_ID); /* test */ final ResponseEntity<QueryResultDto> response = dataEndpoint.getAll(CONTAINER_1_ID, DATABASE_1_ID, diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java index bcf4838697aa1863b758e40cd12cb099f1d764bf..227e901e652c57ce64bc44eb706e04580200089d 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java @@ -12,12 +12,14 @@ import at.tuwien.exception.DatabaseNotFoundException; import at.tuwien.exception.ImageNotSupportedException; import at.tuwien.exception.TableMalformedException; import at.tuwien.exception.TableNotFoundException; +import at.tuwien.listener.impl.RabbitMqListenerImpl; import at.tuwien.repository.jpa.TableRepository; import at.tuwien.service.QueryService; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Network; +import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -41,6 +43,7 @@ import java.util.Map; import static at.tuwien.config.DockerConfig.dockerClient; import static at.tuwien.config.DockerConfig.hostConfig; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.doReturn; @Log4j2 @SpringBootTest @@ -50,14 +53,15 @@ public class QueryMapperTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; + @MockBean + private Channel channel; + + @MockBean + private RabbitMqListenerImpl rabbitMqListener; + @Autowired private QueryMapper queryMapper; - @BeforeEach - public void beforeEach() { - TABLE_1.setDatabase(DATABASE_1); - } - @Test public void dataColumnToObject_succeeds() { final TableColumn request = TableColumn.builder() @@ -68,6 +72,8 @@ public class QueryMapperTest extends BaseUnitTest { .columnType(TableColumnType.TIMESTAMP) .internalName("date") .name("Date") + .dateFormat(ContainerImageDate.builder().build()) + .table(TABLE_1) .build(); /* mock */ diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/DataServiceIntegrationTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/DataServiceIntegrationTest.java index a76389ac94804d4ac5b29460429798fa16b86190..3f3e9506361bcba3167e8e326c31ab0bbea2956d 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/DataServiceIntegrationTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/service/DataServiceIntegrationTest.java @@ -6,11 +6,13 @@ import at.tuwien.config.DockerConfig; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.exception.*; +import at.tuwien.listener.impl.RabbitMqListenerImpl; import at.tuwien.repository.jpa.TableRepository; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Network; +import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.Test; import org.junit.jupiter.api.*; @@ -40,6 +42,12 @@ public class DataServiceIntegrationTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; + @MockBean + private Channel channel; + + @MockBean + private RabbitMqListenerImpl rabbitMqListener; + @Autowired private TableRepository tableRepository; @@ -69,13 +77,12 @@ public class DataServiceIntegrationTest extends BaseUnitTest { "./src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; log.trace("container bind {}", bind); final CreateContainerResponse response = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG) - .withHostConfig(hostConfig.withNetworkMode("fda-userdb")) + .withHostConfig(hostConfig.withNetworkMode("fda-userdb").withBinds(Bind.parse(bind))) .withName(CONTAINER_1_INTERNALNAME) .withIpv4Address(CONTAINER_1_IP) .withHostName(CONTAINER_1_INTERNALNAME) .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=weather") - .withBinds(Bind.parse(bind)) .exec(); /* start */ CONTAINER_1.setHash(response.getId()); diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java index b4740ae3e28f3a3c17c68b61e7bbf77ac73df045..455cc6a4bce926ea5bea3fb7b12ae31c0c768f04 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java @@ -2,14 +2,18 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.api.database.query.QueryResultDto; +import at.tuwien.api.database.table.TableCsvDto; import at.tuwien.config.DockerConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.exception.*; +import at.tuwien.listener.impl.RabbitMqListenerImpl; import at.tuwien.repository.jpa.*; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.model.Bind; +import com.github.dockerjava.api.model.ExposedPort; import com.github.dockerjava.api.model.Network; +import com.rabbitmq.client.Channel; import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; import org.junit.Rule; @@ -17,24 +21,30 @@ import org.junit.rules.Timeout; import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; 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.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; +import javax.sql.DataSource; import java.io.File; import java.math.BigInteger; +import java.sql.SQLException; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; +import java.time.temporal.ChronoUnit; import java.util.*; import static at.tuwien.config.DockerConfig.dockerClient; import static at.tuwien.config.DockerConfig.hostConfig; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; @Log4j2 @@ -46,6 +56,12 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; + @MockBean + private Channel channel; + + @MockBean + private RabbitMqListenerImpl rabbitMqListener; + @Autowired private QueryService queryService; @@ -82,13 +98,13 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { "./src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; log.trace("container bind {}", bind); final CreateContainerResponse response = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG) - .withHostConfig(hostConfig.withNetworkMode("fda-userdb")) + .withHostConfig(hostConfig.withNetworkMode("fda-userdb").withBinds(Bind.parse(bind), Bind.parse("/tmp:/tmp"))) .withName(CONTAINER_1_INTERNALNAME) .withIpv4Address(CONTAINER_1_IP) .withHostName(CONTAINER_1_INTERNALNAME) .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=weather") - .withBinds(Bind.parse(bind), Bind.parse("/tmp:/tmp")) + //.withBinds(Bind.parse(bind), Bind.parse("/tmp:/tmp")) .exec(); CONTAINER_1.setHash(response.getId()); DockerConfig.startContainer(CONTAINER_1); @@ -99,13 +115,13 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { log.trace("container bind {}", bind); final CreateContainerResponse response2 = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG) - .withHostConfig(hostConfig.withNetworkMode("fda-userdb")) + .withHostConfig(hostConfig.withNetworkMode("fda-userdb").withBinds(Bind.parse(bind2), Bind.parse("/tmp:/tmp"))) .withName(CONTAINER_2_INTERNALNAME) .withIpv4Address(CONTAINER_2_IP) .withHostName(CONTAINER_2_INTERNALNAME) .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=zoo") - .withBinds(Bind.parse(bind2), Bind.parse("/tmp:/tmp")) + //.withBinds(Bind.parse(bind2), Bind.parse("/tmp:/tmp")) .exec(); CONTAINER_1.setHash(response.getId()); CONTAINER_2.setHash(response2.getId()); @@ -155,23 +171,22 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { databaseRepository.save(DATABASE_3); /* create tables */ TABLE_1.setDatabase(DATABASE_1); + TABLE_1.setColumns(TABLE_1_COLUMNS); + TABLE_1_COLUMNS.forEach(column -> column.setTable(TABLE_1)); tableRepository.save(TABLE_1); TABLE_2.setDatabase(DATABASE_1); + TABLE_2.setColumns(TABLE_2_COLUMNS); + TABLE_2_COLUMNS.forEach(column -> column.setTable(TABLE_2)); tableRepository.save(TABLE_2); TABLE_3.setDatabase(DATABASE_3); tableRepository.save(TABLE_3); TABLE_4.setDatabase(DATABASE_2); - tableRepository.save(TABLE_4); - TABLE_5.setDatabase(DATABASE_2); - tableRepository.save(TABLE_5); - /* create columns */ - TABLE_1.setColumns(TABLE_1_COLUMNS); - tableRepository.save(TABLE_1); - TABLE_2.setColumns(TABLE_2_COLUMNS); - tableRepository.save(TABLE_2); TABLE_4.setColumns(TABLE_4_COLUMNS); + TABLE_4_COLUMNS.forEach(column -> column.setTable(TABLE_4)); tableRepository.save(TABLE_4); + TABLE_5.setDatabase(DATABASE_2); TABLE_5.setColumns(TABLE_5_COLUMNS); + TABLE_5_COLUMNS.forEach(column -> column.setTable(TABLE_5)); tableRepository.save(TABLE_5); } @@ -201,6 +216,70 @@ public class QueryServiceIntegrationTest extends BaseUnitTest { assertEquals(0.0, result.getResult().get(2).get(COLUMN_1_5_INTERNAL_NAME)); } + @Test + public void selectAll_succeeds() throws TableNotFoundException, DatabaseConnectionException, + DatabaseNotFoundException, ImageNotSupportedException, TableMalformedException, PaginationException, + ContainerNotFoundException, QueryMalformedException, SQLException { + final Long page = 0L; + final Long size = 10L; + + /* test */ + queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, Instant.now(), page, size); + } + + @Test + public void selectAll_noTable_fails() { + final Long page = 0L; + final Long size = 10L; + + /* test */ + assertThrows(TableNotFoundException.class, () -> { + queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, -1L, Instant.now(), page, size); + }); + } + + @Test + public void selectAll_noDatabase_fails() { + final Long page = 0L; + final Long size = 10L; + + /* test */ + assertThrows(DatabaseNotFoundException.class, () -> { + queryService.findAll(CONTAINER_1_ID, -1L, TABLE_1_ID, Instant.now(), page, size); + }); + } + + @Test + public void insert_columns_fails() { + final TableCsvDto request = TableCsvDto.builder() + .data(Map.of("key", "some_value")) + .build(); + + /* test */ + assertThrows(TableMalformedException.class, () -> { + queryService.insert(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request); + }); + } + + @Test + public void findAll_timestampMissing_succeeds() throws TableNotFoundException, DatabaseConnectionException, + TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException, + ContainerNotFoundException, QueryMalformedException { + + /* test */ + queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, null, null, null); + } + + @Test + public void findAll_timestampBeforeCreation_succeeds() throws TableNotFoundException, DatabaseConnectionException, + TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException, + ContainerNotFoundException, QueryMalformedException { + final Instant timestamp = DATABASE_1_CREATED.minus(1, ChronoUnit.SECONDS); + + /* test */ + queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, timestamp, null, null); + } + @SneakyThrows private static Instant toInstant(String str) { final DateTimeFormatter formatter = new DateTimeFormatterBuilder() diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceUnitTest.java deleted file mode 100644 index 4aa314c293c47b93c1e55ce80fd18773631a0d4b..0000000000000000000000000000000000000000 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceUnitTest.java +++ /dev/null @@ -1,226 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.BaseUnitTest; -import at.tuwien.api.database.table.TableCsvDto; -import at.tuwien.config.DockerConfig; -import at.tuwien.config.ReadyConfig; -import at.tuwien.exception.*; -import at.tuwien.repository.jpa.DatabaseRepository; -import at.tuwien.repository.jpa.TableRepository; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.NotModifiedException; -import com.github.dockerjava.api.model.Bind; -import com.github.dockerjava.api.model.Network; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -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.context.junit.jupiter.SpringExtension; - -import java.io.File; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.Arrays; -import java.util.Map; -import java.util.Optional; - -import static at.tuwien.config.DockerConfig.dockerClient; -import static at.tuwien.config.DockerConfig.hostConfig; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.when; - -@SpringBootTest -@ExtendWith(SpringExtension.class) -@Log4j2 -public class QueryServiceUnitTest extends BaseUnitTest { - - @MockBean - private ReadyConfig readyConfig; - - @Autowired - private QueryService queryService; - - @MockBean - private DatabaseRepository databaseRepository; - - @MockBean - private TableRepository tableRepository; - - @BeforeAll - public static void beforeAll() throws InterruptedException { - afterAll(); - /* create network */ - dockerClient.createNetworkCmd() - .withName("fda-userdb") - .withIpam(new Network.Ipam() - .withConfig(new Network.Ipam.Config() - .withSubnet("172.28.0.0/16"))) - .withEnableIpv6(false) - .exec(); - /* create container */ - final String bind = new File("./src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; - log.trace("container bind {}", bind); - final CreateContainerResponse response = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG) - .withHostConfig(hostConfig.withNetworkMode("fda-userdb")) - .withName(CONTAINER_1_INTERNALNAME) - .withIpv4Address(CONTAINER_1_IP) - .withHostName(CONTAINER_1_INTERNALNAME) - .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=weather") - .withBinds(Bind.parse(bind)) - .exec(); - final String bind3 = new File("./src/test/resources/traffic").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; - log.trace("container bind {}", bind3); - final CreateContainerResponse response3 = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG) - .withHostConfig(hostConfig.withNetworkMode("fda-userdb")) - .withName(CONTAINER_3_INTERNALNAME) - .withIpv4Address(CONTAINER_3_IP) - .withHostName(CONTAINER_3_INTERNALNAME) - .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=traffic") - .withBinds(Bind.parse(bind3)) - .exec(); - /* start */ - CONTAINER_1.setHash(response.getId()); - CONTAINER_3.setHash(response3.getId()); - DockerConfig.startContainer(CONTAINER_1); - DockerConfig.startContainer(CONTAINER_3); - } - - @AfterAll - public static void afterAll() { - /* stop containers and remove them */ - dockerClient.listContainersCmd() - .withShowAll(true) - .exec() - .forEach(container -> { - log.info("Delete container {}", Arrays.asList(container.getNames())); - 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(); - }); - } - - @BeforeEach - public void beforeEach() { - TABLE_1.setDatabase(DATABASE_1); - TABLE_2.setDatabase(DATABASE_2); - TABLE_3.setDatabase(DATABASE_3); - } - - @Test - public void selectAll_succeeds() throws TableNotFoundException, DatabaseConnectionException, - DatabaseNotFoundException, ImageNotSupportedException, TableMalformedException, PaginationException, - ContainerNotFoundException, QueryMalformedException { - final Long page = 0L; - final Long size = 10L; - - /* mock */ - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.of(DATABASE_1)); - when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - - /* test */ - queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, Instant.now(), page, size); - } - - @Test - public void selectAll_noTable_fails() { - final Long page = 0L; - final Long size = 10L; - - /* mock */ - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.of(DATABASE_1)); - when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.empty()); - - /* test */ - assertThrows(TableNotFoundException.class, () -> { - queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, Instant.now(), page, size); - }); - } - - @Test - public void selectAll_noDatabase_fails() { - final Long page = 0L; - final Long size = 10L; - - /* mock */ - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.empty()); - when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - - /* test */ - assertThrows(DatabaseNotFoundException.class, () -> { - queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, Instant.now(), page, size); - }); - } - - @Test - public void insert_columns_fails() { - final TableCsvDto request = TableCsvDto.builder() - .data(Map.of("key", "some_value")) - .build(); - - /* mock */ - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.of(DATABASE_1)); - when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - - /* test */ - assertThrows(TableMalformedException.class, () -> { - queryService.insert(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, request); - }); - } - - @Test - public void findAll_timestampMissing_succeeds() throws TableNotFoundException, DatabaseConnectionException, - TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException, - ContainerNotFoundException, QueryMalformedException { - - /* mock */ - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.of(DATABASE_1)); - when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - - /* test */ - queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, null, null, null); - } - - @Test - public void findAll_timestampBeforeCreation_succeeds() throws TableNotFoundException, DatabaseConnectionException, - TableMalformedException, DatabaseNotFoundException, ImageNotSupportedException, PaginationException, - ContainerNotFoundException, QueryMalformedException { - final Instant timestamp = DATABASE_1_CREATED.minus(1, ChronoUnit.SECONDS); - - /* mock */ - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.of(DATABASE_1)); - when(tableRepository.find(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - - /* test */ - queryService.findAll(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, timestamp, null, null); - } - -} diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java index fe4ee84a35c9bf179439b0885c7f65ebb1068014..b876f84afefb3b449a427f4b2fa3525c6115f1c2 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationTest.java @@ -7,11 +7,13 @@ import at.tuwien.config.DockerConfig; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.exception.*; +import at.tuwien.listener.impl.RabbitMqListenerImpl; import at.tuwien.repository.jpa.TableRepository; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Network; +import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; @@ -41,6 +43,12 @@ public class StoreServiceIntegrationTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; + @MockBean + private Channel channel; + + @MockBean + private RabbitMqListenerImpl rabbitMqListener; + @Autowired private StoreService storeService; @@ -62,12 +70,11 @@ public class StoreServiceIntegrationTest extends BaseUnitTest { final String bind = new File("./src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; log.trace("container bind {}", bind); final CreateContainerResponse response = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG) - .withHostConfig(hostConfig.withNetworkMode("fda-userdb")) + .withHostConfig(hostConfig.withNetworkMode("fda-userdb").withBinds(Bind.parse(bind))) .withName(CONTAINER_1_INTERNALNAME) .withIpv4Address(CONTAINER_1_IP) .withHostName(CONTAINER_1_INTERNALNAME) .withEnv("MARIADB_USER=mariadb", "MARIADB_PASSWORD=mariadb", "MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=weather") - .withBinds(Bind.parse(bind)) .exec(); /* start */ CONTAINER_1.setHash(response.getId()); diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceTest.java index 0a33960b59f4b6deecf961d1e0775eb2e96af920..177db87a8e34436ee98889b21937beeaeb1b1916 100644 --- a/fda-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceTest.java +++ b/fda-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceTest.java @@ -10,6 +10,7 @@ import at.tuwien.config.MariaDbConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.entities.database.table.columns.TableColumn; import at.tuwien.exception.*; +import at.tuwien.listener.impl.RabbitMqListenerImpl; import at.tuwien.repository.jpa.DatabaseRepository; import at.tuwien.repository.jpa.ImageRepository; import at.tuwien.repository.jpa.TableColumnRepository; @@ -18,6 +19,7 @@ import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Network; +import com.rabbitmq.client.Channel; import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; import net.sf.jsqlparser.JSQLParserException; @@ -60,6 +62,12 @@ public class TableServiceTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; + @MockBean + private Channel channel; + + @MockBean + private RabbitMqListenerImpl rabbitMqListener; + @Autowired private ImageRepository imageRepository; diff --git a/fda-query-service/rest-service/src/test/resources/application.properties b/fda-query-service/rest-service/src/test/resources/application.properties index 1f8a9f4089f393b2a8d25f28472a80a35658aab5..88c58a85e34098a6ef1eddde183d20544dc6fb1c 100644 --- a/fda-query-service/rest-service/src/test/resources/application.properties +++ b/fda-query-service/rest-service/src/test/resources/application.properties @@ -1,3 +1,6 @@ +# enable local spring profile +spring.profiles.active=local + # disable discovery spring.cloud.discovery.enabled = false