This is an automated email from the ASF dual-hosted git repository.

exceptionfactory pushed a commit to branch support/nifi-1.x
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/support/nifi-1.x by this push:
     new 71a1417c76 NIFI-11913 Added enum handling to StandardSchemaValidator
71a1417c76 is described below

commit 71a1417c76dfb175836ea28db1b7c5b9b512c913
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]>
    (cherry picked from commit 5cb15b484c67bf9036906cd94d37b2f512e5bcbd)
---
 .../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..64b2750de5 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 = Arrays.asList("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, 
Collections.singletonMap("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() {

Reply via email to