aboutsummaryrefslogtreecommitdiffstats
path: root/ECOMP-PDP/src/test/java/org/openecomp/policy/pdp/test/FunctionDefinitionDateTimeArithmeticTest.java
diff options
context:
space:
mode:
authorGuo Ruijing <ruijing.guo@intel.com>2017-07-31 08:47:35 +0000
committerPamela Dragosh <pdragosh@research.att.com>2017-07-31 15:51:10 -0400
commit073cc188efe9abb4c010cf674e34e2cf46ef1c52 (patch)
tree155c23fbdf3a838ecb5f4183fc3bb6b09aac41eb /ECOMP-PDP/src/test/java/org/openecomp/policy/pdp/test/FunctionDefinitionDateTimeArithmeticTest.java
parent4ca818fdfb9b807562166800a086b413593d6894 (diff)
[POLICY-73] replace openecomp for policy-engine
Change-Id: I54072f6bcd388c0e05562614ee89b4ae7ad67004 Signed-off-by: Guo Ruijing <ruijing.guo@intel.com> Signed-off-by: Pamela Dragosh <pdragosh@research.att.com>
Diffstat (limited to 'ECOMP-PDP/src/test/java/org/openecomp/policy/pdp/test/FunctionDefinitionDateTimeArithmeticTest.java')
-rw-r--r--ECOMP-PDP/src/test/java/org/openecomp/policy/pdp/test/FunctionDefinitionDateTimeArithmeticTest.java1602
1 files changed, 0 insertions, 1602 deletions
diff --git a/ECOMP-PDP/src/test/java/org/openecomp/policy/pdp/test/FunctionDefinitionDateTimeArithmeticTest.java b/ECOMP-PDP/src/test/java/org/openecomp/policy/pdp/test/FunctionDefinitionDateTimeArithmeticTest.java
deleted file mode 100644
index a4a6a425b..000000000
--- a/ECOMP-PDP/src/test/java/org/openecomp/policy/pdp/test/FunctionDefinitionDateTimeArithmeticTest.java
+++ /dev/null
@@ -1,1602 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ECOMP-PDP
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.policy.pdp.test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.Test;
-
-import com.att.research.xacml.api.XACML3;
-import com.att.research.xacml.std.datatypes.DataTypes;
-import com.att.research.xacml.std.datatypes.ISO8601Date;
-import com.att.research.xacml.std.datatypes.ISO8601DateTime;
-import com.att.research.xacml.std.datatypes.ISO8601Time;
-import com.att.research.xacml.std.datatypes.ISO8601TimeZone;
-import com.att.research.xacml.std.datatypes.XPathDayTimeDuration;
-import com.att.research.xacml.std.datatypes.XPathYearMonthDuration;
-import com.att.research.xacmlatt.pdp.policy.ExpressionResult;
-import com.att.research.xacmlatt.pdp.policy.FunctionArgument;
-import com.att.research.xacmlatt.pdp.policy.FunctionArgumentAttributeValue;
-import com.att.research.xacmlatt.pdp.std.StdFunctions;
-import com.att.research.xacmlatt.pdp.std.functions.*;
-
-/**
- * Test of PDP Functions (See XACML core spec section A.3)
- *
- * TO RUN - use jUnit
- * In Eclipse select this file or the enclosing directory, right-click and select Run As/JUnit Test
- *
- *
- */
-public class FunctionDefinitionDateTimeArithmeticTest {
-
-
- /*
- * variables useful in the following tests
- */
- List<FunctionArgument> arguments = new ArrayList<>();
-
- ExpressionResult res;
-
-
- @Test
- public void testDateTime_add_dayTimeDuration() {
- // Date objects to be adjusted
- ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 777));
- ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null,
- new ISO8601Date(2000, 12, 31),
- new ISO8601Time(23, 59, 30, 1));
- ISO8601DateTime dateTimeBC = new ISO8601DateTime(null,
- new ISO8601Date(-2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
- ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0));
- ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0));
- ISO8601DateTime dateTimeIIC102Result = null;
-
- // Durations
- XPathDayTimeDuration duration0 = new XPathDayTimeDuration(1, 0, 0, 0, 0);
- XPathDayTimeDuration durationStdExample1 = new XPathDayTimeDuration(1, 5, 7, 10, 3.3);
- XPathDayTimeDuration durationNStdExample1 = new XPathDayTimeDuration(-1, 5, 7, 10, 3.3);
- XPathDayTimeDuration durationMsecs = new XPathDayTimeDuration(1, 5, 7, 10, 3.223);
- XPathDayTimeDuration durationCrossover = new XPathDayTimeDuration(1, 0, 0, 0, 29.999);
-
- // ARGS declarations
- // Dates
- FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
- FunctionArgumentAttributeValue attrDateTimeMsecs = null;
- FunctionArgumentAttributeValue attrDateTimeCrossover = null;
- FunctionArgumentAttributeValue attrDateTimeBC = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
- FunctionArgumentAttributeValue attrDateTimeIIC102 = null;
-
- // Durations
- FunctionArgumentAttributeValue attrDuration0 = null;
- FunctionArgumentAttributeValue attrDurationStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationMsecs = null;
- FunctionArgumentAttributeValue attrDurationCrossover = null;
- FunctionArgumentAttributeValue attrDurationIIC102 = null;
-
- // misc bad
- FunctionArgumentAttributeValue attrNull = null;
- FunctionArgumentAttributeValue attrBlank = null;
- FunctionArgumentAttributeValue attrInteger = null;
- // set values
- try {
- // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone5));
- attrDateTimeIIC102 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(DataTypes.DT_DATETIME.convert("2002-03-22T08:23:47-05:00")));
-
- dateTimeIIC102Result = DataTypes.DT_DATETIME.convert("2002-03-27T10:23:47-05:00");
-
- // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationCrossover));
- attrDurationIIC102 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue("P5DT2H0M0S"));
-
- // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(null));
- attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
- } catch (Exception e) {
- fail("creating attributes e="+ e);
- }
-
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATETIME_ADD_DAYTIMEDURATION;
-
- // check identity and type of the thing created
- assertEquals(XACML3.ID_FUNCTION_DATETIME_ADD_DAYTIMEDURATION, fd.getId());
- assertEquals(DataTypes.DT_DATETIME.getId(), fd.getDataTypeId());
-
- // just to be safe... If tests take too long these can probably be eliminated
- assertFalse(fd.returnsBag());
-
- // Duration = 0 => same as original
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDuration0);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- ISO8601DateTime resValue = (ISO8601DateTime)res.getValue().getValue();
- assertEquals(dateTimeStdExample1, resValue);
-
-
- // simple positive operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- ISO8601DateTime testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 17),
- new ISO8601Time(19, 23, 17, 300) );
- assertEquals(testResponse, resValue);
-
- // negative operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationNStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 7),
- new ISO8601Time(5, 3, 10, 700) );
- assertEquals(testResponse, resValue);
-
- // millisecs work correctly
- arguments.clear();
- arguments.add(attrDateTimeMsecs);
- arguments.add(attrDurationMsecs);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 17),
- new ISO8601Time(19, 23, 18, 0) );
- assertEquals(testResponse, resValue);
-
- // cross minute => cross day => cross month => cross year
- arguments.clear();
- arguments.add(attrDateTimeCrossover);
- arguments.add(attrDurationCrossover);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2001, 1, 1),
- new ISO8601Time(0, 0, 0, 0) );
- assertEquals(testResponse, resValue);
-
- // negative (BC) original date add goes the right direction
- arguments.clear();
- arguments.add(attrDateTimeBC);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(-2000, 1, 17),
- new ISO8601Time(19, 23, 17, 300) );
- assertEquals(testResponse, resValue);
-
- // non-null timezone not changed
- // original has timezone offset = 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone0);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 17),
- new ISO8601Time(timeZone0, 19, 23, 17, 300) );
- assertEquals(testResponse, resValue);
-
- // original has timezone offset not 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone5);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 17),
- new ISO8601Time(timeZone5, 19, 23, 17, 300) );
- assertEquals(testResponse, resValue);
-
- // conformance test IIC102
- arguments.clear();
- arguments.add(attrDateTimeIIC102);
- arguments.add(attrDurationIIC102);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- assertEquals(dateTimeIIC102Result, resValue);
-
- // empty non-null first arg
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // empty non-null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // two blanks
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null firat arg
- arguments.clear();
- arguments.add(attrNull);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // bad arg type
- arguments.clear();
- arguments.add(attrInteger);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Expected data type 'dateTime' saw 'integer'", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
- }
-
-
-
- @Test
- public void testDateTime_subtract_dayTimeDuration() {
- // Date objects to be adjusted
- ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 777));
- ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null,
- new ISO8601Date(2001, 1, 1),
- new ISO8601Time(0, 0, 0, 0) );
- ISO8601DateTime dateTimeBC = new ISO8601DateTime(null,
- new ISO8601Date(-2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
- ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0));
- ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0));
-
- // Durations
- XPathDayTimeDuration duration0 = new XPathDayTimeDuration(1, 0, 0, 0, 0);
- XPathDayTimeDuration durationStdExample1 = new XPathDayTimeDuration(1, 5, 7, 10, 3.3);
- XPathDayTimeDuration durationNStdExample1 = new XPathDayTimeDuration(-1, 5, 7, 10, 3.3);
- XPathDayTimeDuration durationMsecs = new XPathDayTimeDuration(1, 5, 7, 10, 14.778);
- XPathDayTimeDuration durationCrossover = new XPathDayTimeDuration(1, 0, 0, 0, 29.999);
-
- // ARGS declarations
- // Dates
- FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
- FunctionArgumentAttributeValue attrDateTimeMsecs = null;
- FunctionArgumentAttributeValue attrDateTimeCrossover = null;
- FunctionArgumentAttributeValue attrDateTimeBC = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
-
- // Durations
- FunctionArgumentAttributeValue attrDuration0 = null;
- FunctionArgumentAttributeValue attrDurationStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationMsecs = null;
- FunctionArgumentAttributeValue attrDurationCrossover = null;
-
- // misc bad
- FunctionArgumentAttributeValue attrNull = null;
- FunctionArgumentAttributeValue attrBlank = null;
- FunctionArgumentAttributeValue attrInteger = null;
- // set values
- try {
- // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone5));
-
- // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationCrossover));
-
- // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(null));
- attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
- } catch (Exception e) {
- fail("creating attributes e="+ e);
- }
-
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATETIME_SUBTRACT_DAYTIMEDURATION;
-
- // check identity and type of the thing created
- assertEquals(XACML3.ID_FUNCTION_DATETIME_SUBTRACT_DAYTIMEDURATION, fd.getId());
- assertEquals(DataTypes.DT_DATETIME.getId(), fd.getDataTypeId());
-
- // just to be safe... If tests take too long these can probably be eliminated
- assertFalse(fd.returnsBag());
-
- // Duration = 0 => same as original
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDuration0);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- ISO8601DateTime resValue = (ISO8601DateTime)res.getValue().getValue();
- assertEquals(dateTimeStdExample1, resValue);
-
-
- // simple positive operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- ISO8601DateTime testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 7),
- new ISO8601Time(5, 3, 10, 700) );
- assertEquals(testResponse, resValue);
-
-
- // negative operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationNStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 17),
- new ISO8601Time(19, 23, 17, 300) );
- assertEquals(testResponse, resValue);
-
- // millisecs work correctly
- arguments.clear();
- arguments.add(attrDateTimeMsecs);
- arguments.add(attrDurationMsecs);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 7),
- new ISO8601Time(5, 2, 59, 999) );
- assertEquals(testResponse, resValue);
-
- // cross minute => cross day => cross month => cross year
- arguments.clear();
- arguments.add(attrDateTimeCrossover);
- arguments.add(attrDurationCrossover);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 12, 31),
- new ISO8601Time(23, 59, 30, 1));
- assertEquals(testResponse, resValue);
-
- // negative (BC) original date add goes the right direction
- arguments.clear();
- arguments.add(attrDateTimeBC);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(-2000, 1, 7),
- new ISO8601Time(5, 3, 10, 700) );
- assertEquals(testResponse, resValue);
-
- // non-null timezone not changed
- // original has timezone offset = 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone0);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 7),
- new ISO8601Time(timeZone0, 5, 3, 10, 700) );
- assertEquals(testResponse, resValue);
-
- // original has timezone offset not 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone5);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 7),
- new ISO8601Time(timeZone5, 5, 3, 10, 700) );
- assertEquals(testResponse, resValue);
-
- // empty non-null first arg
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // empty non-null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // two blanks
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null firat arg
- arguments.clear();
- arguments.add(attrNull);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // bad arg type
- arguments.clear();
- arguments.add(attrInteger);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Expected data type 'dateTime' saw 'integer'", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
- }
-
-
-
-
-
-
-
-
-
- @Test
- public void testDateTime_add_yearMonthDuration() {
- // Date objects to be adjusted
- ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 777));
- ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null,
- new ISO8601Date(2000, 12, 31),
- new ISO8601Time(23, 59, 30, 1));
- ISO8601DateTime dateTimeBC = new ISO8601DateTime(null,
- new ISO8601Date(-2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
- ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0));
- ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0));
-
- // Durations
- XPathYearMonthDuration duration0 = new XPathYearMonthDuration(1, 0, 0);
- XPathYearMonthDuration durationStdExample1 = new XPathYearMonthDuration(1, 5, 7);
- XPathYearMonthDuration durationNStdExample1 = new XPathYearMonthDuration(-1, 5, 7);
- XPathYearMonthDuration durationMsecs = new XPathYearMonthDuration(1, 5, 7);
- XPathYearMonthDuration durationCrossover = new XPathYearMonthDuration(1, 0, 1);
-
- // ARGS declarations
- // Dates
- FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
- FunctionArgumentAttributeValue attrDateTimeMsecs = null;
- FunctionArgumentAttributeValue attrDateTimeCrossover = null;
- FunctionArgumentAttributeValue attrDateTimeBC = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
-
- // Durations
- FunctionArgumentAttributeValue attrDuration0 = null;
- FunctionArgumentAttributeValue attrDurationStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationMsecs = null;
- FunctionArgumentAttributeValue attrDurationCrossover = null;
-
- // misc bad
- FunctionArgumentAttributeValue attrNull = null;
- FunctionArgumentAttributeValue attrBlank = null;
- FunctionArgumentAttributeValue attrInteger = null;
- // set values
- try {
- // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone5));
-
- // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationCrossover));
-
- // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(null));
- attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
- } catch (Exception e) {
- fail("creating attributes e="+ e);
- }
-
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATETIME_ADD_YEARMONTHDURATION;
-
- // check identity and type of the thing created
- assertEquals(XACML3.ID_FUNCTION_DATETIME_ADD_YEARMONTHDURATION, fd.getId());
- assertEquals(DataTypes.DT_DATETIME.getId(), fd.getDataTypeId());
-
- // just to be safe... If tests take too long these can probably be eliminated
- assertFalse(fd.returnsBag());
-
- // Duration = 0 => same as original
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDuration0);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- ISO8601DateTime resValue = (ISO8601DateTime)res.getValue().getValue();
- assertEquals(dateTimeStdExample1, resValue);
-
-
- // simple positive operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- ISO8601DateTime testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2005, 8, 12),
- new ISO8601Time(12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // negative operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationNStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(1994, 6, 12),
- new ISO8601Time(12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // millisecs work correctly (not relevant to YearMonth, but should not break
- arguments.clear();
- arguments.add(attrDateTimeMsecs);
- arguments.add(attrDurationMsecs);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2005, 8, 12),
- new ISO8601Time(12, 13, 14, 777) );
- assertEquals(testResponse, resValue);
-
- // cross minute => cross day => cross month => cross year
- arguments.clear();
- arguments.add(attrDateTimeCrossover);
- arguments.add(attrDurationCrossover);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2001, 1, 31),
- new ISO8601Time(23, 59, 30, 1) );
- assertEquals(testResponse, resValue);
-
- // negative (BC) original date add goes the right direction
- arguments.clear();
- arguments.add(attrDateTimeBC);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(-1995, 8, 12),
- new ISO8601Time(12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // non-null timezone not changed
- // original has timezone offset = 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone0);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone0,
- new ISO8601Date(timeZone0, 2005, 8, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // original has timezone offset not 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone5);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone5,
- new ISO8601Date(timeZone5, 2005, 8, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // empty non-null first arg
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // empty non-null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // two blanks
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null firat arg
- arguments.clear();
- arguments.add(attrNull);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // bad arg type
- arguments.clear();
- arguments.add(attrInteger);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Expected data type 'dateTime' saw 'integer'", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
- }
-
-
-
-
- @Test
- public void testDateTime_subtract_yearMonthDuration() {
- // Date objects to be adjusted
- ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 777));
- ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 1),
- new ISO8601Time(23, 59, 30, 1));
- ISO8601DateTime dateTimeBC = new ISO8601DateTime(null,
- new ISO8601Date(-2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
- ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0));
- ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0));
-
- // Durations
- XPathYearMonthDuration duration0 = new XPathYearMonthDuration(1, 0, 0);
- XPathYearMonthDuration durationStdExample1 = new XPathYearMonthDuration(1, 5, 7);
- XPathYearMonthDuration durationNStdExample1 = new XPathYearMonthDuration(-1, 5, 7);
- XPathYearMonthDuration durationMsecs = new XPathYearMonthDuration(1, 5, 7);
- XPathYearMonthDuration durationCrossover = new XPathYearMonthDuration(1, 0, 1);
-
- // ARGS declarations
- // Dates
- FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
- FunctionArgumentAttributeValue attrDateTimeMsecs = null;
- FunctionArgumentAttributeValue attrDateTimeCrossover = null;
- FunctionArgumentAttributeValue attrDateTimeBC = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
-
- // Durations
- FunctionArgumentAttributeValue attrDuration0 = null;
- FunctionArgumentAttributeValue attrDurationStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationMsecs = null;
- FunctionArgumentAttributeValue attrDurationCrossover = null;
-
- // misc bad
- FunctionArgumentAttributeValue attrNull = null;
- FunctionArgumentAttributeValue attrBlank = null;
- FunctionArgumentAttributeValue attrInteger = null;
- // set values
- try {
- // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone5));
-
- // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationCrossover));
-
- // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(null));
- attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
- } catch (Exception e) {
- fail("creating attributes e="+ e);
- }
-
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATETIME_SUBTRACT_YEARMONTHDURATION;
-
- // check identity and type of the thing created
- assertEquals(XACML3.ID_FUNCTION_DATETIME_SUBTRACT_YEARMONTHDURATION, fd.getId());
- assertEquals(DataTypes.DT_DATETIME.getId(), fd.getDataTypeId());
-
- // just to be safe... If tests take too long these can probably be eliminated
- assertFalse(fd.returnsBag());
-
- // Duration = 0 => same as original
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDuration0);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- ISO8601DateTime resValue = (ISO8601DateTime)res.getValue().getValue();
- assertEquals(dateTimeStdExample1, resValue);
-
-
- // simple positive operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- ISO8601DateTime testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(1994, 6, 12),
- new ISO8601Time(12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // negative operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationNStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2005, 8, 12),
- new ISO8601Time(12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // millisecs work correctly (not relevant to YearMonth, but should not break
- arguments.clear();
- arguments.add(attrDateTimeMsecs);
- arguments.add(attrDurationMsecs);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(1994, 6, 12),
- new ISO8601Time(12, 13, 14, 777) );
- assertEquals(testResponse, resValue);
-
- // cross minute => cross day => cross month => cross year
- arguments.clear();
- arguments.add(attrDateTimeCrossover);
- arguments.add(attrDurationCrossover);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(1999, 12, 1),
- new ISO8601Time(23, 59, 30, 1) );
- assertEquals(testResponse, resValue);
-
- // negative (BC) original date add goes the right direction
- arguments.clear();
- arguments.add(attrDateTimeBC);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(-2006, 6, 12),
- new ISO8601Time(12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // non-null timezone not changed
- // original has timezone offset = 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone0);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone0,
- new ISO8601Date(timeZone0, 1994, 6, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // original has timezone offset not 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone5);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601DateTime.class, res.getValue().getValue().getClass());
- resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone5,
- new ISO8601Date(timeZone5, 1994, 6, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0) );
- assertEquals(testResponse, resValue);
-
- // empty non-null first arg
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // empty non-null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // two blanks
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null firat arg
- arguments.clear();
- arguments.add(attrNull);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // bad arg type
- arguments.clear();
- arguments.add(attrInteger);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-yearMonthDuration Expected data type 'dateTime' saw 'integer'", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
- }
-
-
-
-
-
-
-
-
-
-
-
- @Test
- public void testDate_add_yearMonthDuration() {
- // Date objects to be adjusted
- ISO8601Date dateTimeStdExample1 = new ISO8601Date(2000, 1, 12);
- ISO8601Date dateTimeMsecs =new ISO8601Date(2000, 1, 12);
- ISO8601Date dateTimeCrossover = new ISO8601Date(2000, 12, 31);
- ISO8601Date dateTimeBC = new ISO8601Date(-2000, 1, 12);
- ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
- ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601Date dateTimeTimeZone0 = new ISO8601Date(timeZone0, 2000, 1, 12);
- ISO8601Date dateTimeTimeZone5 = new ISO8601Date(timeZone5, 2000, 1, 12);
-
- // Durations
- XPathYearMonthDuration duration0 = new XPathYearMonthDuration(1, 0, 0);
- XPathYearMonthDuration durationStdExample1 = new XPathYearMonthDuration(1, 5, 7);
- XPathYearMonthDuration durationNStdExample1 = new XPathYearMonthDuration(-1, 5, 7);
- XPathYearMonthDuration durationMsecs = new XPathYearMonthDuration(1, 5, 7);
- XPathYearMonthDuration durationCrossover = new XPathYearMonthDuration(1, 0, 1);
-
- // ARGS declarations
- // Dates
- FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
- FunctionArgumentAttributeValue attrDateTimeMsecs = null;
- FunctionArgumentAttributeValue attrDateTimeCrossover = null;
- FunctionArgumentAttributeValue attrDateTimeBC = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
-
- // Durations
- FunctionArgumentAttributeValue attrDuration0 = null;
- FunctionArgumentAttributeValue attrDurationStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationMsecs = null;
- FunctionArgumentAttributeValue attrDurationCrossover = null;
-
- // misc bad
- FunctionArgumentAttributeValue attrNull = null;
- FunctionArgumentAttributeValue attrBlank = null;
- FunctionArgumentAttributeValue attrInteger = null;
- // set values
- try {
- // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeTimeZone5));
-
- // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationCrossover));
-
- // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(null));
- attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
- } catch (Exception e) {
- fail("creating attributes e="+ e);
- }
-
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATE_ADD_YEARMONTHDURATION;
-
- // check identity and type of the thing created
- assertEquals(XACML3.ID_FUNCTION_DATE_ADD_YEARMONTHDURATION, fd.getId());
- assertEquals(DataTypes.DT_DATE.getId(), fd.getDataTypeId());
-
- // just to be safe... If tests take too long these can probably be eliminated
- assertFalse(fd.returnsBag());
-
- // Duration = 0 => same as original
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDuration0);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- ISO8601Date resValue = (ISO8601Date)res.getValue().getValue();
- assertEquals(dateTimeStdExample1, resValue);
-
-
- // simple positive operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- ISO8601Date testResponse = new ISO8601Date(2005, 8, 12);
- assertEquals(testResponse, resValue);
-
- // negative operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationNStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(1994, 6, 12);
- assertEquals(testResponse, resValue);
-
- // millisecs work correctly (not relevant to YearMonth, but should not break
- arguments.clear();
- arguments.add(attrDateTimeMsecs);
- arguments.add(attrDurationMsecs);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(2005, 8, 12);
- assertEquals(testResponse, resValue);
-
- // cross minute => cross day => cross month => cross year
- arguments.clear();
- arguments.add(attrDateTimeCrossover);
- arguments.add(attrDurationCrossover);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(2001, 1, 31);
- assertEquals(testResponse, resValue);
-
- // negative (BC) original date add goes the right direction
- arguments.clear();
- arguments.add(attrDateTimeBC);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(-1995, 8, 12);
- assertEquals(testResponse, resValue);
-
- // non-null timezone not changed
- // original has timezone offset = 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone0);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(timeZone0, 2005, 8, 12);
- assertEquals(testResponse, resValue);
-
- // original has timezone offset not 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone5);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(timeZone5, 2005, 8, 12);
- assertEquals(testResponse, resValue);
-
- // empty non-null first arg
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // empty non-null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // two blanks
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null firat arg
- arguments.clear();
- arguments.add(attrNull);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // bad arg type
- arguments.clear();
- arguments.add(attrInteger);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-add-yearMonthDuration Expected data type 'date' saw 'integer'", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
- }
-
-
-
-
-
-
- @Test
- public void testDate_subtract_yearMonthDuration() {
- // Date objects to be adjusted
- ISO8601Date dateTimeStdExample1 =new ISO8601Date(2000, 1, 12);
- ISO8601Date dateTimeMsecs = new ISO8601Date(2000, 1, 12);
- ISO8601Date dateTimeCrossover = new ISO8601Date(2000, 1, 1);
- ISO8601Date dateTimeBC = new ISO8601Date(-2000, 1, 12);
- ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
- ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601Date dateTimeTimeZone0 = new ISO8601Date(timeZone0, 2000, 1, 12);
- ISO8601Date dateTimeTimeZone5 = new ISO8601Date(timeZone5, 2000, 1, 12);
-
- // Durations
- XPathYearMonthDuration duration0 = new XPathYearMonthDuration(1, 0, 0);
- XPathYearMonthDuration durationStdExample1 = new XPathYearMonthDuration(1, 5, 7);
- XPathYearMonthDuration durationNStdExample1 = new XPathYearMonthDuration(-1, 5, 7);
- XPathYearMonthDuration durationMsecs = new XPathYearMonthDuration(1, 5, 7);
- XPathYearMonthDuration durationCrossover = new XPathYearMonthDuration(1, 0, 1);
-
- // ARGS declarations
- // Dates
- FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
- FunctionArgumentAttributeValue attrDateTimeMsecs = null;
- FunctionArgumentAttributeValue attrDateTimeCrossover = null;
- FunctionArgumentAttributeValue attrDateTimeBC = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
- FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
-
- // Durations
- FunctionArgumentAttributeValue attrDuration0 = null;
- FunctionArgumentAttributeValue attrDurationStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
- FunctionArgumentAttributeValue attrDurationMsecs = null;
- FunctionArgumentAttributeValue attrDurationCrossover = null;
-
- // misc bad
- FunctionArgumentAttributeValue attrNull = null;
- FunctionArgumentAttributeValue attrBlank = null;
- FunctionArgumentAttributeValue attrInteger = null;
- // set values
- try {
- // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATE.createAttributeValue(dateTimeTimeZone5));
-
- // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationCrossover));
-
- // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(null));
- attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
- } catch (Exception e) {
- fail("creating attributes e="+ e);
- }
-
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATE_SUBTRACT_YEARMONTHDURATION;
-
- // check identity and type of the thing created
- assertEquals(XACML3.ID_FUNCTION_DATE_SUBTRACT_YEARMONTHDURATION, fd.getId());
- assertEquals(DataTypes.DT_DATE.getId(), fd.getDataTypeId());
-
- // just to be safe... If tests take too long these can probably be eliminated
- assertFalse(fd.returnsBag());
-
- // Duration = 0 => same as original
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDuration0);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- ISO8601Date resValue = (ISO8601Date)res.getValue().getValue();
- assertEquals(dateTimeStdExample1, resValue);
-
-
- // simple positive operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- ISO8601Date testResponse = new ISO8601Date(1994, 6, 12);
- assertEquals(testResponse, resValue);
-
- // negative operation
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrDurationNStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(2005, 8, 12);
- assertEquals(testResponse, resValue);
-
- // millisecs work correctly (not relevant to YearMonth, but should not break
- arguments.clear();
- arguments.add(attrDateTimeMsecs);
- arguments.add(attrDurationMsecs);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(1994, 6, 12);
- assertEquals(testResponse, resValue);
-
- // cross minute => cross day => cross month => cross year
- arguments.clear();
- arguments.add(attrDateTimeCrossover);
- arguments.add(attrDurationCrossover);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(1999, 12, 1);
- assertEquals(testResponse, resValue);
-
- // negative (BC) original date add goes the right direction
- arguments.clear();
- arguments.add(attrDateTimeBC);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(-2006, 6, 12);
- assertEquals(testResponse, resValue);
-
- // non-null timezone not changed
- // original has timezone offset = 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone0);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(timeZone0, 1994, 6, 12);
- assertEquals(testResponse, resValue);
-
- // original has timezone offset not 0
- arguments.clear();
- arguments.add(attrDateTimeTimeZone5);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertTrue(res.isOk());
- assertEquals(com.att.research.xacml.std.datatypes.ISO8601Date.class, res.getValue().getValue().getClass());
- resValue = (ISO8601Date)res.getValue().getValue();
- testResponse = new ISO8601Date(timeZone5, 1994, 6, 12);
- assertEquals(testResponse, resValue);
-
- // empty non-null first arg
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // empty non-null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // two blanks
- arguments.clear();
- arguments.add(attrBlank);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null firat arg
- arguments.clear();
- arguments.add(attrNull);
- arguments.add(attrBlank);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // bad arg type
- arguments.clear();
- arguments.add(attrInteger);
- arguments.add(attrDurationStdExample1);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-subtract-yearMonthDuration Expected data type 'date' saw 'integer'", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
-
- // null second arg
- arguments.clear();
- arguments.add(attrDateTimeStdExample1);
- arguments.add(attrNull);
- res = fd.evaluate(null, arguments);
- assertFalse(res.isOk());
- assertEquals("function:date-subtract-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
- }
-
-
-
-}