Merge "Add ONAP-XACML StdEngine tests"
[policy/engine.git] / ONAP-REST / src / test / java / org / onap / policy / rest / util / PolicyValidationRequestWrapperTest.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.rest.util;
22
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.assertTrue;
27
28 import java.io.BufferedReader;
29 import java.io.StringReader;
30 import java.util.ArrayList;
31 import java.util.Date;
32 import java.util.LinkedHashMap;
33 import java.util.List;
34 import java.util.Map;
35
36 import javax.servlet.http.HttpServletRequest;
37
38 import org.junit.Test;
39 import org.junit.runner.RunWith;
40 import org.mockito.Mock;
41 import org.mockito.Mockito;
42 import org.mockito.runners.MockitoJUnitRunner;
43 import org.onap.policy.api.AttributeType;
44 import org.onap.policy.api.PolicyClass;
45 import org.onap.policy.api.PolicyConfigType;
46 import org.onap.policy.api.PolicyParameters;
47 import org.onap.policy.api.PolicyType;
48 import org.onap.policy.api.RuleProvider;
49 import org.onap.policy.common.utils.resources.TextFileUtils;
50 import org.onap.policy.rest.adapter.PolicyRestAdapter;
51
52 @RunWith(MockitoJUnitRunner.class)
53 public class PolicyValidationRequestWrapperTest {
54
55     @Mock
56     HttpServletRequest request;
57
58     @Test
59     public void testHttpRequest() throws Exception {
60         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
61
62         assertNull(wrapper.populateRequestParameters((HttpServletRequest) null));
63
64         BufferedReader decisionPolicyReader = new BufferedReader(new StringReader(
65                         TextFileUtils.getTextFileAsString("src/test/resources/policies/DecisionPolicy.json")));
66
67         Mockito.when(request.getReader()).thenReturn(decisionPolicyReader);
68
69         wrapper.populateRequestParameters(request);
70
71         BufferedReader policyJsonTrapFaultReader = new BufferedReader(new StringReader(
72                         TextFileUtils.getTextFileAsString("src/test/resources/policies/PolicyJsonTrapFault.json")));
73
74         Mockito.when(request.getReader()).thenReturn(policyJsonTrapFaultReader);
75
76         wrapper.populateRequestParameters(request);
77
78         BufferedReader badJsonReader = new BufferedReader(new StringReader("{"));
79
80         Mockito.when(request.getReader()).thenReturn(badJsonReader);
81
82         wrapper.populateRequestParameters(request);
83     }
84
85     @Test
86     public void testDefaultParameterHandling() throws Exception {
87         PolicyParameters parameters = createParametersObject();
88
89         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
90
91         assertThatThrownBy(() -> wrapper.populateRequestParameters(parameters))
92                         .isInstanceOf(NullPointerException.class);
93
94         parameters.setPolicyConfigType(PolicyConfigType.Firewall);
95         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
96         assertEquals("Firewall Config", adapter.getConfigPolicyType());
97
98         parameters.setConfigBody("");
99         assertNull(wrapper.populateRequestParameters((parameters)));
100
101         parameters.setConfigBody("{\"name");
102         assertNull(wrapper.populateRequestParameters((parameters)));
103
104         parameters.setConfigBodyType(PolicyType.OTHER);
105         parameters.setConfigBody(null);
106         adapter = wrapper.populateRequestParameters((parameters));
107         assertEquals("Firewall Config", adapter.getConfigPolicyType());
108
109         parameters.setPolicyConfigType(PolicyConfigType.Extended);
110         adapter = wrapper.populateRequestParameters((parameters));
111         assertEquals("EXTENDED", adapter.getConfigPolicyType());
112
113         parameters.setTtlDate(null);
114         adapter = wrapper.populateRequestParameters((parameters));
115         assertEquals("NA", adapter.getTtlDate());
116     }
117
118     @Test
119     public void testConfigFirewallParameterHandling() throws Exception {
120         PolicyParameters parameters = createParametersObject();
121         parameters.setPolicyConfigType(PolicyConfigType.Firewall);
122
123         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
124
125         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
126         assertEquals("Firewall Config", adapter.getConfigPolicyType());
127
128         parameters.setConfigBody("{\"someParameter\": \"someValue\"}");
129         adapter = wrapper.populateRequestParameters((parameters));
130         assertEquals(null, adapter.getSecurityZone());
131         assertEquals("ConfigName", adapter.getConfigName());
132
133         parameters.setConfigBody("{\"securityZoneId\": \"SecurityZone\"}");
134         adapter = wrapper.populateRequestParameters((parameters));
135         assertEquals("SecurityZone", adapter.getSecurityZone());
136
137         parameters.setConfigBody("{\"configName\": \"AnotherConfigName\"}");
138         adapter = wrapper.populateRequestParameters((parameters));
139         assertEquals("AnotherConfigName", adapter.getConfigName());
140     }
141
142     @Test
143     public void testConfigMicroserviceParameterHandling() throws Exception {
144         PolicyParameters parameters = createParametersObject();
145         parameters.setPolicyConfigType(PolicyConfigType.MicroService);
146
147         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
148
149         assertNull(wrapper.populateRequestParameters((parameters)));
150
151         parameters.setConfigBody("{\"someParameter\": \"someValue\"}");
152
153         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
154         assertEquals("Micro Service", adapter.getConfigPolicyType());
155
156         parameters.setConfigBody("{\"service\": \"MyService\"}");
157         adapter = wrapper.populateRequestParameters((parameters));
158         assertEquals("MyService", adapter.getServiceType());
159
160         parameters.setConfigBody("{\"content\": \"{}\"}");
161         adapter = wrapper.populateRequestParameters((parameters));
162         assertEquals("\"{}\"", adapter.getPolicyJSON().toString());
163
164         parameters.setConfigBody("{\"content\": {hess:}}");
165         assertNull(wrapper.populateRequestParameters((parameters)));
166     }
167
168     @Test
169     public void testConfigOptimizationParameterHandling() throws Exception {
170         PolicyParameters parameters = createParametersObject();
171         parameters.setPolicyConfigType(PolicyConfigType.Optimization);
172
173         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
174
175         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
176         assertEquals("Optimization", adapter.getConfigPolicyType());
177
178         parameters.setConfigBody("{\"someParameter\": \"someValue\"}");
179
180         adapter = wrapper.populateRequestParameters((parameters));
181         assertEquals("Optimization", adapter.getConfigPolicyType());
182
183         parameters.setConfigBody("{\"service\": \"MyService\"}");
184         adapter = wrapper.populateRequestParameters((parameters));
185         assertEquals("MyService", adapter.getServiceType());
186     }
187
188     @Test
189     public void testConfigClosedLoopFaultParameterHandling() throws Exception {
190         PolicyParameters parameters = createParametersObject();
191         parameters.setPolicyConfigType(PolicyConfigType.ClosedLoop_Fault);
192
193         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
194
195         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
196         assertEquals("ClosedLoop_Fault", adapter.getConfigPolicyType());
197
198         parameters.setConfigBody("{\"someParameter\": \"someValue\"}");
199
200         adapter = wrapper.populateRequestParameters((parameters));
201         assertEquals("ClosedLoop_Fault", adapter.getConfigPolicyType());
202
203         parameters.setConfigBody("{\"onapname\": \"MyOnapName\"}");
204         adapter = wrapper.populateRequestParameters((parameters));
205         assertEquals("MyOnapName", adapter.getOnapName());
206     }
207
208     @Test
209     public void testConfigClosedLoopPmParameterHandling() throws Exception {
210         PolicyParameters parameters = createParametersObject();
211         parameters.setPolicyConfigType(PolicyConfigType.ClosedLoop_PM);
212
213         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
214
215         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
216         assertEquals("ClosedLoop_PM", adapter.getConfigPolicyType());
217
218         parameters.setConfigBody("{\"someParameter\": \"someValue\"}");
219
220         adapter = wrapper.populateRequestParameters((parameters));
221         assertEquals("ClosedLoop_PM", adapter.getConfigPolicyType());
222
223         parameters.setConfigBody(
224                         "{\"onapname\": \"MyOnapName\",\"serviceTypePolicyName\":\"Service Type Policy Name\"}");
225         adapter = wrapper.populateRequestParameters((parameters));
226         assertEquals("MyOnapName", adapter.getOnapName());
227     }
228
229     @Test
230     public void testConfigBrmsParameterHandling() throws Exception {
231         PolicyParameters parameters = createParametersObject();
232         parameters.setPolicyConfigType(PolicyConfigType.BRMS_PARAM);
233
234         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
235         assertThatThrownBy(() -> wrapper.populateRequestParameters(parameters))
236                         .isInstanceOf(NullPointerException.class);
237
238         Map<AttributeType, Map<String, String>> attributes = new LinkedHashMap<>();
239         parameters.setAttributes(attributes);
240         assertThatThrownBy(() -> wrapper.populateRequestParameters(parameters))
241                         .isInstanceOf(NullPointerException.class);
242
243         Map<String, String> templateMap = new LinkedHashMap<>();
244         templateMap.put("templateName", "Template Name");
245         attributes.put(AttributeType.RULE, templateMap);
246         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
247         assertEquals("BRMS_Param", adapter.getConfigPolicyType());
248         assertEquals("Template Name", adapter.getRuleName());
249
250         parameters.setConfigBody("{\"someParameter\": \"someValue\"}");
251
252         adapter = wrapper.populateRequestParameters((parameters));
253         assertEquals("BRMS_Param", adapter.getConfigPolicyType());
254     }
255
256     @SuppressWarnings("unchecked")
257     @Test
258     public void testDecisionRainyDayParameterHandling() throws Exception {
259         PolicyParameters parameters = createParametersObject();
260         parameters.setPolicyClass(PolicyClass.Decision);
261
262         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
263         assertThatThrownBy(() -> wrapper.populateRequestParameters(parameters))
264                         .isInstanceOf(NullPointerException.class);
265
266         Map<AttributeType, Map<String, String>> attributes = new LinkedHashMap<>();
267         parameters.setAttributes(attributes);
268         assertThatThrownBy(() -> wrapper.populateRequestParameters(parameters))
269                         .isInstanceOf(NullPointerException.class);
270
271         parameters.setRuleProvider(RuleProvider.RAINY_DAY);
272         assertThatThrownBy(() -> wrapper.populateRequestParameters(parameters))
273                         .isInstanceOf(NullPointerException.class);
274
275         Map<String, String> treatments = new LinkedHashMap<>();
276         parameters.setTreatments(treatments);
277
278         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
279         assertEquals("Rainy_Day", adapter.getRuleProvider());
280
281         treatments.put("ATreatment", "A Treatment Value");
282         adapter = wrapper.populateRequestParameters((parameters));
283         assertEquals("ATreatment", ((Map<String, String>) adapter.getRainyday().getTreatmentTableChoices().get(0))
284                         .get("errorcode"));
285         assertEquals("A Treatment Value",
286                         ((Map<String, String>) adapter.getRainyday().getTreatmentTableChoices().get(0))
287                                         .get("treatment"));
288
289         Map<String, String> matchingMap = new LinkedHashMap<>();
290         matchingMap.put("ServiceType", "AServiceType");
291         attributes.put(AttributeType.MATCHING, matchingMap);
292         parameters.setAttributes(attributes);
293         adapter = wrapper.populateRequestParameters((parameters));
294         assertEquals("AServiceType", adapter.getRainyday().getServiceType());
295     }
296
297     @Test
298     public void testDecisionGuardParameterHandling() throws Exception {
299         PolicyParameters parameters = createParametersObject();
300         parameters.setPolicyClass(PolicyClass.Decision);
301
302         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
303         assertThatThrownBy(() -> wrapper.populateRequestParameters(parameters))
304                         .isInstanceOf(NullPointerException.class);
305
306         Map<AttributeType, Map<String, String>> attributes = new LinkedHashMap<>();
307         parameters.setAttributes(attributes);
308         assertThatThrownBy(() -> wrapper.populateRequestParameters(parameters))
309                         .isInstanceOf(NullPointerException.class);
310
311         parameters.setRuleProvider(RuleProvider.GUARD_BL_YAML);
312
313         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
314         assertEquals("GUARD_BL_YAML", adapter.getRuleProvider());
315
316         parameters.setRuleProvider(RuleProvider.GUARD_MIN_MAX);
317
318         adapter = wrapper.populateRequestParameters((parameters));
319         assertEquals("GUARD_MIN_MAX", adapter.getRuleProvider());
320
321         parameters.setRuleProvider(RuleProvider.GUARD_YAML);
322
323         adapter = wrapper.populateRequestParameters((parameters));
324         assertEquals("GUARD_YAML", adapter.getRuleProvider());
325
326         Map<String, String> matchingMap = new LinkedHashMap<>();
327         matchingMap.put("actor", "Actor");
328         matchingMap.put("recipe", "Recipe");
329         matchingMap.put("guardActiveStart", "GuardActiveStart");
330         matchingMap.put("guardActiveEnd", "GuardActiveEnd");
331         matchingMap.put("limit", "Limit");
332         matchingMap.put("timeWindow", "Window");
333         matchingMap.put("timeUnits", "Units");
334
335         attributes.put(AttributeType.MATCHING, matchingMap);
336         parameters.setAttributes(attributes);
337         adapter = wrapper.populateRequestParameters((parameters));
338         assertEquals("Actor", adapter.getYamlparams().getActor());
339         assertEquals("Recipe", adapter.getYamlparams().getRecipe());
340         assertEquals("GuardActiveStart", adapter.getYamlparams().getGuardActiveStart());
341         assertEquals("GuardActiveEnd", adapter.getYamlparams().getGuardActiveEnd());
342         assertEquals("Limit", adapter.getYamlparams().getLimit());
343         assertEquals("Window", adapter.getYamlparams().getTimeWindow());
344         assertEquals("Units", adapter.getYamlparams().getTimeUnits());
345
346         parameters.setRuleProvider(RuleProvider.GUARD_MIN_MAX);
347         matchingMap.put("min", "TheMin");
348         matchingMap.put("max", "TheMax");
349         adapter = wrapper.populateRequestParameters((parameters));
350         assertEquals("TheMin", adapter.getYamlparams().getMin());
351         assertEquals("TheMax", adapter.getYamlparams().getMax());
352
353         parameters.setRuleProvider(RuleProvider.GUARD_BL_YAML);
354         adapter = wrapper.populateRequestParameters((parameters));
355         assertTrue(adapter.getYamlparams().getBlackList().isEmpty());
356
357         matchingMap.put("blackList", "Bad0,Bad1");
358         adapter = wrapper.populateRequestParameters((parameters));
359         assertEquals("Bad0", adapter.getYamlparams().getBlackList().get(0));
360         assertEquals("Bad1", adapter.getYamlparams().getBlackList().get(1));
361
362         parameters.setRuleProvider(RuleProvider.AAF);
363         adapter = wrapper.populateRequestParameters((parameters));
364         assertNull(adapter.getYamlparams());
365     }
366
367     @SuppressWarnings("unchecked")
368     @Test
369     public void testActionParameterHandling() throws Exception {
370         PolicyParameters parameters = createParametersObject();
371         parameters.setPolicyClass(PolicyClass.Action);
372
373         PolicyValidationRequestWrapper wrapper = new PolicyValidationRequestWrapper();
374
375         PolicyRestAdapter adapter = wrapper.populateRequestParameters((parameters));
376         assertTrue(adapter.getRuleAlgorithmschoices().isEmpty());
377
378         List<String> dynamicRuleAlgorithmLabels = new ArrayList<>();
379         parameters.setDynamicRuleAlgorithmLabels(dynamicRuleAlgorithmLabels);
380         adapter = wrapper.populateRequestParameters((parameters));
381         assertTrue(adapter.getRuleAlgorithmschoices().isEmpty());
382
383         dynamicRuleAlgorithmLabels.add("Label0");
384         List<String> dynamicRuleAlgorithmFunctions = new ArrayList<>();
385         dynamicRuleAlgorithmFunctions.add("FirstAlgorithmFunction");
386         parameters.setDynamicRuleAlgorithmFunctions(dynamicRuleAlgorithmFunctions);
387         List<String> dynamicRuleAlgorithmField1 = new ArrayList<>();
388         dynamicRuleAlgorithmField1.add("FirstAlgorithmFunctionField1");
389         parameters.setDynamicRuleAlgorithmField1(dynamicRuleAlgorithmField1);
390         List<String> dynamicRuleAlgorithmField2 = new ArrayList<>();
391         dynamicRuleAlgorithmField2.add("FirstAlgorithmFunctionField2");
392         parameters.setDynamicRuleAlgorithmField2(dynamicRuleAlgorithmField2);
393         parameters.setDynamicRuleAlgorithmLabels(dynamicRuleAlgorithmLabels);
394         adapter = wrapper.populateRequestParameters((parameters));
395         assertEquals(1, adapter.getRuleAlgorithmschoices().size());
396         assertEquals("Label0", ((LinkedHashMap<String, String>) adapter.getRuleAlgorithmschoices().get(0)).get("id"));
397
398         Map<String, String> matchingMap = new LinkedHashMap<>();
399         matchingMap.put("AKey", "AValue");
400
401         Map<AttributeType, Map<String, String>> attributes = new LinkedHashMap<>();
402         attributes.put(AttributeType.MATCHING, matchingMap);
403         parameters.setAttributes(attributes);
404         adapter = wrapper.populateRequestParameters((parameters));
405         assertEquals("AKey", ((LinkedHashMap<String, String>) adapter.getAttributes().get(0)).get("key"));
406     }
407
408     private PolicyParameters createParametersObject() {
409         PolicyParameters parameters = new PolicyParameters();
410
411         parameters.setPolicyName("PolicyName");
412         parameters.setOnapName("ONAPName");
413         parameters.setPriority("SomePriority");
414         parameters.setConfigName("ConfigName");
415         parameters.setRiskType("RiskType");
416         parameters.setRiskLevel("RiskLevel");
417         parameters.setGuard(false);
418         parameters.setTtlDate(new Date());
419
420         return parameters;
421     }
422 }