This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 5cb15b484c NIFI-11913 Added enum handling to StandardSchemaValidator
5cb15b484c is described below
commit 5cb15b484c67bf9036906cd94d37b2f512e5bcbd
Author: Mike Thomsen <[email protected]>
AuthorDate: Sun Aug 6 21:27:46 2023 -0400
NIFI-11913 Added enum handling to StandardSchemaValidator
This closes #7576
Signed-off-by: David Handermann <[email protected]>
---
.../schema/validation/StandardSchemaValidator.java | 9 +++++++++
.../validation/TestStandardSchemaValidator.java | 22 ++++++++++++++++++++++
2 files changed, 31 insertions(+)
diff --git
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/schema/validation/StandardSchemaValidator.java
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/schema/validation/StandardSchemaValidator.java
index 0f5384b690..bf2d4d6d91 100644
---
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/schema/validation/StandardSchemaValidator.java
+++
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/schema/validation/StandardSchemaValidator.java
@@ -24,6 +24,7 @@ import org.apache.nifi.serialization.record.RecordFieldType;
import org.apache.nifi.serialization.record.RecordSchema;
import org.apache.nifi.serialization.record.type.ArrayDataType;
import org.apache.nifi.serialization.record.type.ChoiceDataType;
+import org.apache.nifi.serialization.record.type.EnumDataType;
import org.apache.nifi.serialization.record.type.MapDataType;
import org.apache.nifi.serialization.record.type.RecordDataType;
import org.apache.nifi.serialization.record.util.DataTypeUtils;
@@ -33,6 +34,7 @@ import
org.apache.nifi.serialization.record.validation.ValidationError;
import org.apache.nifi.serialization.record.validation.ValidationErrorType;
import java.math.BigInteger;
+import java.util.List;
import java.util.Map;
public class StandardSchemaValidator implements RecordSchemaValidator {
@@ -179,6 +181,13 @@ public class StandardSchemaValidator implements
RecordSchemaValidator {
private boolean isTypeCorrect(final Object value, final DataType dataType)
{
switch (dataType.getFieldType()) {
+ case ENUM:
+ if (!(value instanceof String)) {
+ return false;
+ }
+ final EnumDataType enumDataType = (EnumDataType) dataType;
+ final List<String> enumList = enumDataType.getEnums();
+ return enumList.contains(value);
case ARRAY:
if (!(value instanceof Object[])) {
return false;
diff --git
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/test/java/org/apache/nifi/schema/validation/TestStandardSchemaValidator.java
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/test/java/org/apache/nifi/schema/validation/TestStandardSchemaValidator.java
index baa1063500..f8467f9a74 100644
---
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/test/java/org/apache/nifi/schema/validation/TestStandardSchemaValidator.java
+++
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/test/java/org/apache/nifi/schema/validation/TestStandardSchemaValidator.java
@@ -24,6 +24,7 @@ import org.apache.nifi.serialization.record.Record;
import org.apache.nifi.serialization.record.RecordField;
import org.apache.nifi.serialization.record.RecordFieldType;
import org.apache.nifi.serialization.record.RecordSchema;
+import org.apache.nifi.serialization.record.type.EnumDataType;
import org.apache.nifi.serialization.record.validation.SchemaValidationResult;
import org.apache.nifi.serialization.record.validation.ValidationError;
import org.apache.nifi.serialization.record.validation.ValidationErrorType;
@@ -48,6 +49,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
+import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -392,6 +394,26 @@ public class TestStandardSchemaValidator {
assertTrue(result.getValidationErrors().isEmpty());
}
+ @Test
+ public void testEnumValidation() {
+ List<String> enums = List.of("X", "Y", "Z");
+ EnumDataType enumDataType = new EnumDataType(enums);
+ final List<RecordField> fields = new ArrayList<>();
+ fields.add(new RecordField("enum_field", enumDataType));
+ final RecordSchema schema = new SimpleRecordSchema(fields);
+ final SchemaValidationContext strictValidationContext = new
SchemaValidationContext(schema, false, true);
+ final StandardSchemaValidator validator = new
StandardSchemaValidator(strictValidationContext);
+
+ List<Record> records = enums.stream().map(e -> new MapRecord(schema,
Map.of("enum_field", e)))
+ .collect(Collectors.toList());
+
+ records.forEach(record -> {
+ SchemaValidationResult result = validator.validate(record);
+ assertTrue(result.isValid());
+ assertNotNull(result.getValidationErrors());
+ assertTrue(result.getValidationErrors().isEmpty());
+ });
+ }
@Test
public void testInvalidArrayValue() {