2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2019 Nordix Foundation.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.rest.jpa;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertFalse;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertNull;
29 import static org.junit.Assert.assertTrue;
31 import com.att.research.xacml.api.pip.PIPException;
32 import com.att.research.xacml.std.pip.engines.StdConfigurableEngine;
33 import com.att.research.xacml.util.XACMLProperties;
35 import java.util.Date;
36 import java.util.HashSet;
37 import java.util.LinkedHashSet;
38 import java.util.Properties;
41 import org.junit.Test;
43 public class PipConfigurationTest {
45 public void testConfig() throws PIPException {
46 String value = "testVal";
47 PipConfigParam param = new PipConfigParam();
48 param.setParamName(value);
49 param.setParamValue(value);
50 Set<PipConfigParam> params = new HashSet<PipConfigParam>();
51 PipResolver resolver = new PipResolver();
52 resolver.setClassname(value);
53 resolver.setName(value);
55 Set<PipResolver> resolvers = new HashSet<PipResolver>();
56 resolvers.add(resolver);
57 Properties props = new Properties();
60 props.setProperty(id + ".classname", value);
61 props.setProperty(XACMLProperties.PROP_PIP_ENGINES, id);
64 PipConfiguration config = new PipConfiguration();
65 assertNotNull(config);
66 config.setPipconfigParams(params);
67 config.setPipresolvers(resolvers);
68 PipConfiguration config2 = new PipConfiguration(config, value);
69 assertNotNull(config2);
72 PipConfiguration config3 = new PipConfiguration(id, props);
73 assertNotNull(config3);
74 PipConfiguration config4 = new PipConfiguration(id, props, value);
75 assertNotNull(config4);
79 assertEquals(1, config.getId());
80 config.setDescription(value);
81 assertEquals(value, config.getDescription());
83 assertEquals(id, config.getName());
84 config.setClassname(value);
85 assertEquals(value, config.getClassname());
86 config.setIssuer(value);
87 assertEquals(value, config.getIssuer());
88 config.setReadOnlyFlag(true);
89 assertEquals('1', config.getReadOnly());
90 config.setReadOnly('0');
91 assertEquals('0', config.getReadOnly());
92 assertEquals(false, config.isReadOnly());
93 config.setRequiresResolvers('t');
94 assertEquals('t', config.getRequiresResolvers());
95 config.setReadOnlyFlag(false);
96 assertEquals('0', config.getReadOnly());
98 PipType type = new PipType();
99 config.setPiptype(type);
100 assertEquals(type, config.getPiptype());
101 config.setRequiresResolversFlag(false);
102 assertEquals('0', config.getRequiresResolvers());
103 config.setCreatedBy(value);
104 assertEquals(value, config.getCreatedBy());
106 Date date = new Date();
107 config.setCreatedDate(date);
108 assertEquals(date, config.getCreatedDate());
109 config.setModifiedBy(value);
110 assertEquals(value, config.getModifiedBy());
111 config.setModifiedDate(date);
112 assertEquals(date, config.getModifiedDate());
113 config.setRequiresResolversFlag(true);
114 assertTrue(config.requiresResolvers());
115 config.setRequiresResolversFlag(false);
116 assertFalse(config.requiresResolvers());
117 assertEquals(8, config.getConfiguration(id).size());
118 assertEquals(9, config.generateProperties(id).size());
120 // Test remove and clear
121 assertEquals(param, config.removePipconfigParam(param));
122 assertNull(config.removePipconfigParam(null));
123 config.clearConfigParams();
124 assertEquals(0, config.getPipconfigParams().size());
125 config.removePipresolver(resolver);
126 assertEquals(0, config.getPipresolvers().size());
128 assertEquals(param, config.addPipconfigParam(param));
129 config.clearConfigParams();
130 assertEquals(0, config.getPipconfigParams().size());
131 config.removePipresolver(resolver);
132 assertEquals(0, config.getPipresolvers().size());
135 assertEquals(1, PipConfiguration.importPipConfigurations(props).size());
136 config.readProperties(id, props);
137 assertEquals(id, config.getName());
140 String configString = config.toString().replaceAll("@[0-9a-f]*", "");
141 assertEquals(322, configString.length());
143 assertEquals(0, PipConfiguration.importPipConfigurations(new Properties()).size());
145 Properties otherProperties = new Properties();
146 otherProperties.put(XACMLProperties.PROP_PIP_ENGINES, "");
147 assertEquals(0, PipConfiguration.importPipConfigurations(otherProperties).size());
149 otherProperties.put(XACMLProperties.PROP_PIP_ENGINES, "badvalue:evenworse");
150 assertEquals(0, PipConfiguration.importPipConfigurations(otherProperties).size());
152 // Test readProperties
153 props.setProperty(id + "." + StdConfigurableEngine.PROP_ISSUER, "himself");
154 props.setProperty(id + ".resolvers", "");
155 props.setProperty(id + ".resolver", "");
156 props.setProperty(id + ".anotherproperty", "");
157 config.readProperties(id, props);
158 assertEquals("himself", config.getIssuer());
159 assertEquals(49, config.getRequiresResolvers());
161 props.setProperty(id + ".resolvers", "aaa");
162 assertThatThrownBy(() -> config.readProperties(id, props)).hasMessage("PIP Engine defined without a classname");
164 props.setProperty(id + ".resolver.aaa.classname", "somewhere.over.the.Rainbow");
165 props.setProperty(id + ".resolver.aaa." + StdConfigurableEngine.PROP_NAME, "Dorothy");
166 props.setProperty(id + ".resolver.aaa." + StdConfigurableEngine.PROP_DESCRIPTION, "Oz");
167 props.setProperty(id + ".resolver.aaa." + StdConfigurableEngine.PROP_ISSUER, "Wizard");
168 props.setProperty(id + ".resolver.aaa.witch", "North");
169 config.readProperties(id, props);
171 PipResolver pipResolver = config.getPipresolvers().iterator().next();
173 assertEquals("somewhere.over.the.Rainbow", pipResolver.getClassname());
174 assertEquals("Dorothy", pipResolver.getName());
175 assertEquals("Oz", pipResolver.getDescription());
176 assertEquals("Wizard", pipResolver.getIssuer());
178 // Test getConfiguration
179 assertEquals(10, config.getConfiguration(null).size());
180 assertEquals(10, config.getConfiguration("kansas").size());
181 assertEquals(10, config.getConfiguration("kansas.").size());
182 config.setDescription(null);
183 assertEquals(9, config.getConfiguration(null).size());
184 config.setIssuer(null);
185 assertEquals(8, config.getConfiguration(null).size());
186 config.setPipresolvers(new LinkedHashSet<PipResolver>());
187 assertEquals(3, config.getConfiguration(null).size());
189 // Test generateProperties
190 assertEquals(4, config.generateProperties(null).size());
191 assertEquals(4, config.generateProperties("kansas").size());
192 assertEquals(4, config.generateProperties("kansas.").size());
193 config.setIssuer("");
194 assertEquals(4, config.generateProperties("kansas.").size());