Make type and type_version mandatory on policies
[policy/api.git] / main / src / test / java / org / onap / policy / api / main / rest / TestApiRestServer.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
4  *  Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
5  *  Modifications Copyright (C) 2019-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", "IDontExist");
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", "IDontExist");
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())
351             .contains("policy type IDontExist:1.0.0 referenced in policy not found");
352     }
353
354     @Test
355     public void testCreateOperationalPolicies() throws Exception {
356         for (String resrcName : LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES) {
357             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName);
358             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
359         }
360
361         Response rawResponse = deleteResource(OPS_POLICIES + "/operational.restart/versions/1", APP_JSON);
362         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
363
364         rawResponse = deleteResource(OPS_POLICIES + "/operational.scaleout/versions/1", APP_JSON);
365         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
366
367         rawResponse = deleteResource(OPS_POLICIES + "/operational.modifyconfig/versions/1", APP_JSON);
368         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
369     }
370
371     @SuppressWarnings("unchecked")
372     @Test
373     public void testToscaCompliantOpDroolsPolicies() throws Exception {
374         Response rawResponse = createResource(POLICYTYPES, TOSCA_POLICYTYPE_OP_RESOURCE);
375         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
376
377         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, APP_JSON);
378         //
379         // PLD not sure how to fix this? How do I merge 2 policy types?
380         //
381         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
382         System.err.println(errorResponse.getErrorMessage());
383         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
384
385         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_JSON);
386         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
387
388         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML);
389         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
390
391         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
392         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
393
394         rawResponse = deleteResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
395         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
396
397         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML);
398         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
399
400         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
401         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
402
403         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_YAML);
404         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
405
406         ToscaServiceTemplate toscaVcpeSt = rawResponse.readEntity(ToscaServiceTemplate.class);
407         assertEquals(1, toscaVcpeSt.getToscaTopologyTemplate().getPolicies().size());
408         assertEquals(OP_POLICY_NAME_VCPE,
409             toscaVcpeSt.getToscaTopologyTemplate().getPolicies().get(0).get(OP_POLICY_NAME_VCPE).getName());
410
411         Map<String, Object> props =
412             toscaVcpeSt.getToscaTopologyTemplate().getPolicies().get(0).get(OP_POLICY_NAME_VCPE).getProperties();
413         assertNotNull(props);
414
415         List<Object> operations = (List<Object>) props.get("operations");
416         assertEquals(1, operations.size());
417         assertEquals(props.get("trigger"), ((Map<String, Object>) operations.get(0)).get("id"));
418
419         Map<String, Object> operation =
420             (Map<String, Object>) ((Map<String, Object>) operations.get(0)).get("operation");
421         assertEquals("APPC", operation.get("actor"));
422         assertEquals("Restart", operation.get("operation"));
423
424         rawResponse = deleteResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
425         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
426     }
427
428     @Test
429     public void testHealthCheckSuccessJson() throws Exception {
430         testHealthCheckSuccess(APP_JSON);
431     }
432
433     @Test
434     public void testHealthCheckSuccessYaml() throws Exception {
435         testHealthCheckSuccess(APP_YAML);
436     }
437
438     private void testHealthCheckSuccess(String mediaType) throws Exception {
439         final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT, mediaType);
440         final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
441         validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
442     }
443
444     @Test
445     public void testApiStatistics_200_Json() throws Exception {
446         testApiStatistics_200(APP_JSON);
447     }
448
449     @Test
450     public void testApiStatistics_200_Yaml() throws Exception {
451         testApiStatistics_200(APP_YAML);
452     }
453
454     private void testApiStatistics_200(String mediaType) throws Exception {
455         Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType);
456         StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
457         validateStatisticsReport(report, 200);
458         updateApiStatistics();
459         invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType);
460         report = invocationBuilder.get(StatisticsReport.class);
461         validateStatisticsReport(report, 200);
462         ApiStatisticsManager.resetAllStatistics();
463     }
464
465     @Test
466     public void testReadPolicyTypesJson() throws Exception {
467         testReadPolicyTypes(APP_JSON);
468     }
469
470     @Test
471     public void testReadPolicyTypesYaml() throws Exception {
472         testReadPolicyTypes(APP_YAML);
473     }
474
475     private void testReadPolicyTypes(String mediaType) throws Exception {
476         Response rawResponse = readResource("policytypes/onap.policies.optimization.resource.HpaPolicy", mediaType);
477         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
478         ToscaServiceTemplate namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
479         assertNotNull(namingServiceTemplate);
480         assertEquals(3, namingServiceTemplate.getPolicyTypesAsMap().size());
481         assertEquals(5, namingServiceTemplate.getDataTypesAsMap().size());
482
483         rawResponse = readResource(POLICYTYPES, mediaType);
484         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
485         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
486         assertFalse(response.getPolicyTypes().isEmpty());
487
488         rawResponse = readResource(POLICYTYPES_TCA, mediaType);
489         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
490
491         rawResponse = readResource(POLICYTYPES_TCA_VERSION, mediaType);
492         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
493
494         rawResponse = readResource(POLICYTYPES_TCA_LATEST, mediaType);
495         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
496
497         rawResponse = readResource(POLICYTYPES_COLLECTOR, mediaType);
498         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
499
500         rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, mediaType);
501         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
502
503         rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, mediaType);
504         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
505
506         rawResponse = readResource(POLICYTYPES_DROOLS, mediaType);
507         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
508
509         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, mediaType);
510         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
511
512         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION_LATEST, mediaType);
513         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
514
515         rawResponse = readResource(POLICYTYPES_NAMING_VERSION, mediaType);
516         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
517     }
518
519     @Test
520     public void testDeletePolicyTypeJson() throws Exception {
521         testDeletePolicyType(APP_JSON);
522     }
523
524     @Test
525     public void testDeletePolicyTypeYaml() throws Exception {
526         testDeletePolicyType(APP_YAML);
527     }
528
529     private void testDeletePolicyType(String mediaType) throws Exception {
530         Response rawResponse = deleteResource("policytypes/onap.policies.IDoNotExist/versions/1.0.0", mediaType);
531         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
532
533         rawResponse = createResource(POLICYTYPES, "policytypes/onap.policies.Test.yaml");
534         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
535
536         rawResponse = readResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType);
537         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
538
539         rawResponse = deleteResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType);
540         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
541
542         rawResponse = readResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType);
543         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
544     }
545
546     @Test
547     public void testReadPoliciesJson() throws Exception {
548         testReadPolicies(APP_JSON);
549     }
550
551     @Test
552     public void testReadPoliciesYaml() throws Exception {
553         testReadPolicies(APP_YAML);
554     }
555
556     private void testReadPolicies(String mediaType) throws Exception {
557         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
558             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
559             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
560         }
561
562         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType);
563         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
564
565         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType);
566         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
567
568         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
569         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
570
571         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
572         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
573
574         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType);
575         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
576
577         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
578         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
579
580         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
581         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
582     }
583
584     @Test
585     public void testNamingPolicyGet() throws Exception {
586
587         Response rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
588             + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/1.0.0", APP_JSON);
589         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
590
591         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
592             + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/1.0.0?mode=referenced", APP_JSON);
593         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
594
595         ToscaServiceTemplate namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
596         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
597         assertEquals(1, namingServiceTemplate.getPolicyTypesAsMap().size());
598         assertEquals(3, namingServiceTemplate.getDataTypesAsMap().size());
599
600         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
601             + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/latest?mode=referenced", APP_JSON);
602         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
603
604         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
605         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
606         assertEquals(1, namingServiceTemplate.getPolicyTypesAsMap().size());
607         assertEquals(3, namingServiceTemplate.getDataTypesAsMap().size());
608
609         rawResponse =
610             readResource("policytypes/onap.policies.Naming/versions/1.0.0/policies?mode=referenced", APP_JSON);
611         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
612
613         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
614         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
615         assertEquals(1, namingServiceTemplate.getPolicyTypesAsMap().size());
616         assertEquals(3, namingServiceTemplate.getDataTypesAsMap().size());
617
618         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
619             + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/1.0.0", APP_JSON);
620         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
621
622         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
623
624         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
625         assertNull(namingServiceTemplate.getPolicyTypes());
626         assertNull(namingServiceTemplate.getDataTypes());
627
628         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
629             + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/latest", APP_JSON);
630         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
631
632         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
633         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
634         assertNull(namingServiceTemplate.getPolicyTypes());
635         assertNull(namingServiceTemplate.getDataTypes());
636
637         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/policies", APP_JSON);
638         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
639
640         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
641         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
642         assertNull(namingServiceTemplate.getPolicyTypes());
643         assertNull(namingServiceTemplate.getDataTypes());
644     }
645
646     @Test
647     public void testDeletePoliciesJson() throws Exception {
648         testDeletePolicies(APP_JSON);
649     }
650
651     @Test
652     public void testDeletePoliciesYaml() throws Exception {
653         testDeletePolicies(APP_YAML);
654     }
655
656     private void testDeletePolicies(String mediaType) throws Exception {
657         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
658         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
659         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
660         assertEquals("policy onap.restart.tca:1.0.0 not found", error.getErrorMessage());
661     }
662
663     @Test
664     public void testDeletePolicyVersionJson() throws Exception {
665         testDeletePolicyVersion(APP_JSON);
666     }
667
668     @Test
669     public void testDeletePolicyVersionYaml() throws Exception {
670         testDeletePolicyVersion(APP_YAML);
671     }
672
673     private void testDeletePolicyVersion(String mediaType) throws Exception {
674         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
675             Response rawResponse = createResource(POLICYTYPES, resrcName);
676             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
677             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
678             assertNotNull(response);
679             assertFalse(response.getPolicyTypes().isEmpty());
680         }
681         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
682             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
683             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
684         }
685         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
686         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
687
688         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
689         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
690         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
691         assertEquals("policies for onap.restart.tca:1.0.0 do not exist", errorResponse.getErrorMessage());
692
693         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
694         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
695
696         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
697         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
698         errorResponse = rawResponse.readEntity(ErrorResponse.class);
699         assertEquals("policies for onap.restart.tca:2.0.0 do not exist", errorResponse.getErrorMessage());
700
701         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType);
702         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
703         errorResponse = rawResponse.readEntity(ErrorResponse.class);
704         assertEquals("policies for onap.restart.tca:null do not exist", errorResponse.getErrorMessage());
705
706         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType);
707         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
708         errorResponse = rawResponse.readEntity(ErrorResponse.class);
709         assertEquals("policies for onap.restart.tca:null do not exist", errorResponse.getErrorMessage());
710     }
711
712     @Test
713     public void testGetAllVersionOfPolicyJson() throws Exception {
714         testGetAllVersionOfPolicy(APP_JSON);
715     }
716
717     @Test
718     public void testGetAllVersionOfPolicyYaml() throws Exception {
719         testGetAllVersionOfPolicy(APP_YAML);
720     }
721
722     private void testGetAllVersionOfPolicy(String mediaType) throws Exception {
723         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
724             Response rawResponse = createResource(POLICYTYPES, resrcName);
725             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
726             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
727             assertNotNull(response);
728             assertFalse(response.getPolicyTypes().isEmpty());
729         }
730         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
731             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
732             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
733         }
734         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType);
735         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
736     }
737
738     @Test
739     public void testReadOperationalPoliciesJson() throws Exception {
740         testReadOperationalPolicies(APP_JSON);
741     }
742
743     @Test
744     public void testReadOperationalPoliciesYaml() throws Exception {
745         testReadOperationalPolicies(APP_YAML);
746     }
747
748     private void testReadOperationalPolicies(String mediaType) throws Exception {
749         for (String resrcName : LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES) {
750             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName);
751             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
752         }
753
754         Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, mediaType);
755         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
756
757         rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, mediaType);
758         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
759
760         rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
761         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
762
763         rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
764         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
765
766         rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, mediaType);
767         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
768
769         rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, mediaType);
770         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
771
772         rawResponse = deleteResource(OPS_POLICIES + "/operational.restart/versions/1", APP_JSON);
773         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
774
775         rawResponse = deleteResource(OPS_POLICIES + "/operational.scaleout/versions/1", APP_JSON);
776         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
777
778         rawResponse = deleteResource(OPS_POLICIES + "/operational.modifyconfig/versions/1", APP_JSON);
779         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
780
781     }
782
783     @Test
784     public void testDeleteOperationalPolicyJson() throws Exception {
785         testDeleteOperationalPolicy(APP_JSON);
786     }
787
788     @Test
789     public void testDeleteOperationalPolicyYaml() throws Exception {
790         testDeleteOperationalPolicy(APP_YAML);
791     }
792
793     private void testDeleteOperationalPolicy(String mediaType) throws Exception {
794         Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, mediaType);
795         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
796         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
797         assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
798     }
799
800     @Test
801     public void testGetLatestVersionOfOperationalPolicyJson() throws Exception {
802         testGetLatestVersionOfOperationalPolicy(APP_JSON);
803     }
804
805     @Test
806     public void testGetLatestVersionOfOperationalPolicyYaml() throws Exception {
807         testGetLatestVersionOfOperationalPolicy(APP_YAML);
808     }
809
810     private void testGetLatestVersionOfOperationalPolicy(String mediaType) throws Exception {
811         Response rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
812         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
813         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
814         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":null", errorResponse.getErrorMessage());
815     }
816
817     @Test
818     public void testGetSpecificVersionOfOperationalPolicyJson() throws Exception {
819         testGetSpecificVersionOfOperationalPolicy(APP_JSON);
820     }
821
822     @Test
823     public void testGetSpecificVersionOfOperationalPolicyYaml() throws Exception {
824         testGetSpecificVersionOfOperationalPolicy(APP_YAML);
825     }
826
827     private void testGetSpecificVersionOfOperationalPolicy(String mediaType) throws Exception {
828         Response rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
829         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
830         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
831         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
832     }
833
834     @Test
835     public void testGetDeployedVersionsOfOperationalPolicyJson() throws Exception {
836         testGetDeployedVersionsOfOperationalPolicy(APP_JSON);
837     }
838
839     @Test
840     public void testGetDeployedVersionsOfOperationalPolicyYaml() throws Exception {
841         testGetDeployedVersionsOfOperationalPolicy(APP_YAML);
842     }
843
844     private void testGetDeployedVersionsOfOperationalPolicy(String mediaType) throws Exception {
845         Response rawResponse = readResource(OPS_POLICIES_VCPE_DEPLOYED, mediaType);
846         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
847         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
848         assertEquals(
849             "could not find policy with ID " + OP_POLICY_NAME_VCPE + " and type "
850                 + "onap.policies.controlloop.Operational:1.0.0 deployed in any pdp group",
851             errorResponse.getErrorMessage());
852     }
853
854     @Test
855     public void testDeleteSpecificVersionOfOperationalPolicy() throws Exception {
856         Response rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, APP_YAML);
857         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
858         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
859         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
860     }
861
862     private Response createResource(String endpoint, String resourceName) throws Exception {
863
864         String mediaType = APP_JSON; // default media type
865         ToscaServiceTemplate rawServiceTemplate = new ToscaServiceTemplate();
866         if (resourceName.endsWith(".json")) {
867             rawServiceTemplate =
868                 standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
869         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
870             mediaType = APP_YAML;
871             rawServiceTemplate =
872                 standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
873         }
874
875         final Invocation.Builder invocationBuilder;
876
877         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
878
879         Entity<ToscaServiceTemplate> entity = Entity.entity(rawServiceTemplate, mediaType);
880         return invocationBuilder.post(entity);
881     }
882
883     private Response createOperationalPolicy(String endpoint, String resourceName) throws Exception {
884
885         String mediaType = APP_JSON; // default media type
886         LegacyOperationalPolicy rawOpsPolicy = new LegacyOperationalPolicy();
887         if (resourceName.endsWith(".json")) {
888             rawOpsPolicy =
889                 standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), LegacyOperationalPolicy.class);
890         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
891             mediaType = APP_YAML;
892             rawOpsPolicy = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
893                 LegacyOperationalPolicy.class);
894         }
895
896         final Invocation.Builder invocationBuilder;
897
898         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
899
900         Entity<LegacyOperationalPolicy> entity = Entity.entity(rawOpsPolicy, mediaType);
901         return invocationBuilder.post(entity);
902     }
903
904     private Response readResource(String endpoint, String mediaType) throws Exception {
905
906         final Invocation.Builder invocationBuilder;
907
908         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
909
910         return invocationBuilder.get();
911
912     }
913
914     private Response deleteResource(String endpoint, String mediaType) throws Exception {
915
916         final Invocation.Builder invocationBuilder;
917
918         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
919
920         return invocationBuilder.delete();
921     }
922
923     private Invocation.Builder sendHttpsRequest(final String endpoint, String mediaType) throws Exception {
924
925         final TrustManager[] noopTrustManager = NetworkUtil.getAlwaysTrustingManager();
926
927         final SSLContext sc = SSLContext.getInstance("TLSv1.2");
928         sc.init(null, noopTrustManager, new SecureRandom());
929         final ClientBuilder clientBuilder =
930             ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
931         final Client client = clientBuilder.build();
932         final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
933         client.register(feature);
934
935         client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
936         if (APP_JSON.equalsIgnoreCase(mediaType)) {
937             client.register(GsonMessageBodyHandler.class);
938         } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
939             client.register(YamlMessageBodyHandler.class);
940         }
941
942         final WebTarget webTarget = client.target("https://localhost:" + apiPort + "/policy/api/v1/" + endpoint);
943
944         final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
945
946         if (!NetworkUtil.isTcpPortOpen("localhost", apiPort, 60, 1000L)) {
947             throw new IllegalStateException("cannot connect to port " + apiPort);
948         }
949         return invocationBuilder;
950     }
951
952     private void updateApiStatistics() {
953
954         ApiStatisticsManager.updateTotalApiCallCount();
955         ApiStatisticsManager.updateApiCallSuccessCount();
956         ApiStatisticsManager.updateApiCallFailureCount();
957         ApiStatisticsManager.updateTotalPolicyGetCount();
958         ApiStatisticsManager.updateTotalPolicyPostCount();
959         ApiStatisticsManager.updateTotalPolicyTypeGetCount();
960         ApiStatisticsManager.updateTotalPolicyTypePostCount();
961         ApiStatisticsManager.updatePolicyGetSuccessCount();
962         ApiStatisticsManager.updatePolicyGetFailureCount();
963         ApiStatisticsManager.updatePolicyPostSuccessCount();
964         ApiStatisticsManager.updatePolicyPostFailureCount();
965         ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
966         ApiStatisticsManager.updatePolicyTypeGetFailureCount();
967         ApiStatisticsManager.updatePolicyTypePostSuccessCount();
968         ApiStatisticsManager.updatePolicyTypePostFailureCount();
969     }
970
971     private void validateStatisticsReport(final StatisticsReport report, final int code) {
972
973         assertEquals(code, report.getCode());
974     }
975
976     private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
977         final String message, final HealthCheckReport report) {
978
979         assertEquals(name, report.getName());
980         assertEquals(url, report.getUrl());
981         assertEquals(healthy, report.isHealthy());
982         assertEquals(code, report.getCode());
983         assertEquals(message, report.getMessage());
984     }
985 }