diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/SubsetEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/SubsetEndpointUnitTest.java index 1d5e35a41d78b4b812c792b176c447dd00f10da6..adf674f1b2e2cd83e9192e57bdc6d4015e721053 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/SubsetEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/SubsetEndpointUnitTest.java @@ -6,6 +6,7 @@ import at.tuwien.api.database.query.QueryDto; import at.tuwien.api.database.query.QueryPersistDto; import at.tuwien.endpoints.SubsetEndpoint; import at.tuwien.exception.*; +import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.service.CredentialService; import at.tuwien.service.SchemaService; import at.tuwien.service.StorageService; @@ -55,6 +56,9 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { @MockBean private SchemaService schemaService; + @MockBean + private MetadataServiceGateway metadataServiceGateway; + @MockBean private HttpServletRequest httpServletRequest; @@ -74,7 +78,22 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { @Test @WithAnonymousUser - public void list_succeeds() throws DatabaseUnavailableException, NotAllowedException, QueryNotFoundException, + public void list_publicDataPrivateSchemaAnonymous_fails() throws QueryNotFoundException, DatabaseNotFoundException, + RemoteUnavailableException, SQLException, MetadataServiceException { + + /* mock */ + when(subsetService.findAll(DATABASE_3_PRIVILEGED_DTO, null)) + .thenReturn(List.of(QUERY_1_DTO, QUERY_2_DTO, QUERY_3_DTO, QUERY_4_DTO, QUERY_5_DTO, QUERY_6_DTO)); + + /* test */ + assertThrows(NotAllowedException.class, () -> { + generic_list(DATABASE_3_ID, DATABASE_3_PRIVILEGED_DTO, null); + }); + } + + @Test + @WithMockUser(username = USER_3_USERNAME) + public void list_publicDataPrivateSchema_succeeds() throws DatabaseUnavailableException, NotAllowedException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, SQLException, MetadataServiceException { /* mock */ @@ -82,7 +101,7 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { .thenReturn(List.of(QUERY_1_DTO, QUERY_2_DTO, QUERY_3_DTO, QUERY_4_DTO, QUERY_5_DTO, QUERY_6_DTO)); /* test */ - final List<QueryDto> response = generic_list(DATABASE_3_ID, DATABASE_3_PRIVILEGED_DTO, null); + final List<QueryDto> response = generic_list(DATABASE_3_ID, DATABASE_3_PRIVILEGED_DTO, USER_3_PRINCIPAL); assertEquals(6, response.size()); } @@ -97,8 +116,8 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { } @Test - @WithAnonymousUser - public void list_unavailable_fails() throws SQLException, QueryNotFoundException, DatabaseNotFoundException, + @WithMockUser(username = USER_3_USERNAME) + public void list_publicDataAndPrivateSchemaUnavailable_fails() throws SQLException, QueryNotFoundException, DatabaseNotFoundException, RemoteUnavailableException, MetadataServiceException { /* mock */ @@ -110,13 +129,45 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(DatabaseUnavailableException.class, () -> { - generic_list(DATABASE_3_ID, DATABASE_3_PRIVILEGED_DTO, null); + generic_list(DATABASE_3_ID, DATABASE_3_PRIVILEGED_DTO, USER_3_PRINCIPAL); }); } @Test @WithAnonymousUser - public void findById_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, UserNotFoundException, + public void findById_privateDataPrivateSchemaAnonymous_fails() throws DatabaseNotFoundException, SQLException, + RemoteUnavailableException, UserNotFoundException, QueryNotFoundException, MetadataServiceException { + + /* mock */ + when(credentialService.getDatabase(DATABASE_1_ID)) + .thenReturn(DATABASE_1_PRIVILEGED_DTO); + when(subsetService.findById(DATABASE_1_PRIVILEGED_DTO, QUERY_1_ID)) + .thenReturn(QUERY_1_DTO); + + /* test */ + assertThrows(NotAllowedException.class, () -> { + generic_findById(DATABASE_1_ID, QUERY_1_ID, "application/json", null, null); + }); + } + + @Test + @WithMockUser(username = USER_1_USERNAME) + public void findById_privateDataPrivateSchema_succeeds() throws DatabaseNotFoundException, SQLException, + RemoteUnavailableException, UserNotFoundException, QueryNotFoundException, MetadataServiceException, DatabaseUnavailableException, TableNotFoundException, StorageUnavailableException, NotAllowedException, ViewMalformedException, QueryMalformedException, FormatNotAvailableException { + + /* mock */ + when(credentialService.getDatabase(DATABASE_1_ID)) + .thenReturn(DATABASE_1_PRIVILEGED_DTO); + when(subsetService.findById(DATABASE_1_PRIVILEGED_DTO, QUERY_1_ID)) + .thenReturn(QUERY_1_DTO); + + /* test */ + generic_findById(DATABASE_1_ID, QUERY_1_ID, "application/json", null, USER_1_PRINCIPAL); + } + + @Test + @WithMockUser(username = USER_3_USERNAME) + public void findById_publicDataPrivateSchema_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, UserNotFoundException, DatabaseUnavailableException, StorageUnavailableException, QueryMalformedException, QueryNotFoundException, FormatNotAvailableException, TableNotFoundException, MetadataServiceException, SQLException, ViewMalformedException, NotAllowedException { @@ -128,7 +179,7 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { .thenReturn(QUERY_5_DTO); /* test */ - generic_findById(QUERY_5_ID, "application/json", null, null); + generic_findById(DATABASE_3_ID, QUERY_5_ID, "application/json", null, USER_3_PRINCIPAL); } @Test @@ -137,29 +188,29 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { UserNotFoundException, QueryNotFoundException, MetadataServiceException { /* mock */ - when(credentialService.getDatabase(DATABASE_3_ID)) - .thenReturn(DATABASE_3_PRIVILEGED_DTO); - when(subsetService.findById(DATABASE_3_PRIVILEGED_DTO, QUERY_5_ID)) - .thenReturn(QUERY_5_DTO); + when(credentialService.getDatabase(DATABASE_4_ID)) + .thenReturn(DATABASE_4_PRIVILEGED_DTO); + when(subsetService.findById(DATABASE_4_PRIVILEGED_DTO, QUERY_7_ID)) + .thenReturn(QUERY_7_DTO); /* test */ assertThrows(FormatNotAvailableException.class, () -> { - generic_findById(QUERY_5_ID, "application/pdf", null, null); + generic_findById(DATABASE_4_ID, QUERY_7_ID, "application/pdf", null, null); }); } @Test - @WithAnonymousUser - public void findById_acceptCsv_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, + @WithMockUser(username = USER_1_USERNAME) + public void findById_privateDataPrivateSchemaAcceptCsv_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, UserNotFoundException, DatabaseUnavailableException, StorageUnavailableException, QueryMalformedException, QueryNotFoundException, FormatNotAvailableException, SQLException, MetadataServiceException, TableNotFoundException, ViewMalformedException, NotAllowedException { final Dataset<Row> mock = sparkSession.emptyDataFrame(); /* mock */ - when(credentialService.getDatabase(DATABASE_3_ID)) - .thenReturn(DATABASE_3_PRIVILEGED_DTO); - when(subsetService.findById(DATABASE_3_PRIVILEGED_DTO, QUERY_5_ID)) + when(credentialService.getDatabase(DATABASE_1_ID)) + .thenReturn(DATABASE_1_PRIVILEGED_DTO); + when(subsetService.findById(DATABASE_1_PRIVILEGED_DTO, QUERY_1_ID)) .thenReturn(QUERY_5_DTO); when(storageService.transformDataset(any(Dataset.class))) .thenReturn(EXPORT_RESOURCE_DTO); @@ -167,15 +218,15 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { .thenReturn(mock); /* test */ - generic_findById(QUERY_5_ID,"text/csv", null, null); + generic_findById(DATABASE_1_ID, QUERY_1_ID, "text/csv", null, USER_1_PRINCIPAL); } @Test @WithAnonymousUser - public void findById_timestamp_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, - UserNotFoundException, DatabaseUnavailableException, StorageUnavailableException, QueryMalformedException, - QueryNotFoundException, FormatNotAvailableException, SQLException, MetadataServiceException, - TableNotFoundException, ViewMalformedException, NotAllowedException { + public void findById_publicDataPrivateSchemaAnonymous_fails() throws DatabaseNotFoundException, + RemoteUnavailableException, UserNotFoundException, StorageUnavailableException, QueryMalformedException, + QueryNotFoundException, SQLException, MetadataServiceException, TableNotFoundException, + ViewMalformedException { final Dataset<Row> mock = sparkSession.emptyDataFrame(); /* mock */ @@ -189,7 +240,32 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { .thenReturn(EXPORT_RESOURCE_DTO); /* test */ - generic_findById(QUERY_5_ID, "text/csv", Instant.now(), null); + assertThrows(NotAllowedException.class, () -> { + generic_findById(DATABASE_3_ID, QUERY_5_ID, "text/csv", Instant.now(), null); + }); + } + + @Test + @WithAnonymousUser + public void findById_publicDataPublicSchemaAnonymous_fails() throws DatabaseNotFoundException, SQLException, + RemoteUnavailableException, UserNotFoundException, QueryMalformedException, StorageUnavailableException, + QueryNotFoundException, MetadataServiceException, TableNotFoundException, ViewMalformedException { + final Dataset<Row> mock = sparkSession.emptyDataFrame(); + + /* mock */ + when(credentialService.getDatabase(DATABASE_3_ID)) + .thenReturn(DATABASE_3_PRIVILEGED_DTO); + when(subsetService.findById(DATABASE_4_PRIVILEGED_DTO, QUERY_5_ID)) + .thenReturn(QUERY_5_DTO); + when(subsetService.getData(any(PrivilegedDatabaseDto.class), any(QueryDto.class), eq(null), eq(null))) + .thenReturn(mock); + when(storageService.transformDataset(any(Dataset.class))) + .thenReturn(EXPORT_RESOURCE_DTO); + + /* test */ + assertThrows(NotAllowedException.class, () -> { + generic_findById(DATABASE_3_ID, QUERY_5_ID, "text/csv", Instant.now(), null); + }); } @Test @@ -203,13 +279,13 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - generic_findById(QUERY_5_ID, "application/json", null, null); + generic_findById(DATABASE_3_ID, QUERY_5_ID, "application/json", null, null); }); } @Test - @WithAnonymousUser - public void findById_unavailable_fails() throws DatabaseNotFoundException, RemoteUnavailableException, + @WithMockUser(username = USER_3_USERNAME) + public void findById_publicDataAndPrivateSchemaUnavailable_fails() throws DatabaseNotFoundException, RemoteUnavailableException, MetadataServiceException, SQLException, UserNotFoundException, QueryNotFoundException { /* mock */ @@ -221,13 +297,13 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(DatabaseUnavailableException.class, () -> { - generic_findById(QUERY_5_ID, "application/json", null, null); + generic_findById(DATABASE_3_ID, QUERY_5_ID, "application/json", null, USER_3_PRINCIPAL); }); } @Test - @WithAnonymousUser - public void findById_unavailableExport_fails() throws DatabaseNotFoundException, RemoteUnavailableException, + @WithMockUser(username = USER_1_USERNAME) + public void findById_publicDataPrivateSchemaUnavailableExport_fails() throws DatabaseNotFoundException, RemoteUnavailableException, MetadataServiceException, SQLException, QueryMalformedException, UserNotFoundException, QueryNotFoundException, TableNotFoundException, ViewMalformedException, StorageUnavailableException { @@ -244,7 +320,7 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(DatabaseUnavailableException.class, () -> { - generic_findById(QUERY_5_ID, "text/csv", null, null); + generic_findById(DATABASE_3_ID, QUERY_5_ID, "text/csv", null, USER_1_PRINCIPAL); }); } @@ -326,7 +402,8 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"execute-query"}) public void create_unavailable_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, SQLException, MetadataServiceException, QueryMalformedException, TableNotFoundException, - ViewMalformedException, UserNotFoundException, QueryNotFoundException, QueryStoreInsertException { + ViewMalformedException, UserNotFoundException, QueryNotFoundException, QueryStoreInsertException, + NotAllowedException { final ExecuteStatementDto request = ExecuteStatementDto.builder() .statement(QUERY_5_STATEMENT) .build(); @@ -339,6 +416,8 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { .getData(eq(DATABASE_3_PRIVILEGED_DTO), any(QueryDto.class), eq(null), eq(null)); when(subsetService.findById(eq(DATABASE_3_PRIVILEGED_DTO), anyLong())) .thenReturn(QUERY_5_DTO); + when(metadataServiceGateway.getAccess(DATABASE_3_ID, USER_1_ID)) + .thenReturn(DATABASE_3_USER_1_READ_ACCESS_DTO); doThrow(SQLException.class) .when(subsetService) .create(eq(DATABASE_3_PRIVILEGED_DTO), eq(QUERY_5_STATEMENT), any(Instant.class), eq(USER_1_ID)); @@ -402,7 +481,7 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { @Test @WithAnonymousUser - public void create_anonymous_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, + public void create_publicDataPublicSchemaAnonymous_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, MetadataServiceException, UserNotFoundException, QueryStoreInsertException, TableMalformedException, NotAllowedException, SQLException, QueryNotFoundException, DatabaseUnavailableException, StorageUnavailableException, QueryMalformedException, QueryNotSupportedException, PaginationException, @@ -413,19 +492,75 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { .build(); /* mock */ - when(credentialService.getDatabase(DATABASE_3_ID)) - .thenReturn(DATABASE_3_PRIVILEGED_DTO); - when(subsetService.findById(eq(DATABASE_3_PRIVILEGED_DTO), anyLong())) + when(credentialService.getDatabase(DATABASE_4_ID)) + .thenReturn(DATABASE_4_PRIVILEGED_DTO); + when(subsetService.findById(eq(DATABASE_4_PRIVILEGED_DTO), anyLong())) .thenReturn(QUERY_5_DTO); - when(subsetService.getData(eq(DATABASE_3_PRIVILEGED_DTO), any(QueryDto.class), eq(0L), eq(10L))) + when(subsetService.getData(eq(DATABASE_4_PRIVILEGED_DTO), any(QueryDto.class), eq(0L), eq(10L))) .thenReturn(mock); - when(schemaService.inspectView(eq(DATABASE_3_PRIVILEGED_DTO), anyString())) + when(schemaService.inspectView(eq(DATABASE_4_PRIVILEGED_DTO), anyString())) .thenReturn(VIEW_5_DTO); when(httpServletRequest.getMethod()) .thenReturn("POST"); /* test */ - subsetEndpoint.create(DATABASE_3_ID, request, null, httpServletRequest, null, null, null); + subsetEndpoint.create(DATABASE_4_ID, request, null, httpServletRequest, null, null, null); + } + + @Test + @WithMockUser(username = USER_1_USERNAME) + public void create_privateDataPrivateSchema_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, + MetadataServiceException, UserNotFoundException, QueryStoreInsertException, TableMalformedException, + NotAllowedException, SQLException, QueryNotFoundException, DatabaseUnavailableException, + StorageUnavailableException, QueryMalformedException, QueryNotSupportedException, PaginationException, + StorageNotFoundException, TableNotFoundException, ViewMalformedException, ViewNotFoundException { + final Dataset<Row> mock = sparkSession.emptyDataFrame(); + final ExecuteStatementDto request = ExecuteStatementDto.builder() + .statement(QUERY_1_STATEMENT) + .build(); + + /* mock */ + when(credentialService.getDatabase(DATABASE_1_ID)) + .thenReturn(DATABASE_1_PRIVILEGED_DTO); + when(subsetService.findById(eq(DATABASE_1_PRIVILEGED_DTO), anyLong())) + .thenReturn(QUERY_1_DTO); + when(subsetService.getData(eq(DATABASE_1_PRIVILEGED_DTO), any(QueryDto.class), eq(0L), eq(10L))) + .thenReturn(mock); + when(schemaService.inspectView(eq(DATABASE_1_PRIVILEGED_DTO), anyString())) + .thenReturn(VIEW_1_DTO); + when(httpServletRequest.getMethod()) + .thenReturn("POST"); + + /* test */ + subsetEndpoint.create(DATABASE_1_ID, request, USER_1_PRINCIPAL, httpServletRequest, null, null, null); + } + + @Test + @WithAnonymousUser + public void create_privateDataPublicSchemaAnonymous_fails() throws DatabaseNotFoundException, SQLException, + MetadataServiceException, UserNotFoundException, QueryNotFoundException, QueryMalformedException, + TableNotFoundException, ViewMalformedException, ViewNotFoundException, RemoteUnavailableException { + final Dataset<Row> mock = sparkSession.emptyDataFrame(); + final ExecuteStatementDto request = ExecuteStatementDto.builder() + .statement(QUERY_5_STATEMENT) + .build(); + + /* mock */ + when(credentialService.getDatabase(DATABASE_2_ID)) + .thenReturn(DATABASE_2_PRIVILEGED_DTO); + when(subsetService.findById(eq(DATABASE_2_PRIVILEGED_DTO), anyLong())) + .thenReturn(QUERY_2_DTO); + when(subsetService.getData(eq(DATABASE_2_PRIVILEGED_DTO), any(QueryDto.class), eq(0L), eq(10L))) + .thenReturn(mock); + when(schemaService.inspectView(eq(DATABASE_2_PRIVILEGED_DTO), anyString())) + .thenReturn(VIEW_4_DTO); + when(httpServletRequest.getMethod()) + .thenReturn("POST"); + + /* test */ + assertThrows(NotAllowedException.class, () -> { + subsetEndpoint.create(DATABASE_2_ID, request, null, httpServletRequest, null, null, null); + }); } @Test @@ -707,14 +842,14 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { return response.getBody(); } - protected void generic_findById(Long subsetId, String accept, Instant timestamp, Principal principal) - throws UserNotFoundException, DatabaseUnavailableException, StorageUnavailableException, - NotAllowedException, QueryMalformedException, QueryNotFoundException, DatabaseNotFoundException, - RemoteUnavailableException, FormatNotAvailableException, MetadataServiceException, TableNotFoundException, - ViewMalformedException { + protected void generic_findById(Long databaseId, Long subsetId, String accept, Instant timestamp, + Principal principal) throws UserNotFoundException, DatabaseUnavailableException, + StorageUnavailableException, NotAllowedException, QueryMalformedException, QueryNotFoundException, + DatabaseNotFoundException, RemoteUnavailableException, FormatNotAvailableException, + MetadataServiceException, TableNotFoundException, ViewMalformedException { /* test */ - final ResponseEntity<?> response = subsetEndpoint.findById(DATABASE_3_ID, subsetId, accept, timestamp, principal); + final ResponseEntity<?> response = subsetEndpoint.findById(databaseId, subsetId, accept, timestamp, principal); assertEquals(HttpStatus.OK, response.getStatusCode()); assertNotNull(response.getBody()); } diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/MetadataServiceGatewayUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/MetadataServiceGatewayUnitTest.java index f1d8e0f9fc3e19aea2e4f435c0051e629b1a892a..f65de0707eec016f502d66f45e8f52b5811f042f 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/MetadataServiceGatewayUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/MetadataServiceGatewayUnitTest.java @@ -31,8 +31,7 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; @@ -45,6 +44,10 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { @Qualifier("restTemplate") private RestTemplate restTemplate; + @MockBean + @Qualifier("internalRestTemplate") + private RestTemplate internalRestTemplate; + @Autowired private MetadataServiceGateway metadataServiceGateway; @@ -66,7 +69,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Table", TABLE_1_INTERNAL_NAME); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.OK) .headers(headers) .body(TABLE_1_DTO)); @@ -87,7 +90,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.NotFound.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class)); /* test */ @@ -101,7 +104,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.ServiceUnavailable.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class)); /* test */ @@ -114,7 +117,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getTableById_statusCode_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .body(TABLE_1_DTO)); @@ -134,7 +137,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.add(customHeaders.get(j), ""); } /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.OK) .headers(headers) .body(TABLE_1_DTO)); @@ -157,7 +160,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Table", TABLE_1_INTERNAL_NAME); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.OK) .headers(headers) .build()); @@ -178,7 +181,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Port", "" + CONTAINER_1_PORT); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class))) .thenReturn(ResponseEntity.ok() .headers(headers) .body(DATABASE_1_PRIVILEGED_DTO)); @@ -193,7 +196,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class)); /* test */ @@ -207,7 +210,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.NotFound.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class)); /* test */ @@ -220,7 +223,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getDatabaseById_statusCode_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .build()); @@ -237,7 +240,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Password", CONTAINER_1_PRIVILEGED_PASSWORD); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.OK) .headers(headers) .build()); @@ -258,7 +261,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.add(customHeaders.get(j), ""); } /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(PrivilegedDatabaseDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.OK) .headers(headers) .build()); @@ -276,7 +279,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Password", CONTAINER_1_PRIVILEGED_PASSWORD); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class))) .thenReturn(ResponseEntity.ok() .headers(headers) .body(CONTAINER_1_DTO)); @@ -291,7 +294,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class)); /* test */ @@ -305,7 +308,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.NotFound.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class)); /* test */ @@ -318,7 +321,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getContainerById_statusCode_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .build()); @@ -338,7 +341,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.add(customHeaders.get(j), ""); } /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .build()); @@ -356,7 +359,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Password", CONTAINER_1_PRIVILEGED_PASSWORD); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ContainerDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.OK) .headers(headers) .build()); @@ -379,7 +382,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-View", VIEW_1_INTERNAL_NAME); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ViewDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(ViewDto.class))) .thenReturn(ResponseEntity.ok() .headers(headers) .body(VIEW_1_DTO)); @@ -394,7 +397,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ViewDto.class)); /* test */ @@ -408,7 +411,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.NotFound.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ViewDto.class)); /* test */ @@ -421,7 +424,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getViewById_statusCode_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ViewDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ViewDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .build()); @@ -441,7 +444,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.add(customHeaders.get(j), ""); } /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ViewDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ViewDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.OK) .build()); @@ -463,7 +466,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Database", DATABASE_1_INTERNALNAME); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ViewDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(ViewDto.class))) .thenReturn(ResponseEntity.ok() .headers(headers) .build()); @@ -478,7 +481,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getUserById_succeeds() throws RemoteUnavailableException, UserNotFoundException, MetadataServiceException { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) .thenReturn(ResponseEntity.ok() .body(USER_1_DTO)); @@ -492,7 +495,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class)); /* test */ @@ -506,7 +509,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.NotFound.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class)); /* test */ @@ -519,7 +522,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getUserById_statusCode_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .build()); @@ -533,7 +536,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getUserById_emptyBody_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) .thenReturn(ResponseEntity.ok() .build()); @@ -551,7 +554,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Password", CONTAINER_1_PRIVILEGED_PASSWORD); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) .thenReturn(ResponseEntity.ok() .headers(headers) .body(USER_1_DTO)); @@ -568,7 +571,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class)); /* test */ @@ -582,7 +585,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.NotFound.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class)); /* test */ @@ -595,7 +598,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getPrivilegedUserById_statusCode_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .build()); @@ -615,7 +618,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.add(customHeaders.get(j), ""); } /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.OK) .build()); @@ -633,7 +636,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Password", CONTAINER_1_PRIVILEGED_PASSWORD); /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(UserDto.class))) .thenReturn(ResponseEntity.ok() .headers(headers) .build()); @@ -648,7 +651,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getAccess_succeeds() throws RemoteUnavailableException, NotAllowedException, MetadataServiceException { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(DatabaseAccessDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(DatabaseAccessDto.class))) .thenReturn(ResponseEntity.ok() .body(DATABASE_1_USER_1_READ_ACCESS_DTO)); @@ -661,7 +664,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(DatabaseAccessDto.class)); /* test */ @@ -675,7 +678,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.Forbidden.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(DatabaseAccessDto.class)); /* test */ @@ -689,7 +692,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.NotFound.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(DatabaseAccessDto.class)); /* test */ @@ -702,7 +705,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getAccess_statusCode_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(DatabaseAccessDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(DatabaseAccessDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .build()); @@ -716,7 +719,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getAccess_emptyBody_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(DatabaseAccessDto.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(DatabaseAccessDto.class))) .thenReturn(ResponseEntity.ok() .build()); @@ -730,7 +733,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getIdentifiers_witSubset_succeeds() throws RemoteUnavailableException, DatabaseNotFoundException, MetadataServiceException { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class))) .thenReturn(ResponseEntity.ok() .body(new IdentifierBriefDto[]{IDENTIFIER_1_BRIEF_DTO})); @@ -743,7 +746,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getIdentifiers_succeeds() throws RemoteUnavailableException, DatabaseNotFoundException, MetadataServiceException { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class))) .thenReturn(ResponseEntity.ok() .body(new IdentifierBriefDto[]{IDENTIFIER_1_BRIEF_DTO})); @@ -757,7 +760,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class)); /* test */ @@ -771,7 +774,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.NotFound.class) - .when(restTemplate) + .when(internalRestTemplate) .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class)); /* test */ @@ -784,7 +787,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getIdentifiers_statusCode_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .build()); @@ -798,7 +801,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void getIdentifiers_emptyBody_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(IdentifierBriefDto[].class))) .thenReturn(ResponseEntity.ok() .build()); @@ -809,10 +812,11 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { } @Test - public void updateTableStatistics_succeeds() throws RemoteUnavailableException, MetadataServiceException, TableNotFoundException { + public void updateTableStatistics_succeeds() throws RemoteUnavailableException, MetadataServiceException, + TableNotFoundException { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), eq(HttpEntity.EMPTY), eq(Void.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(ResponseEntity.accepted() .build()); @@ -825,8 +829,8 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.class) - .when(restTemplate) - .exchange(anyString(), eq(HttpMethod.PUT), eq(HttpEntity.EMPTY), eq(Void.class)); + .when(internalRestTemplate) + .exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class)); /* test */ assertThrows(RemoteUnavailableException.class, () -> { @@ -839,8 +843,8 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpClientErrorException.NotFound.class) - .when(restTemplate) - .exchange(anyString(), eq(HttpMethod.PUT), eq(HttpEntity.EMPTY), eq(Void.class)); + .when(internalRestTemplate) + .exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class)); /* test */ assertThrows(TableNotFoundException.class, () -> { @@ -852,7 +856,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { public void updateTableStatistics_statusCode_fails() { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), eq(HttpEntity.EMPTY), eq(Void.class))) + when(internalRestTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) .thenReturn(ResponseEntity.status(HttpStatus.NO_CONTENT) .build()); diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/SubsetEndpointMvcTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/SubsetEndpointMvcTest.java index 6a3851b445cf83b74eaccf1b6a3b86bf61ec03d8..158c6743a4e7bac049cae0211fe764030ab4a3f0 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/SubsetEndpointMvcTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/SubsetEndpointMvcTest.java @@ -37,7 +37,7 @@ public class SubsetEndpointMvcTest extends AbstractUnitTest { private MockMvc mockMvc; @Test - public void findById_noAcceptHeader_succeeds() throws Exception { + public void findById_noAcceptHeader_fails() throws Exception { /* mock */ when(metadataServiceGateway.getDatabaseById(DATABASE_3_ID)) @@ -48,11 +48,11 @@ public class SubsetEndpointMvcTest extends AbstractUnitTest { /* test */ this.mockMvc.perform(get("/api/database/" + DATABASE_3_ID + "/subset/" + QUERY_5_ID)) .andDo(print()) - .andExpect(status().isOk()); + .andExpect(status().isBadRequest()); } @Test - public void findById_jsonAcceptHeader_succeeds() throws Exception { + public void findById_privateDataPublicSchema_jsonAcceptHeader_fails() throws Exception { /* mock */ when(metadataServiceGateway.getDatabaseById(DATABASE_3_ID)) @@ -64,6 +64,22 @@ public class SubsetEndpointMvcTest extends AbstractUnitTest { this.mockMvc.perform(get("/api/database/" + DATABASE_3_ID + "/subset/" + QUERY_5_ID) .accept(MediaType.APPLICATION_JSON)) .andDo(print()) + .andExpect(status().isForbidden()); + } + + @Test + public void findById_publicDataPublicSchema_jsonAcceptHeader_succeeds() throws Exception { + + /* mock */ + when(metadataServiceGateway.getDatabaseById(DATABASE_4_ID)) + .thenReturn(DATABASE_4_PRIVILEGED_DTO); + when(subsetService.findById(DATABASE_4_PRIVILEGED_DTO, QUERY_7_ID)) + .thenReturn(QUERY_5_DTO); + + /* test */ + this.mockMvc.perform(get("/api/database/" + DATABASE_4_ID + "/subset/" + QUERY_7_ID) + .accept(MediaType.APPLICATION_JSON)) + .andDo(print()) .andExpect(status().isOk()); } diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java index d5cf6dd22e3cbe341ebe612d246bb716ff5c9f6a..2a0ad624dbbb8399cf9d360148c96bd0524c8453 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java @@ -358,7 +358,6 @@ public class SchemaServiceIntegrationTest extends AbstractUnitTest { assertEquals("not_in_metadata_db2", response.getInternalName()); assertEquals("not_in_metadata_db2", response.getName()); assertEquals(DATABASE_1_ID, response.getVdbid()); - assertEquals(DATABASE_1_ID, response.getDatabase().getId()); assertEquals(DATABASE_1_OWNER, response.getOwner().getId()); assertFalse(response.getIsInitialView()); assertEquals(DATABASE_1_PUBLIC, response.getIsPublic()); @@ -383,20 +382,18 @@ public class SchemaServiceIntegrationTest extends AbstractUnitTest { assertEquals(DATABASE_1_ID, column3.getDatabaseId()); } - protected static void assertViewColumn(ViewColumnDto column, Long id, Long databaseId, String name, - String internalName, ColumnTypeDto type, Long size, Long d, - Boolean nullAllowed, String description) { - log.trace("assert column: {}", internalName); + protected static void assertViewColumn(ViewColumnDto column, ViewColumnDto other) { assertNotNull(column); - assertEquals(id, column.getId()); - assertEquals(databaseId, column.getDatabaseId()); - assertEquals(name, column.getName()); - assertEquals(internalName, column.getInternalName()); - assertEquals(type, column.getColumnType()); - assertEquals(size, column.getSize()); - assertEquals(d, column.getD()); - assertEquals(nullAllowed, column.getIsNullAllowed()); - assertEquals(description, column.getDescription()); + assertNotNull(other); + assertEquals(column.getId(), other.getId()); + assertEquals(column.getDatabaseId(), other.getDatabaseId()); + assertEquals(column.getName(), other.getName()); + assertEquals(column.getInternalName(), other.getInternalName()); + assertEquals(column.getColumnType(), other.getColumnType()); + assertEquals(column.getSize(), other.getSize()); + assertEquals(column.getD(), other.getD()); + assertEquals(column.getIsNullAllowed(), other.getIsNullAllowed()); + assertEquals(column.getDescription(), other.getDescription()); } protected static void assertColumn(ColumnDto column, Long id, Long tableId, Long databaseId, String name, @@ -407,8 +404,6 @@ public class SchemaServiceIntegrationTest extends AbstractUnitTest { assertEquals(id, column.getId()); assertEquals(tableId, column.getTableId()); assertEquals(databaseId, column.getDatabaseId()); - assertNotNull(column.getTable()); - assertEquals(tableId, column.getTable().getId()); assertEquals(name, column.getName()); assertEquals(internalName, column.getInternalName()); assertEquals(type, column.getColumnType()); diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java index 5bfaa043d1ded11c26797b94d0ff2cf0d9e509ba..b5555611c666f60f0af6e2d8a122dc11ec3264dd 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java @@ -55,21 +55,7 @@ public class ViewServiceIntegrationTest extends AbstractUnitTest { public void create_succeeds() throws SQLException, ViewMalformedException { /* test */ - final ViewDto response = viewService.create(DATABASE_1_PRIVILEGED_DTO, VIEW_1_CREATE_DTO); - assertEquals(VIEW_1_NAME, response.getName()); - assertEquals(VIEW_1_INTERNAL_NAME, response.getInternalName()); - assertEquals(VIEW_1_QUERY, response.getQuery()); - assertNotNull(response.getQueryHash()); - assertEquals(DATABASE_1_PUBLIC, response.getIsPublic()); - final List<ViewColumnDto> columns = response.getColumns(); - assertEquals(VIEW_1_COLUMNS.size(), columns.size()); - ViewColumnDto ref = VIEW_1_COLUMNS_DTO.get(0); - SchemaServiceIntegrationTest.assertViewColumn(columns.get(0), null, ref.getDatabaseId(), ref.getName(), ref.getInternalName(), ref.getColumnType(), ref.getSize(), ref.getD(), ref.getIsNullAllowed(), ref.getDescription()); - ref = VIEW_1_COLUMNS_DTO.get(1); - SchemaServiceIntegrationTest.assertViewColumn(columns.get(1), null, ref.getDatabaseId(), ref.getName(), ref.getInternalName(), ref.getColumnType(), ref.getSize(), ref.getD(), ref.getIsNullAllowed(), ref.getDescription()); - ref = VIEW_1_COLUMNS_DTO.get(2); - SchemaServiceIntegrationTest.assertViewColumn(columns.get(2), null, ref.getDatabaseId(), ref.getName(), ref.getInternalName(), ref.getColumnType(), ref.getSize(), ref.getD(), ref.getIsNullAllowed(), ref.getDescription()); - + viewService.create(DATABASE_1_PRIVILEGED_DTO, VIEW_1_CREATE_DTO); } @Test @@ -81,7 +67,6 @@ public class ViewServiceIntegrationTest extends AbstractUnitTest { assertEquals("not_in_metadata_db2", view0.getName()); assertEquals("not_in_metadata_db2", view0.getInternalName()); assertEquals(DATABASE_1_ID, view0.getVdbid()); - assertEquals(DATABASE_1_ID, view0.getDatabase().getId()); assertEquals(DATABASE_1_OWNER, view0.getOwner().getId()); assertFalse(view0.getIsInitialView()); assertEquals(DATABASE_1_PUBLIC, view0.getIsPublic()); diff --git a/dbrepo-data-service/rest-service/src/test/resources/init/weather_at.sql b/dbrepo-data-service/rest-service/src/test/resources/init/weather_at.sql new file mode 100644 index 0000000000000000000000000000000000000000..050ad3fb54db0e86b25f487423c8e648f2bd8e39 --- /dev/null +++ b/dbrepo-data-service/rest-service/src/test/resources/init/weather_at.sql @@ -0,0 +1,11 @@ +CREATE +DATABASE weather_at; +USE +weather_at; + +CREATE TABLE mfcc +( + location VARCHAR(255) PRIMARY KEY, + lat DOUBLE PRECISION NULL, + lng DOUBLE PRECISION NULL +) WITH SYSTEM VERSIONING COMMENT 'Hello mfcc'; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-data-service/services/src/main/java/at/tuwien/config/GatewayConfig.java index 4bdb9cb89f9d93d14c34bb318667882e299f0201..c511f2b511ff3cd66d52f63a55ca8ca73ce2a6c9 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/config/GatewayConfig.java @@ -36,7 +36,7 @@ public class GatewayConfig { } @Bean - public RestTemplate restTemplate() { + public RestTemplate internalRestTemplate() { final RestTemplate restTemplate = new RestTemplate(); restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(metadataEndpoint)); restTemplate.getInterceptors() @@ -44,4 +44,9 @@ public class GatewayConfig { return restTemplate; } + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } + } diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/MetadataServiceGatewayImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/MetadataServiceGatewayImpl.java index a39b93ef1d8133e9e27d14eeb6c0875d3b1ce280..7d834992cc73b689bc990b6639061ae1ca2ddb71 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/MetadataServiceGatewayImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/MetadataServiceGatewayImpl.java @@ -1,6 +1,7 @@ package at.tuwien.gateway.impl; import at.tuwien.api.container.ContainerDto; +import at.tuwien.api.container.image.ImageDto; import at.tuwien.api.container.internal.PrivilegedContainerDto; import at.tuwien.api.database.DatabaseAccessDto; import at.tuwien.api.database.ViewDto; @@ -18,6 +19,7 @@ import at.tuwien.mapper.MetadataMapper; import jakarta.validation.constraints.NotNull; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.client.HttpClientErrorException; @@ -35,13 +37,16 @@ import java.util.UUID; public class MetadataServiceGatewayImpl implements MetadataServiceGateway { private final RestTemplate restTemplate; + private final RestTemplate internalRestTemplate; private final GatewayConfig gatewayConfig; private final MetadataMapper metadataMapper; @Autowired - public MetadataServiceGatewayImpl(RestTemplate restTemplate, GatewayConfig gatewayConfig, + public MetadataServiceGatewayImpl(@Qualifier("internalRestTemplate") RestTemplate internalRestTemplate, + RestTemplate restTemplate, GatewayConfig gatewayConfig, MetadataMapper metadataMapper) { this.restTemplate = restTemplate; + this.internalRestTemplate = internalRestTemplate; this.gatewayConfig = gatewayConfig; this.metadataMapper = metadataMapper; } @@ -53,7 +58,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { final String url = "/api/container/" + containerId; log.debug("get privileged container info from metadata service: {}", url); try { - response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, + response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, ContainerDto.class); } catch (ResourceAccessException | HttpServerErrorException e) { log.error("Failed to find container with id {}: {}", containerId, e.getMessage()); @@ -91,7 +96,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { final String url = "/api/database/" + id; log.debug("get privileged database info from metadata service: {}", url); try { - response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, PrivilegedDatabaseDto.class); + response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, PrivilegedDatabaseDto.class); } catch (ResourceAccessException | HttpServerErrorException e) { log.error("Failed to find database with id {}: {}", id, e.getMessage()); throw new RemoteUnavailableException("Failed to find database: " + e.getMessage(), e); @@ -130,7 +135,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { final String url = "/api/database/" + databaseId + "/table/" + id; log.debug("get privileged table info from metadata service: {}", url); try { - response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, TableDto.class); + response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, TableDto.class); } catch (ResourceAccessException | HttpServerErrorException e) { log.error("Failed to find table with id {}: {}", id, e.getMessage()); throw new RemoteUnavailableException("Failed to find table: " + e.getMessage(), e); @@ -172,7 +177,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { final String url = "/api/database/" + databaseId + "/view/" + id; log.debug("get privileged view info from metadata service: {}", url); try { - response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, ViewDto.class); + response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, ViewDto.class); } catch (ResourceAccessException | HttpServerErrorException e) { log.error("Failed to find view with id {}: {}", id, e.getMessage()); throw new RemoteUnavailableException("Failed to find view: " + e.getMessage(), e); @@ -196,12 +201,18 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { throw new MetadataServiceException("Failed to find view with id " + id + ": body is empty"); } final PrivilegedViewDto view = metadataMapper.viewDtoToPrivilegedViewDto(response.getBody()); - view.getDatabase().getContainer().getImage().setJdbcMethod(response.getHeaders().get("X-Type").get(0)); - view.getDatabase().getContainer().setHost(response.getHeaders().get("X-Host").get(0)); - view.getDatabase().getContainer().setPort(Integer.parseInt(response.getHeaders().get("X-Port").get(0))); - view.getDatabase().getContainer().setUsername(response.getHeaders().get("X-Username").get(0)); - view.getDatabase().getContainer().setPassword(response.getHeaders().get("X-Password").get(0)); - view.getDatabase().setInternalName(response.getHeaders().get("X-Database").get(0)); + view.setDatabase(PrivilegedDatabaseDto.builder() + .internalName(response.getHeaders().get("X-Database").get(0)) + .container(PrivilegedContainerDto.builder() + .host(response.getHeaders().get("X-Host").get(0)) + .port(Integer.parseInt(response.getHeaders().get("X-Port").get(0))) + .username(response.getHeaders().get("X-Username").get(0)) + .password(response.getHeaders().get("X-Password").get(0)) + .image(ImageDto.builder() + .jdbcMethod(response.getHeaders().get("X-Type").get(0)) + .build()) + .build()) + .build()); view.setInternalName(response.getHeaders().get("X-View").get(0)); view.setLastRetrieved(Instant.now()); return view; @@ -214,7 +225,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { final String url = "/api/user/" + userId; log.debug("get user info from metadata service: {}", url); try { - response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, UserDto.class); + response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, UserDto.class); } catch (ResourceAccessException | HttpServerErrorException e) { log.error("Failed to find user with id {}: {}", userId, e.getMessage()); throw new RemoteUnavailableException("Failed to find user: " + e.getMessage(), e); @@ -240,7 +251,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { final String url = "/api/user/" + userId; log.debug("get privileged user info from metadata service: {}", url); try { - response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, UserDto.class); + response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, UserDto.class); } catch (ResourceAccessException | HttpServerErrorException e) { log.error("Failed to find user with id {}: {}", userId, e.getMessage()); throw new RemoteUnavailableException("Failed to find user: " + e.getMessage(), e); @@ -277,7 +288,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { final String url = "/api/database/" + databaseId + "/access/" + userId; log.debug("get database access from metadata service: {}", url); try { - response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, DatabaseAccessDto.class); + response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, DatabaseAccessDto.class); } catch (ResourceAccessException | HttpServerErrorException e) { log.error("Failed to find database access for user with id {}: {}", userId, e.getMessage()); throw new RemoteUnavailableException("Failed to find database access: " + e.getMessage(), e); @@ -303,7 +314,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { final String url = "/api/identifier?dbid=" + databaseId + (subsetId != null ? ("&qid=" + subsetId) : ""); log.debug("get identifiers from metadata service: {}", url); try { - response = restTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, IdentifierBriefDto[].class); + response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, IdentifierBriefDto[].class); } catch (ResourceAccessException | HttpServerErrorException e) { log.error("Failed to find identifiers for database with id {} and subset with id {}: {}", databaseId, subsetId, e.getMessage()); throw new RemoteUnavailableException("Failed to find identifiers: " + e.getMessage(), e); @@ -328,12 +339,11 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { final ResponseEntity<Void> response; final String url = "/api/database/" + databaseId + "/table/" + tableId + "/statistic"; log.debug("update table statistics in metadata service: {}", url); - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayConfig.getMetadataEndpoint())); + internalRestTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayConfig.getMetadataEndpoint())); final HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", authorization); try { - response = restTemplate.exchange(url, HttpMethod.PUT, new HttpEntity<>(null, headers), Void.class); + response = internalRestTemplate.exchange(url, HttpMethod.PUT, new HttpEntity<>(null, headers), Void.class); } catch (ResourceAccessException | HttpServerErrorException e) { log.error("Failed to update table statistic for table with id {}: {}", tableId, e.getMessage()); throw new RemoteUnavailableException("Failed to update table statistic: " + e.getMessage(), e); diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java index b89e6b9c0feb3a282c38afbf39f07ef2d85fb546..5b96a5934b83e2c4636590f7515f70c04aef5826 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java @@ -33,7 +33,10 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.sql.*; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Types; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -87,14 +90,13 @@ public interface DataMapper { * @param database The database. * @param resultSet The inspected schema. * @return The database containing the updated view/table. - * @throws SQLException + * @throws SQLException If the result set does not contain the requested parameter. */ default ViewDto schemaResultSetToView(DatabaseDto database, ResultSet resultSet) throws SQLException { return ViewDto.builder() .name(resultSet.getString(1)) .internalName(resultSet.getString(1)) .vdbid(database.getId()) - .database(database) .isInitialView(false) .isPublic(database.getIsPublic()) .query(resultSet.getString(9)) @@ -124,7 +126,7 @@ public interface DataMapper { return statistic; } - default TableDto resultSetToTable(ResultSet resultSet, TableDto table, QueryConfig queryConfig) throws SQLException { + default TableDto resultSetToTable(ResultSet resultSet, TableDto table) throws SQLException { final ColumnDto column = ColumnDto.builder() .ordinalPosition(resultSet.getInt(1) - 1) /* start at zero */ .isNullAllowed(resultSet.getString(3).equals("YES")) @@ -132,7 +134,6 @@ public interface DataMapper { .d(resultSet.getString(7) != null ? resultSet.getLong(7) : null) .name(resultSet.getString(10)) .internalName(resultSet.getString(10)) - .table(table) .tableId(table.getId()) .databaseId(table.getTdbid()) .description(resultSet.getString(11)) @@ -181,7 +182,7 @@ public interface DataMapper { .d(resultSet.getString(7) != null ? resultSet.getLong(7) : null) .name(resultSet.getString(10)) .internalName(resultSet.getString(10)) - .databaseId(view.getDatabase().getId()) + .databaseId(view.getVdbid()) .build(); /* fix boolean and set size for others */ if (resultSet.getString(8).equalsIgnoreCase("tinyint(1)")) { @@ -193,7 +194,7 @@ public interface DataMapper { } view.getColumns() .add(column); - log.trace("parsed view {}.{} column: {}", view.getDatabase().getInternalName(), view.getInternalName(), column.getInternalName()); + log.trace("parsed view column: {}.{}", view.getInternalName(), column.getInternalName()); return view; } @@ -320,7 +321,7 @@ public interface DataMapper { if (!resultSet.next()) { throw new TableNotFoundException("Failed to find table in the information schema"); } - final TableDto table = TableDto.builder() + return TableDto.builder() .name(resultSet.getString(1)) .internalName(resultSet.getString(1)) .isVersioned(resultSet.getString(2).equals("SYSTEM VERSIONED")) @@ -343,7 +344,6 @@ public interface DataMapper { .build()) .isPublic(database.getIsPublic()) .build(); - return table; } default void prepareStatementWithColumnTypeObject(PreparedStatement ps, ColumnTypeDto columnType, int idx, Object value) throws SQLException { diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SchemaServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SchemaServiceMariaDbImpl.java index dc073e855d7505d3bdf9d269040af58040d07174..e2b0c984e0f53c68bf9d384a301ab62ad67bbff7 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SchemaServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SchemaServiceMariaDbImpl.java @@ -5,7 +5,6 @@ import at.tuwien.api.database.ViewDto; import at.tuwien.api.database.internal.PrivilegedDatabaseDto; import at.tuwien.api.database.table.TableDto; import at.tuwien.api.database.table.constraints.unique.UniqueDto; -import at.tuwien.config.QueryConfig; import at.tuwien.exception.TableNotFoundException; import at.tuwien.exception.ViewNotFoundException; import at.tuwien.mapper.DataMapper; @@ -28,15 +27,12 @@ import java.util.LinkedList; public class SchemaServiceMariaDbImpl extends HibernateConnector implements SchemaService { private final DataMapper dataMapper; - private final QueryConfig queryConfig; private final MariaDbMapper mariaDbMapper; private final MetadataMapper metadataMapper; @Autowired - public SchemaServiceMariaDbImpl(DataMapper dataMapper, QueryConfig queryConfig, MariaDbMapper mariaDbMapper, - MetadataMapper metadataMapper) { + public SchemaServiceMariaDbImpl(DataMapper dataMapper, MariaDbMapper mariaDbMapper, MetadataMapper metadataMapper) { this.dataMapper = dataMapper; - this.queryConfig = queryConfig; this.mariaDbMapper = mariaDbMapper; this.metadataMapper = metadataMapper; } @@ -65,7 +61,7 @@ public class SchemaServiceMariaDbImpl extends HibernateConnector implements Sche final ResultSet resultSet2 = statement2.executeQuery(); log.trace("executed statement in {} ms", System.currentTimeMillis() - start); while (resultSet2.next()) { - table = dataMapper.resultSetToTable(resultSet2, table, queryConfig); + table = dataMapper.resultSetToTable(resultSet2, table); } /* obtain check constraints metadata */ start = System.currentTimeMillis(); @@ -97,10 +93,8 @@ public class SchemaServiceMariaDbImpl extends HibernateConnector implements Sche final TableDto tmpTable = table; uk.getColumns() .forEach(column -> { - column.setTable(tmpTable); column.setTableId(tmpTable.getId()); column.setDatabaseId(database.getId()); - column.setIsPublic(database.getIsPublic()); }); } } @@ -109,7 +103,6 @@ public class SchemaServiceMariaDbImpl extends HibernateConnector implements Sche final TableDto tmpTable = table; tmpTable.getColumns() .forEach(column -> { - column.setTable(tmpTable); column.setTableId(tmpTable.getId()); column.setDatabaseId(database.getId()); }); @@ -139,7 +132,6 @@ public class SchemaServiceMariaDbImpl extends HibernateConnector implements Sche throw new ViewNotFoundException("Failed to find view in the information schema"); } ViewDto view = dataMapper.schemaResultSetToView(database, resultSet1); - view.setDatabase(database); view.setVdbid(database.getId()); view.setOwner(database.getOwner()); /* obtain view columns */ @@ -154,7 +146,7 @@ public class SchemaServiceMariaDbImpl extends HibernateConnector implements Sche .columns(new LinkedList<>()) .build(); while (resultSet2.next()) { - tmp = dataMapper.resultSetToTable(resultSet2, tmp, queryConfig); + tmp = dataMapper.resultSetToTable(resultSet2, tmp); } view.setColumns(tmp.getColumns() .stream() diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java index 989fe4e1a1de03502616d02e74e5aba99e6544af..d85bdc53ac235a3a95bb8b3543bddcfdd143dc6d 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java @@ -141,7 +141,6 @@ public class ViewServiceMariaDbImpl extends HibernateConnector implements ViewSe .identifiers(new LinkedList<>()) .isInitialView(false) .vdbid(database.getId()) - .database(metadataMapper.privilegedDatabaseDtoToDatabaseDto(database)) .columns(new LinkedList<>()) .build(); try { diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java index 61121a4b04791955834744ecb05204841551fa12..91936adaf8f27c87dbd4019b4ee6ce8a67e118a5 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java @@ -32,7 +32,8 @@ public abstract class AbstractUnitTest extends BaseTest { TABLE_1_COLUMNS.get(0).setConcept(null); DATABASE_1.setOwner(USER_1); DATABASE_1.setSubsets(new LinkedList<>()); - DATABASE_1.setIsPublic(false); + DATABASE_1.setIsPublic(DATABASE_1_PUBLIC); + DATABASE_1.setIsSchemaPublic(DATABASE_1_SCHEMA_PUBLIC); DATABASE_1_USER_1_READ_ACCESS.setType(AccessType.READ); DATABASE_1.setAccesses(new LinkedList<>(List.of(DATABASE_1_USER_1_READ_ACCESS, DATABASE_1_USER_2_WRITE_OWN_ACCESS, DATABASE_1_USER_3_WRITE_ALL_ACCESS))); DATABASE_1_PRIVILEGED_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_1_USER_1_READ_ACCESS_DTO, DATABASE_1_USER_2_WRITE_OWN_ACCESS_DTO, DATABASE_1_USER_3_WRITE_ALL_ACCESS_DTO))); @@ -50,6 +51,7 @@ public abstract class AbstractUnitTest extends BaseTest { IDENTIFIER_4.setDatabase(DATABASE_1); DATABASE_1.setTables(new LinkedList<>(List.of(TABLE_1, TABLE_2, TABLE_3, TABLE_4))); DATABASE_1.setViews(new LinkedList<>(List.of(VIEW_1, VIEW_2, VIEW_3))); + DATABASE_1_PRIVILEGED_DTO.setContainer(CONTAINER_1_PRIVILEGED_DTO); DATABASE_1_PRIVILEGED_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_1_DTO, IDENTIFIER_2_DTO, IDENTIFIER_3_DTO, IDENTIFIER_4_DTO))); DATABASE_1_PRIVILEGED_DTO.setTables(new LinkedList<>(List.of(TABLE_1_DTO, TABLE_2_DTO, TABLE_3_DTO, TABLE_4_DTO))); DATABASE_1_PRIVILEGED_DTO.setViews(new LinkedList<>(List.of(VIEW_1_DTO, VIEW_2_DTO, VIEW_3_DTO))); diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java index 9980b6dd2ba49cc0149d1acc2f6e26e1c25a5e31..765bde6242175c05d9e6cb68d5cc544dd7a34236 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java @@ -140,7 +140,8 @@ import static java.time.temporal.ChronoUnit.MINUTES; * <p> * Database 4 (Public Data, Public Schema, User 4) -> Container 4 * <li>Table 9</li> - * <li>Identifier 7 (Database=4)</li> + * <li>Identifier 7</li> + * <li>Query 7</li> * <ul> * </ul> * <br /> @@ -2978,8 +2979,31 @@ public abstract class BaseTest { .isPersisted(QUERY_3_PERSISTED) .resultNumber(2L) .build(); - + + public final static Long QUERY_7_ID = 7L; public final static String QUERY_7_STATEMENT = "SELECT id, date, a.location, lat, lng FROM weather_aus a JOIN weather_location l on a.location = l.location WHERE date = '2008-12-01'"; + public final static String QUERY_7_QUERY_HASH = "df7da3801dfb5c191ff6711d79ce6455f3c09ec8323ce1ff7208ab85387263f5"; + public final static String QUERY_7_RESULT_HASH = "ff4f7cbe1b96d496957f6e49e55b8b1b577fa4d405d4795af99594cfd40cb80d"; + public final static Instant QUERY_7_CREATED = Instant.now().minus(4, MINUTES); + public final static Instant QUERY_7_EXECUTION = Instant.now().minus(1, MINUTES); + public final static Instant QUERY_7_LAST_MODIFIED = Instant.ofEpochSecond(1541588454L); + public final static Long QUERY_7_RESULT_NUMBER = 6L; + public final static Long QUERY_7_RESULT_ID = 4L; + public final static Boolean QUERY_7_PERSISTED = false; + + public final static QueryDto QUERY_7_DTO = QueryDto.builder() + .id(QUERY_7_ID) + .databaseId(DATABASE_4_ID) + .query(QUERY_7_STATEMENT) + .queryNormalized(QUERY_7_STATEMENT) + .resultNumber(QUERY_7_RESULT_NUMBER) + .resultHash(QUERY_7_RESULT_HASH) + .owner(USER_1_BRIEF_DTO) + .queryHash(QUERY_7_QUERY_HASH) + .execution(QUERY_7_EXECUTION) + .isPersisted(QUERY_7_PERSISTED) + .resultNumber(2L) + .build(); public final static Long QUERY_4_ID = 4L; public final static String QUERY_4_STATEMENT = "SELECT `id`, `value` FROM `mfcc`"; @@ -7505,6 +7529,7 @@ public abstract class BaseTest { public final static PrivilegedDatabaseDto DATABASE_1_PRIVILEGED_DTO = PrivilegedDatabaseDto.builder() .id(DATABASE_1_ID) .isPublic(DATABASE_1_PUBLIC) + .isSchemaPublic(DATABASE_1_SCHEMA_PUBLIC) .name(DATABASE_1_NAME) .container(CONTAINER_1_PRIVILEGED_DTO) .internalName(DATABASE_1_INTERNALNAME) @@ -7650,6 +7675,7 @@ public abstract class BaseTest { public final static PrivilegedDatabaseDto DATABASE_2_PRIVILEGED_DTO = PrivilegedDatabaseDto.builder() .id(DATABASE_2_ID) .isPublic(DATABASE_2_PUBLIC) + .isSchemaPublic(DATABASE_2_SCHEMA_PUBLIC) .name(DATABASE_2_NAME) .container(CONTAINER_1_PRIVILEGED_DTO) .internalName(DATABASE_2_INTERNALNAME) @@ -7901,6 +7927,7 @@ public abstract class BaseTest { public final static PrivilegedDatabaseDto DATABASE_3_PRIVILEGED_DTO = PrivilegedDatabaseDto.builder() .id(DATABASE_3_ID) .isPublic(DATABASE_3_PUBLIC) + .isSchemaPublic(DATABASE_3_SCHEMA_PUBLIC) .name(DATABASE_3_NAME) .container(CONTAINER_1_PRIVILEGED_DTO) .internalName(DATABASE_3_INTERNALNAME) @@ -7958,6 +7985,21 @@ public abstract class BaseTest { .identifiers(new LinkedList<>()) .build(); + public final static PrivilegedDatabaseDto DATABASE_4_PRIVILEGED_DTO = PrivilegedDatabaseDto.builder() + .id(DATABASE_4_ID) + .isPublic(DATABASE_4_PUBLIC) + .isSchemaPublic(DATABASE_4_SCHEMA_PUBLIC) + .name(DATABASE_4_NAME) + .container(CONTAINER_1_PRIVILEGED_DTO) + .internalName(DATABASE_4_INTERNALNAME) + .exchangeName(DATABASE_4_EXCHANGE) + .identifiers(new LinkedList<>(List.of(IDENTIFIER_7_DTO))) + .tables(new LinkedList<>(List.of(TABLE_9_DTO))) + .views(new LinkedList<>(List.of())) + .owner(USER_3_BRIEF_DTO) + .lastRetrieved(Instant.now()) + .build(); + public final static DatabaseAccess DATABASE_4_USER_1_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_4_ID)