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