2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019-2024 Nordix Foundation.
4 * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.models.pdp.concepts;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.stream.Collectors;
31 import org.junit.jupiter.api.BeforeEach;
32 import org.junit.jupiter.api.Test;
33 import org.onap.policy.common.utils.coder.CoderException;
34 import org.onap.policy.common.utils.coder.StandardCoder;
35 import org.onap.policy.common.utils.resources.ResourceUtils;
36 import org.onap.policy.models.pdp.enums.PdpState;
37 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
40 * Test of the {@link PdpGroupFilter} class.
42 * @author Liam Fallon (liam.fallon@est.tech)
44 class PdpGroupFilterTest {
45 private static final String POLICY_TYPE3 = "policy.type.3";
46 private static final String POLICY_TYPE2 = "policy.type.2";
47 private static final String POLICY_TYPE1 = "policy.type.1";
48 private static final String POLICY_TYPE0 = "policy.type.0";
49 private static final String POLICY3 = "Policy3";
50 private static final String POLICY2 = "Policy2";
51 private static final String POLICY1 = "Policy1";
52 private static final String POLICY0 = "Policy0";
53 private static final String NON_EXISTANT = "Nonexistant";
54 private static final String VERSION9 = "9.9.9";
55 private static final String VERSION7 = "7.8.9";
56 private static final String VERSION4 = "4.5.6";
57 private static final String VERSION1 = "1.2.3";
58 private static final String VERSION0 = "0.1.2";
59 private List<PdpGroup> pdpGroupList;
62 * Set up a PDP group list for filtering.
64 * @throws CoderException on JSON decoding errors
67 void setupPdpGroupList() throws CoderException {
68 String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroupsForFiltering.json");
69 PdpGroups pdpGroups = new StandardCoder().decode(originalJson, PdpGroups.class);
70 pdpGroupList = pdpGroups.getGroups();
75 PdpGroupFilter filter = PdpGroupFilter.builder().build();
77 assertThatThrownBy(() -> {
79 }).hasMessageMatching("originalList is marked .*ull but is null");
83 void testFilterNothing() {
84 PdpGroupFilter filter = PdpGroupFilter.builder().build();
86 List<PdpGroup> filteredList = filter.filter(pdpGroupList);
87 assertTrue(filteredList.containsAll(pdpGroupList));
91 void testFilterName() {
92 PdpGroupFilter filter = PdpGroupFilter.builder().name("PdpGroup0").build();
93 List<PdpGroup> filteredList = filter.filter(pdpGroupList);
94 assertEquals(1, filteredList.size());
96 filter = PdpGroupFilter.builder().name("PdpGroup1").build();
97 filteredList = filter.filter(pdpGroupList);
98 assertEquals(1, filteredList.size());
100 filter = PdpGroupFilter.builder().name("PdpGroup20").build();
101 filteredList = filter.filter(pdpGroupList);
102 assertEquals(1, filteredList.size());
104 filter = PdpGroupFilter.builder().build();
105 filteredList = filter.filter(pdpGroupList);
106 assertEquals(5, filteredList.size());
108 filter = PdpGroupFilter.builder().name("PdpGroup0").build();
109 filteredList = filter.filter(pdpGroupList);
110 assertEquals(1, filteredList.size());
112 filter = PdpGroupFilter.builder().name("PdpGroup19").build();
113 filteredList = filter.filter(pdpGroupList);
114 assertEquals(0, filteredList.size());
118 void testFilterPdpGroupState() {
119 PdpGroupFilter filter = PdpGroupFilter.builder().groupState(PdpState.ACTIVE).build();
120 List<PdpGroup> filteredList = filter.filter(pdpGroupList);
121 assertEquals(1, filteredList.size());
123 filter = PdpGroupFilter.builder().groupState(PdpState.PASSIVE).build();
124 filteredList = filter.filter(pdpGroupList);
125 assertEquals(2, filteredList.size());
127 filter = PdpGroupFilter.builder().groupState(PdpState.TEST).build();
128 filteredList = filter.filter(pdpGroupList);
129 assertEquals(1, filteredList.size());
131 filter = PdpGroupFilter.builder().groupState(PdpState.SAFE).build();
132 filteredList = filter.filter(pdpGroupList);
133 assertEquals(1, filteredList.size());
135 filter = PdpGroupFilter.builder().groupState(PdpState.TERMINATED).build();
136 filteredList = filter.filter(pdpGroupList);
137 assertEquals(0, filteredList.size());
141 void testFilterPdpType() {
142 PdpGroupFilter filter = PdpGroupFilter.builder().pdpType("APEX").build();
143 List<PdpGroup> filteredList = filter.filter(pdpGroupList);
144 assertEquals(5, filteredList.size());
146 filter = PdpGroupFilter.builder().pdpType("DROOLS").build();
147 filteredList = filter.filter(pdpGroupList);
148 assertEquals(2, filteredList.size());
150 filter = PdpGroupFilter.builder().pdpType("XACML").build();
151 filteredList = filter.filter(pdpGroupList);
152 assertEquals(1, filteredList.size());
156 void testFilterPdpState() {
157 PdpGroupFilter filter = PdpGroupFilter.builder().pdpState(PdpState.ACTIVE).build();
158 List<PdpGroup> filteredList = filter.filter(pdpGroupList);
159 assertEquals(3, filteredList.size());
161 filter = PdpGroupFilter.builder().pdpState(PdpState.PASSIVE).build();
162 filteredList = filter.filter(pdpGroupList);
163 assertEquals(3, filteredList.size());
165 filter = PdpGroupFilter.builder().pdpState(PdpState.SAFE).build();
166 filteredList = filter.filter(pdpGroupList);
167 assertEquals(2, filteredList.size());
169 filter = PdpGroupFilter.builder().pdpState(PdpState.TEST).build();
170 filteredList = filter.filter(pdpGroupList);
171 assertEquals(2, filteredList.size());
175 void testFilterPolicyType() {
176 List<ToscaConceptIdentifier> identifierList = new ArrayList<>();
178 identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
179 PdpGroupFilter filter =
180 PdpGroupFilter.builder().policyTypeList(identifierList).build();
181 List<PdpGroup> filteredList = filter.filter(pdpGroupList);
182 assertEquals(0, filteredList.size());
183 identifierList.clear();
185 // don't match wild cards
186 identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
187 filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
188 final List<PdpGroup> wildCards =
189 pdpGroupList.stream().map(this::makeWildCardPolicyTypes).collect(Collectors.toList());
190 filteredList = filter.filter(wildCards);
191 assertEquals(0, filteredList.size());
192 identifierList.clear();
195 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
196 filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
197 filteredList = filter.filter(wildCards);
198 assertEquals(4, filteredList.size());
199 identifierList.clear();
201 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
202 filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
203 filteredList = filter.filter(pdpGroupList);
204 assertEquals(4, filteredList.size());
205 identifierList.clear();
207 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
208 filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
209 filteredList = filter.filter(pdpGroupList);
210 assertEquals(4, filteredList.size());
211 identifierList.clear();
213 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE2, VERSION7));
214 filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
215 filteredList = filter.filter(pdpGroupList);
216 assertEquals(2, filteredList.size());
217 identifierList.clear();
219 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE3, VERSION0));
220 filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
221 filteredList = filter.filter(pdpGroupList);
222 assertEquals(2, filteredList.size());
223 identifierList.clear();
225 identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
226 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION9));
227 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
228 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
229 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE2, VERSION7));
230 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE3, VERSION0));
231 filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
232 filteredList = filter.filter(pdpGroupList);
233 assertEquals(5, filteredList.size());
235 filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
236 filteredList = filter.filter(pdpGroupList);
237 assertEquals(0, filteredList.size());
239 identifierList.clear();
240 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
241 filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
242 filteredList = filter.filter(pdpGroupList);
243 assertEquals(2, filteredList.size());
245 identifierList.clear();
246 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
247 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
248 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE2, VERSION7));
249 filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
250 filteredList = filter.filter(pdpGroupList);
251 assertEquals(1, filteredList.size());
253 identifierList.clear();
254 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
255 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
256 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE3, VERSION0));
257 filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
258 filteredList = filter.filter(pdpGroupList);
259 assertEquals(1, filteredList.size());
261 identifierList.clear();
262 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
263 identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE3, VERSION0));
264 filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
265 filteredList = filter.filter(pdpGroupList);
266 assertEquals(1, filteredList.size());
270 * Makes a clone of a PdpGroup, changing all occurrences of supported policy type,
271 * "policy.type.0", to a wild card type, "policy.type.*".
273 * @param group group to be cloned
274 * @return a new PdpGroup containing wild card policy types
276 private PdpGroup makeWildCardPolicyTypes(PdpGroup group) {
277 PdpGroup newGroup = new PdpGroup(group);
279 for (PdpSubGroup subgroup : newGroup.getPdpSubgroups()) {
280 for (ToscaConceptIdentifier subType : subgroup.getSupportedPolicyTypes()) {
281 if (POLICY_TYPE0.equals(subType.getName())) {
282 subType.setName("policy.type.*");
291 void testFilterPolicy() {
292 List<ToscaConceptIdentifier> identifierList = new ArrayList<>();
294 identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
295 PdpGroupFilter filter =
296 PdpGroupFilter.builder().policyList(identifierList).build();
297 List<PdpGroup> filteredList = filter.filter(pdpGroupList);
298 assertEquals(0, filteredList.size());
299 identifierList.clear();
301 identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION9));
302 filter = PdpGroupFilter.builder().policyList(identifierList).build();
303 filteredList = filter.filter(pdpGroupList);
304 assertEquals(0, filteredList.size());
305 identifierList.clear();
307 identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION4));
308 filter = PdpGroupFilter.builder().policyList(identifierList).build();
309 filteredList = filter.filter(pdpGroupList);
310 assertEquals(4, filteredList.size());
311 identifierList.clear();
313 identifierList.add(new ToscaConceptIdentifier(POLICY1, VERSION4));
314 filter = PdpGroupFilter.builder().policyList(identifierList).build();
315 filteredList = filter.filter(pdpGroupList);
316 assertEquals(1, filteredList.size());
317 identifierList.clear();
319 identifierList.add(new ToscaConceptIdentifier(POLICY2, VERSION4));
320 filter = PdpGroupFilter.builder().policyList(identifierList).build();
321 filteredList = filter.filter(pdpGroupList);
322 assertEquals(2, filteredList.size());
323 identifierList.clear();
325 identifierList.add(new ToscaConceptIdentifier(POLICY3, VERSION1));
326 filter = PdpGroupFilter.builder().policyList(identifierList).build();
327 filteredList = filter.filter(pdpGroupList);
328 assertEquals(1, filteredList.size());
329 identifierList.clear();
331 identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
332 identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION9));
333 identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION4));
334 identifierList.add(new ToscaConceptIdentifier(POLICY1, VERSION4));
335 identifierList.add(new ToscaConceptIdentifier(POLICY2, VERSION4));
336 identifierList.add(new ToscaConceptIdentifier(POLICY3, VERSION1));
337 filter = PdpGroupFilter.builder().policyList(identifierList).build();
338 filteredList = filter.filter(pdpGroupList);
339 assertEquals(5, filteredList.size());
341 filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
342 filteredList = filter.filter(pdpGroupList);
343 assertEquals(0, filteredList.size());
345 identifierList.clear();
346 identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION4));
347 filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
348 filteredList = filter.filter(pdpGroupList);
349 assertEquals(3, filteredList.size());
351 identifierList.clear();
352 identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION4));
353 identifierList.add(new ToscaConceptIdentifier(POLICY1, VERSION4));
354 filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
355 filteredList = filter.filter(pdpGroupList);
356 assertEquals(1, filteredList.size());
358 identifierList.clear();
359 identifierList.add(new ToscaConceptIdentifier(POLICY2, VERSION4));
360 filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
361 filteredList = filter.filter(pdpGroupList);
362 assertEquals(1, filteredList.size());
364 identifierList.clear();
365 identifierList.add(new ToscaConceptIdentifier(POLICY2, VERSION4));
366 identifierList.add(new ToscaConceptIdentifier(POLICY3, VERSION1));
367 filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
368 filteredList = filter.filter(pdpGroupList);
369 assertEquals(1, filteredList.size());