Add changes to support application/yaml in api
[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.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.lang.reflect.Constructor;
32 import java.lang.reflect.Modifier;
33 import java.security.SecureRandom;
34 import java.security.cert.X509Certificate;
35 import java.util.Base64;
36 import java.util.Properties;
37
38 import javax.net.ssl.SSLContext;
39 import javax.net.ssl.TrustManager;
40 import javax.net.ssl.X509TrustManager;
41 import javax.ws.rs.client.Client;
42 import javax.ws.rs.client.ClientBuilder;
43 import javax.ws.rs.client.Entity;
44 import javax.ws.rs.client.Invocation;
45 import javax.ws.rs.client.WebTarget;
46 import javax.ws.rs.core.Response;
47 import org.glassfish.jersey.client.ClientConfig;
48 import org.glassfish.jersey.client.ClientProperties;
49 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
50 import org.junit.After;
51 import org.junit.Test;
52 import org.onap.policy.api.main.exception.PolicyApiException;
53 import org.onap.policy.api.main.parameters.ApiParameterGroup;
54 import org.onap.policy.api.main.parameters.CommonTestData;
55 import org.onap.policy.api.main.rest.provider.PolicyProvider;
56 import org.onap.policy.api.main.rest.provider.PolicyTypeProvider;
57 import org.onap.policy.api.main.startstop.Main;
58 import org.onap.policy.common.endpoints.http.server.RestServer;
59 import org.onap.policy.common.endpoints.http.server.YamlMessageBodyHandler;
60 import org.onap.policy.common.endpoints.parameters.RestServerParameters;
61 import org.onap.policy.common.endpoints.report.HealthCheckReport;
62 import org.onap.policy.common.gson.GsonMessageBodyHandler;
63 import org.onap.policy.common.parameters.ParameterService;
64 import org.onap.policy.common.utils.coder.StandardCoder;
65 import org.onap.policy.common.utils.coder.StandardYamlCoder;
66 import org.onap.policy.common.utils.network.NetworkUtil;
67 import org.onap.policy.common.utils.resources.ResourceUtils;
68 import org.onap.policy.models.base.PfModelException;
69 import org.onap.policy.models.errors.concepts.ErrorResponse;
70 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
71 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
72 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
73 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
74 import org.slf4j.Logger;
75 import org.slf4j.LoggerFactory;
76
77 /**
78  * Class to perform unit test of {@link ApiRestServer}.
79  *
80  * @author Chenfei Gao (cgao@research.att.com)
81  */
82 public class TestApiRestServer {
83
84     private static final Logger LOGGER = LoggerFactory.getLogger(TestApiRestServer.class);
85     private static final String NOT_ALIVE = "not alive";
86     private static final String ALIVE = "alive";
87     private static final String SELF = "self";
88     private static final String NAME = "Policy API";
89     private static final String APP_JSON = "application/json";
90     private static final String APP_YAML = "application/yaml";
91
92     private static final String HEALTHCHECK_ENDPOINT = "healthcheck";
93     private static final String STATISTICS_ENDPOINT = "statistics";
94
95     private static final String POLICYTYPES = "policytypes";
96     private static final String POLICYTYPES_TCA = "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app";
97     private static final String POLICYTYPES_COLLECTOR =
98             "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server";
99     private static final String POLICYTYPES_TCA_VERSION =
100             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0";
101     private static final String POLICYTYPES_TCA_LATEST =
102             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/latest";
103     private static final String POLICYTYPES_COLLECTOR_VERSION =
104             "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server/versions/1.0.0";
105     private static final String POLICYTYPES_COLLECTOR_LATEST =
106             "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server/versions/latest";
107
108     private static final String POLICYTYPES_TCA_POLICIES =
109             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies";
110     private static final String POLICYTYPES_TCA_POLICIES_VCPE =
111             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca";
112     private static final String POLICYTYPES_TCA_POLICIES_VCPE_VERSION = "policytypes/"
113             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/1.0.0";
114     private static final String POLICYTYPES_TCA_POLICIES_VCPE_LATEST = "policytypes/"
115             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/latest";
116     private static final String POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED = "policytypes/"
117             + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/deployed";
118
119     private static final String GUARD_POLICIES = "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 =
132             "policytypes/" + "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 StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
161     private int port;
162
163     // @formatter:off
164     private String[] toscaPolicyResourceNames = {
165         "policies/vCPE.policy.monitoring.input.tosca.json",
166         "policies/vCPE.policy.monitoring.input.tosca.yaml",
167         "policies/vDNS.policy.monitoring.input.tosca.json",
168         "policies/vDNS.policy.monitoring.input.tosca.yaml",
169         "policies/vFirewall.policy.monitoring.input.tosca.json",
170         "policies/vFirewall.policy.monitoring.input.tosca.yaml"
171     };
172
173     private String[] toscaPolicyTypeResourceNames = {
174         "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml",
175         "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
176         "policytypes/onap.policies.Optimization.yaml",
177         "policytypes/onap.policies.controlloop.Operational.yaml",
178         "policytypes/onap.policies.controlloop.guard.Blacklist.yaml",
179         "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml",
180         "policytypes/onap.policies.controlloop.guard.MinMax.yaml",
181         "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
182         "policytypes/onap.policies.optimization.AffinityPolicy.yaml",
183         "policytypes/onap.policies.optimization.DistancePolicy.yaml",
184         "policytypes/onap.policies.optimization.HpaPolicy.yaml",
185         "policytypes/onap.policies.optimization.OptimizationPolicy.yaml",
186         "policytypes/onap.policies.optimization.PciPolicy.yaml",
187         "policytypes/onap.policies.optimization.QueryPolicy.yaml",
188         "policytypes/onap.policies.optimization.SubscriberPolicy.yaml",
189         "policytypes/onap.policies.optimization.Vim_fit.yaml",
190         "policytypes/onap.policies.optimization.VnfPolicy.yaml"
191     };
192
193     private String[] legacyGuardPolicyResourceNames = {
194         "policies/vDNS.policy.guard.frequency.input.json",
195         "policies/vDNS.policy.guard.minmax.input.json"
196     };
197
198     private String[] legacyOperationalPolicyResourceNames = {
199         "policies/vCPE.policy.operational.input.json",
200         "policies/vDNS.policy.operational.input.json",
201         "policies/vFirewall.policy.operational.input.json"
202     };
203
204     private static PolicyModelsProviderParameters providerParams;
205     private static ApiParameterGroup apiParamGroup;
206     private static PolicyProvider policyProvider;
207     private static PolicyTypeProvider policyTypeProvider;
208
209     // @formatter:on
210
211     /**
212      * Initializes parameters.
213      *
214      * @throws PfModelException the PfModel parsing exception
215      */
216     private void setupParameters() throws PfModelException {
217
218         standardCoder = new StandardCoder();
219         providerParams = new PolicyModelsProviderParameters();
220         providerParams.setDatabaseDriver("org.h2.Driver");
221         providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
222         providerParams.setDatabaseUser("policy");
223         providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
224         providerParams.setPersistenceUnit("ToscaConceptTest");
225         apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams);
226         ParameterService.register(apiParamGroup, true);
227         policyTypeProvider = new PolicyTypeProvider();
228         policyProvider = new PolicyProvider();
229     }
230
231     /**
232      * Method for cleanup after each test.
233      */
234     @After
235     public void teardown() throws Exception {
236         if (policyTypeProvider != null) {
237             policyTypeProvider.close();
238         }
239         if (policyProvider != null) {
240             policyProvider.close();
241         }
242         if (main != null) {
243             stopApiService(main);
244         } else if (restServer != null) {
245             restServer.stop();
246         }
247     }
248
249     @Test
250     public void testApiStatisticsConstructorIsPrivate() {
251
252         try {
253             final Constructor<ApiStatisticsManager> constructor = ApiStatisticsManager.class.getDeclaredConstructor();
254             assertTrue(Modifier.isPrivate(constructor.getModifiers()));
255             constructor.setAccessible(true);
256             constructor.newInstance();
257         } catch (final Exception exp) {
258             assertTrue(exp.getCause().toString().contains("Instantiation of the class is not allowed"));
259         }
260     }
261
262     @Test
263     public void testCreatePolicyTypes() {
264         try {
265             main = startApiService(true);
266             for (String resrcName : toscaPolicyTypeResourceNames) {
267                 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
268                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
269                 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
270                 assertNotNull(response);
271                 assertFalse(response.getPolicyTypes().isEmpty());
272             }
273         } catch (Exception exp) {
274             fail("Test should not throw an exception");
275         }
276     }
277
278     @Test
279     public void testCreatePolicies() {
280         try {
281             main = startApiService(true);
282             for (String resrcName : toscaPolicyResourceNames) {
283                 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
284                 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
285                 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
286                 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
287                         error.getErrorMessage());
288             }
289         } catch (Exception exp) {
290             fail("Test should not throw an exception");
291         }
292     }
293
294     @Test
295     public void testCreateGuardPolicies() {
296         try {
297             main = startApiService(true);
298             for (String resrcName : legacyGuardPolicyResourceNames) {
299                 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
300                 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
301             }
302         } catch (Exception exp) {
303             fail("Test should not throw an exception");
304         }
305     }
306
307     @Test
308     public void testCreateGuardPoliciesPersistent() {
309         try {
310             setupParameters(); // setup DB
311             main = startApiService(true);
312             for (String resrcName : legacyGuardPolicyResourceNames) {
313                 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
314                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
315             }
316         } catch (Exception exp) {
317             fail("Test should not throw an exception");
318         }
319     }
320
321     @Test
322     public void testCreateOperationalPolicies() {
323         try {
324             main = startApiService(true);
325             for (String resrcName : legacyOperationalPolicyResourceNames) {
326                 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
327                 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
328             }
329         } catch (Exception exp) {
330             fail("Test should not throw an exception");
331         }
332     }
333
334     @Test
335     public void testCreateOperationalPoliciesPersistent() {
336         try {
337             setupParameters(); // setup DB
338             main = startApiService(true);
339             for (String resrcName : legacyOperationalPolicyResourceNames) {
340                 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
341                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
342             }
343         } catch (Exception exp) {
344             fail("Test should not throw an exception");
345         }
346     }
347
348     @Test
349     public void testHttpsCreatePolicyTypes() {
350         try {
351             main = startApiService(false);
352             for (String resrcName : toscaPolicyTypeResourceNames) {
353                 Response rawResponse = createResource(POLICYTYPES, resrcName, false);
354                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
355                 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
356                 assertNotNull(response);
357                 assertFalse(response.getPolicyTypes().isEmpty());
358             }
359         } catch (Exception exp) {
360             fail("Test should not throw an exception");
361         }
362     }
363
364     @Test
365     public void testHttpsCreatePolicies() {
366         try {
367             main = startApiService(false);
368             for (String resrcName : toscaPolicyResourceNames) {
369                 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, false);
370                 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
371                 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
372                 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
373                         error.getErrorMessage());
374             }
375         } catch (Exception exp) {
376             fail("Test should not throw an exception");
377         }
378     }
379
380     @Test
381     public void testHttpsCreateGuardPolicies() {
382         try {
383             main = startApiService(false);
384             for (String resrcName : legacyGuardPolicyResourceNames) {
385                 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, false);
386                 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
387             }
388         } catch (Exception exp) {
389             fail("Test should not throw an exception");
390         }
391     }
392
393     @Test
394     public void testHttpsCreateOperationalPolicies() {
395         try {
396             main = startApiService(false);
397             for (String resrcName : legacyOperationalPolicyResourceNames) {
398                 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, false);
399                 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
400             }
401         } catch (Exception exp) {
402             fail("Test should not throw an exception");
403         }
404     }
405
406     @Test
407     public void testHealthCheckSuccessJson() {
408         testHealthCheckSuccess(APP_JSON);
409     }
410
411     @Test
412     public void testHealthCheckSuccessYaml() {
413         testHealthCheckSuccess(APP_YAML);
414     }
415
416
417
418     private void testHealthCheckSuccess(String mediaType) {
419
420         try {
421             main = startApiService(true);
422             final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT, mediaType);
423             final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
424             validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
425         } catch (final Exception exp) {
426             LOGGER.error("testHealthCheckSuccess failed", exp);
427             fail("Test should not throw an exception");
428         }
429     }
430
431     @Test
432     public void testHealthCheckFailureJson() {
433         testHealthCheckFailure(APP_JSON);
434     }
435
436     @Test
437     public void testHealthCheckFailureYaml() {
438         testHealthCheckFailure(APP_YAML);
439     }
440
441     private void testHealthCheckFailure(String mediaType) {
442         try {
443             port = NetworkUtil.allocPort();
444             final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false, port);
445             restServerParams.setName(CommonTestData.API_GROUP_NAME);
446             restServer = new RestServer(restServerParams, null, ApiRestController.class);
447
448             restServer.start();
449             final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT, mediaType);
450             final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
451             validateHealthCheckReport(NAME, SELF, false, 500, NOT_ALIVE, report);
452             assertTrue(restServer.isAlive());
453             assertTrue(restServer.toString().startsWith("RestServer [servers="));
454         } catch (Exception exp) {
455             fail("Test should not throw an exception");
456         }
457     }
458
459     @Test
460     public void testHttpsHealthCheckSuccessJson() {
461         testHttpsHealthCheckSuccess(APP_JSON);
462     }
463
464     @Test
465     public void testHttpsHealthCheckSuccessYaml() {
466         testHttpsHealthCheckSuccess(APP_YAML);
467     }
468
469     private void testHttpsHealthCheckSuccess(String mediaType) {
470         try {
471             main = startApiService(false);
472             final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT, mediaType);
473             final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
474             validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
475         } catch (Exception exp) {
476             fail("Test should not throw an exception");
477         }
478     }
479
480     @Test
481     public void testApiStatistics_200_Json() {
482         testApiStatistics_200(APP_JSON);
483     }
484
485     @Test
486     public void testApiStatistics_200_Yaml() {
487         testApiStatistics_200(APP_YAML);
488     }
489
490     private void testApiStatistics_200(String mediaType) {
491         try {
492             main = startApiService(true);
493             Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT, mediaType);
494             StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
495             validateStatisticsReport(report, 200);
496             updateApiStatistics();
497             invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT, mediaType);
498             report = invocationBuilder.get(StatisticsReport.class);
499             validateStatisticsReport(report, 200);
500             ApiStatisticsManager.resetAllStatistics();
501         } catch (Exception exp) {
502             fail("Test should not throw an exception");
503         }
504     }
505
506     @Test
507     public void testHttpsApiStatisticsJson() {
508         testHttpsApiStatistics(APP_JSON);
509     }
510
511     @Test
512     public void testHttpsApiStatisticsYaml() {
513         testHttpsApiStatistics(APP_YAML);
514     }
515
516     private void testHttpsApiStatistics(String mediaType) {
517         try {
518             main = startApiService(false);
519             final Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType);
520             final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
521             validateStatisticsReport(report, 200);
522         } catch (Exception exp) {
523             fail("Test should not throw an exception");
524         }
525     }
526
527     @Test
528     public void testApiStatistics_500_Json() {
529         testApiStatistics_500(APP_JSON);
530     }
531
532     @Test
533     public void testApiStatistics_500_Yaml() {
534         testApiStatistics_500(APP_YAML);
535     }
536
537
538     private void testApiStatistics_500(String mediaType) {
539         try {
540             port = NetworkUtil.allocPort();
541             final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false, port);
542             restServerParams.setName(CommonTestData.API_GROUP_NAME);
543             restServer = new RestServer(restServerParams, null, ApiRestController.class);
544
545             restServer.start();
546             final Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT, mediaType);
547             final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
548             validateStatisticsReport(report, 500);
549             ApiStatisticsManager.resetAllStatistics();
550         } catch (Exception exp) {
551             fail("Test should not throw an exception");
552         }
553     }
554
555
556     @Test
557     public void testReadPolicyTypesJson() {
558         testReadPolicyTypes(APP_JSON);
559     }
560
561     @Test
562     public void testReadPolicyTypesYaml() {
563         testReadPolicyTypes(APP_YAML);
564     }
565
566     private void testReadPolicyTypes(String mediaType) {
567         try {
568             main = startApiService(true);
569             Response rawResponse = readResource(POLICYTYPES, true, mediaType);
570             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
571             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
572             assertTrue(response.getPolicyTypes().isEmpty());
573
574             rawResponse = readResource(POLICYTYPES_TCA, true, mediaType);
575             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
576             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
577             assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:null does not exist",
578                     error.getErrorMessage());
579
580             rawResponse = readResource(POLICYTYPES_TCA_VERSION, true, mediaType);
581             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
582             error = rawResponse.readEntity(ErrorResponse.class);
583             assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
584                     error.getErrorMessage());
585
586             rawResponse = readResource(POLICYTYPES_TCA_LATEST, true, mediaType);
587             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
588             error = rawResponse.readEntity(ErrorResponse.class);
589             assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:null does not exist",
590                     error.getErrorMessage());
591
592             rawResponse = readResource(POLICYTYPES_COLLECTOR, true, mediaType);
593             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
594             error = rawResponse.readEntity(ErrorResponse.class);
595             assertEquals("policy type with ID "
596                     + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:null does not exist",
597                     error.getErrorMessage());
598
599             rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, true, mediaType);
600             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
601             error = rawResponse.readEntity(ErrorResponse.class);
602             assertEquals("policy type with ID "
603                     + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:1.0.0 does not exist",
604                     error.getErrorMessage());
605
606             rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, true, mediaType);
607             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
608             error = rawResponse.readEntity(ErrorResponse.class);
609             assertEquals("policy type with ID "
610                     + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:null does not exist",
611                     error.getErrorMessage());
612         } catch (Exception exp) {
613             fail("Test should not throw an exception");
614         }
615     }
616
617     @Test
618     public void testReadPolicyTypesPersistentJson() {
619         testReadPolicyTypesPersistent(APP_JSON);
620     }
621
622     @Test
623     public void testReadPolicyTypesPersistentYaml() {
624         testReadPolicyTypesPersistent(APP_YAML);
625     }
626
627     private void testReadPolicyTypesPersistent(String mediaType) {
628         try {
629             setupParameters();
630             main = startApiService(true);
631             for (String resrcName : toscaPolicyTypeResourceNames) {
632                 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
633                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
634                 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
635                 assertNotNull(response);
636                 assertFalse(response.getPolicyTypes().isEmpty());
637             }
638
639             for (String resrcName : toscaPolicyResourceNames) {
640                 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
641                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
642             }
643
644             Response rawResponse = readResource(POLICYTYPES_TCA, true, mediaType);
645             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
646
647             rawResponse = readResource(POLICYTYPES_TCA_VERSION, true, mediaType);
648             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
649
650
651             rawResponse = readResource(POLICYTYPES_TCA_LATEST, true, mediaType);
652             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
653
654
655             rawResponse = readResource(POLICYTYPES_COLLECTOR, true, mediaType);
656             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
657
658
659             rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, true, mediaType);
660             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
661
662
663             rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, true, mediaType);
664             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
665         } catch (Exception exp) {
666             fail("Test should not throw an exception");
667         }
668     }
669
670     @Test
671     public void testDeletePolicyTypeJson() {
672         testDeletePolicyType(APP_JSON);
673     }
674
675     @Test
676     public void testDeletePolicyTypeYaml() {
677         testDeletePolicyType(APP_YAML);
678     }
679
680     private void testDeletePolicyType(String mediaType) {
681         try {
682             main = startApiService(true);
683             Response rawResponse = deleteResource(POLICYTYPES_TCA_VERSION, true, mediaType);
684             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
685             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
686             assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
687                     error.getErrorMessage());
688
689             rawResponse = deleteResource(POLICYTYPES_COLLECTOR_VERSION, true, mediaType);
690             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
691             error = rawResponse.readEntity(ErrorResponse.class);
692             assertEquals("policy type with ID "
693                     + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:1.0.0 does not exist",
694                     error.getErrorMessage());
695         } catch (Exception exp) {
696             fail("Test should not throw an exception");
697         }
698     }
699
700     @Test
701     public void testDeletePolicyTypePersistentJson() {
702         testDeletePolicyTypePersistent(APP_JSON);
703     }
704
705     @Test
706     public void testDeletePolicyTypePersistentYaml() {
707         testDeletePolicyTypePersistent(APP_YAML);
708     }
709
710     private void testDeletePolicyTypePersistent(String mediaType) {
711         try {
712             setupParameters(); // setup DB
713             main = startApiService(true);// create policy types
714             for (String resrcName : toscaPolicyTypeResourceNames) {
715                 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
716                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
717                 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
718                 assertNotNull(response);
719                 assertFalse(response.getPolicyTypes().isEmpty());
720             }
721             Response rawResponse = deleteResource(POLICYTYPES_TCA_VERSION, true, mediaType);
722             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
723         } catch (Exception exp) {
724             fail("Test should not throw an exception");
725         }
726     }
727
728
729     @Test
730     public void testReadPoliciesJson() {
731         testReadPolicies(APP_JSON);
732     }
733
734     @Test
735     public void testReadPoliciesYaml() {
736         testReadPolicies(APP_YAML);
737     }
738
739     private void testReadPolicies(String mediaType) {
740         try {
741             main = startApiService(true);
742             Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, true, mediaType);
743             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
744             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
745             assertEquals(
746                     "policy with ID null:null and "
747                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
748                     error.getErrorMessage());
749
750             rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, true, mediaType);
751             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
752             error = rawResponse.readEntity(ErrorResponse.class);
753             assertEquals(
754                     "policy with ID onap.restart.tca:null and "
755                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
756                     error.getErrorMessage());
757
758             rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
759             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
760             error = rawResponse.readEntity(ErrorResponse.class);
761             assertEquals(
762                     "policy with ID onap.restart.tca:1.0.0 and "
763                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
764                     error.getErrorMessage());
765
766             rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, true, mediaType);
767             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
768             error = rawResponse.readEntity(ErrorResponse.class);
769             assertEquals(
770                     "policy with ID onap.restart.tca:null and "
771                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
772                     error.getErrorMessage());
773         } catch (Exception exp) {
774             fail("Test should not throw an exception");
775         }
776     }
777
778     @Test
779     public void testReadPoliciesPersistentJson() {
780         testReadPoliciesPersistent(APP_JSON);
781     }
782
783     @Test
784     public void testReadPoliciesPersistentYaml() {
785         testReadPoliciesPersistent(APP_YAML);
786     }
787
788     private void testReadPoliciesPersistent(String mediaType) {
789         try {
790             setupParameters();
791             main = startApiService(true);
792             for (String resrcName : toscaPolicyTypeResourceNames) {
793                 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
794                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
795                 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
796                 assertNotNull(response);
797                 assertFalse(response.getPolicyTypes().isEmpty());
798             }
799
800             for (String resrcName : toscaPolicyResourceNames) {
801                 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
802                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
803             }
804
805             Response rawResponse;
806             rawResponse = readResource(POLICYTYPES_TCA, true, mediaType);
807             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
808
809             rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, true, mediaType);
810             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
811
812             rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
813             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
814
815             rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, true, mediaType);
816             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
817         } catch (Exception exp) {
818             fail("Test should not throw an exception");
819         }
820     }
821
822     @Test
823     public void testDeletePoliciesJson() {
824         testDeletePolicies(APP_JSON);
825     }
826
827     @Test
828     public void testDeletePoliciesYaml() {
829         testDeletePolicies(APP_YAML);
830     }
831
832     private void testDeletePolicies(String mediaType) {
833         try {
834             main = startApiService(true);
835             Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
836             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
837             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
838             assertEquals(
839                     "policy with ID onap.restart.tca:1.0.0 and "
840                             + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
841                     error.getErrorMessage());
842         } catch (Exception exp) {
843             fail("Test should not throw an exception");
844         }
845     }
846
847     @Test
848     public void testDeletePolicyVersionJson() {
849         testDeletePolicyVersion(APP_JSON);
850     }
851
852     @Test
853     public void testDeletePolicyVersionYaml() {
854         testDeletePolicyVersion(APP_YAML);
855     }
856
857     private void testDeletePolicyVersion(String mediaType) {
858         try {
859             setupParameters(); // setup DB
860             main = startApiService(true);// create policy types
861             for (String resrcName : toscaPolicyTypeResourceNames) {
862                 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
863                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
864                 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
865                 assertNotNull(response);
866                 assertFalse(response.getPolicyTypes().isEmpty());
867             }
868             for (String resrcName : toscaPolicyResourceNames) {
869                 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
870                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
871             }
872             Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
873             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
874         } catch (Exception exp) {
875             fail("Test should not throw an exception");
876         }
877     }
878
879     @Test
880     public void testGetAllVersionOfPolicyJson() {
881         testGetAllVersionOfPolicy(APP_JSON);
882     }
883
884     @Test
885     public void testGetAllVersionOfPolicyYaml() {
886         testGetAllVersionOfPolicy(APP_YAML);
887     }
888
889     private void testGetAllVersionOfPolicy(String mediaType) {
890         try {
891             setupParameters(); // setup DB
892             main = startApiService(true);// create policy types
893             for (String resrcName : toscaPolicyTypeResourceNames) {
894                 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
895                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
896                 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
897                 assertNotNull(response);
898                 assertFalse(response.getPolicyTypes().isEmpty());
899             }
900             for (String resrcName : toscaPolicyResourceNames) {
901                 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
902                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
903             }
904             Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, true, mediaType);
905             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
906         } catch (Exception exp) {
907             fail("Test should not throw an exception");
908         }
909     }
910
911
912     @Test
913     public void testReadGuardPoliciesJson() {
914         testReadGuardPolicies(APP_JSON);
915     }
916
917     @Test
918     public void testReadGuardPoliciesYaml() {
919         testReadGuardPolicies(APP_YAML);
920     }
921
922     private void testReadGuardPolicies(String mediaType) {
923         try {
924             main = startApiService(true);
925             Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, true, mediaType);
926             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
927             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
928             assertEquals("no policy found for policy: guard.frequency.scaleout:null", error.getErrorMessage());
929
930             rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
931             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
932             error = rawResponse.readEntity(ErrorResponse.class);
933             assertEquals("no policy found for policy: guard.frequency.scaleout:1", error.getErrorMessage());
934
935             rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, true, mediaType);
936             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
937             error = rawResponse.readEntity(ErrorResponse.class);
938             assertEquals("no policy found for policy: guard.minmax.scaleout:null", error.getErrorMessage());
939
940             rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, true, mediaType);
941             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
942             error = rawResponse.readEntity(ErrorResponse.class);
943             assertEquals("no policy found for policy: guard.minmax.scaleout:1", error.getErrorMessage());
944         } catch (Exception exp) {
945             fail("Test should not throw an exception");
946         }
947     }
948
949     @Test
950     public void testReadGuardPoliciesPersistentJson() {
951         testReadGuardPoliciesPersistent(APP_JSON);
952     }
953
954     @Test
955     public void testReadGuardPoliciesPersistentYaml() {
956         testReadGuardPoliciesPersistent(APP_YAML);
957     }
958
959     private void testReadGuardPoliciesPersistent(String mediaType) {
960         try {
961             setupParameters(); // setup DB
962             main = startApiService(true);
963             for (String resrcName : legacyGuardPolicyResourceNames) {
964                 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
965                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
966             }
967
968             Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, true, mediaType);
969             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
970
971
972             rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
973             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
974
975             rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, true, mediaType);
976             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
977
978
979             rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, true, mediaType);
980             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
981         } catch (Exception exp) {
982             fail("Test should not throw an exception");
983         }
984     }
985
986
987     @Test
988     public void testReadOperationalPoliciesJson() {
989         testReadOperationalPolicies(APP_JSON);
990     }
991
992     @Test
993     public void testReadOperationalPoliciesYaml() {
994         testReadOperationalPolicies(APP_YAML);
995     }
996
997     private void testReadOperationalPolicies(String mediaType) {
998         try {
999             main = startApiService(true);
1000             Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, true, mediaType);
1001             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1002             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1003             assertEquals("no policy found for policy: operational.restart:null", error.getErrorMessage());
1004
1005             rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1006             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1007             error = rawResponse.readEntity(ErrorResponse.class);
1008             assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
1009
1010             rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true, mediaType);
1011             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1012             error = rawResponse.readEntity(ErrorResponse.class);
1013             assertEquals("no policy found for policy: operational.scaleout:null", error.getErrorMessage());
1014
1015             rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1016             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1017             error = rawResponse.readEntity(ErrorResponse.class);
1018             assertEquals("no policy found for policy: operational.scaleout:1", error.getErrorMessage());
1019
1020             rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, true, mediaType);
1021             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1022             error = rawResponse.readEntity(ErrorResponse.class);
1023             assertEquals("no policy found for policy: operational.modifyconfig:null", error.getErrorMessage());
1024
1025             rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, true, mediaType);
1026             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1027             error = rawResponse.readEntity(ErrorResponse.class);
1028             assertEquals("no policy found for policy: operational.modifyconfig:1", error.getErrorMessage());
1029         } catch (Exception exp) {
1030             fail("Test should not throw an exception");
1031         }
1032     }
1033
1034     @Test
1035     public void testReadOperationalPoliciesPersistentJson() {
1036         testReadOperationalPoliciesPersistent(APP_JSON);
1037     }
1038
1039     @Test
1040     public void testReadOperationalPoliciesPersistentYaml() {
1041         testReadOperationalPoliciesPersistent(APP_YAML);
1042     }
1043
1044     private void testReadOperationalPoliciesPersistent(String mediaType) {
1045         try {
1046             setupParameters(); // setup DB
1047             main = startApiService(true);
1048             for (String resrcName : legacyOperationalPolicyResourceNames) {
1049                 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
1050                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1051             }
1052
1053             Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, true, mediaType);
1054             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1055
1056
1057             rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1058             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1059
1060
1061             rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true, mediaType);
1062             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1063
1064
1065             rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1066             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1067
1068
1069             rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, true, mediaType);
1070             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1071
1072
1073             rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, true, mediaType);
1074             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1075         } catch (Exception exp) {
1076             fail("Test should not throw an exception");
1077         }
1078     }
1079
1080     @Test
1081     public void testDeleteGuardPolicyJson() {
1082         testDeleteGuardPolicy(APP_JSON);
1083     }
1084
1085     @Test
1086     public void testDeleteGuardPolicyYaml() {
1087         testDeleteGuardPolicy(APP_YAML);
1088     }
1089
1090     private void testDeleteGuardPolicy(String mediaType) {
1091         try {
1092             main = startApiService(true);
1093             Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1094             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1095             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1096             assertEquals("no policy found for policy: guard.frequency.scaleout:1", error.getErrorMessage());
1097         } catch (Exception exp) {
1098             fail("Test should not throw an exception");
1099         }
1100     }
1101
1102     @Test
1103     public void testDeleteGuardPolicyPersistentJson() {
1104         testDeleteGuardPolicyPersistent(APP_JSON);
1105     }
1106
1107     @Test
1108     public void testDeleteGuardPolicyPersistentYaml() {
1109         testDeleteGuardPolicyPersistent(APP_YAML);
1110     }
1111
1112     private void testDeleteGuardPolicyPersistent(String mediaType) {
1113         try {
1114             setupParameters(); // setup DB
1115             main = startApiService(true);
1116
1117             for (String resrcName : legacyGuardPolicyResourceNames) {
1118                 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
1119                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1120             }
1121
1122             Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1123             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1124         } catch (Exception exp) {
1125             fail("Test should not throw an exception");
1126         }
1127     }
1128
1129     @Test
1130     public void testGetDeployedVersionsOfGuardPolicyJson() {
1131         testGetDeployedVersionsOfGuardPolicy(APP_JSON);
1132     }
1133
1134     @Test
1135     public void testGetDeployedVersionsOfGuardPolicyYaml() {
1136         testGetDeployedVersionsOfGuardPolicy(APP_YAML);
1137     }
1138
1139     private void testGetDeployedVersionsOfGuardPolicy(String mediaType) {
1140         try {
1141             main = startApiService(true);
1142             Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_DEPLOYED, true, mediaType);
1143             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
1144         } catch (Exception exp) {
1145             fail("Test should not throw an exception");
1146         }
1147     }
1148
1149     @Test
1150     public void testDeleteOperationalPolicyJson() {
1151         testDeleteOperationalPolicy(APP_JSON);
1152     }
1153
1154     @Test
1155     public void testDeleteOperationalPolicyYaml() {
1156         testDeleteOperationalPolicy(APP_YAML);
1157     }
1158
1159     private void testDeleteOperationalPolicy(String mediaType) {
1160         try {
1161             main = startApiService(true);
1162             Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1163             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1164             ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1165             assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
1166         } catch (Exception exp) {
1167             fail("Test should not throw an exception");
1168         }
1169     }
1170
1171     @Test
1172     public void testDeleteOperationalPolicyPersistentJson() {
1173         testDeleteOperationalPolicyPersistent(APP_JSON);
1174     }
1175
1176     @Test
1177     public void testDeleteOperationalPolicyPersistentYaml() {
1178         testDeleteOperationalPolicyPersistent(APP_YAML);
1179     }
1180
1181     private void testDeleteOperationalPolicyPersistent(String mediaType) {
1182         try {
1183             setupParameters(); // setup DB
1184             main = startApiService(true);
1185             for (String resrcName : legacyOperationalPolicyResourceNames) {
1186                 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
1187                 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1188             }
1189             Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1190             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1191         } catch (Exception exp) {
1192             fail("Test should not throw an exception");
1193         }
1194     }
1195
1196
1197     @Test
1198     public void testGetDeployedVersionsOfPolicyJson() {
1199         testGetDeployedVersionsOfPolicy(APP_JSON);
1200     }
1201
1202     @Test
1203     public void testGetDeployedVersionsOfPolicyYaml() {
1204         testGetDeployedVersionsOfPolicy(APP_YAML);
1205     }
1206
1207     private void testGetDeployedVersionsOfPolicy(String mediaType) {
1208         try {
1209             main = startApiService(true);
1210             Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED, true, mediaType);
1211             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
1212         } catch (Exception exp) {
1213             fail("Test should not throw an exception");
1214         }
1215     }
1216
1217     @Test
1218     public void testGetLatestVersionOfOperationalPolicyJson() {
1219         testGetLatestVersionOfOperationalPolicy(APP_JSON);
1220     }
1221
1222     @Test
1223     public void testGetLatestVersionOfOperationalPolicyYaml() {
1224         testGetLatestVersionOfOperationalPolicy(APP_YAML);
1225     }
1226
1227     private void testGetLatestVersionOfOperationalPolicy(String mediaType) {
1228         try {
1229             main = startApiService(true);
1230             Response rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true, mediaType);
1231             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1232         } catch (Exception exp) {
1233             fail("Test should not throw an exception");
1234         }
1235     }
1236
1237     @Test
1238     public void testGetSpecificVersionOfOperationalPolicyJson() {
1239         testGetSpecificVersionOfOperationalPolicy(APP_JSON);
1240     }
1241
1242     @Test
1243     public void testGetSpecificVersionOfOperationalPolicyYaml() {
1244         testGetSpecificVersionOfOperationalPolicy(APP_YAML);
1245     }
1246
1247     private void testGetSpecificVersionOfOperationalPolicy(String mediaType) {
1248         try {
1249             main = startApiService(true);
1250             Response rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1251             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1252         } catch (Exception exp) {
1253             fail("Test should not throw an exception");
1254         }
1255     }
1256
1257     @Test
1258     public void testGetDeployedVersionsOfOperationalPolicyJson() {
1259         testGetDeployedVersionsOfOperationalPolicy(APP_JSON);
1260     }
1261
1262     @Test
1263     public void testGetDeployedVersionsOfOperationalPolicyYaml() {
1264         testGetDeployedVersionsOfOperationalPolicy(APP_YAML);
1265     }
1266
1267     private void testGetDeployedVersionsOfOperationalPolicy(String mediaType) {
1268         try {
1269             main = startApiService(true);
1270             Response rawResponse = readResource(OPS_POLICIES_VCPE_DEPLOYED, true, mediaType);
1271             assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
1272         } catch (Exception exp) {
1273             fail("Test should not throw an exception");
1274         }
1275     }
1276
1277     @Test
1278     public void testDeleteSpecificVersionOfOperationalPolicyJson() {
1279         testDeleteSpecificVersionOfOperationalPolicy(APP_JSON);
1280     }
1281
1282     @Test
1283     public void testDeleteSpecificVersionOfOperationalPolicyYaml() {
1284         testDeleteSpecificVersionOfOperationalPolicy(APP_YAML);
1285     }
1286
1287     private void testDeleteSpecificVersionOfOperationalPolicy(String mediaType) {
1288         try {
1289             main = startApiService(true);
1290             Response rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1291             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1292         } catch (Exception exp) {
1293             fail("Test should not throw an exception");
1294         }
1295     }
1296
1297     private Response createResource(String endpoint, String resourceName, boolean http)
1298             throws Exception {
1299
1300         String mediaType = APP_JSON; // default media type
1301         ToscaServiceTemplate rawServiceTemplate = new ToscaServiceTemplate();
1302         if (resourceName.endsWith(".json")) {
1303             rawServiceTemplate = standardCoder.decode(
1304                     ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
1305         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1306             mediaType = APP_YAML;
1307             rawServiceTemplate = standardYamlCoder.decode(
1308                     ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
1309         }
1310
1311         final Invocation.Builder invocationBuilder;
1312
1313         if (http) {
1314             invocationBuilder = sendHttpRequest(endpoint, mediaType);
1315         } else {
1316             invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1317         }
1318
1319         Entity<ToscaServiceTemplate> entity = Entity.entity(rawServiceTemplate, mediaType);
1320         return invocationBuilder.post(entity);
1321     }
1322
1323     private Response createGuardPolicy(String endpoint, String resourceName, boolean http)
1324             throws Exception {
1325
1326         String mediaType = APP_JSON; // default media type
1327         LegacyGuardPolicyInput rawGuardPolicy = new LegacyGuardPolicyInput();
1328         if (resourceName.endsWith(".json")) {
1329             rawGuardPolicy = standardCoder.decode(
1330                     ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
1331         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1332             mediaType = APP_YAML;
1333             rawGuardPolicy = standardYamlCoder.decode(
1334                     ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
1335         }
1336
1337         final Invocation.Builder invocationBuilder;
1338
1339         if (http) {
1340             invocationBuilder = sendHttpRequest(endpoint, mediaType);
1341         } else {
1342             invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1343         }
1344
1345         Entity<LegacyGuardPolicyInput> entity = Entity.entity(rawGuardPolicy, mediaType);
1346         return invocationBuilder.post(entity);
1347     }
1348
1349     private Response createOperationalPolicy(String endpoint, String resourceName, boolean http)
1350             throws Exception {
1351
1352         String mediaType = APP_JSON; // default media type
1353         LegacyOperationalPolicy rawOpsPolicy = new LegacyOperationalPolicy();
1354         if (resourceName.endsWith(".json")) {
1355             rawOpsPolicy = standardCoder.decode(
1356                     ResourceUtils.getResourceAsString(resourceName), LegacyOperationalPolicy.class);
1357         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1358             mediaType = APP_YAML;
1359             rawOpsPolicy = standardYamlCoder.decode(
1360                     ResourceUtils.getResourceAsString(resourceName), LegacyOperationalPolicy.class);
1361         }
1362
1363         final Invocation.Builder invocationBuilder;
1364
1365         if (http) {
1366             invocationBuilder = sendHttpRequest(endpoint, mediaType);
1367         } else {
1368             invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1369         }
1370
1371         Entity<LegacyOperationalPolicy> entity = Entity.entity(rawOpsPolicy, mediaType);
1372         return invocationBuilder.post(entity);
1373     }
1374
1375     private Response readResource(String endpoint, boolean http, String mediaType) throws Exception {
1376
1377         final Invocation.Builder invocationBuilder;
1378
1379         if (http) {
1380             invocationBuilder = sendHttpRequest(endpoint, mediaType);
1381         } else {
1382             invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1383         }
1384
1385         return invocationBuilder.get();
1386
1387     }
1388
1389     private Response deleteResource(String endpoint, boolean http, String mediaType) throws Exception {
1390
1391         final Invocation.Builder invocationBuilder;
1392
1393         if (http) {
1394             invocationBuilder = sendHttpRequest(endpoint, mediaType);
1395         } else {
1396             invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1397         }
1398
1399         return invocationBuilder.delete();
1400     }
1401
1402     private Main startApiService(final boolean http) throws Exception {
1403         port = NetworkUtil.allocPort();
1404
1405         final String[] apiConfigParameters = new String[2];
1406         if (http) {
1407             COMMON_TEST_DATA.makeParameters("src/test/resources/parameters/ApiConfigParameters.json",
1408                     "src/test/resources/parameters/ApiConfigParametersXXX.json", port);
1409             apiConfigParameters[0] = "-c";
1410             apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParametersXXX.json";
1411         } else {
1412             final Properties systemProps = System.getProperties();
1413             systemProps.put("javax.net.ssl.keyStore", KEYSTORE);
1414             systemProps.put("javax.net.ssl.keyStorePassword", "Pol1cy_0nap");
1415             System.setProperties(systemProps);
1416             COMMON_TEST_DATA.makeParameters("src/test/resources/parameters/ApiConfigParameters_Https.json",
1417                     "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json", port);
1418             apiConfigParameters[0] = "-c";
1419             apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json";
1420         }
1421         return new Main(apiConfigParameters);
1422     }
1423
1424     private void stopApiService(final Main main) throws PolicyApiException {
1425
1426         main.shutdown();
1427     }
1428
1429     private Invocation.Builder sendHttpRequest(final String endpoint, String mediaType) throws Exception {
1430
1431         final ClientConfig clientConfig = new ClientConfig();
1432
1433         final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1434         clientConfig.register(feature);
1435
1436         final Client client = ClientBuilder.newClient(clientConfig);
1437
1438         client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1439         if (APP_JSON.equalsIgnoreCase(mediaType)) {
1440             client.register(GsonMessageBodyHandler.class);
1441         } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
1442             client.register(YamlMessageBodyHandler.class);
1443         }
1444
1445         final WebTarget webTarget = client.target("http://localhost:" + port + "/policy/api/v1/" + endpoint);
1446
1447         final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
1448
1449         if (!NetworkUtil.isTcpPortOpen("localhost", port, 60, 1000L)) {
1450             throw new IllegalStateException("cannot connect to port " + port);
1451         }
1452         return invocationBuilder;
1453     }
1454
1455     private Invocation.Builder sendHttpsRequest(final String endpoint, String mediaType) throws Exception {
1456
1457         final TrustManager[] noopTrustManager = new TrustManager[] { new X509TrustManager() {
1458
1459             @Override
1460             public X509Certificate[] getAcceptedIssuers() {
1461                 return new X509Certificate[0];
1462             }
1463
1464             @Override
1465             public void checkClientTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {}
1466
1467             @Override
1468             public void checkServerTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {}
1469         } };
1470
1471         final SSLContext sc = SSLContext.getInstance("TLSv1.2");
1472         sc.init(null, noopTrustManager, new SecureRandom());
1473         final ClientBuilder clientBuilder =
1474                 ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
1475         final Client client = clientBuilder.build();
1476         final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1477         client.register(feature);
1478
1479         client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1480         if (APP_JSON.equalsIgnoreCase(mediaType)) {
1481             client.register(GsonMessageBodyHandler.class);
1482         } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
1483             client.register(YamlMessageBodyHandler.class);
1484         }
1485
1486         final WebTarget webTarget = client.target("https://localhost:" + port + "/policy/api/v1/" + endpoint);
1487
1488         final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
1489
1490         if (!NetworkUtil.isTcpPortOpen("localhost", port, 60, 1000L)) {
1491             throw new IllegalStateException("cannot connect to port " + port);
1492         }
1493         return invocationBuilder;
1494     }
1495
1496     private void updateApiStatistics() {
1497
1498         ApiStatisticsManager.updateTotalApiCallCount();
1499         ApiStatisticsManager.updateApiCallSuccessCount();
1500         ApiStatisticsManager.updateApiCallFailureCount();
1501         ApiStatisticsManager.updateTotalPolicyGetCount();
1502         ApiStatisticsManager.updateTotalPolicyPostCount();
1503         ApiStatisticsManager.updateTotalPolicyTypeGetCount();
1504         ApiStatisticsManager.updateTotalPolicyTypePostCount();
1505         ApiStatisticsManager.updatePolicyGetSuccessCount();
1506         ApiStatisticsManager.updatePolicyGetFailureCount();
1507         ApiStatisticsManager.updatePolicyPostSuccessCount();
1508         ApiStatisticsManager.updatePolicyPostFailureCount();
1509         ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
1510         ApiStatisticsManager.updatePolicyTypeGetFailureCount();
1511         ApiStatisticsManager.updatePolicyTypePostSuccessCount();
1512         ApiStatisticsManager.updatePolicyTypePostFailureCount();
1513     }
1514
1515     private void validateStatisticsReport(final StatisticsReport report, final int code) {
1516
1517         assertEquals(code, report.getCode());
1518     }
1519
1520     private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
1521             final String message, final HealthCheckReport report) {
1522
1523         assertEquals(name, report.getName());
1524         assertEquals(url, report.getUrl());
1525         assertEquals(healthy, report.isHealthy());
1526         assertEquals(code, report.getCode());
1527         assertEquals(message, report.getMessage());
1528     }
1529 }