You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by js...@apache.org on 2017/09/23 21:42:30 UTC
nifi git commit: NIFI-2829: Fixed PutSQL time unit test.
Repository: nifi
Updated Branches:
refs/heads/master 3fb704c58 -> c6f4421c8
NIFI-2829: Fixed PutSQL time unit test.
The unit test for DATE type used GMT timezone, that causes an assertion error in timezones such as EST (-5).
We need to use local timezone instead of GMT, as Derby and PutSQL uses local timezone.
The unit test failed before as follows:
- Unit test code, passed: '2002-02-02 GMT'
- PutSQL code convertedi it to local: '2002-02-01 EST', and stored as '2002-02-01' in Derby database without timezone info
- Unit test code SELECT the inserted value, passed a GMT calender, then got epoch timestamp, which was '2002-01-31'
Support negative long value for timezones ahead of UTC.
- For timezones such as '+0800', it's possible that a local time e.g. '02:03:04' can be a negative epoch value. This commit changes LONG_PATTERN so that it can accept nevative values.
- Changed time values in unit tests to verify negative epoch values, and avoid using the same digits among different time unit for better readability.
This closes #2082
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/c6f4421c
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/c6f4421c
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/c6f4421c
Branch: refs/heads/master
Commit: c6f4421c8e59c896ed9887ced256a73b920f4ccb
Parents: 3fb704c
Author: Koji Kawamura <ij...@apache.org>
Authored: Mon Aug 14 11:19:50 2017 +0900
Committer: Jeff Storck <jt...@gmail.com>
Committed: Sat Sep 23 17:41:42 2017 -0400
----------------------------------------------------------------------
.../apache/nifi/processors/standard/PutSQL.java | 2 +-
.../nifi/processors/standard/TestPutSQL.java | 56 +++++++++-----------
2 files changed, 25 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/c6f4421c/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java
index c35377a..f75ccaa 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java
@@ -191,7 +191,7 @@ public class PutSQL extends AbstractSessionFactoryProcessor {
private static final String FRAGMENT_INDEX_ATTR = FragmentAttributes.FRAGMENT_INDEX.key();
private static final String FRAGMENT_COUNT_ATTR = FragmentAttributes.FRAGMENT_COUNT.key();
- private static final Pattern LONG_PATTERN = Pattern.compile("^\\d{1,19}$");
+ private static final Pattern LONG_PATTERN = Pattern.compile("^-?\\d{1,19}$");
@Override
protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
http://git-wip-us.apache.org/repos/asf/nifi/blob/c6f4421c/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
index 88d47ee..5a2909b 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
@@ -38,11 +38,11 @@ import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
-import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
-import java.util.TimeZone;
+
+import javax.xml.bind.DatatypeConverter;
import org.apache.commons.lang3.RandomUtils;
import org.apache.nifi.controller.AbstractControllerService;
@@ -59,9 +59,6 @@ import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;
-import javax.xml.bind.DatatypeConverter;
-import org.junit.Ignore;
-
public class TestPutSQL {
private static final String createPersons = "CREATE TABLE PERSONS (id integer primary key, name varchar(100), code integer)";
private static final String createPersonsAutoId = "CREATE TABLE PERSONS_AI (id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1), name VARCHAR(100), code INTEGER check(code <= 100))";
@@ -460,7 +457,6 @@ public class TestPutSQL {
}
}
- @Ignore("this test needs fixing due to TestPutSQL.testUsingDateTimeValuesWithFormatAttribute:551 expected:<1012608000000> but was:<1012521600000>")
@Test
public void testUsingDateTimeValuesWithFormatAttribute() throws InitializationException, ProcessException, SQLException, IOException, ParseException {
final TestRunner runner = TestRunners.newTestRunner(PutSQL.class);
@@ -474,8 +470,8 @@ public class TestPutSQL {
runner.enableControllerService(service);
runner.setProperty(PutSQL.CONNECTION_POOL, "dbcp");
- final String dateStr = "2002-02-02";
- final String timeStr = "12:02:02";
+ final String dateStr = "2002-03-04";
+ final String timeStr = "02:03:04";
final String timeFormatString = "HH:mm:ss";
final String dateFormatString ="yyyy-MM-dd";
@@ -492,19 +488,7 @@ public class TestPutSQL {
final long expectedTimeInLong = expectedTime.getTime();
final long expectedDateInLong = expectedDate.getTime();
- //test with time zone GMT to avoid negative value unmatched with long pattern problem.
- SimpleDateFormat timeFormat = new SimpleDateFormat(timeFormatString);
- timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
- java.util.Date parsedTimeGMT = timeFormat.parse(timeStr);
-
- SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatString);
- dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
- java.util.Date parsedDateGMT = dateFormat.parse(dateStr);
-
- Calendar gmtCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
-
-
- //test with ISO LOCAL format attribute
+ // test with ISO LOCAL format attribute
Map<String, String> attributes = new HashMap<>();
attributes.put("sql.args.1.type", String.valueOf(Types.TIME));
attributes.put("sql.args.1.value", timeStr);
@@ -515,22 +499,31 @@ public class TestPutSQL {
runner.enqueue("INSERT INTO TIMESTAMPTEST3 (ID, ts1, ts2) VALUES (1, ?, ?)".getBytes(), attributes);
- //test Long pattern without format attribute
+ // Since Derby database which is used for unit test does not have timezone in DATE and TIME type,
+ // and PutSQL converts date string into long representation using local timezone,
+ // we need to use local timezone.
+ SimpleDateFormat timeFormat = new SimpleDateFormat(timeFormatString);
+ java.util.Date parsedLocalTime = timeFormat.parse(timeStr);
+
+ SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatString);
+ java.util.Date parsedLocalDate = dateFormat.parse(dateStr);
+
+ // test Long pattern without format attribute
attributes = new HashMap<>();
attributes.put("sql.args.1.type", String.valueOf(Types.TIME));
- attributes.put("sql.args.1.value", Long.toString(parsedTimeGMT.getTime()));
+ attributes.put("sql.args.1.value", Long.toString(parsedLocalTime.getTime()));
attributes.put("sql.args.2.type", String.valueOf(Types.DATE));
- attributes.put("sql.args.2.value", Long.toString(parsedDateGMT.getTime()));
+ attributes.put("sql.args.2.value", Long.toString(parsedLocalDate.getTime()));
runner.enqueue("INSERT INTO TIMESTAMPTEST3 (ID, ts1, ts2) VALUES (2, ?, ?)".getBytes(), attributes);
- //test with format attribute
+ // test with format attribute
attributes = new HashMap<>();
attributes.put("sql.args.1.type", String.valueOf(Types.TIME));
- attributes.put("sql.args.1.value", "120202000");
+ attributes.put("sql.args.1.value", "020304000");
attributes.put("sql.args.1.format", "HHmmssSSS");
attributes.put("sql.args.2.type", String.valueOf(Types.DATE));
- attributes.put("sql.args.2.value", "20020202");
+ attributes.put("sql.args.2.value", "20020304");
attributes.put("sql.args.2.format", "yyyyMMdd");
runner.enqueue("INSERT INTO TIMESTAMPTEST3 (ID, ts1, ts2) VALUES (3, ?, ?)".getBytes(), attributes);
@@ -549,8 +542,8 @@ public class TestPutSQL {
assertTrue(rs.next());
assertEquals(2, rs.getInt(1));
- assertEquals(parsedTimeGMT.getTime(), rs.getTime(2).getTime());
- assertEquals(parsedDateGMT.getTime(), rs.getDate(3,gmtCalendar).getTime());
+ assertEquals(parsedLocalTime.getTime(), rs.getTime(2).getTime());
+ assertEquals(parsedLocalDate.getTime(), rs.getDate(3).getTime());
assertTrue(rs.next());
assertEquals(3, rs.getInt(1));
@@ -692,11 +685,10 @@ public class TestPutSQL {
runner.enableControllerService(service);
runner.setProperty(PutSQL.CONNECTION_POOL, "dbcp");
- final String arg2TS = "00:01:01";
- final String art3TS = "12:02:02";
+ final String arg2TS = "00:01:02";
+ final String art3TS = "02:03:04";
final String timeFormatString = "HH:mm:ss";
SimpleDateFormat dateFormat = new SimpleDateFormat(timeFormatString);
- dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
java.util.Date parsedDate = dateFormat.parse(arg2TS);