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