tests for tosca compliant operational policies
[policy/api.git] / main / src / test / java / org / onap / policy / api / main / rest / TestApiRestServer.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
4  *  Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
5  *  Modifications Copyright (C) 2019 Nordix Foundation.
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.api.main.rest;
24
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.assertTrue;
29
30 import java.io.File;
31 import java.lang.reflect.Constructor;
32 import java.lang.reflect.Modifier;
33 import java.security.SecureRandom;
34 import java.util.Base64;
35 import java.util.Collections;
36 import java.util.List;
37 import java.util.Map;
38 import java.util.Properties;
39
40 import javax.net.ssl.SSLContext;
41 import javax.net.ssl.TrustManager;
42 import javax.ws.rs.client.Client;
43 import javax.ws.rs.client.ClientBuilder;
44 import javax.ws.rs.client.Entity;
45 import javax.ws.rs.client.Invocation;
46 import javax.ws.rs.client.WebTarget;
47 import javax.ws.rs.core.Response;
48
49 import org.glassfish.jersey.client.ClientProperties;
50 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
51 import org.junit.AfterClass;
52 import org.junit.Before;
53 import org.junit.BeforeClass;
54 import org.junit.Test;
55 import org.onap.policy.api.main.parameters.ApiParameterGroup;
56 import org.onap.policy.api.main.parameters.CommonTestData;
57 import org.onap.policy.api.main.rest.provider.PolicyProvider;
58 import org.onap.policy.api.main.rest.provider.PolicyTypeProvider;
59 import org.onap.policy.api.main.startstop.Main;
60 import org.onap.policy.common.endpoints.http.server.YamlMessageBodyHandler;
61 import org.onap.policy.common.endpoints.report.HealthCheckReport;
62 import org.onap.policy.common.gson.GsonMessageBodyHandler;
63 import org.onap.policy.common.parameters.ParameterService;
64 import org.onap.policy.common.utils.coder.StandardCoder;
65 import org.onap.policy.common.utils.coder.StandardYamlCoder;
66 import org.onap.policy.common.utils.network.NetworkUtil;
67 import org.onap.policy.common.utils.resources.ResourceUtils;
68 import org.onap.policy.common.utils.resources.TextFileUtils;
69 import org.onap.policy.models.base.PfModelException;
70 import org.onap.policy.models.errors.concepts.ErrorResponse;
71 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
72 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityKey;
73 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
74 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
75 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
76
77 /**
78  * Class to perform unit test of {@link ApiRestController}.
79  *
80  * @author Chenfei Gao (cgao@research.att.com)
81  */
82 public class TestApiRestServer {
83     private static final String ALIVE = "alive";
84     private static final String SELF = NetworkUtil.getHostname();
85     private static final String NAME = "Policy API";
86     private static final String APP_JSON = "application/json";
87     private static final String APP_YAML = "application/yaml";
88
89     private static final String HEALTHCHECK_ENDPOINT = "healthcheck";
90     private static final String STATISTICS_ENDPOINT = "statistics";
91
92     private static final String OP_POLICY_NAME_VCPE = "operational.restart";
93     private static final String OP_POLICY_NAME_VDNS = "operational.scaleout";
94     private static final String OP_POLICY_NAME_VFW = "operational.modifyconfig";
95
96     private static final String POLICYTYPES = "policytypes";
97     private static final String POLICYTYPES_TCA = "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app";
98     private static final String POLICYTYPES_COLLECTOR =
99             "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server";
100     private static final String POLICYTYPES_TCA_VERSION =
101             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0";
102     private static final String POLICYTYPES_TCA_LATEST =
103             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/latest";
104     private static final String POLICYTYPES_COLLECTOR_VERSION =
105             "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server/versions/1.0.0";
106     private static final String POLICYTYPES_COLLECTOR_LATEST =
107             "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server/versions/latest";
108
109     private static final String POLICYTYPES_DROOLS = "policytypes/onap.policies.controlloop.operational.common.Drools";
110     private static final String POLICYTYPES_DROOLS_VERSION = POLICYTYPES_DROOLS + "/versions/1.0.0";
111     private static final String POLICYTYPES_DROOLS_VERSION_LATEST = POLICYTYPES_DROOLS + "/versions/latest";
112
113     private static final String POLICYTYPES_TCA_POLICIES =
114             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies";
115     private static final String POLICYTYPES_TCA_POLICIES_VCPE =
116             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca";
117     private static final String POLICYTYPES_TCA_POLICIES_VCPE_VERSION1 = "policytypes/"
118             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/1.0.0";
119     private static final String POLICYTYPES_TCA_POLICIES_VCPE_VERSION2 = "policytypes/"
120             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/2.0.0";
121     private static final String POLICYTYPES_TCA_POLICIES_VCPE_LATEST = "policytypes/"
122             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/latest";
123     private static final String POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED = "policytypes/"
124             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/deployed";
125
126     private static final String POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION =
127             POLICYTYPES_DROOLS_VERSION + "/policies/" + OP_POLICY_NAME_VCPE + "/versions/1.0.0";
128
129     private static final String GUARD_POLICYTYPE = "onap.policies.controlloop.Guard";
130     private static final String GUARD_POLICIES = "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies";
131     private static final String GUARD_POLICIES_VDNS_FL_LATEST =
132             "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout"
133                     + "/versions/latest";
134     private static final String GUARD_POLICIES_VDNS_FL_DEPLOYED =
135             "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout"
136                     + "/versions/deployed";
137     private static final String GUARD_POLICIES_VDNS_MINMAX_LATEST =
138             "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout"
139                     + "/versions/latest";
140     private static final String GUARD_POLICIES_VDNS_FL_VERSION = "policytypes/"
141             + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout/versions/1";
142     private static final String GUARD_POLICIES_VDNS_MINMAX_VERSION =
143             "policytypes/" + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout/versions/1";
144
145     private static final String OPS_POLICYTYPE = "onap.policies.controlloop.Operational";
146     private static final String OPS_POLICIES =
147             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies";
148     private static final String OPS_POLICIES_VCPE_LATEST =
149             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/" + OP_POLICY_NAME_VCPE
150                     + "/versions/latest";
151     private static final String OPS_POLICIES_VCPE_DEPLOYED =
152             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/" + OP_POLICY_NAME_VCPE
153                     + "/versions/deployed";
154     private static final String OPS_POLICIES_VDNS_LATEST =
155             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/" + OP_POLICY_NAME_VDNS
156                     + "/versions/latest";
157     private static final String OPS_POLICIES_VFIREWALL_LATEST =
158             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/" + OP_POLICY_NAME_VFW
159                     + "/versions/latest";
160     private static final String OPS_POLICIES_VCPE_VERSION = "policytypes/"
161             + "onap.policies.controlloop.Operational/versions/1.0.0/policies/" + OP_POLICY_NAME_VCPE + "/versions/1";
162     private static final String OPS_POLICIES_VDNS_VERSION = "policytypes/"
163             + "onap.policies.controlloop.Operational/versions/1.0.0/policies/" + OP_POLICY_NAME_VDNS + "/versions/1";
164     private static final String OPS_POLICIES_VFIREWALL_VERSION = "policytypes/"
165             + "onap.policies.controlloop.Operational/versions/1.0.0/policies/" + OP_POLICY_NAME_VFW + "/versions/1";
166     private static final String POLICIES = "policies";
167
168     private static final String KEYSTORE = System.getProperty("user.dir") + "/src/test/resources/ssl/policy-keystore";
169
170     // @formatter:off
171     private static final String[] TOSCA_POLICY_RESOURCE_NAMES = {
172         "policies/vCPE.policy.monitoring.input.tosca.json",
173         "policies/vCPE.policy.monitoring.input.tosca.v2.yaml",
174         "policies/vDNS.policy.monitoring.input.tosca.json",
175         "policies/vDNS.policy.monitoring.input.tosca.v2.yaml"
176     };
177
178     private static final String[] TOSCA_POLICIES_RESOURCE_NAMES = {
179         "policies/vCPE.policies.optimization.input.tosca.json",
180         "policies/vCPE.policies.optimization.input.tosca.v2.yaml"
181     };
182
183     private static final String TOSCA_POLICYTYPE_OP_RESOURCE =
184         "policytypes/onap.policies.controlloop.operational.Common.yaml";
185
186     private static final String LEGACY_POLICYTYPE_OP_RESOURCE =
187         "policytypes/onap.policies.controlloop.Operational.yaml";
188
189     private static final String[] TOSCA_POLICYTYPE_RESOURCE_NAMES = {
190         "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml",
191         "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
192         "policytypes/onap.policies.Optimization.yaml",
193         LEGACY_POLICYTYPE_OP_RESOURCE,
194         TOSCA_POLICYTYPE_OP_RESOURCE,
195         "policytypes/onap.policies.controlloop.guard.Blacklist.yaml",
196         "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml",
197         "policytypes/onap.policies.controlloop.guard.MinMax.yaml",
198         "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
199         "policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml",
200         "policytypes/onap.policies.optimization.resource.DistancePolicy.yaml",
201         "policytypes/onap.policies.optimization.resource.HpaPolicy.yaml",
202         "policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml",
203         "policytypes/onap.policies.optimization.resource.PciPolicy.yaml",
204         "policytypes/onap.policies.optimization.service.QueryPolicy.yaml",
205         "policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml",
206         "policytypes/onap.policies.optimization.resource.Vim_fit.yaml",
207         "policytypes/onap.policies.optimization.resource.VnfPolicy.yaml"
208     };
209
210     private static final String TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_JSON =
211         "policies/vCPE.policy.operational.input.tosca.json";
212
213     private static final String TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML =
214         "policies/vCPE.policy.operational.input.tosca.yaml";
215
216     private static final String[] LEGACY_GUARD_POLICY_RESOURCE_NAMES = {
217         "policies/vDNS.policy.guard.frequency.input.json",
218         "policies/vDNS.policy.guard.minmax.input.json"
219     };
220
221     private static final String[] LEGACY_GUARD_POLICY_NAMES = {
222         "guard.frequency.scaleout",
223         "guard.minmax.scaleout"
224     };
225
226     private static final String[] LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES = {
227         "policies/vCPE.policy.operational.input.json",
228         "policies/vDNS.policy.operational.input.json",
229         "policies/vFirewall.policy.operational.input.json"
230     };
231
232     private static final String[] LEGACY_OPERATIONAL_POLICY_NAMES = {
233         OP_POLICY_NAME_VCPE,
234         OP_POLICY_NAME_VDNS,
235         OP_POLICY_NAME_VFW
236     };
237
238     private static PolicyModelsProviderParameters providerParams;
239     private static ApiParameterGroup apiParamGroup;
240     private static PolicyProvider policyProvider;
241     private static PolicyTypeProvider policyTypeProvider;
242
243     // @formatter:on
244
245     private static final StandardCoder standardCoder = new StandardCoder();
246
247     private static int apiPort;
248     private static Main apiMain;
249
250     private static StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
251
252     /**
253      * Initializes parameters.
254      *
255      * @throws PfModelException the PfModel parsing exception
256      */
257     @BeforeClass
258     public static void setupParameters() throws PfModelException {
259         providerParams = new PolicyModelsProviderParameters();
260         providerParams.setDatabaseDriver("org.h2.Driver");
261         providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
262         providerParams.setDatabaseUser("policy");
263         providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
264         providerParams.setPersistenceUnit("ToscaConceptTest");
265         apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams, Collections.emptyList());
266         ParameterService.register(apiParamGroup, true);
267
268         policyTypeProvider = new PolicyTypeProvider();
269         policyProvider = new PolicyProvider();
270     }
271
272     /**
273      * Set up test environemnt.
274      *
275      * @throws Exception on test setup exceptions
276      */
277     @BeforeClass
278     public static void beforeStartApiService() throws Exception {
279         apiPort = NetworkUtil.allocPort();
280
281         final String[] apiConfigParameters = new String[2];
282         final Properties systemProps = System.getProperties();
283         systemProps.put("javax.net.ssl.keyStore", KEYSTORE);
284         systemProps.put("javax.net.ssl.keyStorePassword", "Pol1cy_0nap");
285         System.setProperties(systemProps);
286         new CommonTestData().makeParameters("src/test/resources/parameters/ApiConfigParameters_Https.json",
287                 "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json", apiPort);
288         apiConfigParameters[0] = "-c";
289         apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json";
290         apiMain = new Main(apiConfigParameters);
291     }
292
293     /**
294      * Method for cleanup after each test.
295      */
296     @AfterClass
297     public static void teardown() throws Exception {
298         policyTypeProvider.close();
299         policyProvider.close();
300
301         if (apiMain != null) {
302             apiMain.shutdown();
303         }
304     }
305
306     /**
307      * Clear the database before each test.
308      *
309      * @throws Exception on clearing exceptions
310      */
311     @Before
312     public void beforeClearDatabase() throws Exception {
313
314         Response rawResponse = readResource(POLICYTYPES, APP_JSON);
315         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
316
317         for (ToscaEntityKey policyTypeKey : response.getPolicyTypesAsMap().keySet()) {
318             if (GUARD_POLICYTYPE.equals(policyTypeKey.getName())
319                     || OPS_POLICYTYPE.equals(policyTypeKey.getName())) {
320                 deleteLegacyPolicies(LEGACY_GUARD_POLICY_NAMES, GUARD_POLICYTYPE);
321                 deleteLegacyPolicies(LEGACY_OPERATIONAL_POLICY_NAMES, OPS_POLICYTYPE);
322             } else {
323                 deleteToscaPolicies(policyTypeKey);
324             }
325
326             String deletePolicyTypePath =
327                     "policytypes/" + policyTypeKey.getName() + "/versions/" + policyTypeKey.getVersion();
328             deleteResource(deletePolicyTypePath, APP_JSON);
329         }
330     }
331
332     @Test
333     public void testApiStatisticsConstructorIsPrivate() {
334
335         try {
336             final Constructor<ApiStatisticsManager> constructor = ApiStatisticsManager.class.getDeclaredConstructor();
337             assertTrue(Modifier.isPrivate(constructor.getModifiers()));
338             constructor.setAccessible(true);
339             constructor.newInstance();
340
341         } catch (final Exception exp) {
342             assertTrue(exp.getCause().toString().contains("Instantiation of the class is not allowed"));
343         }
344     }
345
346     @Test
347     public void testCreatePolicyTypes() throws Exception {
348         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
349             Response rawResponse = createResource(POLICYTYPES, resrcName);
350             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
351             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
352             assertNotNull(response);
353             assertFalse(response.getPolicyTypes().isEmpty());
354         }
355
356         // Send a policy type with a null value to trigger an error
357         Response rawResponse = readResource(POLICYTYPES, APP_JSON);
358         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
359         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
360         String firstPolicyType = response.getPolicyTypes().keySet().iterator().next();
361         response.getPolicyTypes().put(firstPolicyType, null);
362         Response rawResponse2 = createResource(POLICYTYPES, standardCoder.encode(response));
363         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse2.getStatus());
364         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
365         assertEquals("no policy types specified in the service template", errorResponse.getErrorMessage());
366     }
367
368     @Test
369     public void testCreatePolicies() throws Exception {
370         createPolicyTypes();
371
372         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
373             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
374             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
375         }
376
377         new File("src/test/resources/policies/BadTestPolicy.yaml").deleteOnExit();
378
379         // Send a policy with no policy type trigger an error
380         String toscaPolicy = ResourceUtils
381                 .getResourceAsString(TOSCA_POLICY_RESOURCE_NAMES[TOSCA_POLICIES_RESOURCE_NAMES.length - 1]);
382
383         toscaPolicy = toscaPolicy.replaceAll("onap.policies.monitoring.cdap.tca.hi.lo.app", "");
384         TextFileUtils.putStringAsTextFile(toscaPolicy, "src/test/resources/policies/BadTestPolicy.yaml");
385
386         Response rawResponse2 =
387                 createResource(POLICYTYPES_TCA_POLICIES, "src/test/resources/policies/BadTestPolicy.yaml");
388         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse2.getStatus());
389         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
390         assertEquals("policy type id does not match", errorResponse.getErrorMessage());
391     }
392
393     @Test
394     public void testSimpleCreatePolicies() throws Exception {
395         testCreatePolicyTypes();
396
397         for (String resrcName : TOSCA_POLICIES_RESOURCE_NAMES) {
398             Response rawResponse = createResource(POLICIES, resrcName);
399             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
400         }
401
402         new File("src/test/resources/policies/BadTestPolicy.yaml").deleteOnExit();
403
404         // Send a policy with no policy type trigger an error
405         String toscaPolicy = ResourceUtils
406                 .getResourceAsString(TOSCA_POLICY_RESOURCE_NAMES[TOSCA_POLICIES_RESOURCE_NAMES.length - 1]);
407
408         toscaPolicy = toscaPolicy.replaceAll("onap.policies.monitoring.cdap.tca.hi.lo.app", "");
409         TextFileUtils.putStringAsTextFile(toscaPolicy, "src/test/resources/policies/BadTestPolicy.yaml");
410
411         Response rawResponse2 = createResource(POLICIES, "src/test/resources/policies/BadTestPolicy.yaml");
412         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse2.getStatus());
413         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
414         assertEquals("policy type NULL:0.0.0 for policy onap.restart.tca:2.0.0 does not exist",
415                 errorResponse.getErrorMessage());
416     }
417
418     @Test
419     public void testCreateGuardPolicies() throws Exception {
420         createPolicyTypes();
421
422         for (String resrcName : LEGACY_GUARD_POLICY_RESOURCE_NAMES) {
423             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName);
424             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
425         }
426     }
427
428     @Test
429     public void testCreateOperationalPolicies() throws Exception {
430         createPolicyTypes();
431
432         for (String resrcName : LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES) {
433             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName);
434             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
435         }
436     }
437
438     @Test
439     public void testToscaCompliantOpDroolsPolicies() throws Exception {
440         Response rawResponse =
441                 createResource(POLICYTYPES, TOSCA_POLICYTYPE_OP_RESOURCE);
442         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
443
444         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, APP_JSON);
445         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
446
447         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_JSON);
448         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
449
450         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML);
451         assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), rawResponse.getStatus());
452
453         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
454         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
455
456         rawResponse = deleteResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
457         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
458
459         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML);
460         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
461
462         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
463         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
464
465         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_YAML);
466         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
467
468         ToscaServiceTemplate toscaVcpeSt = rawResponse.readEntity(ToscaServiceTemplate.class);
469         assertEquals(1, toscaVcpeSt.getToscaTopologyTemplate().getPolicies().size());
470         assertEquals(OP_POLICY_NAME_VCPE,
471             toscaVcpeSt.getToscaTopologyTemplate().getPolicies().get(0).get(OP_POLICY_NAME_VCPE).getName());
472
473         Map<String, Object> props =
474                 toscaVcpeSt.getToscaTopologyTemplate().getPolicies().get(0).get(OP_POLICY_NAME_VCPE).getProperties();
475         assertNotNull(props);
476
477         List<Object> operations = (List<Object>) props.get("operations");
478         assertEquals(1, operations.size());
479         assertEquals(props.get("trigger"), ((Map<String, Object>) operations.get(0)).get("id"));
480
481         Map<String, Object> operation =
482                 (Map<String, Object>) ((Map<String, Object>) operations.get(0)).get("operation");
483         assertEquals("APPC", operation.get("actor"));
484         assertEquals("Restart", operation.get("recipe"));
485     }
486
487     @Test
488     public void testHealthCheckSuccessJson() throws Exception {
489         testHealthCheckSuccess(APP_JSON);
490     }
491
492     @Test
493     public void testHealthCheckSuccessYaml() throws Exception {
494         testHealthCheckSuccess(APP_YAML);
495     }
496
497     private void testHealthCheckSuccess(String mediaType) throws Exception {
498         final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT, mediaType);
499         final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
500         validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
501     }
502
503     @Test
504     public void testApiStatistics_200_Json() throws Exception {
505         testApiStatistics_200(APP_JSON);
506     }
507
508     @Test
509     public void testApiStatistics_200_Yaml() throws Exception {
510         testApiStatistics_200(APP_YAML);
511     }
512
513     private void testApiStatistics_200(String mediaType) throws Exception {
514         Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType);
515         StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
516         validateStatisticsReport(report, 200);
517         updateApiStatistics();
518         invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType);
519         report = invocationBuilder.get(StatisticsReport.class);
520         validateStatisticsReport(report, 200);
521         ApiStatisticsManager.resetAllStatistics();
522     }
523
524     @Test
525     public void testReadPolicyTypesJson() throws Exception {
526         testReadPolicyTypes(APP_JSON);
527     }
528
529     @Test
530     public void testReadPolicyTypesYaml() throws Exception {
531         testReadPolicyTypes(APP_YAML);
532     }
533
534     private void testReadPolicyTypes(String mediaType) throws Exception {
535         createPolicyTypes();
536
537         Response rawResponse = readResource(POLICYTYPES, mediaType);
538         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
539         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
540         assertFalse(response.getPolicyTypes().isEmpty());
541
542         rawResponse = readResource(POLICYTYPES_TCA, mediaType);
543         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
544
545         rawResponse = readResource(POLICYTYPES_TCA_VERSION, mediaType);
546         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
547
548         rawResponse = readResource(POLICYTYPES_TCA_LATEST, mediaType);
549         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
550
551         rawResponse = readResource(POLICYTYPES_COLLECTOR, mediaType);
552         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
553
554         rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, mediaType);
555         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
556
557         rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, mediaType);
558         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
559
560         rawResponse = readResource(POLICYTYPES_DROOLS, mediaType);
561         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
562
563         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, mediaType);
564         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
565
566         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION_LATEST, mediaType);
567         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
568     }
569
570     @Test
571     public void testDeletePolicyTypeJson() throws Exception {
572         testDeletePolicyType(APP_JSON);
573     }
574
575     @Test
576     public void testDeletePolicyTypeYaml() throws Exception {
577         testDeletePolicyType(APP_YAML);
578     }
579
580     private void testDeletePolicyType(String mediaType) throws Exception {
581         createPolicyTypes();
582
583         Response rawResponse = deleteResource(POLICYTYPES_TCA_VERSION, mediaType);
584         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
585
586         rawResponse = readResource(POLICYTYPES_TCA_VERSION, mediaType);
587         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
588
589         rawResponse = deleteResource(POLICYTYPES_COLLECTOR_VERSION, mediaType);
590         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
591
592         rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, mediaType);
593         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
594
595         rawResponse = readResource(POLICYTYPES_COLLECTOR, mediaType);
596         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
597
598         rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, mediaType);
599         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
600         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
601         assertEquals("policy type with ID "
602                 + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:null does not exist",
603                 errorResponse.getErrorMessage());
604     }
605
606     @Test
607     public void testReadPoliciesJson() throws Exception {
608         testReadPolicies(APP_JSON);
609     }
610
611     @Test
612     public void testReadPoliciesYaml() throws Exception {
613         testReadPolicies(APP_YAML);
614     }
615
616     private void testReadPolicies(String mediaType) throws Exception {
617         testCreatePolicies();
618
619         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType);
620         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
621
622         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType);
623         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
624
625         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
626         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
627
628         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
629         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
630
631         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType);
632         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
633     }
634
635     @Test
636     public void testDeletePoliciesJson() throws Exception {
637         testDeletePolicies(APP_JSON);
638     }
639
640     @Test
641     public void testDeletePoliciesYaml() throws Exception {
642         testDeletePolicies(APP_YAML);
643     }
644
645     private void testDeletePolicies(String mediaType) throws Exception {
646         createPolicyTypes();
647
648         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
649         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
650         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
651         assertEquals(
652                 "policy with ID onap.restart.tca:1.0.0 and "
653                         + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
654                 error.getErrorMessage());
655     }
656
657     @Test
658     public void testDeletePolicyVersionJson() throws Exception {
659         testDeletePolicyVersion(APP_JSON);
660     }
661
662     @Test
663     public void testDeletePolicyVersionYaml() throws Exception {
664         testDeletePolicyVersion(APP_YAML);
665     }
666
667     private void testDeletePolicyVersion(String mediaType) throws Exception {
668         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
669             Response rawResponse = createResource(POLICYTYPES, resrcName);
670             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
671             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
672             assertNotNull(response);
673             assertFalse(response.getPolicyTypes().isEmpty());
674         }
675         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
676             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
677             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
678         }
679         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
680         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
681
682         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
683         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
684         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
685         assertEquals(
686                 "policy with ID onap.restart.tca:1.0.0 and type "
687                         + "onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
688                 errorResponse.getErrorMessage());
689
690         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
691         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
692
693         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
694         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
695         errorResponse = rawResponse.readEntity(ErrorResponse.class);
696         assertEquals(
697                 "policy with ID onap.restart.tca:2.0.0 and type "
698                         + "onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
699                 errorResponse.getErrorMessage());
700
701         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType);
702         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
703         errorResponse = rawResponse.readEntity(ErrorResponse.class);
704         assertEquals(
705                 "policy with ID onap.restart.tca:null and type "
706                         + "onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
707                 errorResponse.getErrorMessage());
708
709         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType);
710         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
711         errorResponse = rawResponse.readEntity(ErrorResponse.class);
712         assertEquals(
713                 "policy with ID onap.restart.tca:null and type "
714                         + "onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
715                 errorResponse.getErrorMessage());
716     }
717
718     @Test
719     public void testGetAllVersionOfPolicyJson() throws Exception {
720         testGetAllVersionOfPolicy(APP_JSON);
721     }
722
723     @Test
724     public void testGetAllVersionOfPolicyYaml() throws Exception {
725         testGetAllVersionOfPolicy(APP_YAML);
726     }
727
728     private void testGetAllVersionOfPolicy(String mediaType) throws Exception {
729         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
730             Response rawResponse = createResource(POLICYTYPES, resrcName);
731             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
732             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
733             assertNotNull(response);
734             assertFalse(response.getPolicyTypes().isEmpty());
735         }
736         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
737             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
738             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
739         }
740         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType);
741         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
742     }
743
744     @Test
745     public void testReadGuardPoliciesJson() throws Exception {
746         testReadGuardPolicies(APP_JSON);
747     }
748
749     @Test
750     public void testReadGuardPoliciesYaml() throws Exception {
751         testReadGuardPolicies(APP_YAML);
752     }
753
754     private void testReadGuardPolicies(String mediaType) throws Exception {
755         createGuardPolicies();
756
757         Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, mediaType);
758         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
759
760         rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, mediaType);
761         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
762
763         rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, mediaType);
764         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
765
766         rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, mediaType);
767         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
768     }
769
770     @Test
771     public void testReadOperationalPoliciesJson() throws Exception {
772         testReadOperationalPolicies(APP_JSON);
773     }
774
775     @Test
776     public void testReadOperationalPoliciesYaml() throws Exception {
777         testReadOperationalPolicies(APP_YAML);
778     }
779
780     private void testReadOperationalPolicies(String mediaType) throws Exception {
781         createOperationalPolicies();
782
783         Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, mediaType);
784         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
785
786         rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, mediaType);
787         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
788
789         rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
790         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
791
792         rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
793         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
794
795         rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, mediaType);
796         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
797
798         rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, mediaType);
799         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
800     }
801
802     @Test
803     public void testDeleteGuardPolicyJson() throws Exception {
804         testDeleteGuardPolicy(APP_JSON);
805     }
806
807     @Test
808     public void testDeleteGuardPolicyYaml() throws Exception {
809         testDeleteGuardPolicy(APP_YAML);
810     }
811
812     private void testDeleteGuardPolicy(String mediaType) throws Exception {
813         createGuardPolicies();
814
815         Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, mediaType);
816         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
817     }
818
819     @Test
820     public void testGetDeployedVersionsOfGuardPolicyJson() throws Exception {
821         testGetDeployedVersionsOfGuardPolicy(APP_JSON);
822     }
823
824     @Test
825     public void testGetDeployedVersionsOfGuardPolicyYaml() throws Exception {
826         testGetDeployedVersionsOfGuardPolicy(APP_YAML);
827     }
828
829     private void testGetDeployedVersionsOfGuardPolicy(String mediaType) throws Exception {
830         Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_DEPLOYED, mediaType);
831         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
832         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
833         assertEquals(
834                 "could not find policy with ID guard.frequency.scaleout and type "
835                         + "onap.policies.controlloop.guard.FrequencyLimiter:1.0.0 deployed in any pdp group",
836                 errorResponse.getErrorMessage());
837     }
838
839     @Test
840     public void testDeleteOperationalPolicyJson() throws Exception {
841         testDeleteOperationalPolicy(APP_JSON);
842     }
843
844     @Test
845     public void testDeleteOperationalPolicyYaml() throws Exception {
846         testDeleteOperationalPolicy(APP_YAML);
847     }
848
849     private void testDeleteOperationalPolicy(String mediaType) throws Exception {
850         createPolicyTypes();
851
852         Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, mediaType);
853         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
854         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
855         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VCPE + ":1", error.getErrorMessage());
856     }
857
858     @Test
859     public void testGetDeployedVersionsOfPolicyJson() throws Exception {
860         testGetDeployedVersionsOfPolicy(APP_JSON);
861     }
862
863     @Test
864     public void testGetDeployedVersionsOfPolicyYaml() throws Exception {
865         testGetDeployedVersionsOfPolicy(APP_YAML);
866     }
867
868     private void testGetDeployedVersionsOfPolicy(String mediaType) throws Exception {
869         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED, mediaType);
870         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
871         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
872         assertEquals(
873                 "could not find policy with ID onap.restart.tca and type "
874                         + "onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group",
875                 errorResponse.getErrorMessage());
876     }
877
878     @Test
879     public void testGetLatestVersionOfOperationalPolicyJson() throws Exception {
880         testGetLatestVersionOfOperationalPolicy(APP_JSON);
881     }
882
883     @Test
884     public void testGetLatestVersionOfOperationalPolicyYaml() throws Exception {
885         testGetLatestVersionOfOperationalPolicy(APP_YAML);
886     }
887
888     private void testGetLatestVersionOfOperationalPolicy(String mediaType) throws Exception {
889         Response rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
890         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
891         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
892         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":null", errorResponse.getErrorMessage());
893     }
894
895     @Test
896     public void testGetSpecificVersionOfOperationalPolicyJson() throws Exception {
897         testGetSpecificVersionOfOperationalPolicy(APP_JSON);
898     }
899
900     @Test
901     public void testGetSpecificVersionOfOperationalPolicyYaml() throws Exception {
902         testGetSpecificVersionOfOperationalPolicy(APP_YAML);
903     }
904
905     private void testGetSpecificVersionOfOperationalPolicy(String mediaType) throws Exception {
906         Response rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
907         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
908         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
909         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
910     }
911
912     @Test
913     public void testGetDeployedVersionsOfOperationalPolicyJson() throws Exception {
914         testGetDeployedVersionsOfOperationalPolicy(APP_JSON);
915     }
916
917     @Test
918     public void testGetDeployedVersionsOfOperationalPolicyYaml() throws Exception {
919         testGetDeployedVersionsOfOperationalPolicy(APP_YAML);
920     }
921
922     private void testGetDeployedVersionsOfOperationalPolicy(String mediaType) throws Exception {
923         Response rawResponse = readResource(OPS_POLICIES_VCPE_DEPLOYED, mediaType);
924         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
925         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
926         assertEquals(
927                 "could not find policy with ID " + OP_POLICY_NAME_VCPE + " and type "
928                         + "onap.policies.controlloop.Operational:1.0.0 deployed in any pdp group",
929                 errorResponse.getErrorMessage());
930     }
931
932     @Test
933     public void testDeleteSpecificVersionOfOperationalPolicy() throws Exception {
934         createOperationalPolicies();
935
936         Response rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, APP_JSON);
937         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
938
939         rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, APP_YAML);
940         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
941         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
942         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
943     }
944
945     private Response createResource(String endpoint, String resourceName) throws Exception {
946
947         String mediaType = APP_JSON; // default media type
948         ToscaServiceTemplate rawServiceTemplate = new ToscaServiceTemplate();
949         if (resourceName.endsWith(".json")) {
950             rawServiceTemplate =
951                     standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
952         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
953             mediaType = APP_YAML;
954             rawServiceTemplate = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
955                     ToscaServiceTemplate.class);
956         }
957
958         final Invocation.Builder invocationBuilder;
959
960         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
961
962         Entity<ToscaServiceTemplate> entity = Entity.entity(rawServiceTemplate, mediaType);
963         return invocationBuilder.post(entity);
964     }
965
966     private Response createGuardPolicy(String endpoint, String resourceName) throws Exception {
967
968         String mediaType = APP_JSON; // default media type
969         LegacyGuardPolicyInput rawGuardPolicy = new LegacyGuardPolicyInput();
970         if (resourceName.endsWith(".json")) {
971             rawGuardPolicy =
972                     standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
973         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
974             mediaType = APP_YAML;
975             rawGuardPolicy = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
976                     LegacyGuardPolicyInput.class);
977         }
978
979         final Invocation.Builder invocationBuilder;
980
981         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
982
983         Entity<LegacyGuardPolicyInput> entity = Entity.entity(rawGuardPolicy, mediaType);
984         return invocationBuilder.post(entity);
985     }
986
987     private Response createOperationalPolicy(String endpoint, String resourceName) throws Exception {
988
989         String mediaType = APP_JSON; // default media type
990         LegacyOperationalPolicy rawOpsPolicy = new LegacyOperationalPolicy();
991         if (resourceName.endsWith(".json")) {
992             rawOpsPolicy = standardCoder.decode(ResourceUtils.getResourceAsString(resourceName),
993                     LegacyOperationalPolicy.class);
994         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
995             mediaType = APP_YAML;
996             rawOpsPolicy = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
997                     LegacyOperationalPolicy.class);
998         }
999
1000         final Invocation.Builder invocationBuilder;
1001
1002         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1003
1004         Entity<LegacyOperationalPolicy> entity = Entity.entity(rawOpsPolicy, mediaType);
1005         return invocationBuilder.post(entity);
1006     }
1007
1008     private Response readResource(String endpoint, String mediaType) throws Exception {
1009
1010         final Invocation.Builder invocationBuilder;
1011
1012         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1013
1014         return invocationBuilder.get();
1015
1016     }
1017
1018     private Response deleteResource(String endpoint, String mediaType) throws Exception {
1019
1020         final Invocation.Builder invocationBuilder;
1021
1022         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1023
1024         return invocationBuilder.delete();
1025     }
1026
1027     private void createPolicyTypes() throws Exception {
1028         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
1029             Response rawResponse = createResource(POLICYTYPES, resrcName);
1030             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1031         }
1032     }
1033
1034     private void createGuardPolicies() throws Exception {
1035         createPolicyTypes();
1036
1037         for (String resrcName : LEGACY_GUARD_POLICY_RESOURCE_NAMES) {
1038             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName);
1039             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1040         }
1041     }
1042
1043     private void createOperationalPolicies() throws Exception {
1044         createPolicyTypes();
1045
1046         for (String resrcName : LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES) {
1047             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName);
1048             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1049         }
1050     }
1051
1052     private Invocation.Builder sendHttpsRequest(final String endpoint, String mediaType) throws Exception {
1053
1054         final TrustManager[] noopTrustManager = NetworkUtil.getAlwaysTrustingManager();
1055
1056         final SSLContext sc = SSLContext.getInstance("TLSv1.2");
1057         sc.init(null, noopTrustManager, new SecureRandom());
1058         final ClientBuilder clientBuilder =
1059                 ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
1060         final Client client = clientBuilder.build();
1061         final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1062         client.register(feature);
1063
1064         client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1065         if (APP_JSON.equalsIgnoreCase(mediaType)) {
1066             client.register(GsonMessageBodyHandler.class);
1067         } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
1068             client.register(YamlMessageBodyHandler.class);
1069         }
1070
1071         final WebTarget webTarget = client.target("https://localhost:" + apiPort + "/policy/api/v1/" + endpoint);
1072
1073         final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
1074
1075         if (!NetworkUtil.isTcpPortOpen("localhost", apiPort, 60, 1000L)) {
1076             throw new IllegalStateException("cannot connect to port " + apiPort);
1077         }
1078         return invocationBuilder;
1079     }
1080
1081     private void updateApiStatistics() {
1082
1083         ApiStatisticsManager.updateTotalApiCallCount();
1084         ApiStatisticsManager.updateApiCallSuccessCount();
1085         ApiStatisticsManager.updateApiCallFailureCount();
1086         ApiStatisticsManager.updateTotalPolicyGetCount();
1087         ApiStatisticsManager.updateTotalPolicyPostCount();
1088         ApiStatisticsManager.updateTotalPolicyTypeGetCount();
1089         ApiStatisticsManager.updateTotalPolicyTypePostCount();
1090         ApiStatisticsManager.updatePolicyGetSuccessCount();
1091         ApiStatisticsManager.updatePolicyGetFailureCount();
1092         ApiStatisticsManager.updatePolicyPostSuccessCount();
1093         ApiStatisticsManager.updatePolicyPostFailureCount();
1094         ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
1095         ApiStatisticsManager.updatePolicyTypeGetFailureCount();
1096         ApiStatisticsManager.updatePolicyTypePostSuccessCount();
1097         ApiStatisticsManager.updatePolicyTypePostFailureCount();
1098     }
1099
1100     private void validateStatisticsReport(final StatisticsReport report, final int code) {
1101
1102         assertEquals(code, report.getCode());
1103     }
1104
1105     private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
1106             final String message, final HealthCheckReport report) {
1107
1108         assertEquals(name, report.getName());
1109         assertEquals(url, report.getUrl());
1110         assertEquals(healthy, report.isHealthy());
1111         assertEquals(code, report.getCode());
1112         assertEquals(message, report.getMessage());
1113     }
1114
1115     private void deleteToscaPolicies(ToscaEntityKey policyTypeKey) throws Exception {
1116
1117         String getPoliciesPath =
1118                 "policytypes/" + policyTypeKey.getName() + "/versions/" + policyTypeKey.getVersion() + "/policies";
1119
1120         Response rawPolicyResponse = readResource(getPoliciesPath, APP_JSON);
1121         if (Response.Status.OK.getStatusCode() == rawPolicyResponse.getStatus()) {
1122             ToscaServiceTemplate policyResponse = rawPolicyResponse.readEntity(ToscaServiceTemplate.class);
1123
1124             for (ToscaEntityKey policyKey : policyResponse.getToscaTopologyTemplate().getPoliciesAsMap().keySet()) {
1125                 String deletePolicyPath =
1126                         "policytypes/" + policyTypeKey.getName() + "/versions/" + policyTypeKey.getVersion()
1127                                 + "/policies/" + policyKey.getName() + "/versions/" + policyKey.getVersion();
1128                 deleteResource(deletePolicyPath, APP_JSON);
1129             }
1130         }
1131     }
1132
1133     private void deleteLegacyPolicies(String[] legacyPolicyNames, String legacyPolicyType) throws Exception {
1134
1135         for (String policyName : legacyPolicyNames) {
1136             String policyPath =
1137                     "policytypes/" + legacyPolicyType + "/versions/1.0.0/policies/" + policyName + "/versions/1";
1138             if (Response.Status.OK.getStatusCode() == readResource(policyPath, APP_JSON).getStatus()) {
1139                 deleteResource(policyPath, APP_JSON);
1140             }
1141         }
1142     }
1143 }