From ef4887ccab1980670572c40cfadebdd2f617ed2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Bedn=C3=A1=C5=99?= Date: Tue, 19 Jul 2022 09:28:19 +0200 Subject: [PATCH] chore(deps): update commons-lang3 and fix parsing boolean in LineProtocolParser (#87) --- CHANGELOG.md | 1 + .../serialization/InfluxLineProtocolParser.java | 16 +++++++++++++--- .../TestInfluxLineProtocolParser.java | 13 ++++++++++++- pom.xml | 2 +- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7b104a..c70f32f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ #### Build: - influxdb-java to 2.23 - commons-io to 2.11 + - commons-lang3 to 3.12.0 - gson to 2.9.0 #### Test: diff --git a/nifi-influx-database-serialization/src/main/java/org/influxdata/nifi/serialization/InfluxLineProtocolParser.java b/nifi-influx-database-serialization/src/main/java/org/influxdata/nifi/serialization/InfluxLineProtocolParser.java index e913c0a..fe312fc 100644 --- a/nifi-influx-database-serialization/src/main/java/org/influxdata/nifi/serialization/InfluxLineProtocolParser.java +++ b/nifi-influx-database-serialization/src/main/java/org/influxdata/nifi/serialization/InfluxLineProtocolParser.java @@ -17,6 +17,7 @@ package org.influxdata.nifi.serialization; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -38,6 +39,11 @@ public final class InfluxLineProtocolParser { private static final Logger LOG = LoggerFactory.getLogger(InfluxLineProtocolParser.class); + /** + * Boolean accepted values + */ + private static final List BOOLEAN_ACCEPTED = Arrays.asList("t", "true", "f", "false"); + // Internal private String lineProtocol; private String[] tokens; @@ -394,9 +400,13 @@ Object transformValue(@NonNull final String value) { return Long.parseLong(value.substring(0, value.length() - 1)); } - Boolean bool = BooleanUtils.toBooleanObject(value); - if (bool != null) { - return bool; + // We don't want parse the '0', '1' ... as a boolean. Accepted values: + // https://docs.influxdata.com/influxdb/latest/reference/syntax/line-protocol/#boolean + if (BOOLEAN_ACCEPTED.contains(value.toLowerCase())) { + Boolean bool = BooleanUtils.toBooleanObject(value); + if (bool != null) { + return bool; + } } // diff --git a/nifi-influx-database-serialization/src/test/java/org/influxdata/nifi/serialization/TestInfluxLineProtocolParser.java b/nifi-influx-database-serialization/src/test/java/org/influxdata/nifi/serialization/TestInfluxLineProtocolParser.java index 24e764b..fad2fb6 100644 --- a/nifi-influx-database-serialization/src/test/java/org/influxdata/nifi/serialization/TestInfluxLineProtocolParser.java +++ b/nifi-influx-database-serialization/src/test/java/org/influxdata/nifi/serialization/TestInfluxLineProtocolParser.java @@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory; /** - * The tests comes from https://github.com/influxdata/influxdb/blob/1.6/models/points_test.go. + * The tests comes from points_test.go. */ public class TestInfluxLineProtocolParser { @@ -1035,6 +1035,17 @@ public void tagsAreNotNull() throws NotParsableInlineProtocolData Assert.assertTrue(parser.getTags().isEmpty()); } + @Test + public void onlyValidBooleans() { + + ExpectedResult.success() + .measurement("b") + .field("float1", 1F) + .field("float2", 0F) + .field("float3", 1.0F) + .validate("b float1=1,float2=0,float3=1.0"); + } + private static final class ExpectedResult { private static final Logger LOG = LoggerFactory.getLogger(ExpectedResult.class); diff --git a/pom.xml b/pom.xml index 7eaa08e..75d83ad 100644 --- a/pom.xml +++ b/pom.xml @@ -212,7 +212,7 @@ org.apache.commons commons-lang3 - 3.8.1 + 3.12.0