Skip to content
Snippets Groups Projects
Commit a98fb25a authored by Henry Borasch's avatar Henry Borasch
Browse files

* added config attribute for providing schema folder path

* load schema from specified path on initiation
* fixed and adjusted tests
parent d2de8f6c
No related branches found
No related tags found
2 merge requests!139928 - Validate Submission Data,!128Add Schema URI via Builder, check against existing destinations
Showing
with 39 additions and 37 deletions
......@@ -42,6 +42,8 @@ public class ApplicationConfig {
private EnvironmentName activeEnvironment;
private String submissionDataSchemaPath;
private Environment getEnvironmentByName(final EnvironmentName environmentName) {
if (environments.containsKey(environmentName)) {
return environments.get(environmentName);
......
......@@ -15,8 +15,7 @@ public enum SchemaConfig {
SET_V_1_0_1(SCHEMA_BASE_URL.schemaUri.resolve("set-payload/1.0.1/set-payload.schema.json"), "set_schema_1.0.1.json"),
SET_V_1_0_0(SCHEMA_BASE_URL.schemaUri.resolve("set-payload/1.0.0/set-payload.schema.json"), "set_schema_1.0.0.json"),
METADATA_V_1_0_0(SCHEMA_BASE_URL.schemaUri.resolve("metadata/1.0.0/metadata.schema.json"), "metadata_schema_1.0.0.json"),
XZUFI_DESTINATION_SCHEMA(SCHEMA_BASE_URL.schemaUri.resolve("xzufi/destination.schema.json"), "destination_schema.json"),
SUBMISSION_DATA_SCHEMA(URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"), "s00000096_1.0.schema.json");
XZUFI_DESTINATION_SCHEMA(SCHEMA_BASE_URL.schemaUri.resolve("xzufi/destination.schema.json"), "destination_schema.json");
private final URI schemaUri;
......@@ -50,12 +49,6 @@ public enum SchemaConfig {
.collect(Collectors.toList());
}
public static List<String> getSubmissionDataSchemaPaths(final String submissionDataSchemaBaseDir) {
return Stream.of(SUBMISSION_DATA_SCHEMA.fileName)
.map(fileName -> submissionDataSchemaBaseDir + "/" + fileName)
.collect(Collectors.toList());
}
@Override
public String toString() {
return schemaUri.toString();
......
......@@ -10,5 +10,5 @@ public class SchemaResources {
List<String> setSchemaPaths;
List<String> metadataSchemaPaths;
List<String> destinationSchemaPaths;
List<String> submissionDataSchemaPaths;
String submissionDataSchemaPath;
}
......@@ -61,7 +61,6 @@ public final class ClientFactory {
private static final String SET_SCHEMA_DIR = "/set-schema";
private static final String DESTINATION_SCHEMA_DIR = "/destination-schema";
private static final String METADATA_SCHEMA_DIR = "/metadata-schema";
private static final String SUBMISSION_DATA_SCHEMA_DIR = "/submission-data-schema";
private ClientFactory() {
}
......@@ -129,7 +128,7 @@ public final class ClientFactory {
public static RoutingClient routingClient(final ApplicationConfig config) {
LOGGER.info("Initializing routing client ...");
final RestTemplate restTemplate = getRestTemplate(config, ApplicationConfigLoader.loadBuildInfo());
final SchemaProvider schemaProvider = getSchemaProvider(restTemplate);
final SchemaProvider schemaProvider = getSchemaProvider(restTemplate, config.getSubmissionDataSchemaPath());
final OAuthService authService = getSenderConfiguredAuthService(config, restTemplate);
final MessageDigestService messageDigestService = getMessageDigestService();
......@@ -145,7 +144,7 @@ public final class ClientFactory {
private static Sender getSender(final ApplicationConfig config, final BuildInfo buildInfo) {
final RestTemplate restTemplate = getRestTemplate(config, buildInfo);
final SchemaProvider schemaProvider = getSchemaProvider(restTemplate);
final SchemaProvider schemaProvider = getSchemaProvider(restTemplate, config.getSubmissionDataSchemaPath());
final MessageDigestService messageDigestService = getMessageDigestService();
final CryptoService cryptoService = getCryptoService(messageDigestService);
......@@ -162,7 +161,7 @@ public final class ClientFactory {
private static Subscriber getSubscriber(final ApplicationConfig config, final BuildInfo buildInfo) {
final RestTemplate restTemplate = getRestTemplate(config, buildInfo);
final SchemaProvider schemaProvider = getSchemaProvider(restTemplate);
final SchemaProvider schemaProvider = getSchemaProvider(restTemplate, config.getSubmissionDataSchemaPath());
final MessageDigestService messageDigestService = getMessageDigestService();
final CryptoService cryptoService = getCryptoService(messageDigestService);
......@@ -231,12 +230,11 @@ public final class ClientFactory {
return new EventLogVerifier(keyService, validationService);
}
private static SchemaProvider getSchemaProvider(RestTemplate restTemplate) {
private static SchemaProvider getSchemaProvider(RestTemplate restTemplate, String submissionDataSchemaPath) {
final List<String> setSchemaFiles = SchemaConfig.getSetSchemaFilePaths(SET_SCHEMA_DIR);
final List<String> metadataSchemaFiles = SchemaConfig.getMetadataSchemaFileNames(METADATA_SCHEMA_DIR);
final List<String> destinationSchemaFiles = SchemaConfig.getDestinationSchemaPaths(DESTINATION_SCHEMA_DIR);
final List<String> submissionDataSchemaFiles = SchemaConfig.getSubmissionDataSchemaPaths(SUBMISSION_DATA_SCHEMA_DIR);
final SchemaResources schemaResources = new SchemaResources(setSchemaFiles, metadataSchemaFiles, destinationSchemaFiles, submissionDataSchemaFiles);
final SchemaResources schemaResources = new SchemaResources(setSchemaFiles, metadataSchemaFiles, destinationSchemaFiles, submissionDataSchemaPath);
return new SchemaResourceProvider(restTemplate, schemaResources);
}
......
......@@ -12,12 +12,11 @@ import org.slf4j.LoggerFactory;
import org.springframework.web.client.RestTemplate;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
......@@ -48,7 +47,7 @@ public class SchemaResourceProvider implements SchemaProvider {
populateSetSchemas(schemaResources.getSetSchemaPaths());
populateMetadataSchemas(schemaResources.getMetadataSchemaPaths());
populateDestinationSchemas(schemaResources.getDestinationSchemaPaths());
populateSubmissionDataSchemas(schemaResources.getSubmissionDataSchemaPaths());
populateSubmissionDataSchemas(schemaResources.getSubmissionDataSchemaPath());
}
private void populateMetadataSchemas(final List<String> metadataSchemaPaths) {
......@@ -66,9 +65,11 @@ public class SchemaResourceProvider implements SchemaProvider {
getResourceFiles(destinationSchemaPaths).forEach(this::addDestinationSchema);
}
private void populateSubmissionDataSchemas(final List<String> submissionDataSchemaPaths) {
private void populateSubmissionDataSchemas(final String submissionDataSchemaPath) {
LOGGER.info("Initializing submission data schemas");
getResourceFiles(submissionDataSchemaPaths).forEach(this::addSubmissionDataSchema);
if (submissionDataSchemaPath != null && !submissionDataSchemaPath.isEmpty()) {
getResourceFiles(submissionDataSchemaPath).forEach(this::addSubmissionDataSchema);
}
}
@Override
......@@ -156,6 +157,15 @@ public class SchemaResourceProvider implements SchemaProvider {
return schemaFiles.stream().map(SchemaResourceProvider::readResourceToString).collect(Collectors.toList());
}
private List<String> getResourceFiles(final String schemaPath) {
File schemaFolder = new File(Objects.requireNonNull(SchemaResourceProvider.class.getClassLoader().getResource(schemaPath)).getFile());
return Arrays.stream(Objects.requireNonNull(schemaFolder.listFiles()))
.map(file -> "/" + schemaPath + "/" + file.getName())
.map(SchemaResourceProvider::readResourceToString).collect(Collectors.toList());
}
private static String readResourceToString(final String schemaFile) {
try (final InputStream is = SchemaResourceProvider.class.getResourceAsStream(schemaFile);
final BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
......
......@@ -11,8 +11,8 @@ import dev.fitko.fitconnect.api.config.ApplicationConfig;
import dev.fitko.fitconnect.api.config.Environment;
import dev.fitko.fitconnect.api.config.EnvironmentName;
import dev.fitko.fitconnect.api.config.SchemaConfig;
import dev.fitko.fitconnect.api.domain.model.event.EventPayload;
import dev.fitko.fitconnect.api.domain.model.event.Event;
import dev.fitko.fitconnect.api.domain.model.event.EventPayload;
import dev.fitko.fitconnect.api.domain.model.event.problems.submission.AttachmentsMismatch;
import dev.fitko.fitconnect.api.domain.model.submission.Submission;
import dev.fitko.fitconnect.api.domain.schema.SchemaResources;
......@@ -63,8 +63,8 @@ class SecurityEventTokenServiceTest {
final List<String> setSchemas = SchemaConfig.getSetSchemaFilePaths("/set-schema");
final List<String> metadataSchemas = SchemaConfig.getMetadataSchemaFileNames("/metadata-schema");
final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema");
final List<String> submissionDataSchemas = SchemaConfig.getSubmissionDataSchemaPaths("/submission-data-schema");
final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemas);
final String submissionDataSchemaPath = "submission-data-test-schema";
final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemaPath);
final SchemaProvider schemaProvider = new SchemaResourceProvider(mock(RestTemplate.class), schemaResources);
validationService = new DefaultValidationService(config, new HashService(), schemaProvider);
......
......@@ -32,8 +32,8 @@ class SchemaResourceProviderTest {
final List<String> setSchemas = SchemaConfig.getSetSchemaFilePaths("/set-schema");
final List<String> metadataSchemas = SchemaConfig.getMetadataSchemaFileNames("/metadata-schema");
final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema");
final List<String> submissionDataSchemas = SchemaConfig.getSubmissionDataSchemaPaths("/submission-data-schema");
final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemas);
final String submissionDataPath = "submission-data-test-schema";
final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataPath);
underTest = new SchemaResourceProvider(mock(RestTemplate.class), schemaResources);
}
......@@ -108,7 +108,7 @@ class SchemaResourceProviderTest {
when(restTemplate.getForEntity(eq(URI.create("https://test.json")), any())).thenReturn(ResponseEntity.ok("schema"));
SchemaResourceProvider schemaResourceProvider = new SchemaResourceProvider(restTemplate,
new SchemaResources(List.of(), List.of(), List.of(), List.of()));
new SchemaResources(List.of(), List.of(), List.of(), null));
String schema = schemaResourceProvider.loadSubmissionDataSchema(URI.create("https://test.json"));
......@@ -122,7 +122,7 @@ class SchemaResourceProviderTest {
when(restTemplate.getForEntity(eq(URI.create("https://test.json")), any())).thenThrow(new RuntimeException("Something went wrong!"));
SchemaResourceProvider schemaResourceProvider = new SchemaResourceProvider(restTemplate,
new SchemaResources(List.of(), List.of(), List.of(), List.of()));
new SchemaResources(List.of(), List.of(), List.of(), null));
Exception exception = assertThrows(SchemaNotFoundException.class,
() -> schemaResourceProvider.loadSubmissionDataSchema(URI.create("https://test.json")));
......@@ -133,8 +133,7 @@ class SchemaResourceProviderTest {
@Test
void loadSubmissionDataSchemaFromMemory() {
SchemaResources schemaResources = new SchemaResources(List.of(), List.of(), List.of(),
List.of("/submission_data_schema_local.json"));
SchemaResources schemaResources = new SchemaResources(List.of(), List.of(), List.of(), "submission-data-test-schema");
SchemaResourceProvider schemaResourceProvider = new SchemaResourceProvider(mock(RestTemplate.class), schemaResources);
......@@ -146,7 +145,7 @@ class SchemaResourceProviderTest {
@Test
void loadSubmissionDataSchemaFromMemoryFailed() {
SchemaResources schemaResources = new SchemaResources(List.of(), List.of(), List.of(), List.of());
SchemaResources schemaResources = new SchemaResources(List.of(), List.of(), List.of(), null);
SchemaResourceProvider schemaResourceProvider = new SchemaResourceProvider(mock(RestTemplate.class), schemaResources);
......
......@@ -61,8 +61,8 @@ class DefaultValidationServiceTest {
final List<String> setSchemas = SchemaConfig.getSetSchemaFilePaths("/set-schema");
final List<String> metadataSchemas = SchemaConfig.getMetadataSchemaFileNames("/metadata-schema");
final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema");
final List<String> submissionDataSchemas = SchemaConfig.getSubmissionDataSchemaPaths("/submission-data-schema");
final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemas);
final String submissionDataSchemaPath = "submission-data-test-schema";
final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemaPath);
schemaProvider = new SchemaResourceProvider(restTemplate, schemaResources);
underTest = new DefaultValidationService(config, hashService, schemaProvider);
}
......@@ -449,7 +449,7 @@ class DefaultValidationServiceTest {
// Given
SchemaProvider schemaProvider = mock(SchemaProvider.class);
when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission_data_schema_remote.json"));
when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission-data-test-schema/submission_data_schema_remote.json"));
DefaultValidationService defaultValidationService = new DefaultValidationService(getApplicationConfig(true, false), new HashService(), schemaProvider);
final var invalidJson = "{ \"someString\": \"someStringValue\", \"someArray\": [\"someArrayValue\"] }";
......@@ -467,7 +467,7 @@ class DefaultValidationServiceTest {
// Given
SchemaProvider schemaProvider = mock(SchemaProvider.class);
when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission_data_schema_remote.json"));
when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission-data-test-schema/submission_data_schema_remote.json"));
DefaultValidationService defaultValidationService = new DefaultValidationService(getApplicationConfig(true, false), new HashService(), schemaProvider);
final var invalidJson = "{ \"wrongString\": \"someStringValue\", \"someArray\": [\"someArrayValue\"] }";
......@@ -486,7 +486,7 @@ class DefaultValidationServiceTest {
// Given
SchemaProvider schemaProvider = mock(SchemaProvider.class);
when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission_data_schema_remote.json"));
when(schemaProvider.loadSubmissionDataSchema(any())).thenReturn(getResource("/submission-data-test-schema/submission_data_schema_remote.json"));
DefaultValidationService defaultValidationService = new DefaultValidationService(getApplicationConfig(true, true), new HashService(), schemaProvider);
final var invalidJson = "{ \"wrongString\": \"someStringValue\", \"someArray\": [\"someArrayValue\"] }";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment