summaryrefslogtreecommitdiffstats
path: root/utils/src/test/java/org
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2018-03-23 14:47:42 -0400
committerJim Hahn <jrh3@att.com>2018-03-25 09:03:26 -0400
commitd625f8e805c12301e36392d550b4ca8f8cfa3b5f (patch)
tree8b4cb9e2ef1c3d85e236f2a07a42427e880a8c99 /utils/src/test/java/org
parent586e553d141e087566a6b064121910089cf52cff (diff)
Add PropertyConfiguration class
Added PropertyConfiguration class, which provides for the loading of properties into the fields of a subclass. Annotations are used to identify the field to be loaded and the name of the property from which it is to be loaded. Changed attribute "useDefault" to "emptyOk" so that it only has to be specified when the default value is empty. Reformatted a couple of files. Added setAllFields() method. Added getRawPropertyValue() method so subclasses can change how values are extracted from the property set. Added SpecPropertyConfiguration so controller or session names may be embedded within property names. Fixed some typos. Refactored out generalizeType2(). Changed exception classes to take field name instead of Field object. Modified getValue() to take the field name and class type instead of Field object. Removed or fixed comments in junit tests. Added more junit tests. Changed emptyOk attribute to accept, to facilitate adding other options in the future. Corrected comments on the isEmptyOk() methods. Change-Id: I6b190fea687f87cf512fb3236bfcf40b7adc4566 Issue-ID: POLICY-577 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'utils/src/test/java/org')
-rw-r--r--utils/src/test/java/org/onap/policy/common/utils/properties/PropertyConfigurationTest.java1031
-rw-r--r--utils/src/test/java/org/onap/policy/common/utils/properties/SpecPropertyConfigurationTest.java331
-rw-r--r--utils/src/test/java/org/onap/policy/common/utils/properties/exception/BasicPropertyExceptionTester.java130
-rw-r--r--utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyAccessExceptionTest.java66
-rw-r--r--utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyAnnotationExceptionTest.java70
-rw-r--r--utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyExceptionTest.java69
-rw-r--r--utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyInvalidExceptionTest.java70
-rw-r--r--utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyMissingExceptionTest.java42
8 files changed, 1809 insertions, 0 deletions
diff --git a/utils/src/test/java/org/onap/policy/common/utils/properties/PropertyConfigurationTest.java b/utils/src/test/java/org/onap/policy/common/utils/properties/PropertyConfigurationTest.java
new file mode 100644
index 00000000..cf823b5d
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/properties/PropertyConfigurationTest.java
@@ -0,0 +1,1031 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine - Common Modules
+ * ================================================================================
+ * Copyright (C) 2018 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.onap.policy.common.utils.properties;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import java.lang.reflect.Field;
+import java.util.Properties;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.properties.exception.PropertyAccessException;
+import org.onap.policy.common.utils.properties.exception.PropertyException;
+import org.onap.policy.common.utils.properties.exception.PropertyInvalidException;
+import org.onap.policy.common.utils.properties.exception.PropertyMissingException;
+
+/**
+ *
+ */
+public class PropertyConfigurationTest {
+
+ /**
+ * Property used for most of the simple configuration subclasses.
+ */
+ private static final String THE_VALUE = "the.value";
+
+ /**
+ * String property value.
+ */
+ private static final String STRING_VALUE = "a string";
+
+ /**
+ * Default value for string property.
+ */
+ private static final String STRING_VALUE_DEFAULT = "another string";
+
+ /**
+ * Value that cannot be coerced into any other type.
+ */
+ private static final String INVALID_VALUE = "invalid";
+
+ /**
+ * Properties used when invoking constructors.
+ */
+ private Properties props;
+
+ @Before
+ public void setUp() {
+ props = new Properties();
+ }
+
+ @Test
+ public void testPropertyConfiguration() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private String value;
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+
+ Config cfg = new Config();
+ assertEquals(null, cfg.value);
+
+ cfg.setAllFields(props);
+ assertEquals(STRING_VALUE, cfg.value);
+ }
+
+ @Test
+ public void testPropertyConfigurationProperties() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ Config cfg = new Config(props);
+
+ assertEquals(STRING_VALUE, cfg.value);
+ }
+
+ @Test
+ public void testSetAllFields() throws Exception {
+
+ /*
+ * Implements an extra interface, just to see that it doesn't cause issues.
+ */
+ class GrandParentConfig extends PropertyConfiguration implements DoesNothing {
+
+ @Property(name = "grandparent.value")
+ protected boolean grandparentValue;
+ };
+
+ /*
+ * Implements the extra interface, too.
+ */
+ class ParentConfig extends GrandParentConfig implements DoesNothing {
+
+ @Property(name = "parent.value")
+ protected long parentValue;
+ };
+
+ class Config extends ParentConfig {
+
+ @Property(name = THE_VALUE)
+ private String value;
+ };
+
+
+ Config cfg = new Config();
+
+ // try one set of values
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ props.setProperty("parent.value", "50000");
+ props.setProperty("grandparent.value", "true");
+ cfg.setAllFields(props);
+
+ assertEquals(STRING_VALUE, cfg.value);
+ assertEquals(50000L, cfg.parentValue);
+ assertEquals(true, cfg.grandparentValue);
+
+ // now a different set of values
+ props.setProperty(THE_VALUE, STRING_VALUE + "x");
+ props.setProperty("parent.value", "50001");
+ props.setProperty("grandparent.value", "false");
+ cfg.setAllFields(props);
+
+ assertEquals(STRING_VALUE + "x", cfg.value);
+ assertEquals(50001L, cfg.parentValue);
+ assertEquals(false, cfg.grandparentValue);
+ }
+
+ @Test
+ public void testSetAllFields_NoProperties() throws Exception {
+
+ class Config extends PropertyConfiguration {
+
+ private String value;
+ };
+
+
+ Config cfg = new Config();
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ cfg.setAllFields(props);
+
+ assertEquals(null, cfg.value);
+ }
+
+ @Test
+ public void testSetValueFieldProperties_FieldSet() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ Config cfg = new Config(props);
+
+ assertEquals(STRING_VALUE, cfg.value);
+ }
+
+ @Test
+ public void testSetValueFieldProperties_NoAnnotation() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ Config cfg = new Config(props);
+
+ assertNull(cfg.value);
+ }
+
+ @Test(expected = PropertyAccessException.class)
+ public void testSetValueFieldProperties_WrongFieldType() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ // Cannot set a property into an "Exception" field
+ @Property(name = THE_VALUE)
+ private Exception value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ new Config(props);
+ }
+
+ @Test(expected = PropertyMissingException.class)
+ public void testSetValueFieldPropertyProperties_NoProperty_NoDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ new Config(props);
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testSetValueFieldPropertyProperties_InvalidValue() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private int value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+
+ /**
+ * This returns a boolean, but the field is an "int", so it should throw an
+ * exception when it tries to stuff the value into the field.
+ */
+ @Override
+ protected Object getValue(Field field, Properties props, Property prop) throws PropertyException {
+ return Boolean.TRUE;
+ }
+ };
+
+ new Config(props);
+ }
+
+ @Test
+ public void testGetValue() throws PropertyException {
+ // this class contains all of the supported field types
+ class Config extends PropertyConfiguration {
+
+ @Property(name = "string")
+ private String stringValue;
+
+ @Property(name = "boolean.true")
+ private Boolean boolTrueValue;
+
+ @Property(name = "boolean.false")
+ private Boolean boolFalseValue;
+
+ @Property(name = "primitive.boolean.true")
+ private boolean primBoolTrueValue;
+
+ @Property(name = "primitive.boolean.false")
+ private boolean primBoolFalseValue;
+
+ @Property(name = "integer")
+ private Integer intValue;
+
+ @Property(name = "primitive.integer")
+ private int primIntValue;
+
+ @Property(name = "long")
+ private Long longValue;
+
+ @Property(name = "primitive.long")
+ private long primLongValue;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty("string", "a string");
+ props.setProperty("boolean.true", "true");
+ props.setProperty("boolean.false", "false");
+ props.setProperty("primitive.boolean.true", "true");
+ props.setProperty("primitive.boolean.false", "false");
+ props.setProperty("integer", "100");
+ props.setProperty("primitive.integer", "101");
+ props.setProperty("long", "10000");
+ props.setProperty("primitive.long", "10001");
+
+ Config cfg = new Config(props);
+
+ assertEquals("a string", cfg.stringValue);
+ assertEquals(true, cfg.boolTrueValue);
+ assertEquals(false, cfg.boolFalseValue);
+ assertEquals(true, cfg.primBoolTrueValue);
+ assertEquals(false, cfg.primBoolFalseValue);
+ assertEquals(100, cfg.intValue.intValue());
+ assertEquals(101, cfg.primIntValue);
+ assertEquals(10000, cfg.longValue.longValue());
+ assertEquals(10001, cfg.primLongValue);
+ }
+
+ @Test(expected = PropertyAccessException.class)
+ public void testGetValue_UnsupportedType() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ // Cannot set a property into an "Exception" field
+ @Property(name = THE_VALUE)
+ private Exception value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ new Config(props);
+ }
+
+ @Test
+ public void testCheckModifiable_OtherModifiers() throws PropertyException {
+ // this class contains all of the supported field types
+ class Config extends PropertyConfiguration {
+
+ @Property(name = "public")
+ public String publicString;
+
+ @Property(name = "private")
+ private String privateString;
+
+ @Property(name = "protected")
+ protected String protectedString;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty("public", "a public string");
+ props.setProperty("private", "a private string");
+ props.setProperty("protected", "a protected string");
+
+ Config cfg = new Config(props);
+
+ assertEquals("a public string", cfg.publicString);
+ assertEquals("a private string", cfg.privateString);
+ assertEquals("a protected string", cfg.protectedString);
+ }
+
+ @Test(expected = PropertyAccessException.class)
+ public void testCheckModifiable_Static() throws PropertyException {
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ new StaticConfig(props);
+ }
+
+ @Test(expected = PropertyAccessException.class)
+ public void testCheckModifiable_Final() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ // Cannot set a property into an "final" field
+ @Property(name = THE_VALUE)
+ private final String value = "";
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ new Config(props);
+ }
+
+ @Test
+ public void testGetStringValue() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ Config cfg = new Config(props);
+
+ assertEquals(STRING_VALUE, cfg.value);
+ }
+
+ @Test
+ public void testGetBooleanValue_NoDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private Boolean value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "true");
+ Config cfg = new Config(props);
+
+ assertEquals(true, cfg.value);
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testGetBooleanValue_InvalidDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = INVALID_VALUE)
+ private Boolean value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "true");
+ new Config(props);
+ }
+
+ @Test
+ public void testGetBooleanValue_ValidDefault_True() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "true")
+ private Boolean value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ // property not defined
+ Config cfg = new Config(props);
+ assertEquals(true, cfg.value);
+
+ // try again, with the property defined as true
+ props.setProperty(THE_VALUE, "true");
+ cfg = new Config(props);
+ assertEquals(true, cfg.value);
+
+ // try again, with the property defined as false
+ props.setProperty(THE_VALUE, "false");
+ cfg = new Config(props);
+ assertEquals(false, cfg.value);
+ }
+
+ @Test
+ public void testGetBooleanValue_ValidDefault_False() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "false")
+ private Boolean value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ // property not defined
+ Config cfg = new Config(props);
+ assertEquals(false, cfg.value);
+
+ // try again, with the property defined as true
+ props.setProperty(THE_VALUE, "true");
+ cfg = new Config(props);
+ assertEquals(true, cfg.value);
+
+ // try again, with the property defined as false
+ props.setProperty(THE_VALUE, "false");
+ cfg = new Config(props);
+ assertEquals(false, cfg.value);
+ }
+
+ @Test
+ public void testGetIntegerValue_NoDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private Integer value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "200");
+ Config cfg = new Config(props);
+
+ assertEquals(200, cfg.value.intValue());
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testGetIntegerValue_InvalidDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = INVALID_VALUE)
+ private Integer value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "200");
+ new Config(props);
+ }
+
+ @Test
+ public void testGetIntegerValue_ValidDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "201")
+ private Integer value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ // property not defined
+ Config cfg = new Config(props);
+ assertEquals(201, cfg.value.intValue());
+
+ // try again, with the property defined
+ props.setProperty(THE_VALUE, "200");
+ cfg = new Config(props);
+ assertEquals(200, cfg.value.intValue());
+ }
+
+ @Test
+ public void testGetLongValue_NoDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private Long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "20000");
+ Config cfg = new Config(props);
+
+ assertEquals(20000L, cfg.value.longValue());
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testGetLongValue_InvalidDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = INVALID_VALUE)
+ private Long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "20000");
+ new Config(props);
+ }
+
+ @Test
+ public void testGetLongValue_ValidDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "20001")
+ private Long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ // property not defined
+ Config cfg = new Config(props);
+ assertEquals(20001L, cfg.value.longValue());
+
+ // try again, with the property defined
+ props.setProperty(THE_VALUE, "20000");
+ cfg = new Config(props);
+ assertEquals(20000L, cfg.value.longValue());
+ }
+
+ @Test
+ public void testGetPropValue_Prop_NoDefault() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ Config cfg = new Config(props);
+
+ assertEquals(STRING_VALUE, cfg.value);
+ }
+
+ @Test
+ public void testGetPropValue_Prop_Default() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = STRING_VALUE_DEFAULT)
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ Config cfg = new Config(props);
+
+ assertEquals(STRING_VALUE, cfg.value);
+ }
+
+ @Test
+ public void testGetPropValue_EmptyProp_EmptyOk() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, accept = "empty")
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "");
+ Config cfg = new Config(props);
+
+ assertEquals("", cfg.value);
+ }
+
+ @Test
+ public void testGetPropValue_EmptyDefault_EmptyOk() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "", accept = "empty")
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ Config cfg = new Config(props);
+
+ assertEquals("", cfg.value);
+ }
+
+ @Test
+ public void testGetPropValue_Default_EmptyOk() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = STRING_VALUE, accept = "empty")
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ Config cfg = new Config(props);
+
+ assertEquals(STRING_VALUE, cfg.value);
+ }
+
+ @Test(expected = PropertyMissingException.class)
+ public void testGetPropValue_EmptyDefault_EmptyNotOk() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "")
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ new Config(props);
+ }
+
+ @Test
+ public void testGetPropValue_Default_EmptyNotOk() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = STRING_VALUE, accept = "")
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ Config cfg = new Config(props);
+
+ assertEquals(STRING_VALUE, cfg.value);
+ }
+
+ @Test
+ public void testGetRawPropertyValue() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+
+ @Override
+ protected String getRawPropertyValue(Properties props, String propnm) {
+ return STRING_VALUE;
+ }
+ };
+
+ Config cfg = new Config(props);
+
+ assertEquals(STRING_VALUE, cfg.value);
+
+ }
+
+ @Test
+ public void testMakeBoolean_True() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private Boolean value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "true");
+ Config cfg = new Config(props);
+
+ assertEquals(true, cfg.value);
+ }
+
+ @Test
+ public void testMakeBoolean_False() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private Boolean value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "false");
+ Config cfg = new Config(props);
+
+ assertEquals(false, cfg.value);
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testMakeBoolean_Invalid() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private Boolean value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, INVALID_VALUE);
+ new Config(props);
+ }
+
+ @Test
+ public void testMakeInteger_Valid() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private int value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "300");
+ Config cfg = new Config(props);
+
+ assertEquals(300, cfg.value);
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testMakeInteger_Invalid() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private int value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, INVALID_VALUE);
+ new Config(props);
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testMakeInteger_TooBig() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private int value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, String.valueOf(Integer.MAX_VALUE + 10L));
+ new Config(props);
+ }
+
+ @Test
+ public void testMakeLong_Valid() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, "30000");
+ Config cfg = new Config(props);
+
+ assertEquals(30000L, cfg.value);
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testMakeLong_Invalid() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE)
+ private long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ props.setProperty(THE_VALUE, INVALID_VALUE);
+ new Config(props);
+ }
+
+ @Test
+ public void testCheckDefaultValue_NotEmpty_Valid() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "700")
+ private long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ Config cfg = new Config(props);
+
+ assertEquals(700L, cfg.value);
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testCheckDefaultValue_NotEmpty_Invalid() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = INVALID_VALUE)
+ private long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ new Config(props);
+ }
+
+ @Test(expected = PropertyInvalidException.class)
+ public void testCheckDefaultValue_Empty_EmptyOk_Invalid() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "", accept = "empty")
+ private long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ new Config(props);
+ }
+
+ @Test
+ public void testIsEmptyOkPropertyString_True() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "", accept = "empty")
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ // missing property - should default to ""
+ Config cfg = new Config(props);
+ assertEquals("", cfg.value);
+
+ // add an empty property - should take the property's value
+ props.setProperty(THE_VALUE, "");
+ cfg.setAllFields(props);
+ assertEquals("", cfg.value);
+
+ // add the property - should take the property's value
+ props.setProperty(THE_VALUE, STRING_VALUE);
+ cfg.setAllFields(props);
+ assertEquals(STRING_VALUE, cfg.value);
+ }
+
+ @Test(expected = PropertyMissingException.class)
+ public void testIsEmptyOkPropertyString_False() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "", accept = "")
+ private long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ new Config(props);
+ }
+
+ @Test
+ public void testIsEmptyOkProperty_True() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "", accept = "empty")
+ private String value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ Config cfg = new Config(props);
+
+ assertEquals("", cfg.value);
+ }
+
+ @Test(expected = PropertyMissingException.class)
+ public void testIsEmptyOkProperty_False() throws PropertyException {
+ class Config extends PropertyConfiguration {
+
+ @Property(name = THE_VALUE, defaultValue = "", accept = "")
+ private long value;
+
+ public Config(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ new Config(props);
+ }
+
+ /**
+ * A config whose annotated property is "static".
+ */
+ public static class StaticConfig extends PropertyConfiguration {
+
+ // "static" field cannot be set
+ @Property(name = THE_VALUE)
+ private static String value;
+
+ public StaticConfig(Properties props) throws PropertyException {
+ super(props);
+ }
+ };
+
+ /**
+ * This is just used as a mix-in to ensure that the configuration ignores interfaces.
+ */
+ public static interface DoesNothing {
+
+ }
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/properties/SpecPropertyConfigurationTest.java b/utils/src/test/java/org/onap/policy/common/utils/properties/SpecPropertyConfigurationTest.java
new file mode 100644
index 00000000..39c8f01a
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/properties/SpecPropertyConfigurationTest.java
@@ -0,0 +1,331 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine - Common Modules
+ * ================================================================================
+ * Copyright (C) 2018 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.onap.policy.common.utils.properties;
+
+import static org.junit.Assert.*;
+import java.util.Properties;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.properties.exception.PropertyException;
+import org.onap.policy.common.utils.properties.exception.PropertyMissingException;
+import static org.onap.policy.common.utils.properties.SpecPropertyConfiguration.*;
+
+/**
+ *
+ */
+public class SpecPropertyConfigurationTest {
+
+ /**
+ * The specializer.
+ */
+ private static final String SPEC = "my.name";
+
+ /**
+ * Properties used when invoking constructors.
+ */
+ private Properties props;
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Before
+ public void setUp() throws Exception {
+ props = new Properties();
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#getRawPropertyValue(java.util.Properties, java.lang.String)}.
+ * @throws PropertyException
+ */
+ @Test
+ public void testGetRawPropertyValue() throws PropertyException {
+ class Config extends SpecPropertyConfiguration {
+
+ // no spec
+ @Property(name = "prefix.suffix")
+ private String noSpec;
+
+ // no spec, other type
+ @Property(name = "no.spec.bool")
+ private boolean noSpecBool;
+
+ // type 1, no prefix
+ @Property(name = "{$}.suffix")
+ private String type1NoPrefix;
+
+ // type 1, no suffix
+ @Property(name = "prefix.{$}")
+ private String type1NoSuffix;
+
+ // type 1, both prefix and suffix
+ @Property(name = "prefix.{$}.suffix")
+ private String type1Both;
+
+ // type 1, other type
+ @Property(name = "an.{$}.int")
+ private int type1Int;
+
+ // type 2, no prefix
+ @Property(name = "{abc.?.def}.suffix")
+ private String type2NoPrefix;
+
+ // type 2, no suffix
+ @Property(name = "prefix.{abc.?.def}")
+ private String type2NoSuffix;
+
+ // type 2, no spec prefix
+ @Property(name = "prefix.{?.def}.suffix")
+ private String type2NoSpecPrefix;
+
+ // type 2, no spec suffix
+ @Property(name = "prefix{.abc.?}.suffix")
+ private String type2NoSpecSuffix;
+
+ // type 2, all components
+ @Property(name = "prefix.{abc.?.def.}suffix")
+ private String type2Both;
+
+ // type 2, other type
+ @Property(name = "a.{abc.?.def.}long")
+ private long type2Long;
+
+ public Config(String specialization, Properties props) throws PropertyException {
+ super(specialization, props);
+ }
+ };
+
+ props.setProperty("prefix.suffix", "no.spec");
+ props.setProperty("no.spec.bool", "true");
+ props.setProperty("world.suffix", "type1.no.prefix");
+ props.setProperty("prefix.world", "type1.no.suffix");
+ props.setProperty("prefix.world.suffix", "type1.both");
+ props.setProperty("an.world.int", "200");
+ props.setProperty("abc.world.def.suffix", "type2.no.prefix");
+ props.setProperty("prefix.abc.world.def", "type2.no.suffix");
+ props.setProperty("prefix.world.def.suffix", "type2.no.spec.prefix");
+ props.setProperty("prefix.abc.world.suffix", "type2.no.spec.suffix");
+ props.setProperty("prefix.abc.world.def.suffix", "type2.both");
+ props.setProperty("a.abc.world.def.long", "3000");
+
+ Config cfg = new Config("world", props);
+
+ assertEquals("no.spec", cfg.noSpec);
+ assertEquals(true, cfg.noSpecBool);
+ assertEquals("type1.no.prefix", cfg.type1NoPrefix);
+ assertEquals("type1.no.suffix", cfg.type1NoSuffix);
+ assertEquals("type1.both", cfg.type1Both);
+ assertEquals(200, cfg.type1Int);
+ assertEquals("type2.no.prefix", cfg.type2NoPrefix);
+ assertEquals("type2.no.suffix", cfg.type2NoSuffix);
+ assertEquals("type2.no.spec.prefix", cfg.type2NoSpecPrefix);
+ assertEquals("type2.no.spec.suffix", cfg.type2NoSpecSuffix);
+ assertEquals("type2.both", cfg.type2Both);
+ assertEquals(3000L, cfg.type2Long);
+ }
+ @Test
+ public void testGetRawPropertyValue_Type2_Generalized() throws PropertyException {
+ class Config extends SpecPropertyConfiguration {
+
+ // type 2, all components
+ @Property(name = "prefix.{abc.?.def.}suffix")
+ private String value;
+
+ public Config(String specialization, Properties props) throws PropertyException {
+ super(specialization, props);
+ }
+ };
+
+ props.setProperty("prefix.suffix", "no.spec");
+
+ Config cfg = new Config("world", props);
+
+ assertEquals("no.spec", cfg.value);
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#getRawPropertyValue(java.util.Properties, java.lang.String)}.
+ * @throws PropertyException
+ */
+ @Test(expected = PropertyMissingException.class)
+ public void testGetRawPropertyValue_NotFound() throws PropertyException {
+ class Config extends SpecPropertyConfiguration {
+
+ @Property(name = "not.found")
+ private String notFound;
+
+ public Config(String specialization, Properties props) throws PropertyException {
+ super(specialization, props);
+ }
+ };
+
+ new Config("not found", props);
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#SpecPropertyConfiguration(java.lang.String)}.
+ * @throws PropertyException
+ */
+ @Test
+ public void testSpecPropertyConfigurationString() throws PropertyException {
+ final String propnm = "string.{$}.prop";
+ final String propval = "hello";
+
+ class Config extends SpecPropertyConfiguration {
+
+ @Property(name = propnm)
+ private String value;
+
+ public Config(String specialization) {
+ super(specialization);
+ }
+ };
+
+ props.setProperty(specialize(propnm, SPEC), propval);
+
+ Config cfg = new Config(SPEC);
+ assertEquals(null, cfg.value);
+
+ cfg.setAllFields(props);
+ assertEquals(propval, cfg.value);
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#SpecPropertyConfiguration(java.lang.String, java.util.Properties)}.
+ * @throws PropertyException
+ */
+ @Test
+ public void testSpecPropertyConfigurationStringProperties() throws PropertyException {
+ final String propnm = "int.{$}.prop";
+ final int propval = 10;
+
+ class Config extends SpecPropertyConfiguration {
+
+ @Property(name = propnm)
+ private int value;
+
+ public Config(String specialization, Properties props) throws PropertyException {
+ super(specialization, props);
+ }
+ };
+
+ props.setProperty(specialize(propnm, SPEC), String.valueOf(propval));
+
+ Config cfg = new Config(SPEC, props);
+
+ assertEquals(propval, cfg.value);
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#generalize(java.lang.String)}.
+ */
+ @Test
+ public void testGeneralize_NoSpec() {
+ final String xyzPdq = "xyz.pdq";
+
+ // no spec
+ assertEquals(xyzPdq, generalize(xyzPdq));
+
+ // spec type 1 throws an exception - we'll test it separately
+
+ // spec type 2
+ assertEquals(xyzPdq, generalize("xyz.{xxx.?.yyy.}pdq"));
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#generalize(java.lang.String)}.
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void testGeneralize_Spec1() {
+ generalize("abc.{$}.def");
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#generalizeType2(java.lang.String, java.util.regex.Matcher)}.
+ */
+ @Test
+ public void testGeneralizeType2() {
+ assertEquals("abc.def", generalize("abc.{xyz?pdq}def"));
+
+ assertEquals("", generalize("{xyz?pdq}"));
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#specialize(java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testSpecialize() {
+ final String spec = "get.spec";
+ final String abcDef = "abc.def";
+
+ // no spec
+ assertEquals(abcDef, specialize(abcDef, spec));
+
+ // spec type 1
+ assertEquals("abc.get.spec.def", specialize("abc.{$}.def", spec));
+
+ // spec type 2
+ assertEquals("abc.xxx.get.spec.yyy.def", specialize("abc.{xxx.?.yyy.}def", spec));
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#specializeType1(java.lang.String, java.lang.String, java.util.regex.Matcher)}.
+ */
+ @Test
+ public void testSpecializeType1() {
+ final String spec = "spec1";
+
+ // no prefix
+ assertEquals("spec1.def", specialize("{$}.def", spec));
+
+ // no suffix
+ assertEquals("abc.spec1", specialize("abc.{$}", spec));
+
+ // with both prefix and suffix
+ assertEquals("abc.spec1.def", specialize("abc.{$}.def", spec));
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.SpecPropertyConfiguration#specializeType2(java.lang.String, java.lang.String, java.util.regex.Matcher)}.
+ */
+ @Test
+ public void testSpecializeType2() {
+ final String spec = "spec2";
+
+ // no prefix
+ assertEquals("xxx.spec2.yyy.def", specialize("{xxx.?.yyy.}def", spec));
+
+ // no suffix
+ assertEquals("abc.xxx.spec2.yyy", specialize("abc{.xxx.?.yyy}", spec));
+
+ // no spec prefix
+ assertEquals("abc.spec2.yyy.def", specialize("abc.{?.yyy.}def", spec));
+
+ // no spec suffix
+ assertEquals("abc.xxx.spec2.def", specialize("abc.{xxx.?}.def", spec));
+
+ // no components
+ assertEquals(spec, specialize("{?}", spec));
+
+ // all components
+ assertEquals("abc.xxx.spec2.yyy.def", specialize("abc.{xxx.?.yyy.}def", spec));
+ }
+
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/properties/exception/BasicPropertyExceptionTester.java b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/BasicPropertyExceptionTester.java
new file mode 100644
index 00000000..1e5fcfcd
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/BasicPropertyExceptionTester.java
@@ -0,0 +1,130 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine - Common Modules
+ * ================================================================================
+ * Copyright (C) 2018 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.onap.policy.common.utils.properties.exception;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import org.hamcrest.CoreMatchers;
+
+/**
+ * Superclass used to test subclasses of {@link PropertyException}.
+ */
+public class BasicPropertyExceptionTester {
+
+ /**
+ * The "message" that's passed each time an exception is constructed.
+ */
+ protected static final String MESSAGE = "some error";
+
+ /**
+ * The "throwable" that's passed each time an exception is constructed.
+ */
+ protected static final Throwable THROWABLE = new Throwable();
+
+ /**
+ * Name of the "property" to be passed each time an exception is constructed.
+ */
+ protected static final String PROPERTY = "myName";
+
+ /**
+ * Name of the "property" field.
+ */
+ protected static final String FIELD = "PROPERTY";
+
+ /*
+ * Methods to perform various tests on the except subclass.
+ */
+
+ protected void doTestPropertyExceptionStringField_AllPopulated(PropertyException ex) {
+ standardTests(ex);
+ }
+
+ protected void doTestPropertyExceptionStringField_NullProperty(PropertyException ex) {
+ assertEquals(null, ex.getPropertyName());
+ assertEquals(FIELD, ex.getFieldName());
+ assertNotNull(ex.getMessage());
+ assertNotNull(ex.toString());
+ }
+
+ protected void doTestPropertyExceptionStringField_NullField(PropertyException ex) {
+ assertEquals(PROPERTY, ex.getPropertyName());
+ assertEquals(null, ex.getFieldName());
+ assertNotNull(ex.getMessage());
+ assertNotNull(ex.toString());
+ }
+
+ protected void doTestPropertyExceptionStringField_BothNull(PropertyException ex) {
+ assertEquals(null, ex.getPropertyName());
+ assertEquals(null, ex.getFieldName());
+ assertNotNull(ex.getMessage());
+ assertNotNull(ex.toString());
+ }
+
+ protected void doTestPropertyExceptionStringFieldString(PropertyException ex) {
+ standardTests(ex);
+ standardMessageTests(ex);
+ }
+
+ protected void doTestPropertyExceptionStringFieldThrowable(PropertyException ex) {
+ standardTests(ex);
+ standardThrowableTests(ex);
+ }
+
+ protected void doTestPropertyExceptionStringFieldStringThrowable(PropertyException ex) {
+ standardTests(ex);
+ standardMessageTests(ex);
+ standardThrowableTests(ex);
+ }
+
+ /**
+ * Performs standard tests that should apply to all subclasses.
+ *
+ * @param ex exception to test
+ */
+ protected void standardTests(PropertyException ex) {
+ assertEquals(PROPERTY, ex.getPropertyName());
+ assertEquals(FIELD, ex.getFieldName());
+ assertNotNull(ex.getMessage());
+ assertNotNull(ex.toString());
+ }
+
+ /**
+ * Performs standard tests for exceptions that were provided a message in their
+ * constructor.
+ *
+ * @param ex exception to test
+ */
+ protected void standardMessageTests(PropertyException ex) {
+ assertThat(ex.getMessage(), CoreMatchers.endsWith(MESSAGE));
+ }
+
+ /**
+ * Performs standard tests for exceptions that were provided a throwable in their
+ * constructor.
+ *
+ * @param ex exception to test
+ */
+ protected void standardThrowableTests(PropertyException ex) {
+ assertEquals(THROWABLE, ex.getCause());
+ }
+
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyAccessExceptionTest.java b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyAccessExceptionTest.java
new file mode 100644
index 00000000..304df9df
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyAccessExceptionTest.java
@@ -0,0 +1,66 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine - Common Modules
+ * ================================================================================
+ * Copyright (C) 2018 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.onap.policy.common.utils.properties.exception;
+
+import org.junit.Test;
+
+/**
+ *
+ */
+public class PropertyAccessExceptionTest extends BasicPropertyExceptionTester {
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.exception.PropertyAccessException#PropertyAccessException(java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testPropertyAccessExceptionStringField() {
+ doTestPropertyExceptionStringField_AllPopulated( new PropertyAccessException(PROPERTY, FIELD));
+ doTestPropertyExceptionStringField_NullProperty( new PropertyAccessException(null, FIELD));
+ doTestPropertyExceptionStringField_NullField( new PropertyAccessException(PROPERTY, null));
+ doTestPropertyExceptionStringField_BothNull( new PropertyAccessException(null, null));
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.exception.PropertyAccessException#PropertyAccessException(java.lang.String, java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testPropertyAccessExceptionStringFieldString() {
+ doTestPropertyExceptionStringFieldString(new PropertyAccessException(PROPERTY, FIELD, MESSAGE));
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.exception.PropertyAccessException#PropertyAccessException(java.lang.String, java.lang.String, java.lang.Throwable)}.
+ */
+ @Test
+ public void testPropertyAccessExceptionStringFieldThrowable() {
+ doTestPropertyExceptionStringFieldThrowable(new PropertyAccessException(PROPERTY, FIELD, THROWABLE));
+ }
+
+ /**
+ * Test method for {@link org.onap.policy.common.utils.properties.exception.PropertyAccessException#PropertyAccessException(java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable)}.
+ */
+ @Test
+ public void testPropertyAccessExceptionStringFieldStringThrowable() {
+ doTestPropertyExceptionStringFieldStringThrowable(
+ new PropertyAccessException(PROPERTY, FIELD, MESSAGE, THROWABLE));
+ }
+
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyAnnotationExceptionTest.java b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyAnnotationExceptionTest.java
new file mode 100644
index 00000000..2c033084
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyAnnotationExceptionTest.java
@@ -0,0 +1,70 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine - Common Modules
+ * ================================================================================
+ * Copyright (C) 2018 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.onap.policy.common.utils.properties.exception;
+
+import org.junit.Test;
+
+/**
+ *
+ */
+public class PropertyAnnotationExceptionTest extends BasicPropertyExceptionTester {
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testPropertyExceptionStringField() {
+ doTestPropertyExceptionStringField_AllPopulated(new PropertyAnnotationException(PROPERTY, FIELD));
+ doTestPropertyExceptionStringField_NullProperty(new PropertyAnnotationException(null, FIELD));
+ doTestPropertyExceptionStringField_NullField(new PropertyAnnotationException(PROPERTY, null));
+ doTestPropertyExceptionStringField_BothNull(new PropertyAnnotationException(null, null));
+ }
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testPropertyExceptionStringFieldString() {
+ doTestPropertyExceptionStringFieldString(new PropertyAnnotationException(PROPERTY, FIELD, MESSAGE));
+ }
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String, java.lang.Throwable)}.
+ */
+ @Test
+ public void testPropertyExceptionStringFieldThrowable() {
+ doTestPropertyExceptionStringFieldThrowable(new PropertyAnnotationException(PROPERTY, FIELD, THROWABLE));
+ }
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable)}.
+ */
+ @Test
+ public void testPropertyExceptionStringFieldStringThrowable() {
+ doTestPropertyExceptionStringFieldStringThrowable(
+ new PropertyAnnotationException(PROPERTY, FIELD, MESSAGE, THROWABLE));
+ }
+
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyExceptionTest.java b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyExceptionTest.java
new file mode 100644
index 00000000..18186ba2
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyExceptionTest.java
@@ -0,0 +1,69 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine - Common Modules
+ * ================================================================================
+ * Copyright (C) 2018 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.onap.policy.common.utils.properties.exception;
+
+import org.junit.Test;
+
+/**
+ *
+ */
+public class PropertyExceptionTest extends BasicPropertyExceptionTester {
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testPropertyExceptionStringField() {
+ doTestPropertyExceptionStringField_AllPopulated(new PropertyException(PROPERTY, FIELD));
+ doTestPropertyExceptionStringField_NullProperty(new PropertyException(null, FIELD));
+ doTestPropertyExceptionStringField_NullField(new PropertyException(PROPERTY, null));
+ doTestPropertyExceptionStringField_BothNull(new PropertyException(null, null));
+ }
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testPropertyExceptionStringFieldString() {
+ doTestPropertyExceptionStringFieldString(new PropertyException(PROPERTY, FIELD, MESSAGE));
+ }
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String, java.lang.Throwable)}.
+ */
+ @Test
+ public void testPropertyExceptionStringFieldThrowable() {
+ doTestPropertyExceptionStringFieldThrowable(new PropertyException(PROPERTY, FIELD, THROWABLE));
+ }
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable)}.
+ */
+ @Test
+ public void testPropertyExceptionStringFieldStringThrowable() {
+ doTestPropertyExceptionStringFieldStringThrowable(new PropertyException(PROPERTY, FIELD, MESSAGE, THROWABLE));
+ }
+
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyInvalidExceptionTest.java b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyInvalidExceptionTest.java
new file mode 100644
index 00000000..f83b7ed3
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyInvalidExceptionTest.java
@@ -0,0 +1,70 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine - Common Modules
+ * ================================================================================
+ * Copyright (C) 2018 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.onap.policy.common.utils.properties.exception;
+
+import org.junit.Test;
+
+/**
+ *
+ */
+public class PropertyInvalidExceptionTest extends BasicPropertyExceptionTester {
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testPropertyExceptionStringField() {
+ doTestPropertyExceptionStringField_AllPopulated(new PropertyInvalidException(PROPERTY, FIELD));
+ doTestPropertyExceptionStringField_NullProperty(new PropertyInvalidException(null, FIELD));
+ doTestPropertyExceptionStringField_NullField(new PropertyInvalidException(PROPERTY, null));
+ doTestPropertyExceptionStringField_BothNull(new PropertyInvalidException(null, null));
+ }
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testPropertyExceptionStringFieldString() {
+ doTestPropertyExceptionStringFieldString(new PropertyInvalidException(PROPERTY, FIELD, MESSAGE));
+ }
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String, java.lang.Throwable)}.
+ */
+ @Test
+ public void testPropertyExceptionStringFieldThrowable() {
+ doTestPropertyExceptionStringFieldThrowable(new PropertyInvalidException(PROPERTY, FIELD, THROWABLE));
+ }
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable)}.
+ */
+ @Test
+ public void testPropertyExceptionStringFieldStringThrowable() {
+ doTestPropertyExceptionStringFieldStringThrowable(
+ new PropertyInvalidException(PROPERTY, FIELD, MESSAGE, THROWABLE));
+ }
+
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyMissingExceptionTest.java b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyMissingExceptionTest.java
new file mode 100644
index 00000000..f99ddd93
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/properties/exception/PropertyMissingExceptionTest.java
@@ -0,0 +1,42 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine - Common Modules
+ * ================================================================================
+ * Copyright (C) 2018 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.onap.policy.common.utils.properties.exception;
+
+import org.junit.Test;
+
+/**
+ *
+ */
+public class PropertyMissingExceptionTest extends BasicPropertyExceptionTester {
+
+ /**
+ * Test method for
+ * {@link org.onap.policy.common.utils.properties.exception.PropertyException#PropertyException(java.lang.String, java.lang.String)}.
+ */
+ @Test
+ public void testPropertyExceptionStringField() {
+ doTestPropertyExceptionStringField_AllPopulated(new PropertyMissingException(PROPERTY, FIELD));
+ doTestPropertyExceptionStringField_NullProperty(new PropertyMissingException(null, FIELD));
+ doTestPropertyExceptionStringField_NullField(new PropertyMissingException(PROPERTY, null));
+ doTestPropertyExceptionStringField_BothNull(new PropertyMissingException(null, null));
+ }
+
+}