diff --git a/server/src/main/java/com/epam/aidial/core/server/util/ApplicationTypeSchemaUtils.java b/server/src/main/java/com/epam/aidial/core/server/util/ApplicationTypeSchemaUtils.java index 0469606b..43803364 100644 --- a/server/src/main/java/com/epam/aidial/core/server/util/ApplicationTypeSchemaUtils.java +++ b/server/src/main/java/com/epam/aidial/core/server/util/ApplicationTypeSchemaUtils.java @@ -60,12 +60,12 @@ static String getCustomApplicationSchemaOrThrow(Config config, Application appli } @SuppressWarnings("unchecked") - private static Map filterProperties(Map customProps, String schema, String collectorName) { + private static Map filterProperties(Map applicationProperties, String schema, String collectorName) { try { JsonSchema appSchema = SCHEMA_FACTORY.getSchema(schema); CollectorContext collectorContext = new CollectorContext(); - String customPropsJson = ProxyUtil.MAPPER.writeValueAsString(customProps); - Set validationResult = appSchema.validate(customPropsJson, InputFormat.JSON, + String applicationPropertiesJson = ProxyUtil.MAPPER.writeValueAsString(applicationProperties); + Set validationResult = appSchema.validate(applicationPropertiesJson, InputFormat.JSON, e -> e.setCollectorContext(collectorContext)); if (!validationResult.isEmpty()) { throw new ApplicationTypeSchemaValidationException("Failed to validate custom app against the schema", validationResult); @@ -76,7 +76,7 @@ private static Map filterProperties(Map customPr } Map result = new HashMap<>(); for (String propertyName : propsCollector.collect()) { - result.put(propertyName, customProps.get(propertyName)); + result.put(propertyName, applicationProperties.get(propertyName)); } return result; } catch (ApplicationTypeSchemaValidationException e) { @@ -91,6 +91,9 @@ public static Map getCustomServerProperties(Config config, Appli if (customApplicationSchema == null) { return Collections.emptyMap(); } + if (application.getApplicationProperties() == null) { + throw new ApplicationTypeSchemaValidationException("Typed application's properties not set"); + } return filterProperties(application.getApplicationProperties(), customApplicationSchema, "server"); } diff --git a/server/src/test/java/com/epam/aidial/core/server/function/enhancement/AppendCustomApplicationPropertiesFnTest.java b/server/src/test/java/com/epam/aidial/core/server/function/enhancement/AppendCustomApplicationPropertiesFnTest.java index b0c8cfce..9cf05f0e 100644 --- a/server/src/test/java/com/epam/aidial/core/server/function/enhancement/AppendCustomApplicationPropertiesFnTest.java +++ b/server/src/test/java/com/epam/aidial/core/server/function/enhancement/AppendCustomApplicationPropertiesFnTest.java @@ -6,6 +6,7 @@ import com.epam.aidial.core.server.Proxy; import com.epam.aidial.core.server.ProxyContext; import com.epam.aidial.core.server.util.ProxyUtil; +import com.epam.aidial.core.server.validation.ApplicationTypeSchemaValidationException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.node.ObjectNode; import org.junit.jupiter.api.BeforeEach; @@ -21,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; @@ -78,6 +80,15 @@ void setUp() { when(context.getConfig()).thenReturn(config); } + @Test + void apply_throws_whenApplicationHasCustomSchemaIdAndNoCustomFieldsPassedAndApplicationPropertiesIsNull() { + when(context.getDeployment()).thenReturn(application); + application.setApplicationTypeSchemaId(URI.create("customSchemaId")); + when(config.getCustomApplicationSchema(eq(URI.create("customSchemaId")))).thenReturn(schema); + ObjectNode tree = ProxyUtil.MAPPER.createObjectNode(); + assertThrows(ApplicationTypeSchemaValidationException.class, () -> function.apply(tree)); + } + @Test void apply_appendsCustomProperties_whenApplicationHasCustomSchemaIdAndNoCustomFieldsPassed() { String serverFile = "files/public/valid-file-path/valid-sub-path/valid%20file%20name2.ext";