8b396fc76018f50c5c37da3eface755f558491ea
[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 AT&T Intellectual Property. All rights reserved.
5  *  Modifications Copyright (C) 2019 Nordix Foundation.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  * SPDX-License-Identifier: Apache-2.0
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.policy.api.main.rest;
24
25 import static org.assertj.core.api.Assertions.assertThatCode;
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.assertTrue;
30 import static org.junit.Assert.fail;
31
32 import java.io.IOException;
33 import java.lang.reflect.Constructor;
34 import java.lang.reflect.Modifier;
35 import java.security.SecureRandom;
36 import java.security.cert.X509Certificate;
37 import java.util.Base64;
38 import java.util.Properties;
39
40 import javax.net.ssl.SSLContext;
41 import javax.net.ssl.TrustManager;
42 import javax.net.ssl.X509TrustManager;
43 import javax.ws.rs.client.Client;
44 import javax.ws.rs.client.ClientBuilder;
45 import javax.ws.rs.client.Entity;
46 import javax.ws.rs.client.Invocation;
47 import javax.ws.rs.client.WebTarget;
48 import javax.ws.rs.core.MediaType;
49 import javax.ws.rs.core.Response;
50
51 import org.glassfish.jersey.client.ClientConfig;
52 import org.glassfish.jersey.client.ClientProperties;
53 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
54 import org.junit.After;
55 import org.junit.Test;
56 import org.onap.policy.api.main.ApiTestSupportUtilities;
57 import org.onap.policy.api.main.exception.PolicyApiException;
58 import org.onap.policy.api.main.parameters.ApiParameterGroup;
59 import org.onap.policy.api.main.parameters.CommonTestData;
60 import org.onap.policy.api.main.rest.provider.PolicyProvider;
61 import org.onap.policy.api.main.rest.provider.PolicyTypeProvider;
62 import org.onap.policy.api.main.startstop.Main;
63 import org.onap.policy.common.endpoints.http.server.RestServer;
64 import org.onap.policy.common.endpoints.parameters.RestServerParameters;
65 import org.onap.policy.common.endpoints.report.HealthCheckReport;
66 import org.onap.policy.common.gson.GsonMessageBodyHandler;
67 import org.onap.policy.common.parameters.ParameterService;
68 import org.onap.policy.common.utils.coder.StandardCoder;
69 import org.onap.policy.common.utils.network.NetworkUtil;
70 import org.onap.policy.common.utils.resources.ResourceUtils;
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.LegacyGuardPolicyInput;
76 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
77 import org.slf4j.Logger;
78 import org.slf4j.LoggerFactory;
79
80 /**
81  * Class to perform unit test of {@link ApiRestServer}.
82  *
83  * @author Chenfei Gao (cgao@research.att.com)
84  */
85 public class TestApiRestServer {
86
87     private static final Logger LOGGER = LoggerFactory.getLogger(TestApiRestServer.class);
88     private static final String NOT_ALIVE = "not alive";
89     private static final String ALIVE = "alive";
90     private static final String SELF = "self";
91     private static final String NAME = "Policy API";
92
93     private static final String HEALTHCHECK_ENDPOINT = "healthcheck";
94     private static final String STATISTICS_ENDPOINT = "statistics";
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_TCA_POLICIES =
110             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies";
111     private static final String POLICYTYPES_TCA_POLICIES_VCPE =
112             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca";
113     private static final String POLICYTYPES_TCA_POLICIES_VCPE_VERSION = "policytypes/"
114             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/1.0.0";
115     private static final String POLICYTYPES_TCA_POLICIES_VCPE_LATEST = "policytypes/"
116             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/latest";
117     private static final String POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED = "policytypes/"
118             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/deployed";
119
120     private static final String GUARD_POLICIES = "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies";
121     private static final String GUARD_POLICIES_VDNS_FL_LATEST =
122             "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout"
123                     + "/versions/latest";
124     private static final String GUARD_POLICIES_VDNS_FL_DEPLOYED =
125             "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout"
126                     + "/versions/deployed";
127     private static final String GUARD_POLICIES_VDNS_MINMAX_LATEST =
128             "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout"
129                     + "/versions/latest";
130     private static final String GUARD_POLICIES_VDNS_FL_VERSION = "policytypes/"
131             + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout/versions/1";
132     private static final String GUARD_POLICIES_VDNS_MINMAX_VERSION =
133             "policytypes/" + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout/versions/1";
134
135     private static final String OPS_POLICIES =
136             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies";
137     private static final String OPS_POLICIES_VCPE_LATEST =
138             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.restart"
139                     + "/versions/latest";
140     private static final String OPS_POLICIES_VCPE_DEPLOYED =
141             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.restart"
142                     + "/versions/deployed";
143     private static final String OPS_POLICIES_VDNS_LATEST =
144             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.scaleout"
145                     + "/versions/latest";
146     private static final String OPS_POLICIES_VFIREWALL_LATEST =
147             "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.modifyconfig"
148                     + "/versions/latest";
149     private static final String OPS_POLICIES_VCPE_VERSION = "policytypes/"
150             + "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.restart/versions/1";
151     private static final String OPS_POLICIES_VDNS_VERSION = "policytypes/"
152             + "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.scaleout/versions/1";
153     private static final String OPS_POLICIES_VFIREWALL_VERSION = "policytypes/"
154             + "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.modifyconfig/versions/1";
155
156     private static final String KEYSTORE = System.getProperty("user.dir") + "/src/test/resources/ssl/policy-keystore";
157     private static final CommonTestData COMMON_TEST_DATA = new CommonTestData();
158     private Main main;
159     private RestServer restServer;
160     private StandardCoder standardCoder = new StandardCoder();
161     private int port;
162
163     // @formatter:off
164     private String[] toscaPolicyResourceNames = {
165         "policies/vCPE.policy.monitoring.input.tosca.json",
166         "policies/vDNS.policy.monitoring.input.tosca.json",
167         "policies/vFirewall.policy.monitoring.input.tosca.json",
168     };
169
170     private String[] toscaPolicyTypeResourceNames = {
171         "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml",
172         "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml"
173     };
174
175     private String[] legacyGuardPolicyResourceNames = {
176         "policies/vDNS.policy.guard.frequency.input.json",
177         "policies/vDNS.policy.guard.minmax.input.json",
178     };
179
180     private String[] legacyOperationalPolicyResourceNames = {
181         "policies/vCPE.policy.operational.input.json",
182         "policies/vDNS.policy.operational.input.json",
183         "policies/vFirewall.policy.operational.input.json"
184     };
185     private static PolicyModelsProviderParameters providerParams;
186     private static ApiParameterGroup apiParamGroup;
187     private static PolicyProvider policyProvider;
188     private static PolicyTypeProvider policyTypeProvider;
189
190     // @formatter:on
191
192     /**
193      * Initializes parameters.
194      *
195      * @throws PfModelException the PfModel parsing exception
196      */
197     private void setupParameters() throws PfModelException {
198
199         standardCoder = new StandardCoder();
200         providerParams = new PolicyModelsProviderParameters();
201         providerParams.setDatabaseDriver("org.h2.Driver");
202         providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
203         providerParams.setDatabaseUser("policy");
204         providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
205         providerParams.setPersistenceUnit("ToscaConceptTest");
206         apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams);
207         ParameterService.register(apiParamGroup, true);
208         policyTypeProvider = new PolicyTypeProvider();
209         policyProvider = new PolicyProvider();
210     }
211
212     /**
213      * Method for cleanup after each test.
214      */
215     @After
216     public void teardown() throws Exception {
217         if (policyTypeProvider != null) {
218             policyTypeProvider.close();
219         }
220         if (policyProvider != null) {
221             policyProvider.close();
222         }
223         if (main != null) {
224             stopApiService(main);
225         } else if (restServer != null) {
226             restServer.stop();
227         }
228     }
229
230     @Test
231     public void testHealthCheckSuccess() {
232
233         try {
234             main = startApiService(true);
235             final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT);
236             final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
237             validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
238         } catch (final Exception exp) {
239             LOGGER.error("testHealthCheckSuccess failed", exp);
240             fail("Test should not throw an exception");
241         }
242     }
243
244     @Test
245     public void testHealthCheckFailure() throws InterruptedException, IOException {
246
247         port = NetworkUtil.allocPort();
248         final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false, port);
249         restServerParams.setName(CommonTestData.API_GROUP_NAME);
250         restServer = new RestServer(restServerParams, null, ApiRestController.class);
251         try {
252             restServer.start();
253             final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT);
254             final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
255             validateHealthCheckReport(NAME, SELF, false, 500, NOT_ALIVE, report);
256             assertTrue(restServer.isAlive());
257             assertTrue(restServer.toString().startsWith("RestServer [servers="));
258         } catch (final Exception exp) {
259             LOGGER.error("testHealthCheckFailure failed", exp);
260             fail("Test should not throw an exception");
261         }
262     }
263
264     @Test
265     public void testHttpsHealthCheckSuccess() {
266
267         try {
268             main = startApiService(false);
269             final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT);
270             final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
271             validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
272         } catch (final Exception exp) {
273             LOGGER.error("testHttpsHealthCheckSuccess failed", exp);
274             fail("Test should not throw an exception");
275         }
276     }
277
278     @Test
279     public void testApiStatistics_200() {
280
281         try {
282             main = startApiService(true);
283             Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT);
284             StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
285             validateStatisticsReport(report, 200);
286             updateApiStatistics();
287             invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT);
288             report = invocationBuilder.get(StatisticsReport.class);
289             validateStatisticsReport(report, 200);
290             ApiStatisticsManager.resetAllStatistics();
291         } catch (final Exception exp) {
292             LOGGER.error("testApiStatistics_200 failed", exp);
293             fail("Test should not throw an exception");
294         }
295     }
296
297     @Test
298     public void testApiStatistics_500() throws Exception {
299
300         port = NetworkUtil.allocPort();
301         final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false, port);
302         restServerParams.setName(CommonTestData.API_GROUP_NAME);
303         restServer = new RestServer(restServerParams, null, ApiRestController.class);
304         try {
305             restServer.start();
306             final Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT);
307             final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
308             validateStatisticsReport(report, 500);
309             ApiStatisticsManager.resetAllStatistics();
310         } catch (final Exception exp) {
311             LOGGER.error("testApiStatistics_500 failed", exp);
312             fail("Test should not throw an exception");
313         }
314     }
315
316     @Test
317     public void testHttpsApiStatistics() {
318
319         try {
320             main = startApiService(false);
321             final Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT);
322             final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
323             validateStatisticsReport(report, 200);
324         } catch (final Exception exp) {
325             LOGGER.error("testHttpsApiStatistics failed", exp);
326             fail("Test should not throw an exception");
327         }
328     }
329
330     @Test
331     public void testApiStatisticsConstructorIsPrivate() {
332
333         try {
334             final Constructor<ApiStatisticsManager> constructor = ApiStatisticsManager.class.getDeclaredConstructor();
335             assertTrue(Modifier.isPrivate(constructor.getModifiers()));
336             constructor.setAccessible(true);
337             constructor.newInstance();
338         } catch (final Exception exp) {
339             assertTrue(exp.getCause().toString().contains("Instantiation of the class is not allowed"));
340         }
341     }
342
343     @Test
344     public void testCreatePolicyTypes() {
345
346         assertThatCode(() -> {
347             main = startApiService(true);
348             for (String resrcName : toscaPolicyTypeResourceNames) {
349                 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
350                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
351                 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
352                 assertNotNull(response);
353                 assertFalse(response.getPolicyTypes().isEmpty());
354             }
355         }).doesNotThrowAnyException();
356     }
357
358     @Test
359     public void testReadPolicyTypes() {
360
361         assertThatCode(() -> {
362             main = startApiService(true);
363             Response rawResponse = readResource(POLICYTYPES, true);
364             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
365             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
366             assertTrue(response.getPolicyTypes().isEmpty());
367
368             rawResponse = readResource(POLICYTYPES_TCA, true);
369             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
370             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
371             assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:null does not exist",
372                     error.getErrorMessage());
373
374             rawResponse = readResource(POLICYTYPES_TCA_VERSION, true);
375             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
376             error = rawResponse.readEntity(ErrorResponse.class);
377             assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
378                     error.getErrorMessage());
379
380             rawResponse = readResource(POLICYTYPES_TCA_LATEST, true);
381             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
382             error = rawResponse.readEntity(ErrorResponse.class);
383             assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:null does not exist",
384                     error.getErrorMessage());
385
386             rawResponse = readResource(POLICYTYPES_COLLECTOR, true);
387             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
388             error = rawResponse.readEntity(ErrorResponse.class);
389             assertEquals("policy type with ID "
390                     + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:null does not exist",
391                     error.getErrorMessage());
392
393             rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, true);
394             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
395             error = rawResponse.readEntity(ErrorResponse.class);
396             assertEquals("policy type with ID "
397                     + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:1.0.0 does not exist",
398                     error.getErrorMessage());
399
400             rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, true);
401             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
402             error = rawResponse.readEntity(ErrorResponse.class);
403             assertEquals("policy type with ID "
404                     + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:null does not exist",
405                     error.getErrorMessage());
406         }).doesNotThrowAnyException();
407     }
408
409     @Test
410     public void testReadPolicyTypesPersistent() throws Exception {
411
412         setupParameters();
413         main = startApiService(true);
414         for (String resrcName : toscaPolicyTypeResourceNames) {
415             Response rawResponse = createResource(POLICYTYPES, resrcName, true);
416             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
417             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
418             assertNotNull(response);
419             assertFalse(response.getPolicyTypes().isEmpty());
420         }
421
422         for (String resrcName : toscaPolicyResourceNames) {
423             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
424             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
425         }
426
427         Response rawResponse = readResource(POLICYTYPES_TCA, true);
428         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
429
430         rawResponse = readResource(POLICYTYPES_TCA_VERSION, true);
431         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
432
433
434         rawResponse = readResource(POLICYTYPES_TCA_LATEST, true);
435         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
436
437
438         rawResponse = readResource(POLICYTYPES_COLLECTOR, true);
439         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
440
441
442         rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, true);
443         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
444
445
446         rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, true);
447         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
448
449     }
450
451     @Test
452     public void testDeletePolicyType() {
453
454         assertThatCode(() -> {
455             main = startApiService(true);
456             Response rawResponse = deleteResource(POLICYTYPES_TCA_VERSION, true);
457             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
458             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
459             assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
460                     error.getErrorMessage());
461
462             rawResponse = deleteResource(POLICYTYPES_COLLECTOR_VERSION, true);
463             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
464             error = rawResponse.readEntity(ErrorResponse.class);
465             assertEquals("policy type with ID "
466                     + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:1.0.0 does not exist",
467                     error.getErrorMessage());
468         }).doesNotThrowAnyException();
469     }
470
471     @Test
472     public void testDeletePolicyTypePersistent() throws Exception {
473
474         setupParameters(); // setup DB
475
476         main = startApiService(true);// create policy types
477         for (String resrcName : toscaPolicyTypeResourceNames) {
478             Response rawResponse = createResource(POLICYTYPES, resrcName, true);
479             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
480             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
481             assertNotNull(response);
482             assertFalse(response.getPolicyTypes().isEmpty());
483         }
484         Response rawResponse = deleteResource(POLICYTYPES_TCA_VERSION, true);
485         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
486
487     }
488
489     @Test
490     public void testCreatePolicies() {
491
492         assertThatCode(() -> {
493             main = startApiService(true);
494             for (String resrcName : toscaPolicyResourceNames) {
495                 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
496                 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
497                 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
498                 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
499                         error.getErrorMessage());
500             }
501         }).doesNotThrowAnyException();
502     }
503
504     @Test
505     public void testReadPolicies() {
506
507         assertThatCode(() -> {
508             main = startApiService(true);
509             Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, true);
510             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
511             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
512             assertEquals(
513                     "policy with ID null:null and "
514                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
515                     error.getErrorMessage());
516
517             rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, true);
518             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
519             error = rawResponse.readEntity(ErrorResponse.class);
520             assertEquals(
521                     "policy with ID onap.restart.tca:null and "
522                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
523                     error.getErrorMessage());
524
525             rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true);
526             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
527             error = rawResponse.readEntity(ErrorResponse.class);
528             assertEquals(
529                     "policy with ID onap.restart.tca:1.0.0 and "
530                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
531                     error.getErrorMessage());
532
533             rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, true);
534             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
535             error = rawResponse.readEntity(ErrorResponse.class);
536             assertEquals(
537                     "policy with ID onap.restart.tca:null and "
538                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
539                     error.getErrorMessage());
540         }).doesNotThrowAnyException();
541     }
542
543     @Test
544     public void testReadPoliciesPersistent() throws Exception {
545
546         setupParameters();
547         main = startApiService(true);
548         for (String resrcName : toscaPolicyTypeResourceNames) {
549             Response rawResponse = createResource(POLICYTYPES, resrcName, true);
550             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
551             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
552             assertNotNull(response);
553             assertFalse(response.getPolicyTypes().isEmpty());
554         }
555
556         for (String resrcName : toscaPolicyResourceNames) {
557             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
558             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
559         }
560
561         Response rawResponse;
562         rawResponse = readResource(POLICYTYPES_TCA, true);
563         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
564
565         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, true);
566         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
567
568         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true);
569         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
570
571         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, true);
572         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
573
574     }
575
576     @Test
577     public void testDeletePolicies() {
578
579         assertThatCode(() -> {
580             main = startApiService(true);
581             Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true);
582             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
583             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
584             assertEquals(
585                     "policy with ID onap.restart.tca:1.0.0 and "
586                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
587                     error.getErrorMessage());
588         }).doesNotThrowAnyException();
589     }
590
591     @Test
592     public void testDeletePolicyVersion() throws Exception {
593
594         setupParameters(); // setup DB
595
596         main = startApiService(true);// create policy types
597         for (String resrcName : toscaPolicyTypeResourceNames) {
598             Response rawResponse = createResource(POLICYTYPES, resrcName, true);
599             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
600             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
601             assertNotNull(response);
602             assertFalse(response.getPolicyTypes().isEmpty());
603         }
604         for (String resrcName : toscaPolicyResourceNames) {
605             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
606             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
607         }
608         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true);
609         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
610     }
611
612     @Test
613     public void testGetAllVersionOfPolicy() throws Exception {
614
615         setupParameters(); // setup DB
616
617         main = startApiService(true);// create policy types
618         for (String resrcName : toscaPolicyTypeResourceNames) {
619             Response rawResponse = createResource(POLICYTYPES, resrcName, true);
620             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
621             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
622             assertNotNull(response);
623             assertFalse(response.getPolicyTypes().isEmpty());
624         }
625         for (String resrcName : toscaPolicyResourceNames) {
626             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
627             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
628         }
629         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, true);
630         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
631
632     }
633
634     @Test
635     public void testCreateGuardPolicies() {
636
637         assertThatCode(() -> {
638             main = startApiService(true);
639             for (String resrcName : legacyGuardPolicyResourceNames) {
640                 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
641                 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
642             }
643         }).doesNotThrowAnyException();
644     }
645
646     @Test
647     public void testCreateGuardPolicies1() throws Exception {
648
649         setupParameters(); // setup DB
650
651         main = startApiService(true);
652         for (String resrcName : legacyGuardPolicyResourceNames) {
653             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
654             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
655         }
656
657     }
658
659     @Test
660     public void testCreateOperationalPolicies() {
661
662         assertThatCode(() -> {
663             main = startApiService(true);
664             for (String resrcName : legacyOperationalPolicyResourceNames) {
665                 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
666                 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
667             }
668         }).doesNotThrowAnyException();
669     }
670
671     @Test
672     public void testCreateOperationalPolicies1() throws Exception {
673
674         setupParameters(); // setup DB
675
676         main = startApiService(true);
677         for (String resrcName : legacyOperationalPolicyResourceNames) {
678             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
679             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
680         }
681
682     }
683
684     @Test
685     public void testReadGuardPolicies() {
686
687         assertThatCode(() -> {
688             main = startApiService(true);
689             Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, true);
690             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
691             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
692             assertEquals("no policy found for policy: guard.frequency.scaleout:null", error.getErrorMessage());
693
694             rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, true);
695             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
696             error = rawResponse.readEntity(ErrorResponse.class);
697             assertEquals("no policy found for policy: guard.frequency.scaleout:1", error.getErrorMessage());
698
699             rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, true);
700             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
701             error = rawResponse.readEntity(ErrorResponse.class);
702             assertEquals("no policy found for policy: guard.minmax.scaleout:null", error.getErrorMessage());
703
704             rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, true);
705             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
706             error = rawResponse.readEntity(ErrorResponse.class);
707             assertEquals("no policy found for policy: guard.minmax.scaleout:1", error.getErrorMessage());
708         }).doesNotThrowAnyException();
709     }
710
711     @Test
712     public void testReadGuardPolicies1() throws Exception {
713
714         setupParameters(); // setup DB
715
716         main = startApiService(true);
717         for (String resrcName : legacyGuardPolicyResourceNames) {
718             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
719             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
720         }
721
722         Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, true);
723         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
724
725
726         rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, true);
727         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
728
729         rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, true);
730         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
731
732
733         rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, true);
734         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
735
736     }
737
738     @Test
739     public void testReadOperationalPolicies() {
740
741         assertThatCode(() -> {
742             main = startApiService(true);
743             Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, true);
744             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
745             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
746             assertEquals("no policy found for policy: operational.restart:null", error.getErrorMessage());
747
748             rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, true);
749             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
750             error = rawResponse.readEntity(ErrorResponse.class);
751             assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
752
753             rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true);
754             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
755             error = rawResponse.readEntity(ErrorResponse.class);
756             assertEquals("no policy found for policy: operational.scaleout:null", error.getErrorMessage());
757
758             rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true);
759             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
760             error = rawResponse.readEntity(ErrorResponse.class);
761             assertEquals("no policy found for policy: operational.scaleout:1", error.getErrorMessage());
762
763             rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, true);
764             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
765             error = rawResponse.readEntity(ErrorResponse.class);
766             assertEquals("no policy found for policy: operational.modifyconfig:null", error.getErrorMessage());
767
768             rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, true);
769             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
770             error = rawResponse.readEntity(ErrorResponse.class);
771             assertEquals("no policy found for policy: operational.modifyconfig:1", error.getErrorMessage());
772         }).doesNotThrowAnyException();
773     }
774
775     @Test
776     public void testReadOperationalPolicies1() throws Exception {
777
778         setupParameters(); // setup DB
779
780         main = startApiService(true);
781         for (String resrcName : legacyOperationalPolicyResourceNames) {
782             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
783             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
784         }
785
786         Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, true);
787         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
788
789
790         rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, true);
791         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
792
793
794         rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true);
795         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
796
797
798         rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true);
799         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
800
801
802         rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, true);
803         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
804
805
806         rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, true);
807         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
808
809
810     }
811
812     @Test
813     public void testDeleteGuardPolicy() {
814
815         assertThatCode(() -> {
816             main = startApiService(true);
817             Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, true);
818             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
819             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
820             assertEquals("no policy found for policy: guard.frequency.scaleout:1", error.getErrorMessage());
821         }).doesNotThrowAnyException();
822     }
823
824     @Test
825     public void testDeleteGuardPolicy1() throws Exception {
826
827         setupParameters(); // setup DB
828         main = startApiService(true);
829
830         for (String resrcName : legacyGuardPolicyResourceNames) {
831             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
832             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
833         }
834
835         Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, true);
836         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
837
838     }
839
840     @Test
841     public void testGetDeployedVersionsOfGuardPolicy() {
842         assertThatCode(() -> {
843             main = startApiService(true);
844             Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_DEPLOYED, true);
845             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
846         }).doesNotThrowAnyException();
847     }
848
849     @Test
850     public void testDeleteOperationalPolicy() {
851
852         assertThatCode(() -> {
853             main = startApiService(true);
854             Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, true);
855             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
856             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
857             assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
858         }).doesNotThrowAnyException();
859     }
860
861     @Test
862     public void testDeleteOperationalPolicy1() throws Exception {
863
864         setupParameters(); // setup DB
865
866         main = startApiService(true);
867         for (String resrcName : legacyOperationalPolicyResourceNames) {
868             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
869             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
870         }
871         Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, true);
872         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
873
874     }
875
876     @Test
877     public void testHttpsCreatePolicyTypes() {
878
879         assertThatCode(() -> {
880             main = startApiService(false);
881             for (String resrcName : toscaPolicyTypeResourceNames) {
882                 Response rawResponse = createResource(POLICYTYPES, resrcName, false);
883                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
884                 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
885                 assertNotNull(response);
886                 assertFalse(response.getPolicyTypes().isEmpty());
887             }
888         }).doesNotThrowAnyException();
889     }
890
891     @Test
892     public void testHttpsCreatePolicies() {
893
894         assertThatCode(() -> {
895             main = startApiService(false);
896             for (String resrcName : toscaPolicyResourceNames) {
897                 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, false);
898                 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
899                 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
900                 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
901                         error.getErrorMessage());
902             }
903         }).doesNotThrowAnyException();
904     }
905
906     @Test
907     public void testHttpsCreateGuardPolicies() {
908
909         assertThatCode(() -> {
910             main = startApiService(false);
911             for (String resrcName : legacyGuardPolicyResourceNames) {
912                 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, false);
913                 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
914             }
915         }).doesNotThrowAnyException();
916     }
917
918     @Test
919     public void testHttpsCreateOperationalPolicies() {
920
921         assertThatCode(() -> {
922             main = startApiService(false);
923             for (String resrcName : legacyOperationalPolicyResourceNames) {
924                 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, false);
925                 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
926             }
927         }).doesNotThrowAnyException();
928     }
929
930     @Test
931     public void testGetDeployedVersionsOfPolicy() {
932         assertThatCode(() -> {
933             main = startApiService(true);
934             Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED, true);
935             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
936         }).doesNotThrowAnyException();
937     }
938
939     @Test
940     public void testGetLatestVersionOfOperationalPolicy() {
941         assertThatCode(() -> {
942             main = startApiService(true);
943             Response rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true);
944             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
945         }).doesNotThrowAnyException();
946     }
947
948     @Test
949     public void testGetSpecificVersionOfOperationalPolicy() {
950         assertThatCode(() -> {
951             main = startApiService(true);
952             Response rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true);
953             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
954         }).doesNotThrowAnyException();
955     }
956
957     @Test
958     public void testGetDeployedVersionsOfOperationalPolicy() {
959         assertThatCode(() -> {
960             main = startApiService(true);
961             Response rawResponse = readResource(OPS_POLICIES_VCPE_DEPLOYED, true);
962             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
963         }).doesNotThrowAnyException();
964     }
965
966     @Test
967     public void testDeleteSpecificVersionOfOperationalPolicy() {
968         assertThatCode(() -> {
969             main = startApiService(true);
970             Response rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, true);
971             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
972         }).doesNotThrowAnyException();
973     }
974
975     private Response createResource(String endpoint, String resourceName, boolean http) throws Exception {
976         String serviceTamplateAsJson =
977                 ApiTestSupportUtilities.yaml2Json(ResourceUtils.getResourceAsString(resourceName));
978         ToscaServiceTemplate rawServiceTemplate =
979                 standardCoder.decode(serviceTamplateAsJson, ToscaServiceTemplate.class);
980         final Invocation.Builder invocationBuilder;
981
982         if (http) {
983             invocationBuilder = sendHttpRequest(endpoint);
984         } else {
985             invocationBuilder = sendHttpsRequest(endpoint);
986         }
987
988         Entity<ToscaServiceTemplate> entity = Entity.entity(rawServiceTemplate, MediaType.APPLICATION_JSON);
989         return invocationBuilder.post(entity);
990     }
991
992     private Response createGuardPolicy(String endpoint, String resourceName, boolean http) throws Exception {
993
994         LegacyGuardPolicyInput rawGuardPolicy =
995                 standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
996         final Invocation.Builder invocationBuilder;
997
998         if (http) {
999             invocationBuilder = sendHttpRequest(endpoint);
1000         } else {
1001             invocationBuilder = sendHttpsRequest(endpoint);
1002         }
1003
1004         Entity<LegacyGuardPolicyInput> entity = Entity.entity(rawGuardPolicy, MediaType.APPLICATION_JSON);
1005         return invocationBuilder.post(entity);
1006     }
1007
1008     private Response createOperationalPolicy(String endpoint, String resourceName, boolean http) throws Exception {
1009
1010         LegacyOperationalPolicy rawOpsPolicy =
1011                 standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), LegacyOperationalPolicy.class);
1012         final Invocation.Builder invocationBuilder;
1013
1014         if (http) {
1015             invocationBuilder = sendHttpRequest(endpoint);
1016         } else {
1017             invocationBuilder = sendHttpsRequest(endpoint);
1018         }
1019
1020         Entity<LegacyOperationalPolicy> entity = Entity.entity(rawOpsPolicy, MediaType.APPLICATION_JSON);
1021         return invocationBuilder.post(entity);
1022     }
1023
1024     private Response readResource(String endpoint, boolean http) throws Exception {
1025
1026         final Invocation.Builder invocationBuilder;
1027
1028         if (http) {
1029             invocationBuilder = sendHttpRequest(endpoint);
1030         } else {
1031             invocationBuilder = sendHttpsRequest(endpoint);
1032         }
1033
1034         return invocationBuilder.get();
1035
1036     }
1037
1038     private Response deleteResource(String endpoint, boolean http) throws Exception {
1039
1040         final Invocation.Builder invocationBuilder;
1041
1042         if (http) {
1043             invocationBuilder = sendHttpRequest(endpoint);
1044         } else {
1045             invocationBuilder = sendHttpsRequest(endpoint);
1046         }
1047
1048         return invocationBuilder.delete();
1049     }
1050
1051     private Main startApiService(final boolean http) throws Exception {
1052         port = NetworkUtil.allocPort();
1053
1054         final String[] apiConfigParameters = new String[2];
1055         if (http) {
1056             COMMON_TEST_DATA.makeParameters("src/test/resources/parameters/ApiConfigParameters.json",
1057                     "src/test/resources/parameters/ApiConfigParametersXXX.json", port);
1058             apiConfigParameters[0] = "-c";
1059             apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParametersXXX.json";
1060         } else {
1061             final Properties systemProps = System.getProperties();
1062             systemProps.put("javax.net.ssl.keyStore", KEYSTORE);
1063             systemProps.put("javax.net.ssl.keyStorePassword", "Pol1cy_0nap");
1064             System.setProperties(systemProps);
1065             COMMON_TEST_DATA.makeParameters("src/test/resources/parameters/ApiConfigParameters_Https.json",
1066                     "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json", port);
1067             apiConfigParameters[0] = "-c";
1068             apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json";
1069         }
1070         return new Main(apiConfigParameters);
1071     }
1072
1073     private void stopApiService(final Main main) throws PolicyApiException {
1074
1075         main.shutdown();
1076     }
1077
1078     private Invocation.Builder sendHttpRequest(final String endpoint) throws Exception {
1079
1080         final ClientConfig clientConfig = new ClientConfig();
1081
1082         final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1083         clientConfig.register(feature);
1084
1085         final Client client = ClientBuilder.newClient(clientConfig);
1086
1087         client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1088         client.register(GsonMessageBodyHandler.class);
1089
1090         final WebTarget webTarget = client.target("http://localhost:" + port + "/policy/api/v1/" + endpoint);
1091
1092         final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
1093
1094         if (!NetworkUtil.isTcpPortOpen("localhost", port, 60, 1000L)) {
1095             throw new IllegalStateException("cannot connect to port " + port);
1096         }
1097         return invocationBuilder;
1098     }
1099
1100     private Invocation.Builder sendHttpsRequest(final String endpoint) throws Exception {
1101
1102         final TrustManager[] noopTrustManager = new TrustManager[] { new X509TrustManager() {
1103
1104             @Override
1105             public X509Certificate[] getAcceptedIssuers() {
1106                 return new X509Certificate[0];
1107             }
1108
1109             @Override
1110             public void checkClientTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {}
1111
1112             @Override
1113             public void checkServerTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {}
1114         } };
1115
1116         final SSLContext sc = SSLContext.getInstance("TLSv1.2");
1117         sc.init(null, noopTrustManager, new SecureRandom());
1118         final ClientBuilder clientBuilder =
1119                 ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
1120         final Client client = clientBuilder.build();
1121         final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1122         client.register(feature);
1123
1124         client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1125         client.register(GsonMessageBodyHandler.class);
1126
1127         final WebTarget webTarget = client.target("https://localhost:" + port + "/policy/api/v1/" + endpoint);
1128
1129         final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
1130
1131         if (!NetworkUtil.isTcpPortOpen("localhost", port, 60, 1000L)) {
1132             throw new IllegalStateException("cannot connect to port " + port);
1133         }
1134         return invocationBuilder;
1135     }
1136
1137     private void updateApiStatistics() {
1138
1139         ApiStatisticsManager.updateTotalApiCallCount();
1140         ApiStatisticsManager.updateApiCallSuccessCount();
1141         ApiStatisticsManager.updateApiCallFailureCount();
1142         ApiStatisticsManager.updateTotalPolicyGetCount();
1143         ApiStatisticsManager.updateTotalPolicyPostCount();
1144         ApiStatisticsManager.updateTotalPolicyTypeGetCount();
1145         ApiStatisticsManager.updateTotalPolicyTypePostCount();
1146         ApiStatisticsManager.updatePolicyGetSuccessCount();
1147         ApiStatisticsManager.updatePolicyGetFailureCount();
1148         ApiStatisticsManager.updatePolicyPostSuccessCount();
1149         ApiStatisticsManager.updatePolicyPostFailureCount();
1150         ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
1151         ApiStatisticsManager.updatePolicyTypeGetFailureCount();
1152         ApiStatisticsManager.updatePolicyTypePostSuccessCount();
1153         ApiStatisticsManager.updatePolicyTypePostFailureCount();
1154     }
1155
1156     private void validateStatisticsReport(final StatisticsReport report, final int code) {
1157
1158         assertEquals(code, report.getCode());
1159     }
1160
1161     private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
1162             final String message, final HealthCheckReport report) {
1163
1164         assertEquals(name, report.getName());
1165         assertEquals(url, report.getUrl());
1166         assertEquals(healthy, report.isHealthy());
1167         assertEquals(code, report.getCode());
1168         assertEquals(message, report.getMessage());
1169     }
1170 }