75ec4d169d0797972487c88e53efef0f7d805274
[policy/models.git] / models-pdp / src / test / java / org / onap / policy / models / pdp / concepts / PdpGroupFilterTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.pdp.concepts;
22
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertTrue;
26
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.onap.policy.common.utils.coder.CoderException;
33 import org.onap.policy.common.utils.coder.StandardCoder;
34 import org.onap.policy.common.utils.resources.ResourceUtils;
35 import org.onap.policy.models.pdp.enums.PdpState;
36 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
37 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
38
39 /**
40  * Test of the {@link PdpGroupFilter} class.
41  *
42  * @author Liam Fallon (liam.fallon@est.tech)
43  */
44 public class PdpGroupFilterTest {
45     private List<PdpGroup> pdpGroupList;
46
47     /**
48      * Set up a PDP group list for filtering.
49      *
50      * @throws CoderException on JSON decoding errors
51      */
52     @Before
53     public void setupPdpGroupList() throws CoderException {
54         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroupsForFiltering.json");
55         PdpGroups pdpGroups = new StandardCoder().decode(originalJson, PdpGroups.class);
56         pdpGroupList = pdpGroups.getGroups();
57     }
58
59     @Test
60     public void testNullList() {
61         PdpGroupFilter filter = PdpGroupFilter.builder().build();
62
63         assertThatThrownBy(() -> {
64             filter.filter(null);
65         }).hasMessage("originalList is marked @NonNull but is null");
66     }
67
68     @Test
69     public void testFilterNothing() {
70         PdpGroupFilter filter = PdpGroupFilter.builder().build();
71
72         List<PdpGroup> filteredList = filter.filter(pdpGroupList);
73         assertTrue(filteredList.containsAll(pdpGroupList));
74     }
75
76     @Test
77     public void testFilterLatestVersion() {
78         PdpGroupFilter filter = PdpGroupFilter.builder().version(PdpGroupFilter.LATEST_VERSION).build();
79
80         List<PdpGroup> filteredList = filter.filter(pdpGroupList);
81         assertEquals(2, filteredList.size());
82         assertEquals("1.2.4", filteredList.get(0).getVersion());
83         assertEquals("1.2.3", filteredList.get(1).getVersion());
84     }
85
86     @Test
87     public void testFilterNameVersion() {
88         PdpGroupFilter filter = PdpGroupFilter.builder().name("PdpGroup0").build();
89         List<PdpGroup> filteredList = filter.filter(pdpGroupList);
90         assertEquals(3, filteredList.size());
91
92         filter = PdpGroupFilter.builder().name("PdpGroup1").build();
93         filteredList = filter.filter(pdpGroupList);
94         assertEquals(2, filteredList.size());
95
96         filter = PdpGroupFilter.builder().name("PdpGroup2").build();
97         filteredList = filter.filter(pdpGroupList);
98         assertEquals(0, filteredList.size());
99
100         filter = PdpGroupFilter.builder().version("1.2.3").build();
101         filteredList = filter.filter(pdpGroupList);
102         assertEquals(2, filteredList.size());
103
104         filter = PdpGroupFilter.builder().name("PdpGroup0").version("1.2.3").build();
105         filteredList = filter.filter(pdpGroupList);
106         assertEquals(1, filteredList.size());
107
108         filter = PdpGroupFilter.builder().name("PdpGroup1").version("1.2.9").build();
109         filteredList = filter.filter(pdpGroupList);
110         assertEquals(0, filteredList.size());
111     }
112
113     @Test
114     public void testFilterPdpGroupState() {
115         PdpGroupFilter filter = PdpGroupFilter.builder().groupState(PdpState.ACTIVE).build();
116         List<PdpGroup> filteredList = filter.filter(pdpGroupList);
117         assertEquals(1, filteredList.size());
118
119         filter = PdpGroupFilter.builder().groupState(PdpState.PASSIVE).build();
120         filteredList = filter.filter(pdpGroupList);
121         assertEquals(2, filteredList.size());
122
123         filter = PdpGroupFilter.builder().groupState(PdpState.TEST).build();
124         filteredList = filter.filter(pdpGroupList);
125         assertEquals(1, filteredList.size());
126
127         filter = PdpGroupFilter.builder().groupState(PdpState.SAFE).build();
128         filteredList = filter.filter(pdpGroupList);
129         assertEquals(1, filteredList.size());
130
131         filter = PdpGroupFilter.builder().groupState(PdpState.TERMINATED).build();
132         filteredList = filter.filter(pdpGroupList);
133         assertEquals(0, filteredList.size());
134     }
135
136     @Test
137     public void testFilterPdpType() {
138         PdpGroupFilter filter = PdpGroupFilter.builder().pdpType("APEX").build();
139         List<PdpGroup> filteredList = filter.filter(pdpGroupList);
140         assertEquals(5, filteredList.size());
141
142         filter = PdpGroupFilter.builder().pdpType("DROOLS").build();
143         filteredList = filter.filter(pdpGroupList);
144         assertEquals(2, filteredList.size());
145
146         filter = PdpGroupFilter.builder().pdpType("XACML").build();
147         filteredList = filter.filter(pdpGroupList);
148         assertEquals(1, filteredList.size());
149     }
150
151     @Test
152     public void testFilterPdpState() {
153         PdpGroupFilter filter = PdpGroupFilter.builder().pdpState(PdpState.ACTIVE).build();
154         List<PdpGroup> filteredList = filter.filter(pdpGroupList);
155         assertEquals(3, filteredList.size());
156
157         filter = PdpGroupFilter.builder().pdpState(PdpState.PASSIVE).build();
158         filteredList = filter.filter(pdpGroupList);
159         assertEquals(3, filteredList.size());
160
161         filter = PdpGroupFilter.builder().pdpState(PdpState.SAFE).build();
162         filteredList = filter.filter(pdpGroupList);
163         assertEquals(2, filteredList.size());
164
165         filter = PdpGroupFilter.builder().pdpState(PdpState.TEST).build();
166         filteredList = filter.filter(pdpGroupList);
167         assertEquals(2, filteredList.size());
168     }
169
170     @Test
171     public void testFilterPolicyType() {
172         List<ToscaPolicyTypeIdentifier> identifierList = new ArrayList<>();
173
174         identifierList.add(new ToscaPolicyTypeIdentifier("Nonexistant", "1.2.3"));
175         PdpGroupFilter filter =
176                 PdpGroupFilter.builder().policyTypeList(identifierList).build();
177         List<PdpGroup> filteredList = filter.filter(pdpGroupList);
178         assertEquals(0, filteredList.size());
179         identifierList.clear();
180
181         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.0", "1.2.3"));
182         filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
183         filteredList = filter.filter(pdpGroupList);
184         assertEquals(4, filteredList.size());
185         identifierList.clear();
186
187         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.1", "4.5.6"));
188         filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
189         filteredList = filter.filter(pdpGroupList);
190         assertEquals(4, filteredList.size());
191         identifierList.clear();
192
193         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.2", "7.8.9"));
194         filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
195         filteredList = filter.filter(pdpGroupList);
196         assertEquals(2, filteredList.size());
197         identifierList.clear();
198
199         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.3", "0.1.2"));
200         filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
201         filteredList = filter.filter(pdpGroupList);
202         assertEquals(2, filteredList.size());
203         identifierList.clear();
204
205         identifierList.add(new ToscaPolicyTypeIdentifier("Nonexistant", "1.2.3"));
206         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.0", "9.9.9"));
207         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.0", "1.2.3"));
208         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.1", "4.5.6"));
209         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.2", "7.8.9"));
210         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.3", "0.1.2"));
211         filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
212         filteredList = filter.filter(pdpGroupList);
213         assertEquals(5, filteredList.size());
214
215         filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
216         filteredList = filter.filter(pdpGroupList);
217         assertEquals(0, filteredList.size());
218
219         identifierList.clear();
220         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.0", "1.2.3"));
221         filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
222         filteredList = filter.filter(pdpGroupList);
223         assertEquals(2, filteredList.size());
224
225         identifierList.clear();
226         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.0", "1.2.3"));
227         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.1", "4.5.6"));
228         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.2", "7.8.9"));
229         filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
230         filteredList = filter.filter(pdpGroupList);
231         assertEquals(1, filteredList.size());
232
233         identifierList.clear();
234         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.0", "1.2.3"));
235         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.1", "4.5.6"));
236         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.3", "0.1.2"));
237         filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
238         filteredList = filter.filter(pdpGroupList);
239         assertEquals(1, filteredList.size());
240
241         identifierList.clear();
242         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.1", "4.5.6"));
243         identifierList.add(new ToscaPolicyTypeIdentifier("policy.type.3", "0.1.2"));
244         filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
245         filteredList = filter.filter(pdpGroupList);
246         assertEquals(1, filteredList.size());
247     }
248
249     @Test
250     public void testFilterPolicy() {
251         List<ToscaPolicyIdentifier> identifierList = new ArrayList<>();
252
253         identifierList.add(new ToscaPolicyIdentifier("Nonexistant", "1.2.3"));
254         PdpGroupFilter filter =
255                 PdpGroupFilter.builder().policyList(identifierList).build();
256         List<PdpGroup> filteredList = filter.filter(pdpGroupList);
257         assertEquals(0, filteredList.size());
258         identifierList.clear();
259
260         identifierList.add(new ToscaPolicyIdentifier("Policy0", "9.9.9"));
261         filter = PdpGroupFilter.builder().policyList(identifierList).build();
262         filteredList = filter.filter(pdpGroupList);
263         assertEquals(0, filteredList.size());
264         identifierList.clear();
265
266         identifierList.add(new ToscaPolicyIdentifier("Policy0", "4.5.6"));
267         filter = PdpGroupFilter.builder().policyList(identifierList).build();
268         filteredList = filter.filter(pdpGroupList);
269         assertEquals(4, filteredList.size());
270         identifierList.clear();
271
272         identifierList.add(new ToscaPolicyIdentifier("Policy1", "4.5.6"));
273         filter = PdpGroupFilter.builder().policyList(identifierList).build();
274         filteredList = filter.filter(pdpGroupList);
275         assertEquals(1, filteredList.size());
276         identifierList.clear();
277
278         identifierList.add(new ToscaPolicyIdentifier("Policy2", "4.5.6"));
279         filter = PdpGroupFilter.builder().policyList(identifierList).build();
280         filteredList = filter.filter(pdpGroupList);
281         assertEquals(2, filteredList.size());
282         identifierList.clear();
283
284         identifierList.add(new ToscaPolicyIdentifier("Policy3", "1.2.3"));
285         filter = PdpGroupFilter.builder().policyList(identifierList).build();
286         filteredList = filter.filter(pdpGroupList);
287         assertEquals(1, filteredList.size());
288         identifierList.clear();
289
290         identifierList.add(new ToscaPolicyIdentifier("Nonexistant", "1.2.3"));
291         identifierList.add(new ToscaPolicyIdentifier("Policy0", "9.9.9"));
292         identifierList.add(new ToscaPolicyIdentifier("Policy0", "4.5.6"));
293         identifierList.add(new ToscaPolicyIdentifier("Policy1", "4.5.6"));
294         identifierList.add(new ToscaPolicyIdentifier("Policy2", "4.5.6"));
295         identifierList.add(new ToscaPolicyIdentifier("Policy3", "1.2.3"));
296         filter = PdpGroupFilter.builder().policyList(identifierList).build();
297         filteredList = filter.filter(pdpGroupList);
298         assertEquals(5, filteredList.size());
299
300         filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
301         filteredList = filter.filter(pdpGroupList);
302         assertEquals(0, filteredList.size());
303
304         identifierList.clear();
305         identifierList.add(new ToscaPolicyIdentifier("Policy0", "4.5.6"));
306         filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
307         filteredList = filter.filter(pdpGroupList);
308         assertEquals(3, filteredList.size());
309
310         identifierList.clear();
311         identifierList.add(new ToscaPolicyIdentifier("Policy0", "4.5.6"));
312         identifierList.add(new ToscaPolicyIdentifier("Policy1", "4.5.6"));
313         filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
314         filteredList = filter.filter(pdpGroupList);
315         assertEquals(1, filteredList.size());
316
317         identifierList.clear();
318         identifierList.add(new ToscaPolicyIdentifier("Policy2", "4.5.6"));
319         filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
320         filteredList = filter.filter(pdpGroupList);
321         assertEquals(1, filteredList.size());
322
323         identifierList.clear();
324         identifierList.add(new ToscaPolicyIdentifier("Policy2", "4.5.6"));
325         identifierList.add(new ToscaPolicyIdentifier("Policy3", "1.2.3"));
326         filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
327         filteredList = filter.filter(pdpGroupList);
328         assertEquals(1, filteredList.size());
329     }
330 }