From 283af91afd30fcaa03bd8cf58d9d7970814af10c Mon Sep 17 00:00:00 2001 From: Przemko Robakowski Date: Wed, 29 Apr 2020 22:01:03 +0200 Subject: [PATCH] Fix empty_value handling in CsvProcessor (#55649) * Fix empty_value handling in CsvProcessor Due to bug in `CsvProcessor.Factory` it was impossible to specify `empty_value`. This change fixes that and adds relevant test. Closes #55643 * assert changed --- .../ingest/common/CsvProcessor.java | 17 +++--- .../common/CsvProcessorFactoryTests.java | 55 +++++++++++++++++++ 2 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/CsvProcessorFactoryTests.java diff --git a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/CsvProcessor.java b/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/CsvProcessor.java index 949f5fdf7b46d..c573ab199f69b 100644 --- a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/CsvProcessor.java +++ b/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/CsvProcessor.java @@ -45,13 +45,14 @@ public final class CsvProcessor extends AbstractProcessor { public static final String TYPE = "csv"; - private final String field; - private final String[] headers; - private final boolean trim; - private final char quote; - private final char separator; - private final boolean ignoreMissing; - private final Object emptyValue; + //visible for testing + final String field; + final String[] headers; + final boolean trim; + final char quote; + final char separator; + final boolean ignoreMissing; + final Object emptyValue; CsvProcessor(String tag, String field, String[] headers, boolean trim, char separator, char quote, boolean ignoreMissing, Object emptyValue) { @@ -101,7 +102,7 @@ public CsvProcessor create(Map properties = new HashMap<>(); + properties.put("field", "field"); + properties.put("target_fields", Collections.singletonList("target")); + properties.put("quote", "|"); + properties.put("separator", "/"); + properties.put("empty_value", "empty"); + properties.put("trim", true); + properties.put("ignore_missing", true); + CsvProcessor csv = factory.create(null, "csv", properties); + assertThat(csv, notNullValue()); + assertThat(csv.field, equalTo("field")); + assertThat(csv.headers, equalTo(new String[]{"target"})); + assertThat(csv.quote, equalTo('|')); + assertThat(csv.separator, equalTo('/')); + assertThat(csv.emptyValue, equalTo("empty")); + assertThat(csv.trim, equalTo(true)); + assertThat(csv.ignoreMissing, equalTo(true)); + assertThat(properties, is(emptyMap())); + } +}