//* Licensed Materials - Property of *
//* IBM *
//* *
//* eu.abc4trust.pabce.1.34 *
//* *
//* (C) Copyright IBM Corp. 2014. All Rights Reserved. *
//* US Government Users Restricted Rights - Use, duplication or *
//* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. *
//* *
//* This file is 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. *
//*/**/****************************************************************
package eu.abc4trust.util.attributeTypes;
import static eu.abc4trust.util.attributeTypes.MyAttributeValueFactory.evaulateFunction;
import static eu.abc4trust.util.attributeTypes.MyAttributeValueFactory.parseValueFromFunction;
import static org.junit.Assert.*;
import java.math.BigInteger;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import eu.abc4trust.util.attributeEncoding.MyEncodingStringSha256;
import eu.abc4trust.util.attributeEncoding.MyEncodingStringUtf8;
public class MyAttributeValueFactoryTest {
private final URI stringEqualFunction;
private final URI stringEqualOneof;
public MyAttributeValueFactoryTest() throws Exception {
stringEqualFunction = new URI("urn:oasis:names:tc:xacml:1.0:function:string-equal");
stringEqualOneof = new URI("urn:abc4trust:1.0:function:string-equal-oneof");
}
@Test
public void testParseValueFromFunction() throws Exception {
assertEquals(MyAttributeValueString.class, parseValueFromFunction(stringEqualFunction, "hello")
.getClass());
assertEquals(MyAttributeValueDate.class, parseValueFromFunction(
new URI("urn:oasis:names:tc:xacml:1.0:function:date-greater-than"), "2010-01-01")
.getClass());
}
@Test
public void testMismatchedTypes() throws Exception {
List<MyAttributeValue> arguments = new ArrayList<MyAttributeValue>();
arguments.clear();
arguments.add(new MyAttributeValueString("hello", null));
arguments.add(new MyAttributeValueUri("hello", null));
try {
evaulateFunction(stringEqualFunction, arguments);
fail("Expected an exception");
} catch (Exception ex) {
// expected
assertTrue(ex.getMessage().contains("Incorrect type of arguments"));
}
}
@Test
public void testEncodings() throws Exception {
final String HELLO = "hello";
List<MyAttributeValue> arguments = new ArrayList<MyAttributeValue>();
arguments.clear();
arguments.add(new MyEncodingStringSha256(HELLO, null));
arguments.add(new MyEncodingStringUtf8(HELLO, null));
assertFalse(evaulateFunction(stringEqualFunction, arguments));
arguments.clear();
arguments.add(new MyEncodingStringUtf8(HELLO, null));
arguments.add(new MyEncodingStringUtf8(HELLO, null));
assertTrue(evaulateFunction(stringEqualFunction, arguments));
arguments.clear();
arguments.add(new MyEncodingStringSha256(HELLO, null));
arguments.add(new MyEncodingStringSha256(HELLO, null));
assertTrue(evaulateFunction(stringEqualFunction, arguments));
arguments.clear();
arguments.add(new MyAttributeValueString(HELLO, null));
arguments.add(new MyEncodingStringSha256(HELLO, null));
assertTrue(evaulateFunction(stringEqualFunction, arguments));
}
@Test
public void testIncorrectNumberOfArguments() throws Exception {
List<MyAttributeValue> arguments = new ArrayList<MyAttributeValue>();
// Too much
arguments.clear();
arguments.add(new MyAttributeValueString("hello", null));
arguments.add(new MyAttributeValueString("hello", null));
arguments.add(new MyAttributeValueString("hello", null));
try {
evaulateFunction(stringEqualFunction, arguments);
fail("Expected an exception");
} catch (Exception ex) {
// expected
assertTrue(ex.getMessage().contains("Incorrect number of arguments"));
}
// Too few
arguments.clear();
arguments.add(new MyAttributeValueString("hello", null));
try {
evaulateFunction(stringEqualFunction, arguments);
fail("Expected an exception");
} catch (Exception ex) {
// expected
assertTrue(ex.getMessage().contains("Incorrect number of arguments"));
}
// No arguments
arguments.clear();
try {
evaulateFunction(stringEqualFunction, arguments);
fail("Expected an exception");
} catch (Exception ex) {
// expected
assertTrue(ex.getMessage().contains("Incorrect number of arguments"));
}
}
@Test
public void testEqualsOneOf() throws Exception {
List<MyAttributeValue> arguments = new ArrayList<MyAttributeValue>();
// First
arguments.clear();
arguments.add(new MyAttributeValueString("arg0", null));
arguments.add(new MyAttributeValueString("arg0", null));
arguments.add(new MyAttributeValueString("arg1", null));
arguments.add(new MyAttributeValueString("arg2", null));
arguments.add(new MyAttributeValueString("arg3", null));
assertTrue(evaulateFunction(stringEqualOneof, arguments));
// Middle
arguments.set(0, new MyAttributeValueString("arg2", null));
assertTrue(evaulateFunction(stringEqualOneof, arguments));
// End
arguments.set(0, new MyAttributeValueString("arg3", null));
assertTrue(evaulateFunction(stringEqualOneof, arguments));
// Not present
arguments.set(0, new MyAttributeValueString("hello", null));
assertFalse(evaulateFunction(stringEqualOneof, arguments));
// Not present, with some duplicate arguments
arguments.clear();
arguments.add(new MyAttributeValueString("arg0", null));
arguments.add(new MyAttributeValueString("arg1", null));
arguments.add(new MyAttributeValueString("arg1", null));
arguments.add(new MyAttributeValueString("arg1", null));
assertFalse(evaulateFunction(stringEqualOneof, arguments));
}
@Test
public void testEqualsForAllTypes() throws Exception {
List<MyAttributeValue> arguments = new ArrayList<MyAttributeValue>();
// String
arguments.clear();
arguments.add(new MyAttributeValueString("hello", null));
arguments.add(new MyAttributeValueString("hello", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:string-equal"),
arguments));
assertFalse(evaulateFunction(new URI("urn:abc4trust:1.0:function:string-not-equal"), arguments));
// Boolean
arguments.clear();
arguments.add(new MyAttributeValueBoolean(Boolean.valueOf(true), null));
arguments.add(new MyAttributeValueBoolean(true, null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:boolean-equal"),
arguments));
assertFalse(evaulateFunction(new URI("urn:abc4trust:1.0:function:boolean-not-equal"), arguments));
// Integer
arguments.clear();
arguments.add(new MyAttributeValueInteger(Integer.valueOf(42), null));
arguments.add(new MyAttributeValueInteger(BigInteger.valueOf(42), null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:integer-equal"),
arguments));
assertFalse(evaulateFunction(new URI("urn:abc4trust:1.0:function:integer-not-equal"), arguments));
// Date with timezone
arguments.clear();
arguments.add(new MyAttributeValueDate("2011-12-04Z", null));
arguments.add(new MyAttributeValueDate("2011-12-04Z", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-equal"),
arguments));
assertFalse(evaulateFunction(new URI("urn:abc4trust:1.0:function:date-not-equal"), arguments));
// Date without timezone
arguments.clear();
arguments.add(new MyAttributeValueDate("2011-12-04", null));
arguments.add(new MyAttributeValueDate("2011-12-04", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-equal"),
arguments));
// Date with and without timezone
arguments.clear();
arguments.add(new MyAttributeValueDate("2011-12-04Z", null));
arguments.add(new MyAttributeValueDate("2011-12-04", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-equal"),
arguments));
// Time without timezone
arguments.clear();
arguments.add(new MyAttributeValueTime("17:39:42", null));
arguments.add(new MyAttributeValueTime("17:39:42", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:time-equal"),
arguments));
// DateTime with timezone
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:42:42Z", null));
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:42:42Z", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-equal"),
arguments));
// DateTime without timezone
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:43:14", null));
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:43:14", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-equal"),
arguments));
assertFalse(evaulateFunction(new URI("urn:abc4trust:1.0:function:dateTime-not-equal"),
arguments));
// DateTime with and without timezone
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:43:14Z", null));
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:43:14", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-equal"),
arguments));
// DateTime across timezone (same)
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2011-12-04T19:44:15+02:00", null));
arguments.add(new MyAttributeValueDateTime("2011-12-04T11:44:15-06:00", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-equal"),
arguments));
// URI
arguments.clear();
arguments.add(new MyAttributeValueUri(new URI("abc4trust.eu/blabla"), null));
arguments.add(new MyAttributeValueUri(new URI("abc4trust.eu/blabla"), null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:anyURI-equal"),
arguments));
assertFalse(evaulateFunction(new URI("urn:abc4trust:1.0:function:anyURI-not-equal"), arguments));
}
@Test
public void testUnequalsForAllTypes() throws Exception {
List<MyAttributeValue> arguments = new ArrayList<MyAttributeValue>();
// String
arguments.clear();
arguments.add(new MyAttributeValueString("hello", null));
arguments.add(new MyAttributeValueString("world", null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:string-equal"),
arguments));
assertTrue(evaulateFunction(new URI("urn:abc4trust:1.0:function:string-not-equal"), arguments));
// Boolean
arguments.clear();
arguments.add(new MyAttributeValueBoolean(Boolean.valueOf(true), null));
arguments.add(new MyAttributeValueBoolean(false, null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:boolean-equal"),
arguments));
assertTrue(evaulateFunction(new URI("urn:abc4trust:1.0:function:boolean-not-equal"), arguments));
// Integer
arguments.clear();
arguments.add(new MyAttributeValueInteger(6 * 9, null));
arguments.add(new MyAttributeValueInteger(BigInteger.valueOf(42), null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:integer-equal"),
arguments));
assertTrue(evaulateFunction(new URI("urn:abc4trust:1.0:function:integer-not-equal"), arguments));
// Date with timezone
arguments.clear();
arguments.add(new MyAttributeValueDate("2011-12-04Z", null));
arguments.add(new MyAttributeValueDate("2011-12-05Z", null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-equal"),
arguments));
assertTrue(evaulateFunction(new URI("urn:abc4trust:1.0:function:date-not-equal"), arguments));
// Date without timezone
arguments.clear();
arguments.add(new MyAttributeValueDate("2011-12-04", null));
arguments.add(new MyAttributeValueDate("2011-12-05", null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-equal"),
arguments));
// Date with and without timezone
arguments.clear();
arguments.add(new MyAttributeValueDate("2011-12-04Z", null));
arguments.add(new MyAttributeValueDate("2011-12-05", null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-equal"),
arguments));
// Time without timezone
arguments.clear();
arguments.add(new MyAttributeValueTime("17:39:42", null));
arguments.add(new MyAttributeValueTime("17:31:42", null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:time-equal"),
arguments));
// DateTime with timezone
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:42:42Z", null));
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:42:41Z", null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-equal"),
arguments));
// DateTime without timezone
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:43:14", null));
arguments.add(new MyAttributeValueDateTime("2011-12-05T17:43:14", null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-equal"),
arguments));
assertTrue(evaulateFunction(new URI("urn:abc4trust:1.0:function:dateTime-not-equal"), arguments));
// DateTime with and without timezone
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:43:14Z", null));
arguments.add(new MyAttributeValueDateTime("2011-12-04T17:43:15", null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-equal"),
arguments));
// DateTime across timezone (different)
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2011-12-04T19:44:15+02:00", null));
arguments.add(new MyAttributeValueDateTime("2011-12-04T11:44:15-07:00", null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-equal"),
arguments));
// URI
arguments.clear();
arguments.add(new MyAttributeValueUri(new URI("abc4trust.eu/hello"), null));
arguments.add(new MyAttributeValueUri(new URI("abc4trust.eu/world"), null));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:anyURI-equal"),
arguments));
assertTrue(evaulateFunction(new URI("urn:abc4trust:1.0:function:anyURI-not-equal"), arguments));
}
@Test
public void testComparisons() throws Exception {
List<MyAttributeValue> arguments = new ArrayList<MyAttributeValue>();
arguments.clear();
arguments.add(new MyAttributeValueInteger(4, null));
arguments.add(new MyAttributeValueInteger(7, null));
assertFalse(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:integer-greater-than"), arguments));
assertFalse(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:integer-greater-than-or-equal"), arguments));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:integer-less-than"),
arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:integer-less-than-or-equal"), arguments));
arguments.clear();
arguments.add(new MyAttributeValueInteger(42, null));
arguments.add(new MyAttributeValueInteger(42, null));
assertFalse(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:integer-greater-than"), arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:integer-greater-than-or-equal"), arguments));
assertFalse(evaulateFunction(
new URI("urn:oasis:names:tc:xacml:1.0:function:integer-less-than"), arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:integer-less-than-or-equal"), arguments));
arguments.clear();
arguments.add(new MyAttributeValueInteger(142, null));
arguments.add(new MyAttributeValueInteger(42, null));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:integer-greater-than"), arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:integer-greater-than-or-equal"), arguments));
assertFalse(evaulateFunction(
new URI("urn:oasis:names:tc:xacml:1.0:function:integer-less-than"), arguments));
assertFalse(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:integer-less-than-or-equal"), arguments));
arguments.clear();
arguments.add(new MyAttributeValueDate("2010-10-10", null));
arguments.add(new MyAttributeValueDate("2011-11-11", null));
assertFalse(evaulateFunction(
new URI("urn:oasis:names:tc:xacml:1.0:function:date-greater-than"), arguments));
assertFalse(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:date-greater-than-or-equal"), arguments));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-less-than"),
arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:date-less-than-or-equal"), arguments));
arguments.clear();
arguments.add(new MyAttributeValueDate("2010-01-01", null));
arguments.add(new MyAttributeValueDate("2010-01-01", null));
assertFalse(evaulateFunction(
new URI("urn:oasis:names:tc:xacml:1.0:function:date-greater-than"), arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:date-greater-than-or-equal"), arguments));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-less-than"),
arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:date-less-than-or-equal"), arguments));
arguments.clear();
arguments.add(new MyAttributeValueDate("2011-11-11", null));
arguments.add(new MyAttributeValueDate("2010-10-10", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-greater-than"),
arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:date-greater-than-or-equal"), arguments));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:date-less-than"),
arguments));
assertFalse(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:date-less-than-or-equal"), arguments));
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2010-10-10T10:10:10Z", null));
arguments.add(new MyAttributeValueDateTime("2011-11-11T10:10:10Z", null));
assertFalse(evaulateFunction(
new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-greater-than"), arguments));
assertFalse(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:dateTime-greater-than-or-equal"), arguments));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-less-than"),
arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:dateTime-less-than-or-equal"), arguments));
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2010-01-01T10:10:10Z", null));
arguments.add(new MyAttributeValueDateTime("2010-01-01T10:10:10Z", null));
assertFalse(evaulateFunction(
new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-greater-than"), arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:dateTime-greater-than-or-equal"), arguments));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-less-than"),
arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:dateTime-less-than-or-equal"), arguments));
arguments.clear();
arguments.add(new MyAttributeValueDateTime("2011-11-11T10:10:10Z", null));
arguments.add(new MyAttributeValueDateTime("2010-10-10T10:10:10Z", null));
assertTrue(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-greater-than"),
arguments));
assertTrue(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:dateTime-greater-than-or-equal"), arguments));
assertFalse(evaulateFunction(new URI("urn:oasis:names:tc:xacml:1.0:function:dateTime-less-than"),
arguments));
assertFalse(evaulateFunction(new URI(
"urn:oasis:names:tc:xacml:1.0:function:dateTime-less-than-or-equal"), arguments));
}
}