Remove old cdap policy type
[policy/xacml-pdp.git] / applications / monitoring / src / test / java / org / onap / policy / xacml / pdp / application / monitoring / MonitoringPdpApplicationTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  * SPDX-License-Identifier: Apache-2.0
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.policy.xacml.pdp.application.monitoring;
24
25 import static org.assertj.core.api.Assertions.assertThat;
26
27 import com.att.research.xacml.api.Response;
28 import java.io.File;
29 import java.io.IOException;
30 import java.util.HashMap;
31 import java.util.Iterator;
32 import java.util.List;
33 import java.util.Map;
34 import java.util.Properties;
35 import java.util.ServiceLoader;
36 import org.apache.commons.lang3.tuple.Pair;
37 import org.junit.BeforeClass;
38 import org.junit.ClassRule;
39 import org.junit.FixMethodOrder;
40 import org.junit.Test;
41 import org.junit.rules.TemporaryFolder;
42 import org.junit.runners.MethodSorters;
43 import org.onap.policy.common.endpoints.parameters.RestServerParameters;
44 import org.onap.policy.common.utils.coder.CoderException;
45 import org.onap.policy.common.utils.coder.StandardCoder;
46 import org.onap.policy.common.utils.resources.TextFileUtils;
47 import org.onap.policy.models.decisions.concepts.DecisionRequest;
48 import org.onap.policy.models.decisions.concepts.DecisionResponse;
49 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
51 import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
52 import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
53 import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
54 import org.onap.policy.pdp.xacml.xacmltest.TestUtils;
55 import org.slf4j.Logger;
56 import org.slf4j.LoggerFactory;
57
58 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
59 public class MonitoringPdpApplicationTest {
60
61     private static final Logger LOGGER = LoggerFactory.getLogger(MonitoringPdpApplicationTest.class);
62     private static Properties properties = new Properties();
63     private static File propertiesFile;
64     private static XacmlApplicationServiceProvider service;
65     private static DecisionRequest requestSinglePolicy;
66     private static DecisionRequest requestPolicyType;
67
68     private static StandardCoder gson = new StandardCoder();
69     private static RestServerParameters clientParams = new RestServerParameters();
70
71     @ClassRule
72     public static final TemporaryFolder policyFolder = new TemporaryFolder();
73
74     /**
75      * Copies the xacml.properties and policies files into
76      * temporary folder and loads the service provider saving
77      * instance of provider off for other tests to use.
78      */
79     @BeforeClass
80     public static void setup() throws Exception {
81         //
82         // Load Single Decision Request
83         //
84         requestSinglePolicy = gson.decode(
85                 TextFileUtils
86                     .getTextFileAsString("../../main/src/test/resources/decisions/decision.single.input.json"),
87                     DecisionRequest.class);
88         // Load Single Decision Request
89         //
90         requestPolicyType = gson.decode(
91                 TextFileUtils
92                 .getTextFileAsString("../../main/src/test/resources/decisions/decision.policytype.input.json"),
93                 DecisionRequest.class);
94         //
95         // Setup our temporary folder
96         //
97         XacmlPolicyUtils.FileCreator myCreator = (String filename) -> policyFolder.newFile(filename);
98         propertiesFile = XacmlPolicyUtils.copyXacmlPropertiesContents("src/test/resources/xacml.properties",
99                 properties, myCreator);
100         //
101         // Load XacmlApplicationServiceProvider service
102         //
103         ServiceLoader<XacmlApplicationServiceProvider> applicationLoader =
104                 ServiceLoader.load(XacmlApplicationServiceProvider.class);
105         //
106         // Look for our class instance and save it
107         //
108         StringBuilder strDump = new StringBuilder("Loaded applications:" + XacmlPolicyUtils.LINE_SEPARATOR);
109         Iterator<XacmlApplicationServiceProvider> iterator = applicationLoader.iterator();
110         while (iterator.hasNext()) {
111             XacmlApplicationServiceProvider application = iterator.next();
112             //
113             // Is it our service?
114             //
115             if (application instanceof MonitoringPdpApplication) {
116                 //
117                 // Should be the first and only one
118                 //
119                 assertThat(service).isNull();
120                 service = application;
121             }
122             strDump.append(application.applicationName());
123             strDump.append(" supports ");
124             strDump.append(application.supportedPolicyTypes());
125             strDump.append(XacmlPolicyUtils.LINE_SEPARATOR);
126         }
127         LOGGER.debug("{}", strDump);
128         //
129         // Tell it to initialize based on the properties file
130         // we just built for it.
131         //
132         service.initialize(propertiesFile.toPath().getParent(), clientParams);
133     }
134
135     @Test
136     public void test1Basics() {
137         //
138         // Make sure there's an application name
139         //
140         assertThat(service.applicationName()).isNotEmpty();
141         //
142         // Ensure it has the supported policy types and
143         // can support the correct policy types.
144         //
145         assertThat(service.canSupportPolicyType(
146                 new ToscaPolicyTypeIdentifier("onap.policies.monitoring.tcagen2", "1.0.0"))).isTrue();
147         assertThat(service.canSupportPolicyType(
148                 new ToscaPolicyTypeIdentifier(
149                 "onap.policies.monitoring.foobar", "1.0.1"))).isTrue();
150         assertThat(service.canSupportPolicyType(
151                 new ToscaPolicyTypeIdentifier("onap.foobar", "1.0.0"))).isFalse();
152         //
153         // Ensure it supports decisions
154         //
155         assertThat(service.actionDecisionsSupported()).contains("configure");
156     }
157
158     @Test
159     public void test2NoPolicies() {
160         //
161         // Ask for a decision
162         //
163         Pair<DecisionResponse, Response> decision = service.makeDecision(requestSinglePolicy, null);
164         LOGGER.info("Decision {}", decision);
165
166         assertThat(decision.getKey()).isNotNull();
167         assertThat(decision.getKey().getPolicies()).isEmpty();
168         //
169         // Test the branch for query params, and we have no policy anyway
170         //
171         Map<String, String[]> requestQueryParams = new HashMap<>();
172         decision = service.makeDecision(requestSinglePolicy, requestQueryParams);
173         LOGGER.info("Decision {}", decision);
174
175         assertThat(decision.getKey()).isNotNull();
176         assertThat(decision.getKey().getPolicies()).isEmpty();
177         //
178         // Test the branch for query params, and we have no policy anyway
179         //
180         requestQueryParams.put("abbrev", new String[] {"false"});
181         decision = service.makeDecision(requestSinglePolicy, requestQueryParams);
182         LOGGER.info("Decision {}", decision);
183
184         assertThat(decision.getKey()).isNotNull();
185         assertThat(decision.getKey().getPolicies()).isEmpty();
186     }
187
188     @SuppressWarnings("unchecked")
189     @Test
190     public void test3AddvDnsPolicy() throws IOException, CoderException, XacmlApplicationException {
191         //
192         // Now load the vDNS Policy - make sure
193         // the pdp can support it and have it load
194         // into the PDP.
195         //
196         //
197         // Now load the monitoring policies
198         //
199         final List<ToscaPolicy> loadedPolicies = TestUtils.loadPolicies("src/test/resources/vDNS.policy.input.yaml",
200                 service);
201         //
202         // Ask for a decision
203         //
204         Pair<DecisionResponse, Response> decision = service.makeDecision(requestSinglePolicy, null);
205         LOGGER.info("Decision {}", decision);
206
207         assertThat(decision.getKey()).isNotNull();
208         assertThat(decision.getKey().getPolicies()).hasSize(1);
209         //
210         // Dump it out as Json
211         //
212         LOGGER.info(gson.encode(decision.getKey()));
213         //
214         // Ask for a decision based on policy-type
215         //
216         decision = service.makeDecision(requestPolicyType, null);
217         LOGGER.info("Decision {}", decision);
218
219         assertThat(decision.getKey()).isNotNull();
220         assertThat(decision.getKey().getPolicies()).hasSize(1);
221         Map<String, Object> jsonPolicy = (Map<String, Object>) decision.getKey().getPolicies().get("onap.scaleout.tca");
222         assertThat(jsonPolicy).isNotNull();
223         assertThat(jsonPolicy.get("properties")).isNotNull();
224         //
225         // Dump it out as Json
226         //
227         LOGGER.info(gson.encode(decision.getKey()));
228         //
229         // Ask for abbreviated results
230         //
231         Map<String, String[]> requestQueryParams = new HashMap<>();
232         requestQueryParams.put("abbrev", new String[] {"true"});
233         decision = service.makeDecision(requestPolicyType, requestQueryParams);
234         LOGGER.info("Decision {}", decision);
235
236         assertThat(decision.getKey()).isNotNull();
237         assertThat(decision.getKey().getPolicies()).hasSize(1);
238         jsonPolicy = (Map<String, Object>) decision.getKey().getPolicies().get("onap.scaleout.tca");
239         assertThat(jsonPolicy).isNotNull().doesNotContainKey("properties");
240         //
241         // Don't Ask for abbreviated results
242         //
243         requestQueryParams = new HashMap<>();
244         requestQueryParams.put("abbrev", new String[] {"false"});
245         decision = service.makeDecision(requestPolicyType, requestQueryParams);
246         LOGGER.info("Decision {}", decision);
247
248         assertThat(decision.getKey()).isNotNull();
249         assertThat(decision.getKey().getPolicies()).hasSize(1);
250         jsonPolicy = (Map<String, Object>) decision.getKey().getPolicies().get("onap.scaleout.tca");
251         assertThat(jsonPolicy).isNotNull();
252         assertThat(jsonPolicy.get("properties")).isNotNull();
253         //
254         // Throw an unknown exception
255         //
256         requestQueryParams = new HashMap<>();
257         requestQueryParams.put("unknown", new String[] {"true"});
258         decision = service.makeDecision(requestPolicyType, requestQueryParams);
259         LOGGER.info("Decision {}", decision);
260
261         assertThat(decision.getKey()).isNotNull();
262         assertThat(decision.getKey().getPolicies()).hasSize(1);
263         jsonPolicy = (Map<String, Object>) decision.getKey().getPolicies().get("onap.scaleout.tca");
264         assertThat(jsonPolicy).isNotNull();
265         assertThat(jsonPolicy.get("properties")).isNotNull();
266         //
267         // Dump it out as Json
268         //
269         LOGGER.info(gson.encode(decision.getKey()));
270         //
271         // Now unload it
272         //
273         LOGGER.info("Now testing unloading of policy");
274         for (ToscaPolicy policy : loadedPolicies) {
275             assertThat(service.unloadPolicy(policy)).isTrue();
276         }
277         //
278         // Ask for a decision
279         //
280         decision = service.makeDecision(requestSinglePolicy, null);
281         LOGGER.info("Decision {}", decision.getKey());
282
283         assertThat(decision.getKey()).isNotNull();
284         assertThat(decision.getKey().getPolicies()).isEmpty();
285     }
286
287 }