1b1ed3cf4c070638575e84533a72211c7ada280c
[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 POLICIES = "policies";
150
151     private static final String KEYSTORE = System.getProperty("user.dir") + "/src/test/resources/ssl/policy-keystore";
152
153     // @formatter:off
154     private static final String[] TOSCA_POLICY_RESOURCE_NAMES = {
155         "policies/vCPE.policy.monitoring.input.tosca.json",
156         "policies/vCPE.policy.monitoring.input.tosca.v2.yaml",
157         "policies/vDNS.policy.monitoring.input.tosca.json",
158         "policies/vDNS.policy.monitoring.input.tosca.v2.yaml"
159     };
160
161     private static final String[] TOSCA_POLICIES_RESOURCE_NAMES = {
162         "policies/vCPE.policies.optimization.input.tosca.json",
163         "policies/vCPE.policies.optimization.input.tosca.v2.yaml"
164     };
165
166     private static final String TOSCA_POLICYTYPE_OP_RESOURCE =
167         "policytypes/onap.policies.controlloop.operational.Common.yaml";
168
169     private static final String LEGACY_POLICYTYPE_OP_RESOURCE =
170         "policytypes/onap.policies.controlloop.Operational.yaml";
171
172     private static final String[] TOSCA_POLICYTYPE_RESOURCE_NAMES = {
173         "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml",
174         "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
175         "policytypes/onap.policies.Optimization.yaml",
176         LEGACY_POLICYTYPE_OP_RESOURCE,
177         TOSCA_POLICYTYPE_OP_RESOURCE,
178         "policytypes/onap.policies.controlloop.operational.common.Drools.yaml",
179         "policytypes/onap.policies.controlloop.guard.Common.yaml",
180         "policytypes/onap.policies.controlloop.guard.common.Blacklist.yaml",
181         "policytypes/onap.policies.controlloop.guard.common.FrequencyLimiter.yaml",
182         "policytypes/onap.policies.controlloop.guard.common.MinMax.yaml",
183         "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
184         "policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml",
185         "policytypes/onap.policies.optimization.resource.DistancePolicy.yaml",
186         "policytypes/onap.policies.optimization.resource.HpaPolicy.yaml",
187         "policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml",
188         "policytypes/onap.policies.optimization.resource.PciPolicy.yaml",
189         "policytypes/onap.policies.optimization.service.QueryPolicy.yaml",
190         "policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml",
191         "policytypes/onap.policies.optimization.resource.Vim_fit.yaml",
192         "policytypes/onap.policies.optimization.resource.VnfPolicy.yaml"
193     };
194
195     private static final String TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_JSON =
196         "policies/vCPE.policy.operational.input.tosca.json";
197
198     private static final String TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML =
199         "policies/vCPE.policy.operational.input.tosca.yaml";
200
201     private static final String[] LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES = {
202         "policies/vCPE.policy.operational.legacy.input.json",
203         "policies/vDNS.policy.operational.legacy.input.json",
204         "policies/vFirewall.policy.operational.legacy.input.json"
205     };
206
207     private static PolicyModelsProviderParameters providerParams;
208     private static ApiParameterGroup apiParamGroup;
209     private static PolicyProvider policyProvider;
210     private static PolicyTypeProvider policyTypeProvider;
211
212     // @formatter:on
213
214     private static final StandardCoder standardCoder = new StandardCoder();
215
216     private static int apiPort;
217     private static Main apiMain;
218
219     private static StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
220
221     /**
222      * Initializes parameters and set up test environment.
223      *
224      * @throws PfModelException the PfModel parsing exception
225      * @throws IOException on I/O exceptions
226      */
227     @BeforeClass
228     public static void setupParameters() throws PfModelException, IOException {
229         providerParams = new PolicyModelsProviderParameters();
230         // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
231         providerParams.setDatabaseDriver("org.h2.Driver");
232         providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
233         providerParams.setDatabaseUser("policy");
234         providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
235         providerParams.setPersistenceUnit("ToscaConceptTest");
236         apiParamGroup =
237             new ApiParameterGroup("ApiGroup", null, providerParams, Collections.emptyList(), Collections.emptyList());
238         ParameterService.register(apiParamGroup, true);
239
240         policyTypeProvider = new PolicyTypeProvider();
241         policyProvider = new PolicyProvider();
242
243         apiPort = NetworkUtil.allocPort();
244
245         final String[] apiConfigParameters = new String[2];
246         final Properties systemProps = System.getProperties();
247         systemProps.put("javax.net.ssl.keyStore", KEYSTORE);
248         systemProps.put("javax.net.ssl.keyStorePassword", "Pol1cy_0nap");
249         System.setProperties(systemProps);
250         new CommonTestData().makeParameters("src/test/resources/parameters/ApiConfigParameters_Https.json",
251             "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json", apiPort);
252         apiConfigParameters[0] = "-c";
253         apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json";
254
255         apiMain = new Main(apiConfigParameters);
256     }
257
258     /**
259      * Method for cleanup after each test.
260      */
261     @AfterClass
262     public static void teardown() throws Exception {
263         policyTypeProvider.close();
264         policyProvider.close();
265
266         if (apiMain != null) {
267             apiMain.shutdown();
268         }
269     }
270
271     @Test
272     public void testApiStatisticsConstructorIsPrivate() {
273
274         try {
275             final Constructor<ApiStatisticsManager> constructor = ApiStatisticsManager.class.getDeclaredConstructor();
276             assertTrue(Modifier.isPrivate(constructor.getModifiers()));
277             constructor.setAccessible(true);
278             constructor.newInstance();
279
280         } catch (final Exception exp) {
281             assertTrue(exp.getCause().toString().contains("Instantiation of the class is not allowed"));
282         }
283     }
284
285     @Test
286     public void testCreatePolicyTypes() throws Exception {
287         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
288             Response rawResponse = createResource(POLICYTYPES, resrcName);
289             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
290             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
291             assertNotNull(response);
292             assertFalse(response.getPolicyTypes().isEmpty());
293         }
294
295         // Send a policy type with a null value to trigger an error
296         Response rawResponse = readResource(POLICYTYPES, APP_JSON);
297         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
298         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
299         String firstPolicyType = response.getPolicyTypes().keySet().iterator().next();
300         response.getPolicyTypes().put(firstPolicyType, null);
301         Response rawResponse2 = createResource(POLICYTYPES, standardCoder.encode(response));
302         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse2.getStatus());
303         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
304         assertEquals("no policy types specified on service template", errorResponse.getErrorMessage());
305     }
306
307     @Test
308     public void testCreatePolicies() throws Exception {
309         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
310             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
311             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
312         }
313
314         new File("src/test/resources/policies/BadTestPolicy.yaml").deleteOnExit();
315
316         // Send a policy with no policy type trigger an error
317         String toscaPolicy =
318             ResourceUtils.getResourceAsString(TOSCA_POLICY_RESOURCE_NAMES[TOSCA_POLICIES_RESOURCE_NAMES.length - 1]);
319
320         toscaPolicy = toscaPolicy.replaceAll("onap.policies.monitoring.cdap.tca.hi.lo.app", "");
321         TextFileUtils.putStringAsTextFile(toscaPolicy, "src/test/resources/policies/BadTestPolicy.yaml");
322
323         Response rawResponse2 =
324             createResource(POLICYTYPES_TCA_POLICIES, "src/test/resources/policies/BadTestPolicy.yaml");
325         assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), rawResponse2.getStatus());
326         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
327         assertThat(errorResponse.getErrorMessage())
328             .contains("entity in incoming fragment does not equal existing entity");
329     }
330
331     @Test
332     public void testSimpleCreatePolicies() throws Exception {
333         for (String resrcName : TOSCA_POLICIES_RESOURCE_NAMES) {
334             Response rawResponse = createResource(POLICIES, resrcName);
335             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
336         }
337
338         new File("src/test/resources/policies/BadTestPolicy.yaml").deleteOnExit();
339
340         // Send a policy with no policy type trigger an error
341         String toscaPolicy =
342             ResourceUtils.getResourceAsString(TOSCA_POLICY_RESOURCE_NAMES[TOSCA_POLICIES_RESOURCE_NAMES.length - 1]);
343
344         toscaPolicy = toscaPolicy.replaceAll("onap.policies.monitoring.cdap.tca.hi.lo.app", "");
345         TextFileUtils.putStringAsTextFile(toscaPolicy, "src/test/resources/policies/BadTestPolicy.yaml");
346
347         Response rawResponse2 = createResource(POLICIES, "src/test/resources/policies/BadTestPolicy.yaml");
348         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
349         assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), rawResponse2.getStatus());
350         assertThat(errorResponse.getErrorMessage()).contains("policy type NULL:1.0.0 referenced in policy not found");
351     }
352
353     @Test
354     public void testCreateOperationalPolicies() throws Exception {
355         for (String resrcName : LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES) {
356             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName);
357             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
358         }
359
360         Response rawResponse = deleteResource(OPS_POLICIES + "/operational.restart/versions/1", APP_JSON);
361         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
362
363         rawResponse = deleteResource(OPS_POLICIES + "/operational.scaleout/versions/1", APP_JSON);
364         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
365
366         rawResponse = deleteResource(OPS_POLICIES + "/operational.modifyconfig/versions/1", APP_JSON);
367         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
368     }
369
370     @SuppressWarnings("unchecked")
371     @Test
372     public void testToscaCompliantOpDroolsPolicies() throws Exception {
373         Response rawResponse = createResource(POLICYTYPES, TOSCA_POLICYTYPE_OP_RESOURCE);
374         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
375
376         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, APP_JSON);
377         //
378         // PLD not sure how to fix this? How do I merge 2 policy types?
379         //
380         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
381         System.err.println(errorResponse.getErrorMessage());
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_VNF_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_VNF_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_VNF_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_VNF_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_VNF_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             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
751         }
752
753         Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, mediaType);
754         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
755
756         rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, mediaType);
757         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
758
759         rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
760         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
761
762         rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
763         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
764
765         rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, mediaType);
766         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
767
768         rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, mediaType);
769         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
770
771         rawResponse = deleteResource(OPS_POLICIES + "/operational.restart/versions/1", APP_JSON);
772         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
773
774         rawResponse = deleteResource(OPS_POLICIES + "/operational.scaleout/versions/1", APP_JSON);
775         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
776
777         rawResponse = deleteResource(OPS_POLICIES + "/operational.modifyconfig/versions/1", APP_JSON);
778         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
779
780     }
781
782     @Test
783     public void testDeleteOperationalPolicyJson() throws Exception {
784         testDeleteOperationalPolicy(APP_JSON);
785     }
786
787     @Test
788     public void testDeleteOperationalPolicyYaml() throws Exception {
789         testDeleteOperationalPolicy(APP_YAML);
790     }
791
792     private void testDeleteOperationalPolicy(String mediaType) throws Exception {
793         Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, mediaType);
794         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
795         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
796         assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
797     }
798
799     @Test
800     public void testGetLatestVersionOfOperationalPolicyJson() throws Exception {
801         testGetLatestVersionOfOperationalPolicy(APP_JSON);
802     }
803
804     @Test
805     public void testGetLatestVersionOfOperationalPolicyYaml() throws Exception {
806         testGetLatestVersionOfOperationalPolicy(APP_YAML);
807     }
808
809     private void testGetLatestVersionOfOperationalPolicy(String mediaType) throws Exception {
810         Response rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
811         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
812         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
813         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":null", errorResponse.getErrorMessage());
814     }
815
816     @Test
817     public void testGetSpecificVersionOfOperationalPolicyJson() throws Exception {
818         testGetSpecificVersionOfOperationalPolicy(APP_JSON);
819     }
820
821     @Test
822     public void testGetSpecificVersionOfOperationalPolicyYaml() throws Exception {
823         testGetSpecificVersionOfOperationalPolicy(APP_YAML);
824     }
825
826     private void testGetSpecificVersionOfOperationalPolicy(String mediaType) throws Exception {
827         Response rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
828         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
829         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
830         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
831     }
832
833     @Test
834     public void testGetDeployedVersionsOfOperationalPolicyJson() throws Exception {
835         testGetDeployedVersionsOfOperationalPolicy(APP_JSON);
836     }
837
838     @Test
839     public void testGetDeployedVersionsOfOperationalPolicyYaml() throws Exception {
840         testGetDeployedVersionsOfOperationalPolicy(APP_YAML);
841     }
842
843     private void testGetDeployedVersionsOfOperationalPolicy(String mediaType) throws Exception {
844         Response rawResponse = readResource(OPS_POLICIES_VCPE_DEPLOYED, mediaType);
845         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
846         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
847         assertEquals(
848             "could not find policy with ID " + OP_POLICY_NAME_VCPE + " and type "
849                 + "onap.policies.controlloop.Operational:1.0.0 deployed in any pdp group",
850             errorResponse.getErrorMessage());
851     }
852
853     @Test
854     public void testDeleteSpecificVersionOfOperationalPolicy() throws Exception {
855         Response rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, APP_YAML);
856         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
857         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
858         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
859     }
860
861     private Response createResource(String endpoint, String resourceName) throws Exception {
862
863         String mediaType = APP_JSON; // default media type
864         ToscaServiceTemplate rawServiceTemplate = new ToscaServiceTemplate();
865         if (resourceName.endsWith(".json")) {
866             rawServiceTemplate =
867                 standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
868         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
869             mediaType = APP_YAML;
870             rawServiceTemplate =
871                 standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
872         }
873
874         final Invocation.Builder invocationBuilder;
875
876         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
877
878         Entity<ToscaServiceTemplate> entity = Entity.entity(rawServiceTemplate, mediaType);
879         return invocationBuilder.post(entity);
880     }
881
882     private Response createOperationalPolicy(String endpoint, String resourceName) throws Exception {
883
884         String mediaType = APP_JSON; // default media type
885         LegacyOperationalPolicy rawOpsPolicy = new LegacyOperationalPolicy();
886         if (resourceName.endsWith(".json")) {
887             rawOpsPolicy =
888                 standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), LegacyOperationalPolicy.class);
889         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
890             mediaType = APP_YAML;
891             rawOpsPolicy = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
892                 LegacyOperationalPolicy.class);
893         }
894
895         final Invocation.Builder invocationBuilder;
896
897         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
898
899         Entity<LegacyOperationalPolicy> entity = Entity.entity(rawOpsPolicy, mediaType);
900         return invocationBuilder.post(entity);
901     }
902
903     private Response readResource(String endpoint, String mediaType) throws Exception {
904
905         final Invocation.Builder invocationBuilder;
906
907         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
908
909         return invocationBuilder.get();
910
911     }
912
913     private Response deleteResource(String endpoint, String mediaType) throws Exception {
914
915         final Invocation.Builder invocationBuilder;
916
917         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
918
919         return invocationBuilder.delete();
920     }
921
922     private Invocation.Builder sendHttpsRequest(final String endpoint, String mediaType) throws Exception {
923
924         final TrustManager[] noopTrustManager = NetworkUtil.getAlwaysTrustingManager();
925
926         final SSLContext sc = SSLContext.getInstance("TLSv1.2");
927         sc.init(null, noopTrustManager, new SecureRandom());
928         final ClientBuilder clientBuilder =
929             ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
930         final Client client = clientBuilder.build();
931         final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
932         client.register(feature);
933
934         client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
935         if (APP_JSON.equalsIgnoreCase(mediaType)) {
936             client.register(GsonMessageBodyHandler.class);
937         } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
938             client.register(YamlMessageBodyHandler.class);
939         }
940
941         final WebTarget webTarget = client.target("https://localhost:" + apiPort + "/policy/api/v1/" + endpoint);
942
943         final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
944
945         if (!NetworkUtil.isTcpPortOpen("localhost", apiPort, 60, 1000L)) {
946             throw new IllegalStateException("cannot connect to port " + apiPort);
947         }
948         return invocationBuilder;
949     }
950
951     private void updateApiStatistics() {
952
953         ApiStatisticsManager.updateTotalApiCallCount();
954         ApiStatisticsManager.updateApiCallSuccessCount();
955         ApiStatisticsManager.updateApiCallFailureCount();
956         ApiStatisticsManager.updateTotalPolicyGetCount();
957         ApiStatisticsManager.updateTotalPolicyPostCount();
958         ApiStatisticsManager.updateTotalPolicyTypeGetCount();
959         ApiStatisticsManager.updateTotalPolicyTypePostCount();
960         ApiStatisticsManager.updatePolicyGetSuccessCount();
961         ApiStatisticsManager.updatePolicyGetFailureCount();
962         ApiStatisticsManager.updatePolicyPostSuccessCount();
963         ApiStatisticsManager.updatePolicyPostFailureCount();
964         ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
965         ApiStatisticsManager.updatePolicyTypeGetFailureCount();
966         ApiStatisticsManager.updatePolicyTypePostSuccessCount();
967         ApiStatisticsManager.updatePolicyTypePostFailureCount();
968     }
969
970     private void validateStatisticsReport(final StatisticsReport report, final int code) {
971
972         assertEquals(code, report.getCode());
973     }
974
975     private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
976         final String message, final HealthCheckReport report) {
977
978         assertEquals(name, report.getName());
979         assertEquals(url, report.getUrl());
980         assertEquals(healthy, report.isHealthy());
981         assertEquals(code, report.getCode());
982         assertEquals(message, report.getMessage());
983     }
984 }