diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java index 0bf820155589bd32f066c166851031716031821a..066294a208391c94bdd9b8f0a2a9aad4c29ca4ef 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java +++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java @@ -217,6 +217,8 @@ public class ImageEndpointUnitTest extends BaseUnitTest { public void delete_hasRole_succeeds() throws ImageNotFoundException { /* mock */ + when(imageRepository.existsById(IMAGE_1_ID)) + .thenReturn(true); when(userRepository.findByUsername(USER_2_USERNAME)) .thenReturn(Optional.of(USER_2)); diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java index 0ba2fa37720adf93cb8bf30acd1cbc69b2c7b57a..8da465bcabe2b9d873932887b67e8bb287ee22fb 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java +++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java @@ -158,6 +158,8 @@ public class ImageServiceUnitTest extends BaseUnitTest { public void delete_succeeds() throws ImageNotFoundException { /* mock */ + when(imageRepository.existsById(IMAGE_1_ID)) + .thenReturn(true); doNothing() .when(imageRepository) .deleteById(IMAGE_1_ID); @@ -170,6 +172,8 @@ public class ImageServiceUnitTest extends BaseUnitTest { public void delete_notFound_fails() { /* mock */ + when(imageRepository.existsById(IMAGE_1_ID)) + .thenReturn(false); doThrow(EntityNotFoundException.class) .when(imageRepository) .deleteById(IMAGE_1_ID); diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java index 47b5ac1742adaf04da731f43e77edbef3d124476..e52110c7ff7cca2c40b13b091c7d0f4bb8359be1 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java @@ -13,10 +13,7 @@ import at.tuwien.service.impl.QueryStoreServiceImpl; import com.mchange.v2.c3p0.ComboPooledDataSource; import com.rabbitmq.client.Channel; 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.*; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -24,6 +21,7 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.io.File; import java.sql.Connection; import java.sql.SQLException; @@ -63,17 +61,14 @@ public class QueryStoreServiceIntegrationTest extends BaseUnitTest { @Autowired private DatabaseMapper databaseMapper; - @BeforeAll - public static void beforeAll() throws InterruptedException { - /* create network */ - DockerConfig.createAllNetworks(); - /* create container */ - DockerConfig.createContainer(null, CONTAINER_1, CONTAINER_1_ENV); - DockerConfig.startContainer(CONTAINER_1); - } + private final static String BIND_WEATHER = new File("../../dbrepo-metadata-db/test/src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; @BeforeEach public void beforeEach() { + afterEach(); + /* create network */ + DockerConfig.createAllNetworks(); + /* metadata database */ realmRepository.save(REALM_DBREPO); userRepository.save(USER_1); imageRepository.save(IMAGE_1); @@ -81,29 +76,37 @@ public class QueryStoreServiceIntegrationTest extends BaseUnitTest { databaseRepository.save(DATABASE_1_SIMPLE); } - @AfterAll - public static void afterAll() { + @AfterEach + public void afterEach() { DockerConfig.removeAllContainers(); DockerConfig.removeAllNetworks(); } @Test public void create_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, - DatabaseNotFoundException, DatabaseMalformedException { + DatabaseNotFoundException, DatabaseMalformedException, InterruptedException { + + /* mock */ + DockerConfig.createContainer(null, CONTAINER_1, CONTAINER_1_ENV); + DockerConfig.startContainer(CONTAINER_1); /* test */ queryStoreService.create(CONTAINER_1_ID, DATABASE_1_ID, USER_1_PRINCIPAL); } @Test - public void executeQuery_succeeds() throws SQLException { + public void executeQuery_succeeds() throws SQLException, InterruptedException { final User root = databaseMapper.containerToPrivilegedUser(CONTAINER_1); final ComboPooledDataSource dataSource = HibernateConnector.getDataSource(CONTAINER_1_IMAGE, CONTAINER_1, DATABASE_1, root); + /* mock */ + DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1, CONTAINER_1_ENV); + DockerConfig.startContainer(CONTAINER_1); + /* test */ try { final Connection connection = dataSource.getConnection(); - queryStoreService.executeQuery(connection, "SELECT 1"); + queryStoreService.executeQuery(connection, "UPDATE weather_location SET lat=48.2049358, lng=16.3769348 WHERE location = ?", "Vienna"); } finally { dataSource.close(); } diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java index 9c3eac20db9feb5617548c32190f845fabba156e..838efb1d95e1f553ab84de8dd970806adffb0a5c 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java @@ -58,10 +58,19 @@ public class QueryStoreServiceImpl extends HibernateConnector implements QuerySt log.trace("created query store in database {}", database); } - public void executeQuery(Connection connection, String statement) throws SQLException { + public void executeQuery(Connection connection, String statement, String... data) throws SQLException { log.debug("execute query, statement={}", statement); final PreparedStatement pstmt = connection.prepareStatement(statement); + if (data.length > 0) { + for (int i = 0; i < data.length; i++) { + pstmt.setString(i + 1, data[i]); + } + } pstmt.executeUpdate(); } + private void executeQuery(Connection connection, String statement) throws SQLException { + executeQuery(connection, statement, new String[]{}); + } + } diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java index 7167767c8b3940c35c78569385a68449aa363ed7..1a68af0041864473bcb23c43e0679a2c90d21f2d 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java +++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java @@ -67,7 +67,7 @@ public class QueryServiceGatewayUnitTest extends BaseUnitTest { } @Test - public void find_notFound_fails() throws QueryNotFoundException, RemoteUnavailableException { + public void find_notFound_fails() { final ResponseEntity<QueryDto> mock = ResponseEntity.status(HttpStatus.NOT_FOUND) .build(); diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java index fbd3a6ff9b9d99f5510ca37c54aa42a9d3ecf1bb..1aad8f0b61650640eaeb10bb52234b2c19d6411b 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java +++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java @@ -43,8 +43,7 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ActiveProfiles("doi") +@SpringBootTest(properties = "spring.profiles.active:local,doi") public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { @MockBean @@ -187,7 +186,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { } @Test - public void update_invalidMetadata_fails() throws IdentifierUpdateBadFormException, IdentifierNotFoundException { + public void update_invalidMetadata_fails() throws IdentifierNotFoundException { /* mock */ when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierUpdateDto.class))) @@ -205,7 +204,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { } @Test - public void update_restClientException_fails() throws IdentifierUpdateBadFormException, IdentifierNotFoundException { + public void update_restClientException_fails() throws IdentifierNotFoundException { /* mock */ when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierUpdateDto.class))) diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/application.properties b/dbrepo-identifier-service/rest-service/src/test/resources/application.properties index f56b5e38f304e8d5a124ef78a20b965efd94aff1..938bc30b0f3491387d1455bcba0a733f9487d57d 100644 --- a/dbrepo-identifier-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-identifier-service/rest-service/src/test/resources/application.properties @@ -10,7 +10,7 @@ spring.cloud.config.enabled = false # disable datasource # spring 6 fix https://github.com/h2database/h2database/issues/3363 -spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA +spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE,KEY;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password @@ -18,5 +18,11 @@ spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=false +# datacite +fda.datacite.url: https://api.test.datacite.org/ +fda.datacite.prefix: 10.12345 +fda.datacite.username: test-user +fda.datacite.password: test-password + fda.mapping.path: /tmp fda.table.path: /tmp \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/schema.sql b/dbrepo-identifier-service/rest-service/src/test/resources/schema.sql deleted file mode 100644 index 906d8df808fa8f79c1f7c1c26088c55da6c9ee9b..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/resources/schema.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS `fda`; -SET SCHEMA `fda`; -DROP TABLE IF EXISTS fda.mdb_concepts; -CREATE TABLE IF NOT EXISTS fda.mdb_concepts -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); -DROP TABLE IF EXISTS fda.mdb_units; -CREATE TABLE IF NOT EXISTS fda.mdb_units -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); --- Modified for H2 --- Assume id=1 is invalid --- Assume id=2 is still valid token --- CREATE VIEW IF NOT EXISTS fda.mdb_invalid_tokens AS --- (SELECT `id`, `token_hash`, `creator`, `created`, `expires`, `last_used` FROM fda.`mdb_tokens` WHERE `id` = 1); \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/view.sql b/dbrepo-identifier-service/rest-service/src/test/resources/view.sql deleted file mode 100644 index b23c5436c00f157754d9a62cd09f4f22325eae73..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/resources/view.sql +++ /dev/null @@ -1,5 +0,0 @@ --- Modified for H2 --- Assume id=1 is invalid --- Assume id=2 is still valid token -CREATE VIEW IF NOT EXISTS fda.mdb_invalid_tokens AS -(SELECT `id`, `token_hash`, `creator`, `created`, `expires`, `last_used` FROM fda.`mdb_tokens` WHERE `id` = 1); \ No newline at end of file diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java index 4dd0068634978d7fff069203febb24d69d02f845..6de6ec7b06d9bf71b6184fff948aae9f63d81b34 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java @@ -19,7 +19,19 @@ public class GatewayConfig { @Value("${spring.rabbitmq.password}") private String brokerPassword; - @Bean + @Value("${fda.datacite.url}") + private String dataCiteUrl; + + @Value("${fda.datacite.prefix}") + private String dataCitePrefix; + + @Value("${fda.datacite.username}") + private String dataCiteUsername; + + @Value("${fda.datacite.password}") + private String dataCitePassword; + + @Bean("restTemplate") public RestTemplate restTemplate() { final RestTemplate restTemplate = new RestTemplate(); restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); @@ -35,4 +47,13 @@ public class GatewayConfig { return restTemplate; } + @Bean("dataCiteRestTemplate") + public RestTemplate dataciteRestTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(dataCiteUrl)); + restTemplate.getInterceptors() + .add(new BasicAuthenticationInterceptor(dataCiteUsername, dataCitePassword)); + return restTemplate; + } + } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java index 852dc067ce15a8a81c85796bbcd6340c45a83470..56a8b87a9df1f55180fbed30812fc6cfa499ba2b 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java @@ -60,7 +60,7 @@ public class Identifier implements Serializable { @Column(nullable = false) private String publisher; - @Column(columnDefinition = "enum('EN', 'DE', 'OTHER')") + @Column(columnDefinition = "enum('AB','AA','AF','AK','SQ','AM','AR','AN','HY','AS','AV','AE','AY','AZ','BM','BA','EU','BE','BN','BH','BI','BS','BR','BG','MY','CA','KM','CH','CE','NY','ZH','CU','CV','KW','CO','CR','HR','CS','DA','DV','NL','DZ','EN','EO','ET','EE','FO','FJ','FI','FR','FF','GD','GL','LG','KA','DE','KI','EL','KL','GN','GU','HT','HA','HE','HZ','HI','HO','HU','IS','IO','IG','ID','IA','IE','IU','IK','GA','IT','JA','JV','KN','KR','KS','KK','RW','KV','KG','KO','KJ','KU','KY','LO','LA','LV','LB','LI','LN','LT','LU','MK','MG','MS','ML','MT','GV','MI','MR','MH','RO','MN','NA','NV','ND','NG','NE','SE','NO','NB','NN','II','OC','OJ','OR','OM','OS','PI','PA','PS','FA','PL','PT','QU','RM','RN','RU','SM','SG','SA','SC','SR','SN','SD','SI','SK','SL','SO','ST','NR','ES','SU','SW','SS','SV','TL','TY','TG','TA','TT','TE','TH','BO','TI','TO','TS','TN','TR','TK','TW','UG','UK','UR','UZ','VE','VI','VO','WA','CY','FY','WO','XH','YI','YO','ZA','ZU')") @Enumerated(EnumType.STRING) private LanguageType language; diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java index 1442173ab7e65a82d6da4e77d2439e7891f0ff4f..6b7999512855a54b27e1b11eb0b613918c3e49c3 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java @@ -812,7 +812,7 @@ public abstract class BaseTest { public final static Long IMAGE_ELASTIC_ID = 3L; public final static String IMAGE_ELASTIC_REPOSITORY = "elasticsearch"; - public final static String IMAGE_ELASTIC_TAG = "7.13.4"; + public final static String IMAGE_ELASTIC_TAG = "8.7.1"; public final static ContainerImage IMAGE_ELASTIC = ContainerImage.builder() .id(IMAGE_ELASTIC_ID) diff --git a/dbrepo-query-service/rest-service/src/test/resources/application.properties b/dbrepo-query-service/rest-service/src/test/resources/application.properties index 4b947ac55685a21e5efa760b4dd2b3f83f77cf65..c64e6962f91b44b44cbfbe6d34d9c56e252dbd9d 100644 --- a/dbrepo-query-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-query-service/rest-service/src/test/resources/application.properties @@ -22,6 +22,9 @@ spring.jpa.show-sql=false logging.level.root=error logging.level.at.tuwien.=trace +# elastic +spring.elasticsearch.uris=dbrepo-search-service:9200 + # broker service spring.rabbitmq.host=dbrepo-broker-service spring.rabbitmq.virtual-host=/