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