From 6f015bc11d67e6e0c699643f9a9c5cde2cfd1b3f Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Thu, 30 Sep 2021 13:20:12 +0200 Subject: [PATCH] made real integration test --- .../src/test/java/at/tuwien/BaseUnitTest.java | 85 ++++++++++++++++- .../service/FileServiceIntegrationTest.java | 91 ++++--------------- 2 files changed, 101 insertions(+), 75 deletions(-) diff --git a/fda-citation-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-citation-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java index 7f91cf3301..d66e5ba37e 100644 --- a/fda-citation-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ b/fda-citation-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java @@ -3,6 +3,10 @@ package at.tuwien; import at.tuwien.api.zenodo.deposit.*; import at.tuwien.api.zenodo.files.FileResponseDto; import at.tuwien.api.zenodo.files.FileLinksDto; +import at.tuwien.entities.container.Container; +import at.tuwien.entities.container.image.ContainerImage; +import at.tuwien.entities.container.image.ContainerImageEnvironmentItem; +import at.tuwien.entities.container.image.ContainerImageEnvironmentItemType; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; import org.apache.commons.lang.RandomStringUtils; @@ -12,12 +16,21 @@ import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.List; +import static java.time.temporal.ChronoUnit.HOURS; + @TestPropertySource(locations = "classpath:application.properties") public abstract class BaseUnitTest { public final static Long DATABASE_1_ID = 1L; + public final static String DATABASE_1_NAME = "Test Database"; + public final static String DATABASE_1_INTERNAL_NAME = "test_dataase"; + public final static String DATABASE_1_EXCHANGE = "fda." + DATABASE_1_INTERNAL_NAME; + public final static Boolean DATABASE_1_PUBLIC = true; public final static Long TABLE_1_ID = 1L; + public final static String TABLE_1_NAME = "Rainfall"; + public final static String TABLE_1_INTERNAL_NAME = "rainfall"; + public final static String TABLE_1_TOPIC = DATABASE_1_EXCHANGE + "." + TABLE_1_INTERNAL_NAME; public final static Long DEPOSIT_1_ID = 1L; public final static String DEPOSIT_1_TITLE = "Super cool document"; @@ -68,14 +81,78 @@ public abstract class BaseUnitTest { public final static String DEPOSIT_1_DOI = "10.5072/zenodo.542201"; public final static Long DEPOSIT_1_REC_ID = 542201L; - public final static Table TABLE_1 = Table.builder() - .id(TABLE_1_ID) - .depositId(DEPOSIT_1_ID) + public final static Long IMAGE_1_ID = 1L; + public final static String IMAGE_1_REPOSITORY = "postgres"; + public final static String IMAGE_1_TAG = "13-alpine"; + public final static String IMAGE_1_HASH = "83b40f2726e5"; + public final static Integer IMAGE_1_PORT = 5432; + public final static String IMAGE_1_DIALECT = "org.hibernate.dialect.PostgreSQLDialect"; + public final static String IMAGE_1_DRIVER = "org.postgresql.Driver"; + public final static String IMAGE_1_JDBC = "postgresql"; + public final static Long IMAGE_1_SIZE = 12000L; + public final static String IMAGE_1_LOGO = "AAAA"; + public final static Instant IMAGE_1_BUILT = Instant.now().minus(40, HOURS); + public final static List<ContainerImageEnvironmentItem> IMAGE_1_ENV = List.of(ContainerImageEnvironmentItem.builder() + .key("POSTGRES_USER") + .value("postgres") + .type(ContainerImageEnvironmentItemType.USERNAME) + .build(), + ContainerImageEnvironmentItem.builder() + .key("POSTGRES_PASSWORD") + .value("postgres") + .type(ContainerImageEnvironmentItemType.PASSWORD) + .build()); + + public final static ContainerImage IMAGE_1 = ContainerImage.builder() + .id(IMAGE_1_ID) + .repository(IMAGE_1_REPOSITORY) + .tag(IMAGE_1_TAG) + .hash(IMAGE_1_HASH) + .jdbcMethod(IMAGE_1_JDBC) + .dialect(IMAGE_1_DIALECT) + .driverClass(IMAGE_1_DRIVER) + .containers(List.of()) + .compiled(IMAGE_1_BUILT) + .size(IMAGE_1_SIZE) + .environment(IMAGE_1_ENV) + .defaultPort(IMAGE_1_PORT) + .logo(IMAGE_1_LOGO) + .build(); + + public final static Long CONTAINER_1_ID = 1L; + public final static String CONTAINER_1_HASH = "deadbeef"; + public final static ContainerImage CONTAINER_1_IMAGE = IMAGE_1; + public final static String CONTAINER_1_NAME = "fda-userdb-u01"; + public final static String CONTAINER_1_INTERNALNAME = "fda-userdb-u01"; + public final static String CONTAINER_1_DATABASE = "univie"; + public final static String CONTAINER_1_IP = "172.28.0.5"; + public final static Instant CONTAINER_1_CREATED = Instant.now().minus(1, HOURS); + + public final static Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .internalName(CONTAINER_1_INTERNALNAME) + .image(CONTAINER_1_IMAGE) + .hash(CONTAINER_1_HASH) + .containerCreated(CONTAINER_1_CREATED) .build(); public final static Database DATABASE_1 = Database.builder() .id(DATABASE_1_ID) - .tables(List.of(TABLE_1)) + .name(DATABASE_1_NAME) + .isPublic(DATABASE_1_PUBLIC) + .internalName(DATABASE_1_INTERNAL_NAME) + .exchange(DATABASE_1_EXCHANGE) + .tables(List.of()) + .build(); + + public final static Table TABLE_1 = Table.builder() + .id(TABLE_1_ID) + .name(TABLE_1_NAME) + .internalName(TABLE_1_INTERNAL_NAME) + .topic(TABLE_1_TOPIC) + .tdbid(DATABASE_1_ID) + .depositId(DEPOSIT_1_ID) .build(); public final static CreatorDto CREATOR_1 = CreatorDto.builder() diff --git a/fda-citation-service/rest-service/src/test/java/at/tuwien/service/FileServiceIntegrationTest.java b/fda-citation-service/rest-service/src/test/java/at/tuwien/service/FileServiceIntegrationTest.java index cc2c31f35f..59ff998a97 100644 --- a/fda-citation-service/rest-service/src/test/java/at/tuwien/service/FileServiceIntegrationTest.java +++ b/fda-citation-service/rest-service/src/test/java/at/tuwien/service/FileServiceIntegrationTest.java @@ -5,11 +5,13 @@ import at.tuwien.api.zenodo.deposit.DepositChangeResponseDto; import at.tuwien.api.zenodo.files.FileResponseDto; import at.tuwien.api.zenodo.files.FileUploadDto; import at.tuwien.config.ReadyConfig; -import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; import at.tuwien.exception.*; +import at.tuwien.repository.jpa.ContainerRepository; +import at.tuwien.repository.jpa.DatabaseRepository; import at.tuwien.repository.jpa.TableRepository; import org.apache.commons.io.FileUtils; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -17,36 +19,46 @@ 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.mock.web.MockMultipartFile; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.util.ResourceUtils; -import java.io.FileNotFoundException; +import javax.transaction.Transactional; import java.io.IOException; import java.util.List; -import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.when; @SpringBootTest @ExtendWith(SpringExtension.class) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) public class FileServiceIntegrationTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; - @MockBean + @Autowired private TableRepository tableRepository; + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private DatabaseRepository databaseRepository; + @Autowired private ZenodoFileService fileService; @Autowired private ZenodoMetadataService metadataService; - final Database DATABASE_1 = Database.builder() - .id(DATABASE_1_ID) - .build(); + @BeforeEach + @Transactional + public void beforeEach() { + containerRepository.save(CONTAINER_1); + databaseRepository.save(DATABASE_1); + tableRepository.save(TABLE_1); + } @Test public void createResource_succeeds() throws IOException, ZenodoApiException, ZenodoNotFoundException, @@ -55,22 +67,12 @@ public class FileServiceIntegrationTest extends BaseUnitTest { final MockMultipartFile file = new MockMultipartFile("testdata.csv", FileUtils.readFileToByteArray( ResourceUtils.getFile("classpath:csv/testdata.csv"))); - /* mock */ - when(tableRepository.findByDatabaseAndId(DATABASE_1, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* request */ final DepositChangeResponseDto deposit = metadataService.storeCitation(DATABASE_1_ID, TABLE_1_ID); final FileUploadDto request = FileUploadDto.builder() .name(FILE_1_NAME) .build(); - /* mock */ - final Table TABLE_1 = Table.builder() - .id(TABLE_1_ID) - .depositId(deposit.getId()) - .build(); - /* test */ final FileResponseDto response = fileService.createResource(DATABASE_1_ID, TABLE_1_ID, request, file); assertEquals(FILE_1_NAME, response.getFilename()); @@ -86,22 +88,12 @@ public class FileServiceIntegrationTest extends BaseUnitTest { final MockMultipartFile file = new MockMultipartFile("weatherAUS.csv", FileUtils.readFileToByteArray( ResourceUtils.getFile("classpath:csv/weatherAUS.csv"))); - /* mock */ - when(tableRepository.findByDatabaseAndId(DATABASE_1, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* request */ final DepositChangeResponseDto deposit = metadataService.storeCitation(DATABASE_1_ID, TABLE_1_ID); final FileUploadDto request = FileUploadDto.builder() .name(FILE_2_NAME) .build(); - /* mock */ - final Table TABLE_1 = Table.builder() - .id(TABLE_1_ID) - .depositId(deposit.getId()) - .build(); - /* test */ final FileResponseDto response = fileService.createResource(DATABASE_1_ID, TABLE_1_ID, request, file); assertEquals(FILE_2_NAME, response.getFilename()); @@ -111,13 +103,6 @@ public class FileServiceIntegrationTest extends BaseUnitTest { @Test public void listAll_notFound_fails() { - final Table TABLE_1 = Table.builder() - .id(-1L) - .build(); - - /* mock */ - when(tableRepository.findByDatabaseAndId(DATABASE_1, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); /* test */ assertThrows(ZenodoNotFoundException.class, () -> { @@ -132,25 +117,13 @@ public class FileServiceIntegrationTest extends BaseUnitTest { final MockMultipartFile file = new MockMultipartFile("testdata.csv", FileUtils.readFileToByteArray( ResourceUtils.getFile("classpath:csv/testdata.csv"))); - /* mock */ - when(tableRepository.findByDatabaseAndId(DATABASE_1, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* request */ final DepositChangeResponseDto deposit = metadataService.storeCitation(DATABASE_1_ID, TABLE_1_ID); final FileUploadDto upload = FileUploadDto.builder() .name(FILE_1_NAME) .build(); - final Table TABLE_1 = Table.builder() - .id(TABLE_1_ID) - .depositId(deposit.getId()) - .build(); final FileResponseDto fileResponse = fileService.createResource(DATABASE_1_ID, TABLE_1_ID, upload, file); - /* mock */ - when(tableRepository.findById(TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* test */ final List<FileResponseDto> listResponse = fileService.listResources(DATABASE_1_ID, TABLE_1_ID); assertEquals(1, listResponse.size()); @@ -165,25 +138,13 @@ public class FileServiceIntegrationTest extends BaseUnitTest { final MockMultipartFile file = new MockMultipartFile("testdata.csv", FileUtils.readFileToByteArray( ResourceUtils.getFile("classpath:csv/testdata.csv"))); - /* mock */ - when(tableRepository.findByDatabaseAndId(DATABASE_1, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* request */ final DepositChangeResponseDto deposit = metadataService.storeCitation(DATABASE_1_ID, TABLE_1_ID); final FileUploadDto upload = FileUploadDto.builder() .name(FILE_1_NAME) .build(); - final Table TABLE_1 = Table.builder() - .id(TABLE_1_ID) - .depositId(deposit.getId()) - .build(); final FileResponseDto fileResponse = fileService.createResource(DATABASE_1_ID, TABLE_1_ID, upload, file); - /* mock */ - when(tableRepository.findById(TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* test */ final FileResponseDto findResponse = fileService.findResource(DATABASE_1_ID, TABLE_1_ID, fileResponse.getId()); assertEquals(FILE_1_CHECKSUM, findResponse.getChecksum()); @@ -197,25 +158,13 @@ public class FileServiceIntegrationTest extends BaseUnitTest { final MockMultipartFile file = new MockMultipartFile("testdata.csv", FileUtils.readFileToByteArray( ResourceUtils.getFile("classpath:csv/testdata.csv"))); - /* mock */ - when(tableRepository.findByDatabaseAndId(DATABASE_1, TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* request */ final DepositChangeResponseDto deposit = metadataService.storeCitation(DATABASE_1_ID, TABLE_1_ID); final FileUploadDto upload = FileUploadDto.builder() .name(FILE_1_NAME) .build(); - final Table TABLE_1 = Table.builder() - .id(TABLE_1_ID) - .depositId(deposit.getId()) - .build(); final FileResponseDto fileResponse = fileService.createResource(DATABASE_1_ID, TABLE_1_ID, upload, file); - /* mock */ - when(tableRepository.findById(TABLE_1_ID)) - .thenReturn(Optional.of(TABLE_1)); - /* test */ fileService.deleteResource(DATABASE_1_ID, TABLE_1_ID, fileResponse.getId()); } -- GitLab