You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sa...@apache.org on 2018/06/08 17:41:07 UTC
atlas git commit: ATLAS-2730: Invalid timezone/start time/end time is
accepted by classification API #2
Repository: atlas
Updated Branches:
refs/heads/master 7a1d3dc5e -> 9e762c095
ATLAS-2730: Invalid timezone/start time/end time is accepted by classification API #2
Signed-off-by: Sarath Subramanian <ss...@hortonworks.com>
Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/9e762c09
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/9e762c09
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/9e762c09
Branch: refs/heads/master
Commit: 9e762c095f00e0d281ebc6f47b951856f3c097b8
Parents: 7a1d3dc
Author: nixonrodrigues <ni...@apache.org>
Authored: Fri Jun 8 10:40:57 2018 -0700
Committer: Sarath Subramanian <ss...@hortonworks.com>
Committed: Fri Jun 8 10:40:57 2018 -0700
----------------------------------------------------------------------
.../java/org/apache/atlas/AtlasErrorCode.java | 1 +
.../atlas/type/AtlasClassificationType.java | 24 ++++++-
.../atlas/type/TestAtlasClassificationType.java | 70 +++++++++++++++++++-
3 files changed, 93 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/atlas/blob/9e762c09/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
----------------------------------------------------------------------
diff --git a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
index f0585eb..328b767 100644
--- a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
+++ b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
@@ -148,6 +148,7 @@ public enum AtlasErrorCode {
MISSING_CATEGORY_DISPLAY_NAME(400, "ATLAS-400-00-082", "Category name is empty/null"),
INVALID_DISPLAY_NAME(400, "ATLAS-400-00-083", "name cannot contain following special chars ('@', '.')"),
TERM_HAS_ENTITY_ASSOCIATION(400, "ATLAS-400-00-086", "Term (guid={0}) can't be deleted as it has been assigned to {1} entities."),
+ INVALID_TIMEBOUNDRY_TIMEZONE(400, "ATLAS-400-00-87A", "Invalid timezone {0}"),
INVALID_TIMEBOUNDRY_START_TIME(400, "ATLAS-400-00-87B", "Invalid startTime {0}"),
INVALID_TIMEBOUNDRY_END_TIME(400, "ATLAS-400-00-87C", "Invalid endTime {0}"),
INVALID_TIMEBOUNDRY_DATERANGE(400, "ATLAS-400-00-87D", "Invalid dateRange: startTime {0} must be before endTime {1}"),
http://git-wip-us.apache.org/repos/asf/atlas/blob/9e762c09/intg/src/main/java/org/apache/atlas/type/AtlasClassificationType.java
----------------------------------------------------------------------
diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasClassificationType.java b/intg/src/main/java/org/apache/atlas/type/AtlasClassificationType.java
index 1adb362..ee0ac23 100644
--- a/intg/src/main/java/org/apache/atlas/type/AtlasClassificationType.java
+++ b/intg/src/main/java/org/apache/atlas/type/AtlasClassificationType.java
@@ -560,9 +560,15 @@ public class AtlasClassificationType extends AtlasStructType {
final TimeZone timezone;
if (StringUtils.isNotEmpty(timeBoundary.getTimeZone())) {
+ if (!isValidTimeZone(timeBoundary.getTimeZone())) {
+ addValidationMessageIfNotPresent(new AtlasBaseException(AtlasErrorCode.INVALID_TIMEBOUNDRY_TIMEZONE, timeBoundary.getTimeZone()), messages);
+
+ ret = false;
+ }
+
timezone = TimeZone.getTimeZone(timeBoundary.getTimeZone());
} else {
- timezone = java.util.TimeZone.getDefault();
+ timezone = TimeZone.getDefault();
}
if (StringUtils.isNotEmpty(timeBoundary.getStartTime())) {
@@ -596,6 +602,22 @@ public class AtlasClassificationType extends AtlasStructType {
return ret;
}
+ public static boolean isValidTimeZone(final String timeZone) {
+ final String DEFAULT_GMT_TIMEZONE = "GMT";
+ if (timeZone.equals(DEFAULT_GMT_TIMEZONE)) {
+ return true;
+ } else {
+ // if custom time zone is invalid,
+ // time zone id returned is always "GMT" by default
+ String id = TimeZone.getTimeZone(timeZone).getID();
+ if (!id.equals(DEFAULT_GMT_TIMEZONE)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
private void addValidationMessageIfNotPresent(AtlasBaseException excp, List<String> messages) {
String msg = excp.getMessage();
http://git-wip-us.apache.org/repos/asf/atlas/blob/9e762c09/intg/src/test/java/org/apache/atlas/type/TestAtlasClassificationType.java
----------------------------------------------------------------------
diff --git a/intg/src/test/java/org/apache/atlas/type/TestAtlasClassificationType.java b/intg/src/test/java/org/apache/atlas/type/TestAtlasClassificationType.java
index 1ade5f7..b6055fa 100644
--- a/intg/src/test/java/org/apache/atlas/type/TestAtlasClassificationType.java
+++ b/intg/src/test/java/org/apache/atlas/type/TestAtlasClassificationType.java
@@ -30,7 +30,7 @@ import org.apache.atlas.type.AtlasTypeRegistry.AtlasTransientTypeRegistry;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
-
+import static org.apache.atlas.type.AtlasClassificationType.isValidTimeZone;
public class TestAtlasClassificationType {
private final AtlasClassificationType classificationType;
@@ -46,22 +46,47 @@ public class TestAtlasClassificationType {
AtlasClassification validValueTB1 = classificationType.createDefaultValue();
AtlasClassification validValueTB2 = classificationType.createDefaultValue();
AtlasClassification validValueTB3 = classificationType.createDefaultValue();
+ AtlasClassification validValueTB4 = classificationType.createDefaultValue();
+ AtlasClassification validValueTB5 = classificationType.createDefaultValue();
+ AtlasClassification validValueTB6 = classificationType.createDefaultValue();
AtlasClassification invalidValueTB1 = classificationType.createDefaultValue();
AtlasClassification invalidValueTB2 = classificationType.createDefaultValue();
AtlasClassification invalidValueTB3 = classificationType.createDefaultValue();
+ AtlasClassification invalidValueTB4 = classificationType.createDefaultValue();
+ AtlasClassification invalidValueTB5 = classificationType.createDefaultValue();
+ AtlasClassification invalidValueTB6 = classificationType.createDefaultValue();
+
TimeBoundary validTB1 = new TimeBoundary("2018/07/07 04:38:55"); // valid start-time
TimeBoundary validTB2 = new TimeBoundary(null, "2018/07/08 04:38:55"); // valid end-time
TimeBoundary validTB3 = new TimeBoundary("2018/07/07 04:38:55", "2018/07/08 04:38:55"); // valid start and end times
+ TimeBoundary validTB4 = new TimeBoundary("2018/07/07 04:38:55", "2018/07/08 04:38:55","America/Los_Angeles"); // valid start and end times and timezone in country/city
+ TimeBoundary validTB5 = new TimeBoundary(null, "2018/07/08 04:38:55", "GMT+10:30"); // valid start and end times and timezone
+ TimeBoundary validTB6 = new TimeBoundary("2018/07/07 04:38:55", "2018/07/08 04:38:55","GMT"); // valid start and end times and timezone in GMT
+ TimeBoundary validTB7 = new TimeBoundary("2018/07/07 04:38:55", "2019/07/08 04:38:55",null); // valid start and end times and timezone null
TimeBoundary invalidTB1 = new TimeBoundary("2018-07-07 04:38:55"); // invalid start-time
TimeBoundary invalidTB2 = new TimeBoundary(null, "2018-07-08 04:38:55"); // invalid end-time
TimeBoundary invalidTB3 = new TimeBoundary("2018/07/08 04:38:55", "2018/07/07 04:38:55"); // invalid time-ranger
+ TimeBoundary invalidTB4 = new TimeBoundary("2018/07/08 04:38:55", "2018/07/07 04:38:55", ""); // invalid time-zone
+ TimeBoundary invalidTB5 = new TimeBoundary("2018/07/08 04:38:55", "2018/07/07 04:38:55","GMT+10:-30"); // invalid time-zone
+ TimeBoundary invalidTB6 = new TimeBoundary("2018/07/08 04:38:55", "2018/07/07 04:38:55","abcd"); // invalid time-zone
+
+
validValueTB1.addValityPeriod(validTB1);
validValueTB2.addValityPeriod(validTB2);
validValueTB3.addValityPeriod(validTB3);
+ validValueTB4.addValityPeriod(validTB4);
+ validValueTB5.addValityPeriod(validTB5);
+ validValueTB6.addValityPeriod(validTB6);
+ validValueTB6.addValityPeriod(validTB7);
+
invalidValueTB1.addValityPeriod(invalidTB1);
invalidValueTB2.addValityPeriod(invalidTB2);
invalidValueTB3.addValityPeriod(invalidTB3);
+ invalidValueTB4.addValityPeriod(invalidTB4);
+ invalidValueTB5.addValityPeriod(invalidTB5);
+ invalidValueTB6.addValityPeriod(invalidTB6);
+
// invalid value for int
invalidValue1.setAttribute(ModelTestUtil.getDefaultAttributeName(AtlasBaseTypeDef.ATLAS_TYPE_INT), "xyz");
@@ -76,6 +101,10 @@ public class TestAtlasClassificationType {
validValues.add(validValueTB1);
validValues.add(validValueTB2);
validValues.add(validValueTB3);
+ validValues.add(validValueTB4);
+ validValues.add(validValueTB5);
+ validValues.add(validValueTB6);
+
invalidValues.add(invalidValue1);
invalidValues.add(invalidValue2);
invalidValues.add(invalidValue3);
@@ -88,6 +117,9 @@ public class TestAtlasClassificationType {
invalidValues.add(invalidValueTB1);
invalidValues.add(invalidValueTB2);
invalidValues.add(invalidValueTB3);
+ invalidValues.add(invalidValueTB4); //incorrect timezone
+ invalidValues.add(invalidValueTB5); //incorrect timezone
+ invalidValues.add(invalidValueTB6); //incorrect timezone
}
@Test
@@ -275,4 +307,40 @@ public class TestAtlasClassificationType {
return null;
}
}
+
+ @Test
+ public void testClassificationTimebounderTimeZone() {
+
+ assertTrue(isValidTimeZone("IST"));
+ assertTrue(isValidTimeZone("JST"));
+ assertTrue(isValidTimeZone("UTC"));
+ assertTrue(isValidTimeZone("GMT"));
+
+ assertTrue(isValidTimeZone("GMT+0"));// GMT+00:00
+ assertTrue(isValidTimeZone("GMT-0"));// GMT-00:00
+ assertTrue(isValidTimeZone("GMT+9:00"));// GMT+09:00
+ assertTrue(isValidTimeZone("GMT+10:30"));// GMT+10:30
+ assertTrue(isValidTimeZone("GMT-0400"));// GMT-04:00
+ assertTrue(isValidTimeZone("GMT+8")); // GMT+08:00
+ assertTrue(isValidTimeZone("GMT-13")); // GMT-13:00
+ assertTrue(isValidTimeZone("GMT+13:59"));// GMT-13:59
+
+ assertTrue(isValidTimeZone("America/Los_Angeles")); // GMT-08:00
+ assertTrue(isValidTimeZone("Japan"));// GMT+09:00
+ assertTrue(isValidTimeZone("Europe/Berlin")); // GMT+01:00
+ assertTrue(isValidTimeZone("Europe/Moscow")); // GMT+04:00
+ assertTrue(isValidTimeZone("Asia/Singapore")); // GMT+08:00
+
+ assertFalse(isValidTimeZone("IND"));
+ assertFalse(isValidTimeZone("USD"));
+ assertFalse(isValidTimeZone("UTC+8"));
+ assertFalse(isValidTimeZone("UTC+09:00"));
+ assertFalse(isValidTimeZone("+09:00"));
+ assertFalse(isValidTimeZone("-08:00"));
+ assertFalse(isValidTimeZone("-1"));
+ assertFalse(isValidTimeZone("GMT+10:-30"));
+ assertFalse(isValidTimeZone("GMT+24:00")); // hours is 0-23 only
+ assertFalse(isValidTimeZone("GMT+13:60")); // minutes 00-59 only
+
+ }
}