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