You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2021/08/31 17:34:39 UTC
[nifi] branch main updated: NIFI-8749 Revert "Removed implicit time
zone conversion to GMT"
This is an automated email from the ASF dual-hosted git repository.
mattyb149 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 dfa6592 NIFI-8749 Revert "Removed implicit time zone conversion to GMT"
dfa6592 is described below
commit dfa6592a478669e928870207bcee3987bf480d51
Author: Matthew Burgess <ma...@apache.org>
AuthorDate: Tue Aug 31 13:33:16 2021 -0400
NIFI-8749 Revert "Removed implicit time zone conversion to GMT"
This reverts commit 758e1850ed0e4af5063877c7e3a56628e5e7ed78.
Signed-off-by: Matthew Burgess <ma...@apache.org>
---
.../apache/nifi/record/path/TestRecordPath.java | 76 +++++-------
.../serialization/record/util/DataTypeUtils.java | 8 +-
nifi-docs/src/main/asciidoc/record-path-guide.adoc | 3 +-
.../apache/nifi/processors/aws/s3/TestListS3.java | 9 +-
.../TestPutElasticsearchHttpRecord.java | 138 ++++++++++++---------
.../nifi/processors/standard/TestQueryRecord.java | 61 ++++-----
.../avro/TestAvroReaderWithEmbeddedSchema.java | 4 +-
.../org/apache/nifi/csv/TestCSVRecordReader.java | 3 +
.../org/apache/nifi/csv/TestWriteCSVResult.java | 2 +
.../org/apache/nifi/json/TestWriteJsonResult.java | 2 +
.../org/apache/nifi/xml/TestWriteXMLResult.java | 2 +
11 files changed, 159 insertions(+), 149 deletions(-)
diff --git a/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java b/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
index c893177..0c89b2e 100644
--- a/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
+++ b/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
@@ -35,10 +35,6 @@ import java.nio.charset.StandardCharsets;
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
@@ -1421,7 +1417,7 @@ public class TestRecordPath {
}
@Test
- public void testFormatDateFromString() {
+ public void testFormatDateFromString() throws ParseException {
final List<RecordField> fields = new ArrayList<>();
fields.add(new RecordField("id", RecordFieldType.INT.getDataType()));
fields.add(new RecordField("date", RecordFieldType.DATE.getDataType()));
@@ -1430,84 +1426,70 @@ public class TestRecordPath {
final Map<String, Object> values = new HashMap<>();
values.put("id", 48);
-
- final String localDateFormatted = "2017-10-20";
- final String localDateTimeFormatted = String.format("%sT12:45:30", localDateFormatted);
- final LocalDateTime localDateTime = LocalDateTime.parse(localDateTimeFormatted);
- final int offsetHours = 6;
- final String timeZone = String.format("GMT+%d:00", offsetHours);
-
- values.put("date", localDateTimeFormatted);
+ values.put("date", "2017-10-20T11:00:00Z");
final Record record = new MapRecord(schema, values);
- final FieldValue fieldValue = RecordPath.compile("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss\"), 'yyyy-MM-dd' )").evaluate(record).getSelectedFields().findFirst().get();
- assertEquals(localDateFormatted, fieldValue.getValue());
- final FieldValue fieldValue2 = RecordPath.compile(String.format("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss\"), 'yyyy-MM-dd' , '%s')", timeZone))
+ final FieldValue fieldValue = RecordPath.compile("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss'Z'\"), 'yyyy-MM-dd' )").evaluate(record).getSelectedFields().findFirst().get();
+ assertEquals("2017-10-20", fieldValue.getValue());
+ final FieldValue fieldValue2 = RecordPath.compile("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss'Z'\"), 'yyyy-MM-dd' , 'GMT+8:00')")
.evaluate(record).getSelectedFields().findFirst().get();
- assertEquals(localDateFormatted, fieldValue2.getValue());
+ assertEquals("2017-10-20", fieldValue2.getValue());
- final FieldValue fieldValue3 = RecordPath.compile(String.format("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss\"), \"yyyy-MM-dd'T'HH:mm:ss\", '%s')", timeZone))
+ final FieldValue fieldValue3 = RecordPath.compile("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss'Z'\"), 'yyyy-MM-dd HH:mm', 'GMT+8:00')")
.evaluate(record).getSelectedFields().findFirst().get();
+ assertEquals("2017-10-20 19:00", fieldValue3.getValue());
- final ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneOffset.systemDefault());
- final ZonedDateTime adjustedZoneDateTime = zonedDateTime.withZoneSameInstant(ZoneOffset.ofHours(offsetHours));
- final LocalDateTime adjustedLocalDateTime = adjustedZoneDateTime.toLocalDateTime();
- final String adjustedDateTime = adjustedLocalDateTime.toString();
- assertEquals(adjustedDateTime, fieldValue3.getValue());
-
- final FieldValue fieldValueUnchanged = RecordPath.compile("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss\"), 'INVALID' )").evaluate(record).getSelectedFields().findFirst().get();
- assertEquals(localDateFormatted, fieldValueUnchanged.getValue().toString());
- final FieldValue fieldValueUnchanged2 = RecordPath.compile("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss\"), 'INVALID' , 'INVALID')")
+ final FieldValue fieldValueUnchanged = RecordPath.compile("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss'Z'\"), 'INVALID' )").evaluate(record).getSelectedFields().findFirst().get();
+ assertEquals(DataTypeUtils.getDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse("2017-10-20T11:00:00Z"), fieldValueUnchanged.getValue());
+ final FieldValue fieldValueUnchanged2 = RecordPath.compile("format( toDate(/date, \"yyyy-MM-dd'T'HH:mm:ss'Z'\"), 'INVALID' , 'INVALID')")
.evaluate(record).getSelectedFields().findFirst().get();
- assertEquals(localDateFormatted, fieldValueUnchanged2.getValue().toString());
+ assertEquals(DataTypeUtils.getDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse("2017-10-20T11:00:00Z"), fieldValueUnchanged2.getValue());
}
@Test
- public void testFormatDateFromLong() {
+ public void testFormatDateFromLong() throws ParseException {
final List<RecordField> fields = new ArrayList<>();
fields.add(new RecordField("id", RecordFieldType.INT.getDataType()));
fields.add(new RecordField("date", RecordFieldType.LONG.getDataType()));
final RecordSchema schema = new SimpleRecordSchema(fields);
- final String localDate = "2017-10-20";
- final String instantFormatted = String.format("%sT12:30:45Z", localDate);
- final long epochMillis = Instant.parse(instantFormatted).toEpochMilli();
+ final DateFormat dateFormat = DataTypeUtils.getDateFormat("yyyy-MM-dd");
+ final long dateValue = dateFormat.parse("2017-10-20").getTime();
final Map<String, Object> values = new HashMap<>();
values.put("id", 48);
- values.put("date", epochMillis);
+ values.put("date", dateValue);
final Record record = new MapRecord(schema, values);
- assertEquals(localDate, RecordPath.compile("format(/date, 'yyyy-MM-dd' )").evaluate(record).getSelectedFields().findFirst().get().getValue());
- assertEquals(instantFormatted, RecordPath.compile("format(/date, \"yyyy-MM-dd'T'HH:mm:ss'Z'\", 'GMT')").evaluate(record).getSelectedFields().findFirst().get().getValue());
+ assertEquals("2017-10-20", RecordPath.compile("format(/date, 'yyyy-MM-dd' )").evaluate(record).getSelectedFields().findFirst().get().getValue());
+ assertEquals("2017-10-20 08:00:00", RecordPath.compile("format(/date, 'yyyy-MM-dd HH:mm:ss', 'GMT+8:00' )").evaluate(record).getSelectedFields().findFirst().get().getValue());
final FieldValue fieldValueUnchanged = RecordPath.compile("format(/date, 'INVALID' )").evaluate(record).getSelectedFields().findFirst().get();
- assertEquals(epochMillis, fieldValueUnchanged.getValue());
+ assertEquals(dateValue, fieldValueUnchanged.getValue());
final FieldValue fieldValueUnchanged2 = RecordPath.compile("format(/date, 'INVALID', 'INVALID' )").evaluate(record).getSelectedFields().findFirst().get();
- assertEquals(epochMillis, fieldValueUnchanged2.getValue());
+ assertEquals(dateValue, fieldValueUnchanged2.getValue());
}
@Test
- public void testFormatDateFromDate() {
+ public void testFormatDateFromDate() throws ParseException {
final List<RecordField> fields = new ArrayList<>();
fields.add(new RecordField("id", RecordFieldType.INT.getDataType()));
fields.add(new RecordField("date", RecordFieldType.DATE.getDataType()));
final RecordSchema schema = new SimpleRecordSchema(fields);
- final String localDate = "2017-10-20";
- final String instantFormatted = String.format("%sT12:30:45Z", localDate);
- final Instant instant = Instant.parse(instantFormatted);
- final Date dateValue = new Date(instant.toEpochMilli());
+ final DateFormat dateFormat = DataTypeUtils.getDateFormat("yyyy-MM-dd");
+ final java.util.Date utilDate = dateFormat.parse("2017-10-20");
+ final Date dateValue = new Date(utilDate.getTime());
final Map<String, Object> values = new HashMap<>();
values.put("id", 48);
values.put("date", dateValue);
final Record record = new MapRecord(schema, values);
- assertEquals(localDate, RecordPath.compile("format(/date, 'yyyy-MM-dd')").evaluate(record).getSelectedFields().findFirst().get().getValue());
- assertEquals(instantFormatted, RecordPath.compile("format(/date, \"yyyy-MM-dd'T'HH:mm:ss'Z'\", 'GMT')").evaluate(record).getSelectedFields().findFirst().get().getValue());
+ assertEquals("2017-10-20", RecordPath.compile("format(/date, 'yyyy-MM-dd')").evaluate(record).getSelectedFields().findFirst().get().getValue());
+ assertEquals("2017-10-20 08:00:00", RecordPath.compile("format(/date, 'yyyy-MM-dd HH:mm:ss', 'GMT+8:00')").evaluate(record).getSelectedFields().findFirst().get().getValue());
final FieldValue fieldValueUnchanged = RecordPath.compile("format(/date, 'INVALID')").evaluate(record).getSelectedFields().findFirst().get();
assertEquals(dateValue, fieldValueUnchanged.getValue());
@@ -1940,7 +1922,8 @@ public class TestRecordPath {
accountFields.add(new RecordField("id", RecordFieldType.INT.getDataType()));
accountFields.add(new RecordField("balance", RecordFieldType.DOUBLE.getDataType()));
- return new SimpleRecordSchema(accountFields);
+ final RecordSchema accountSchema = new SimpleRecordSchema(accountFields);
+ return accountSchema;
}
private Record createSimpleRecord() {
@@ -1954,7 +1937,8 @@ public class TestRecordPath {
final Map<String, Object> values = new HashMap<>();
values.put("id", 48);
values.put("name", "John Doe");
- return new MapRecord(schema, values);
+ final Record record = new MapRecord(schema, values);
+ return record;
}
}
diff --git a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/util/DataTypeUtils.java b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/util/DataTypeUtils.java
index 5a8649e..3331d81 100644
--- a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/util/DataTypeUtils.java
+++ b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/util/DataTypeUtils.java
@@ -112,6 +112,8 @@ public class DataTypeUtils {
private static final Pattern FLOATING_POINT_PATTERN = Pattern.compile(doubleRegex);
private static final Pattern DECIMAL_PATTERN = Pattern.compile(decimalRegex);
+ private static final TimeZone GMT_TIME_ZONE = TimeZone.getTimeZone("GMT");
+
private static final Supplier<DateFormat> DEFAULT_DATE_FORMAT = () -> getDateFormat(RecordFieldType.DATE.getDefaultFormat());
private static final Supplier<DateFormat> DEFAULT_TIME_FORMAT = () -> getDateFormat(RecordFieldType.TIME.getDefaultFormat());
private static final Supplier<DateFormat> DEFAULT_TIMESTAMP_FORMAT = () -> getDateFormat(RecordFieldType.TIMESTAMP.getDefaultFormat());
@@ -1327,7 +1329,9 @@ public class DataTypeUtils {
}
/**
- * Get Date Format using default Local Time Zone
+ * Get Date Format using GMT Time Zone
+ *
+ * This Date Format can produce unexpected results when the system default Time Zone is not GMT
*
* @param pattern Date Format Pattern used for new SimpleDateFormat()
* @return Date Format or null when pattern not provided
@@ -1336,7 +1340,7 @@ public class DataTypeUtils {
if (pattern == null) {
return null;
}
- return getDateFormat(pattern, TimeZone.getDefault());
+ return getDateFormat(pattern, GMT_TIME_ZONE);
}
/**
diff --git a/nifi-docs/src/main/asciidoc/record-path-guide.adoc b/nifi-docs/src/main/asciidoc/record-path-guide.adoc
index b59f78a..5caa1ac 100644
--- a/nifi-docs/src/main/asciidoc/record-path-guide.adoc
+++ b/nifi-docs/src/main/asciidoc/record-path-guide.adoc
@@ -636,8 +636,7 @@ not the first value that is encountered in the Record itself.
=== format
-Converts a Date to a String in the given format with an optional time zone. The function defaults to the system local
-time zone when the second argument is not provided.
+Converts a Date to a String in the given format with the given time zone(optional, default time zone is GMT).
The first argument to this function must be a Date or a Number, and the second argument must be a format String that
follows the Java SimpleDateFormat, and the third argument, optional, must be a format String that
diff --git a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestListS3.java b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestListS3.java
index a05c9e3..cab9e32 100644
--- a/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestListS3.java
+++ b/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestListS3.java
@@ -48,6 +48,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.TimeZone;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -57,13 +58,16 @@ import static org.junit.Assert.assertTrue;
public class TestListS3 {
private TestRunner runner = null;
+ private ListS3 mockListS3 = null;
+ private AmazonS3Client actualS3Client = null;
private AmazonS3Client mockS3Client = null;
@Before
public void setUp() {
mockS3Client = Mockito.mock(AmazonS3Client.class);
- final ListS3 mockListS3 = new ListS3() {
+ mockListS3 = new ListS3() {
protected AmazonS3Client getClient() {
+ actualS3Client = client;
return mockS3Client;
}
};
@@ -157,6 +161,7 @@ public class TestListS3 {
runner.assertAllFlowFilesTransferred(ListS3.REL_SUCCESS, 1);
final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
final String lastModifiedString = dateFormat.format(lastModified);
final MockFlowFile flowFile = runner.getFlowFilesForRelationship(ListS3.REL_SUCCESS).get(0);
@@ -365,7 +370,7 @@ public class TestListS3 {
runner.setProperty(ListS3.BUCKET, "test-bucket");
Calendar calendar = Calendar.getInstance();
- calendar.set(2017, Calendar.JUNE, 2);
+ calendar.set(2017, 5, 2);
Date objectLastModified = calendar.getTime();
long stateCurrentTimestamp = objectLastModified.getTime();
diff --git a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestPutElasticsearchHttpRecord.java b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestPutElasticsearchHttpRecord.java
index 659de9a..c5a621b 100644
--- a/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestPutElasticsearchHttpRecord.java
+++ b/nifi-nar-bundles/nifi-elasticsearch-bundle/nifi-elasticsearch-processors/src/test/java/org/apache/nifi/processors/elasticsearch/TestPutElasticsearchHttpRecord.java
@@ -52,7 +52,6 @@ import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -66,17 +65,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class TestPutElasticsearchHttpRecord {
- private static final int DATE_YEAR = 2018;
- private static final int DATE_MONTH = 12;
- private static final int DATE_DAY = 20;
- private static final int TIME_HOUR = 12;
- private static final int TIME_MINUTE = 55;
-
- private static final String ISO_DATE = String.format("%d-%d-%d", DATE_YEAR, DATE_MONTH, DATE_DAY);
- private static final String EXPECTED_DATE = String.format("%d/%d/%d", DATE_DAY, DATE_MONTH, DATE_YEAR);
- private static final LocalDateTime LOCAL_DATE_TIME = LocalDateTime.of(DATE_YEAR, DATE_MONTH, DATE_DAY, TIME_HOUR, TIME_MINUTE);
- private static final LocalTime LOCAL_TIME = LocalTime.of(TIME_HOUR, TIME_MINUTE);
-
private TestRunner runner;
@After
@@ -88,35 +76,35 @@ public class TestPutElasticsearchHttpRecord {
public void testPutElasticSearchOnTriggerIndex() throws IOException {
PutElasticsearchHttpRecordTestProcessor processor = new PutElasticsearchHttpRecordTestProcessor(false);
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:m a");
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("d/M/yyyy h:m a");
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("d/M/YYYY h:m a");
processor.setRecordChecks(record -> {
assertEquals(1, record.get("id"));
assertEquals("reç1", record.get("name"));
assertEquals(101, record.get("code"));
- assertEquals(EXPECTED_DATE, record.get("date"));
- assertEquals(LOCAL_TIME.format(timeFormatter), record.get("time"));
- assertEquals(LOCAL_DATE_TIME.format(dateTimeFormatter), record.get("ts"));
+ assertEquals("20/12/2018", record.get("date"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
}, record -> {
assertEquals(2, record.get("id"));
assertEquals("reç2", record.get("name"));
assertEquals(102, record.get("code"));
- assertEquals(EXPECTED_DATE, record.get("date"));
- assertEquals(LOCAL_TIME.format(timeFormatter), record.get("time"));
- assertEquals(LOCAL_DATE_TIME.format(dateTimeFormatter), record.get("ts"));
+ assertEquals("20/12/2018", record.get("date"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
}, record -> {
assertEquals(3, record.get("id"));
assertEquals("reç3", record.get("name"));
assertEquals(103, record.get("code"));
- assertEquals(EXPECTED_DATE, record.get("date"));
- assertEquals(LOCAL_TIME.format(timeFormatter), record.get("time"));
- assertEquals(LOCAL_DATE_TIME.format(dateTimeFormatter), record.get("ts"));
+ assertEquals("20/12/2018", record.get("date"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
}, record -> {
assertEquals(4, record.get("id"));
assertEquals("reç4", record.get("name"));
assertEquals(104, record.get("code"));
- assertEquals(EXPECTED_DATE, record.get("date"));
- assertEquals(LOCAL_TIME.format(timeFormatter), record.get("time"));
- assertEquals(LOCAL_DATE_TIME.format(dateTimeFormatter), record.get("ts"));
+ assertEquals("20/12/2018", record.get("date"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
});
runner = TestRunners.newTestRunner(processor); // no failures
generateTestData();
@@ -129,7 +117,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.TIME_FORMAT, "h:m a");
runner.setProperty(PutElasticsearchHttpRecord.TIMESTAMP_FORMAT, "d/M/yyyy h:m a");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_SUCCESS, 1);
@@ -153,7 +143,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.TYPE, "status");
runner.setProperty(PutElasticsearchHttpRecord.INDEX_OP, "create");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_SUCCESS, 1);
@@ -171,35 +163,35 @@ public class TestPutElasticsearchHttpRecord {
public void testPutElasticSearchOnTriggerIndex_withoutType() throws IOException {
PutElasticsearchHttpRecordTestProcessor processor = new PutElasticsearchHttpRecordTestProcessor(false);
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:m a");
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("d/M/yyyy h:m a");
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("d/M/YYYY h:m a");
processor.setRecordChecks(record -> {
assertEquals(1, record.get("id"));
assertEquals("reç1", record.get("name"));
assertEquals(101, record.get("code"));
assertEquals("20/12/2018", record.get("date"));
- assertEquals(LOCAL_TIME.format(timeFormatter), record.get("time"));
- assertEquals(LOCAL_DATE_TIME.format(dateTimeFormatter), record.get("ts"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
}, record -> {
assertEquals(2, record.get("id"));
assertEquals("reç2", record.get("name"));
assertEquals(102, record.get("code"));
- assertEquals(EXPECTED_DATE, record.get("date"));
- assertEquals(LOCAL_TIME.format(timeFormatter), record.get("time"));
- assertEquals(LOCAL_DATE_TIME.format(dateTimeFormatter), record.get("ts"));
+ assertEquals("20/12/2018", record.get("date"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
}, record -> {
assertEquals(3, record.get("id"));
assertEquals("reç3", record.get("name"));
assertEquals(103, record.get("code"));
- assertEquals(EXPECTED_DATE, record.get("date"));
- assertEquals(LOCAL_TIME.format(timeFormatter), record.get("time"));
- assertEquals(LOCAL_DATE_TIME.format(dateTimeFormatter), record.get("ts"));
+ assertEquals("20/12/2018", record.get("date"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
}, record -> {
assertEquals(4, record.get("id"));
assertEquals("reç4", record.get("name"));
assertEquals(104, record.get("code"));
- assertEquals(EXPECTED_DATE, record.get("date"));
- assertEquals(LOCAL_TIME.format(timeFormatter), record.get("time"));
- assertEquals(LOCAL_DATE_TIME.format(dateTimeFormatter), record.get("ts"));
+ assertEquals("20/12/2018", record.get("date"));
+ assertEquals(LocalTime.of(18, 55).format(timeFormatter), record.get("time"));
+ assertEquals(LocalDateTime.of(2018, 12, 20, 18, 55).format(dateTimeFormatter), record.get("ts"));
});
runner = TestRunners.newTestRunner(processor); // no failures
generateTestData();
@@ -212,7 +204,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.TIME_FORMAT, "h:m a");
runner.setProperty(PutElasticsearchHttpRecord.TIMESTAMP_FORMAT, "d/M/yyyy h:m a");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_SUCCESS, 1);
@@ -236,7 +230,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.TYPE, "status");
runner.setProperty(PutElasticsearchHttpRecord.ID_RECORD_PATH, "/id");
runner.setProperty(PutElasticsearchHttpRecord.INDEX_OP, "Update");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_SUCCESS, 1);
@@ -255,7 +251,9 @@ public class TestPutElasticsearchHttpRecord {
runner.removeProperty(PutElasticsearchHttpRecord.TYPE);
runner.setProperty(PutElasticsearchHttpRecord.ID_RECORD_PATH, "/id");
runner.setProperty(PutElasticsearchHttpRecord.INDEX_OP, "Update");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_SUCCESS, 1);
@@ -274,7 +272,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.TYPE, "status");
runner.setProperty(PutElasticsearchHttpRecord.ID_RECORD_PATH, "/id");
runner.setProperty(PutElasticsearchHttpRecord.INDEX_OP, "DELETE");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_SUCCESS, 1);
@@ -293,7 +293,9 @@ public class TestPutElasticsearchHttpRecord {
runner.removeProperty(PutElasticsearchHttpRecord.TYPE);
runner.setProperty(PutElasticsearchHttpRecord.ID_RECORD_PATH, "/id");
runner.setProperty(PutElasticsearchHttpRecord.INDEX_OP, "DELETE");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_SUCCESS, 1);
@@ -317,7 +319,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setVariable("es.url", "http://127.0.0.1:9200");
runner.setVariable("connect.timeout", "5s");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_SUCCESS, 1);
@@ -336,7 +340,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.TYPE, "status");
runner.setProperty(PutElasticsearchHttpRecord.ID_RECORD_PATH, "/id");
runner.setProperty(PutElasticsearchHttpRecord.INDEX_OP, "${no.attr}");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_FAILURE, 1);
@@ -377,13 +383,17 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.TYPE, "status");
runner.setProperty(PutElasticsearchHttpRecord.ID_RECORD_PATH, "/id");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_FAILURE, 1);
runner.clearTransferState();
processor.setStatus(500, "Should retry");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_RETRY, 1);
}
@@ -399,7 +409,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.TYPE, "status");
runner.setProperty(PutElasticsearchHttpRecord.ID_RECORD_PATH, "/id");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_FAILURE, 1);
}
@@ -490,7 +502,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.INDEX_OP, "index_fail");
runner.assertValid();
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_FAILURE, 1);
@@ -513,7 +527,9 @@ public class TestPutElasticsearchHttpRecord {
// Set dynamic property, to be added to the URL as a query parameter
runner.setProperty("pipeline", "my-pipeline");
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "28039652140"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "28039652140");
+ }});
runner.run(1, true, true);
runner.assertAllFlowFilesTransferred(PutElasticsearchHttpRecord.REL_SUCCESS, 1);
@@ -595,12 +611,12 @@ public class TestPutElasticsearchHttpRecord {
* A Test class that extends the processor in order to inject/mock behavior
*/
private static class PutElasticsearchHttpRecordTestProcessor extends PutElasticsearchHttpRecord {
- int numResponseFailures;
+ int numResponseFailures = 0;
OkHttpClient client;
int statusCode = 200;
String statusMessage = "OK";
String expectedUrl = null;
- Consumer<Map<?, ?>>[] recordChecks;
+ Consumer<Map>[] recordChecks;
PutElasticsearchHttpRecordTestProcessor(boolean responseHasFailures) {
this.numResponseFailures = responseHasFailures ? 1 : 0;
@@ -620,7 +636,7 @@ public class TestPutElasticsearchHttpRecord {
}
@SafeVarargs
- final void setRecordChecks(Consumer<Map<?, ?>>... checks) {
+ final void setRecordChecks(Consumer<Map>... checks) {
recordChecks = checks;
}
@@ -671,7 +687,7 @@ public class TestPutElasticsearchHttpRecord {
.protocol(Protocol.HTTP_1_1)
.code(statusCode)
.message(statusMessage)
- .body(ResponseBody.create(sb.toString(), MediaType.parse("application/json")))
+ .body(ResponseBody.create(MediaType.parse("application/json"), sb.toString()))
.build();
when(call.execute()).thenReturn(mockResponse);
@@ -762,7 +778,7 @@ public class TestPutElasticsearchHttpRecord {
}
@Test(expected = AssertionError.class)
- public void testPutElasticSearchBadHostInEL() {
+ public void testPutElasticSearchBadHostInEL() throws IOException {
final TestRunner runner = TestRunners.newTestRunner(new PutElasticsearchHttpRecord());
runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, "${es.url}");
@@ -771,7 +787,9 @@ public class TestPutElasticsearchHttpRecord {
runner.setProperty(PutElasticsearchHttpRecord.ID_RECORD_PATH, "/id");
runner.assertValid();
- runner.enqueue(new byte[0], Collections.singletonMap("doc_id", "1"));
+ runner.enqueue(new byte[0], new HashMap<String, String>() {{
+ put("doc_id", "1");
+ }});
runner.run();
}
@@ -799,12 +817,8 @@ public class TestPutElasticsearchHttpRecord {
parser.addSchemaField("ts", RecordFieldType.TIMESTAMP);
parser.addSchemaField("amount", RecordFieldType.DECIMAL);
- final Date date = Date.valueOf(ISO_DATE);
- final Timestamp timestamp = Timestamp.valueOf(LOCAL_DATE_TIME);
- final Time time = Time.valueOf(LOCAL_TIME);
for(int i=1; i<=numRecords; i++) {
-
- parser.addRecord(i, "reç" + i, 100 + i, date, time, timestamp, new BigDecimal(Double.MAX_VALUE).multiply(BigDecimal.TEN));
+ parser.addRecord(i, "reç" + i, 100 + i, Date.valueOf("2018-12-20"), new Time(68150000), new Timestamp(1545332150000L), new BigDecimal(Double.MAX_VALUE).multiply(BigDecimal.TEN));
}
}
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestQueryRecord.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestQueryRecord.java
index e37a712..a1b1b23 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestQueryRecord.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestQueryRecord.java
@@ -21,6 +21,7 @@ import org.apache.nifi.csv.CSVReader;
import org.apache.nifi.logging.ComponentLog;
import org.apache.nifi.reporting.InitializationException;
import org.apache.nifi.schema.access.SchemaAccessUtils;
+import org.apache.nifi.schema.access.SchemaNotFoundException;
import org.apache.nifi.schema.inference.SchemaInferenceUtil;
import org.apache.nifi.serialization.RecordSetWriter;
import org.apache.nifi.serialization.RecordSetWriterFactory;
@@ -44,10 +45,7 @@ import org.junit.Test;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
+import java.sql.SQLException;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
@@ -55,6 +53,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static org.junit.Assert.assertArrayEquals;
@@ -71,16 +70,10 @@ public class TestQueryRecord {
private static final String REL_NAME = "success";
- private static final String ISO_DATE = "2018-02-04";
- private static final String INSTANT_FORMATTED = String.format("%sT10:20:55Z", ISO_DATE);
- private static final Instant INSTANT = Instant.parse(INSTANT_FORMATTED);
- private static final Date INSTANT_DATE = Date.from(INSTANT);
- private static final long INSTANT_EPOCH_MILLIS = INSTANT.toEpochMilli();
-
public TestRunner getRunner() {
TestRunner runner = TestRunners.newTestRunner(QueryRecord.class);
- /*
+ /**
* we have to disable validation of expression language because the scope of the evaluation
* depends of the value of another property: if we are caching the schema/queries or not. If
* we don't disable the validation, it'll throw an error saying that the scope is incorrect.
@@ -136,11 +129,7 @@ public class TestQueryRecord {
assertEquals(30, output.getValue("ageObj"));
assertArrayEquals(new String[] { "red", "green"}, (Object[]) output.getValue("colors"));
assertArrayEquals(new String[] { "John Doe", "Jane Doe"}, (Object[]) output.getValue("names"));
-
- final LocalDate localDate = LocalDate.parse(ISO_DATE);
- final ZonedDateTime zonedDateTime = ZonedDateTime.of(localDate.atStartOfDay(), ZoneOffset.systemDefault());
- final long epochMillis = zonedDateTime.toInstant().toEpochMilli();
- assertEquals(Long.toString(epochMillis), output.getAsString("joinTime"));
+ assertEquals("1517702400000", output.getAsString("joinTime"));
assertEquals(Double.valueOf(180.8D), output.getAsDouble("weight"));
}
@@ -690,14 +679,14 @@ public class TestQueryRecord {
favorites.put("roses", "raindrops");
favorites.put("kittens", "whiskers");
-
+ final long ts = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(365 * 30);
final Map<String, Object> map = new HashMap<>();
map.put("name", "John Doe");
map.put("age", 30);
map.put("favoriteColors", new String[] { "red", "green" });
- map.put("dob", INSTANT_DATE);
- map.put("dobTimestamp", INSTANT_EPOCH_MILLIS);
- map.put("joinTimestamp", INSTANT_FORMATTED);
+ map.put("dob", new Date(ts));
+ map.put("dobTimestamp", ts);
+ map.put("joinTimestamp", "2018-02-04 10:20:55.802");
map.put("weight", 180.8D);
map.put("height", 60.5);
map.put("mother", mother);
@@ -707,7 +696,8 @@ public class TestQueryRecord {
personValues.put("person", person);
personValues.put("favoriteThings", favorites);
- return new MapRecord(recordSchema, personValues);
+ final Record record = new MapRecord(recordSchema, personValues);
+ return record;
}
@@ -732,7 +722,8 @@ public class TestQueryRecord {
map.put("id", id);
map.put("tags", Arrays.asList(tags));
- return new MapRecord(recordSchema, map);
+ final Record record = new MapRecord(recordSchema, map);
+ return record;
}
/**
@@ -809,7 +800,9 @@ public class TestQueryRecord {
map.put("height", 60.5);
map.put("title", "Software Engineer");
map.put("addresses", new Record[] {homeAddress, workAddress});
- return new MapRecord(personSchema, map);
+ final Record person = new MapRecord(personSchema, map);
+
+ return person;
}
@@ -841,7 +834,7 @@ public class TestQueryRecord {
}
@Test
- public void testSimple() throws InitializationException {
+ public void testSimple() throws InitializationException, IOException, SQLException {
final MockRecordParser parser = new MockRecordParser();
parser.addSchemaField("name", RecordFieldType.STRING);
parser.addSchemaField("age", RecordFieldType.INT);
@@ -874,7 +867,7 @@ public class TestQueryRecord {
}
@Test
- public void testNullable() throws InitializationException {
+ public void testNullable() throws InitializationException, IOException, SQLException {
final MockRecordParser parser = new MockRecordParser();
parser.addSchemaField("name", RecordFieldType.STRING, true);
parser.addSchemaField("age", RecordFieldType.INT, true);
@@ -909,7 +902,7 @@ public class TestQueryRecord {
}
@Test
- public void testParseFailure() throws InitializationException {
+ public void testParseFailure() throws InitializationException, IOException, SQLException {
final MockRecordParser parser = new MockRecordParser();
parser.addSchemaField("name", RecordFieldType.STRING);
parser.addSchemaField("age", RecordFieldType.INT);
@@ -942,7 +935,7 @@ public class TestQueryRecord {
}
@Test
- public void testNoRecordsInput() throws InitializationException {
+ public void testNoRecordsInput() throws InitializationException, IOException, SQLException {
TestRunner runner = getRunner();
CSVReader csvReader = new CSVReader();
@@ -971,7 +964,7 @@ public class TestQueryRecord {
@Test
- public void testTransformCalc() throws InitializationException {
+ public void testTransformCalc() throws InitializationException, IOException, SQLException {
final MockRecordParser parser = new MockRecordParser();
parser.addSchemaField("ID", RecordFieldType.INT);
parser.addSchemaField("AMOUNT1", RecordFieldType.FLOAT);
@@ -1036,7 +1029,7 @@ public class TestQueryRecord {
}
@Test
- public void testAggregateFunction() throws InitializationException {
+ public void testAggregateFunction() throws InitializationException, IOException {
final MockRecordParser parser = new MockRecordParser();
parser.addSchemaField("name", RecordFieldType.STRING);
parser.addSchemaField("points", RecordFieldType.INT);
@@ -1065,7 +1058,7 @@ public class TestQueryRecord {
}
@Test
- public void testNullValueInSingleField() throws InitializationException {
+ public void testNullValueInSingleField() throws InitializationException, IOException {
final MockRecordParser parser = new MockRecordParser();
parser.addSchemaField("name", RecordFieldType.STRING);
parser.addSchemaField("points", RecordFieldType.INT);
@@ -1141,7 +1134,7 @@ public class TestQueryRecord {
}
@Override
- public RecordSchema getSchema(Map<String, String> variables, RecordSchema readSchema) {
+ public RecordSchema getSchema(Map<String, String> variables, RecordSchema readSchema) throws SchemaNotFoundException, IOException {
final List<RecordField> recordFields = columnNames.stream()
.map(name -> new RecordField(name, RecordFieldType.STRING.getDataType()))
.collect(Collectors.toList());
@@ -1185,7 +1178,7 @@ public class TestQueryRecord {
}
@Override
- public WriteResult write(Record record) {
+ public WriteResult write(Record record) throws IOException {
return null;
}
@@ -1195,11 +1188,11 @@ public class TestQueryRecord {
}
@Override
- public void beginRecordSet() {
+ public void beginRecordSet() throws IOException {
}
@Override
- public WriteResult finishRecordSet() {
+ public WriteResult finishRecordSet() throws IOException {
return WriteResult.EMPTY;
}
};
diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/avro/TestAvroReaderWithEmbeddedSchema.java b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/avro/TestAvroReaderWithEmbeddedSchema.java
index 655541e..1afedab 100644
--- a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/avro/TestAvroReaderWithEmbeddedSchema.java
+++ b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/avro/TestAvroReaderWithEmbeddedSchema.java
@@ -38,6 +38,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.TimeZone;
import org.apache.avro.Schema;
import org.apache.avro.Schema.Field;
@@ -77,6 +78,7 @@ public class TestAvroReaderWithEmbeddedSchema {
final int epochDay = 17260;
final String expectedTime = "2017-04-04 14:20:33.000";
final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+ df.setTimeZone(TimeZone.getTimeZone("gmt"));
final long timeLong = df.parse(expectedTime).getTime();
final long secondsSinceMidnight = 33 + (20 * 60) + (14 * 60 * 60);
@@ -340,7 +342,7 @@ public class TestAvroReaderWithEmbeddedSchema {
return array;
}
- public enum Status {
+ public static enum Status {
GOOD, BAD;
}
}
diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestCSVRecordReader.java b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestCSVRecordReader.java
index 8656dbd..980ae32 100644
--- a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestCSVRecordReader.java
+++ b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestCSVRecordReader.java
@@ -45,6 +45,7 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.TimeZone;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -203,6 +204,7 @@ public class TestCSVRecordReader {
public void testTimeNoCoersionExpectedFormat() throws IOException, MalformedRecordException, ParseException {
final String timeFormat = "HH!mm!ss";
DateFormat dateFmt = new SimpleDateFormat(timeFormat);
+ dateFmt.setTimeZone(TimeZone.getTimeZone("gmt"));
final String timeVal = "19!02!03";
final String text = "time\n" + timeVal;
@@ -276,6 +278,7 @@ public class TestCSVRecordReader {
public void testTimestampNoCoersionExpectedFormat() throws IOException, MalformedRecordException, ParseException {
final String timeFormat = "HH!mm!ss";
DateFormat dateFmt = new SimpleDateFormat(timeFormat);
+ dateFmt.setTimeZone(TimeZone.getTimeZone("gmt"));
final String timeVal = "19!02!03";
final String text = "timestamp\n" + timeVal;
diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestWriteCSVResult.java b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestWriteCSVResult.java
index 821077f..8fd14e1 100644
--- a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestWriteCSVResult.java
+++ b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestWriteCSVResult.java
@@ -45,6 +45,7 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.TimeZone;
import static org.junit.Assert.assertEquals;
@@ -388,6 +389,7 @@ public class TestWriteCSVResult {
private DateFormat getDateFormat(final String format) {
final DateFormat df = new SimpleDateFormat(format);
+ df.setTimeZone(TimeZone.getTimeZone("gmt"));
return df;
}
diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestWriteJsonResult.java b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestWriteJsonResult.java
index baa84f9..b1f0582 100644
--- a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestWriteJsonResult.java
+++ b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/json/TestWriteJsonResult.java
@@ -51,6 +51,7 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.TimeZone;
import static org.junit.Assert.assertEquals;
@@ -76,6 +77,7 @@ public class TestWriteJsonResult {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
+ df.setTimeZone(TimeZone.getTimeZone("gmt"));
final long time = df.parse("2017/01/01 17:00:00.000").getTime();
final Map<String, Object> map = new LinkedHashMap<>();
diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/xml/TestWriteXMLResult.java b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/xml/TestWriteXMLResult.java
index 81532fb..b7521f0 100644
--- a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/xml/TestWriteXMLResult.java
+++ b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/xml/TestWriteXMLResult.java
@@ -46,6 +46,7 @@ import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.TimeZone;
import static org.apache.nifi.record.NullSuppression.ALWAYS_SUPPRESS;
import static org.apache.nifi.record.NullSuppression.NEVER_SUPPRESS;
@@ -170,6 +171,7 @@ public class TestWriteXMLResult {
final RecordSchema schema = new SimpleRecordSchema(fields, SCHEMA_IDENTIFIER_RECORD);
final DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
+ df.setTimeZone(TimeZone.getTimeZone("gmt"));
final long time = df.parse("2017/01/01 17:00:00.000").getTime();
final String date = "2017-01-01";