Changes for cascaded get in policy models
[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.NOT_FOUND.getStatusCode(), rawResponse2.getStatus());
321         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
322         assertEquals("no policy types specified on 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/onap.policies.optimization.resource.HpaPolicy", mediaType);
508         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
509         ToscaServiceTemplate namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
510         assertNotNull(namingServiceTemplate);
511         assertEquals(3, namingServiceTemplate.getPolicyTypesAsMap().size());
512         assertEquals(5, namingServiceTemplate.getDataTypesAsMap().size());
513
514         rawResponse = readResource(POLICYTYPES, mediaType);
515         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
516         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
517         assertFalse(response.getPolicyTypes().isEmpty());
518
519         rawResponse = readResource(POLICYTYPES_TCA, mediaType);
520         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
521
522         rawResponse = readResource(POLICYTYPES_TCA_VERSION, mediaType);
523         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
524
525         rawResponse = readResource(POLICYTYPES_TCA_LATEST, mediaType);
526         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
527
528         rawResponse = readResource(POLICYTYPES_COLLECTOR, mediaType);
529         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
530
531         rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, mediaType);
532         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
533
534         rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, mediaType);
535         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
536
537         rawResponse = readResource(POLICYTYPES_DROOLS, mediaType);
538         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
539
540         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, mediaType);
541         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
542
543         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION_LATEST, mediaType);
544         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
545     }
546
547     @Test
548     public void testDeletePolicyTypeJson() throws Exception {
549         testDeletePolicyType(APP_JSON);
550     }
551
552     @Test
553     public void testDeletePolicyTypeYaml() throws Exception {
554         testDeletePolicyType(APP_YAML);
555     }
556
557     private void testDeletePolicyType(String mediaType) throws Exception {
558         Response rawResponse = deleteResource("policytypes/onap.policies.IDoNotExist/versions/1.0.0", mediaType);
559         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
560
561         rawResponse = createResource(POLICYTYPES, "policytypes/onap.policies.Test.yaml");
562         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
563
564         rawResponse = readResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType);
565         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
566
567         rawResponse = deleteResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType);
568         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
569
570         rawResponse = readResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType);
571         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
572     }
573
574     @Test
575     public void testReadPoliciesJson() throws Exception {
576         testReadPolicies(APP_JSON);
577     }
578
579     @Test
580     public void testReadPoliciesYaml() throws Exception {
581         testReadPolicies(APP_YAML);
582     }
583
584     private void testReadPolicies(String mediaType) throws Exception {
585         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
586             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
587             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
588         }
589
590         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType);
591         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
592
593         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType);
594         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
595
596         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
597         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
598
599         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
600         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
601
602         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType);
603         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
604
605         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
606         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
607
608         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
609         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
610     }
611
612     @Test
613     public void testNamingPolicyGet() throws Exception {
614         Response rawResponse = createResource("policies", "policies/sdnc.policy.naming.input.tosca.yaml");
615         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
616
617         rawResponse = readResource("policytypes/"
618                 + "onap.policies.Naming/versions/1.0.0/policies/SDNC_Policy.ONAP_VNF_NAMING_TIMESTAMP/versions/1.0.0",
619                 APP_JSON);
620         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
621
622         ToscaServiceTemplate namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
623         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
624         assertEquals(1, namingServiceTemplate.getPolicyTypesAsMap().size());
625         assertEquals(3, namingServiceTemplate.getDataTypesAsMap().size());
626
627         rawResponse = readResource("policytypes/"
628                 + "onap.policies.Naming/versions/1.0.0/policies/SDNC_Policy.ONAP_VNF_NAMING_TIMESTAMP/versions/latest",
629                 APP_JSON);
630         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
631
632         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
633         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
634         assertEquals(1, namingServiceTemplate.getPolicyTypesAsMap().size());
635         assertEquals(3, namingServiceTemplate.getDataTypesAsMap().size());
636
637         rawResponse = readResource(
638                 "policytypes/" + "onap.policies.Naming/versions/1.0.0/policies/SDNC_Policy.ONAP_VNF_NAMING_TIMESTAMP",
639                 APP_JSON);
640         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
641
642         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
643         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
644         assertEquals(1, namingServiceTemplate.getPolicyTypesAsMap().size());
645         assertEquals(3, namingServiceTemplate.getDataTypesAsMap().size());
646
647         rawResponse = deleteResource("policytypes/"
648                 + "onap.policies.Naming/versions/1.0.0/policies/SDNC_Policy.ONAP_VNF_NAMING_TIMESTAMP/versions/1.0.0",
649                 APP_JSON);
650         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
651     }
652
653     @Test
654     public void testDeletePoliciesJson() throws Exception {
655         testDeletePolicies(APP_JSON);
656     }
657
658     @Test
659     public void testDeletePoliciesYaml() throws Exception {
660         testDeletePolicies(APP_YAML);
661     }
662
663     private void testDeletePolicies(String mediaType) throws Exception {
664         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
665         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
666         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
667         assertEquals("no policies found", error.getErrorMessage());
668     }
669
670     @Test
671     public void testDeletePolicyVersionJson() throws Exception {
672         testDeletePolicyVersion(APP_JSON);
673     }
674
675     @Test
676     public void testDeletePolicyVersionYaml() throws Exception {
677         testDeletePolicyVersion(APP_YAML);
678     }
679
680     private void testDeletePolicyVersion(String mediaType) throws Exception {
681         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
682             Response rawResponse = createResource(POLICYTYPES, resrcName);
683             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
684             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
685             assertNotNull(response);
686             assertFalse(response.getPolicyTypes().isEmpty());
687         }
688         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
689             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
690             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
691         }
692         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
693         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
694
695         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
696         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
697         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
698         assertEquals(
699                 "policies for filter ToscaPolicyFilter(name=onap.restart.tca, version=1.0.0, versionPrefix=null, "
700                         + "type=onap.policies.monitoring.cdap.tca.hi.lo.app, typeVersion=1.0.0) do not exist",
701                 errorResponse.getErrorMessage());
702
703         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
704         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
705
706         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
707         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
708         errorResponse = rawResponse.readEntity(ErrorResponse.class);
709         assertEquals("policies for onap.restart.tca:2.0.0 do not exist", errorResponse.getErrorMessage());
710
711         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType);
712         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
713         errorResponse = rawResponse.readEntity(ErrorResponse.class);
714         assertEquals("policies for onap.restart.tca:null do not exist", errorResponse.getErrorMessage());
715
716         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType);
717         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
718         errorResponse = rawResponse.readEntity(ErrorResponse.class);
719         assertEquals("policies for onap.restart.tca:null do not exist", errorResponse.getErrorMessage());
720     }
721
722     @Test
723     public void testGetAllVersionOfPolicyJson() throws Exception {
724         testGetAllVersionOfPolicy(APP_JSON);
725     }
726
727     @Test
728     public void testGetAllVersionOfPolicyYaml() throws Exception {
729         testGetAllVersionOfPolicy(APP_YAML);
730     }
731
732     private void testGetAllVersionOfPolicy(String mediaType) throws Exception {
733         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
734             Response rawResponse = createResource(POLICYTYPES, resrcName);
735             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
736             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
737             assertNotNull(response);
738             assertFalse(response.getPolicyTypes().isEmpty());
739         }
740         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
741             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
742             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
743         }
744         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType);
745         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
746     }
747
748     @Test
749     public void testReadGuardPoliciesJson() throws Exception {
750         testReadGuardPolicies(APP_JSON);
751     }
752
753     @Test
754     public void testReadGuardPoliciesYaml() throws Exception {
755         testReadGuardPolicies(APP_YAML);
756     }
757
758     private void testReadGuardPolicies(String mediaType) throws Exception {
759         for (String resrcName : LEGACY_GUARD_POLICY_RESOURCE_NAMES) {
760             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName);
761             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
762         }
763
764         Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, mediaType);
765         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
766
767         rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, mediaType);
768         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
769
770         rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, mediaType);
771         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
772
773         rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, mediaType);
774         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
775
776         rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, mediaType);
777         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
778
779         rawResponse = deleteResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, APP_JSON);
780         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
781     }
782
783     @Test
784     public void testReadOperationalPoliciesJson() throws Exception {
785         testReadOperationalPolicies(APP_JSON);
786     }
787
788     @Test
789     public void testReadOperationalPoliciesYaml() throws Exception {
790         testReadOperationalPolicies(APP_YAML);
791     }
792
793     private void testReadOperationalPolicies(String mediaType) throws Exception {
794         for (String resrcName : LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES) {
795             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName);
796             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
797         }
798
799         Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, mediaType);
800         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
801
802         rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, mediaType);
803         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
804
805         rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
806         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
807
808         rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
809         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
810
811         rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, mediaType);
812         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
813
814         rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, mediaType);
815         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
816
817         rawResponse = deleteResource(OPS_POLICIES + "/operational.restart/versions/1", APP_JSON);
818         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
819
820         rawResponse = deleteResource(OPS_POLICIES + "/operational.scaleout/versions/1", APP_JSON);
821         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
822
823         rawResponse = deleteResource(OPS_POLICIES + "/operational.modifyconfig/versions/1", APP_JSON);
824         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
825
826     }
827
828     @Test
829     public void testDeleteGuardPolicyJson() throws Exception {
830         testDeleteGuardPolicy(APP_JSON);
831     }
832
833     @Test
834     public void testDeleteGuardPolicyYaml() throws Exception {
835         testDeleteGuardPolicy(APP_YAML);
836     }
837
838     private void testDeleteGuardPolicy(String mediaType) throws Exception {
839         for (String resrcName : LEGACY_GUARD_POLICY_RESOURCE_NAMES) {
840             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName);
841             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
842         }
843
844         Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, mediaType);
845         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
846
847         rawResponse = deleteResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, APP_JSON);
848         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
849     }
850
851     @Test
852     public void testGetDeployedVersionsOfGuardPolicyJson() throws Exception {
853         testGetDeployedVersionsOfGuardPolicy(APP_JSON);
854     }
855
856     @Test
857     public void testGetDeployedVersionsOfGuardPolicyYaml() throws Exception {
858         testGetDeployedVersionsOfGuardPolicy(APP_YAML);
859     }
860
861     private void testGetDeployedVersionsOfGuardPolicy(String mediaType) throws Exception {
862         Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_DEPLOYED, mediaType);
863         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
864         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
865         assertEquals(
866                 "could not find policy with ID guard.frequency.scaleout and type "
867                         + "onap.policies.controlloop.guard.FrequencyLimiter:1.0.0 deployed in any pdp group",
868                 errorResponse.getErrorMessage());
869     }
870
871     @Test
872     public void testDeleteOperationalPolicyJson() throws Exception {
873         testDeleteOperationalPolicy(APP_JSON);
874     }
875
876     @Test
877     public void testDeleteOperationalPolicyYaml() throws Exception {
878         testDeleteOperationalPolicy(APP_YAML);
879     }
880
881     private void testDeleteOperationalPolicy(String mediaType) throws Exception {
882         Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, mediaType);
883         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
884         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
885         assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
886     }
887
888     @Test
889     public void testGetDeployedVersionsOfPolicyJson() throws Exception {
890         testGetDeployedVersionsOfPolicy(APP_JSON);
891     }
892
893     @Test
894     public void testGetDeployedVersionsOfPolicyYaml() throws Exception {
895         testGetDeployedVersionsOfPolicy(APP_YAML);
896     }
897
898     private void testGetDeployedVersionsOfPolicy(String mediaType) throws Exception {
899         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED, mediaType);
900         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
901         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
902         assertEquals(
903                 "could not find policy with ID onap.restart.tca and type "
904                         + "onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group",
905                 errorResponse.getErrorMessage());
906     }
907
908     @Test
909     public void testGetLatestVersionOfOperationalPolicyJson() throws Exception {
910         testGetLatestVersionOfOperationalPolicy(APP_JSON);
911     }
912
913     @Test
914     public void testGetLatestVersionOfOperationalPolicyYaml() throws Exception {
915         testGetLatestVersionOfOperationalPolicy(APP_YAML);
916     }
917
918     private void testGetLatestVersionOfOperationalPolicy(String mediaType) throws Exception {
919         Response rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
920         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
921         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
922         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":null", errorResponse.getErrorMessage());
923     }
924
925     @Test
926     public void testGetSpecificVersionOfOperationalPolicyJson() throws Exception {
927         testGetSpecificVersionOfOperationalPolicy(APP_JSON);
928     }
929
930     @Test
931     public void testGetSpecificVersionOfOperationalPolicyYaml() throws Exception {
932         testGetSpecificVersionOfOperationalPolicy(APP_YAML);
933     }
934
935     private void testGetSpecificVersionOfOperationalPolicy(String mediaType) throws Exception {
936         Response rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
937         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
938         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
939         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
940     }
941
942     @Test
943     public void testGetDeployedVersionsOfOperationalPolicyJson() throws Exception {
944         testGetDeployedVersionsOfOperationalPolicy(APP_JSON);
945     }
946
947     @Test
948     public void testGetDeployedVersionsOfOperationalPolicyYaml() throws Exception {
949         testGetDeployedVersionsOfOperationalPolicy(APP_YAML);
950     }
951
952     private void testGetDeployedVersionsOfOperationalPolicy(String mediaType) throws Exception {
953         Response rawResponse = readResource(OPS_POLICIES_VCPE_DEPLOYED, mediaType);
954         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
955         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
956         assertEquals(
957                 "could not find policy with ID " + OP_POLICY_NAME_VCPE + " and type "
958                         + "onap.policies.controlloop.Operational:1.0.0 deployed in any pdp group",
959                 errorResponse.getErrorMessage());
960     }
961
962     @Test
963     public void testDeleteSpecificVersionOfOperationalPolicy() throws Exception {
964         Response rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, APP_YAML);
965         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
966         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
967         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
968     }
969
970     private Response createResource(String endpoint, String resourceName) throws Exception {
971
972         String mediaType = APP_JSON; // default media type
973         ToscaServiceTemplate rawServiceTemplate = new ToscaServiceTemplate();
974         if (resourceName.endsWith(".json")) {
975             rawServiceTemplate =
976                     standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
977         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
978             mediaType = APP_YAML;
979             rawServiceTemplate = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
980                     ToscaServiceTemplate.class);
981         }
982
983         final Invocation.Builder invocationBuilder;
984
985         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
986
987         Entity<ToscaServiceTemplate> entity = Entity.entity(rawServiceTemplate, mediaType);
988         return invocationBuilder.post(entity);
989     }
990
991     private Response createGuardPolicy(String endpoint, String resourceName) throws Exception {
992
993         String mediaType = APP_JSON; // default media type
994         LegacyGuardPolicyInput rawGuardPolicy = new LegacyGuardPolicyInput();
995         if (resourceName.endsWith(".json")) {
996             rawGuardPolicy =
997                     standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
998         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
999             mediaType = APP_YAML;
1000             rawGuardPolicy = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
1001                     LegacyGuardPolicyInput.class);
1002         }
1003
1004         final Invocation.Builder invocationBuilder;
1005
1006         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1007
1008         Entity<LegacyGuardPolicyInput> entity = Entity.entity(rawGuardPolicy, mediaType);
1009         return invocationBuilder.post(entity);
1010     }
1011
1012     private Response createOperationalPolicy(String endpoint, String resourceName) throws Exception {
1013
1014         String mediaType = APP_JSON; // default media type
1015         LegacyOperationalPolicy rawOpsPolicy = new LegacyOperationalPolicy();
1016         if (resourceName.endsWith(".json")) {
1017             rawOpsPolicy = standardCoder.decode(ResourceUtils.getResourceAsString(resourceName),
1018                     LegacyOperationalPolicy.class);
1019         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1020             mediaType = APP_YAML;
1021             rawOpsPolicy = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
1022                     LegacyOperationalPolicy.class);
1023         }
1024
1025         final Invocation.Builder invocationBuilder;
1026
1027         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1028
1029         Entity<LegacyOperationalPolicy> entity = Entity.entity(rawOpsPolicy, mediaType);
1030         return invocationBuilder.post(entity);
1031     }
1032
1033     private Response readResource(String endpoint, String mediaType) throws Exception {
1034
1035         final Invocation.Builder invocationBuilder;
1036
1037         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1038
1039         return invocationBuilder.get();
1040
1041     }
1042
1043     private Response deleteResource(String endpoint, String mediaType) throws Exception {
1044
1045         final Invocation.Builder invocationBuilder;
1046
1047         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1048
1049         return invocationBuilder.delete();
1050     }
1051
1052     private Invocation.Builder sendHttpsRequest(final String endpoint, String mediaType) throws Exception {
1053
1054         final TrustManager[] noopTrustManager = NetworkUtil.getAlwaysTrustingManager();
1055
1056         final SSLContext sc = SSLContext.getInstance("TLSv1.2");
1057         sc.init(null, noopTrustManager, new SecureRandom());
1058         final ClientBuilder clientBuilder =
1059                 ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
1060         final Client client = clientBuilder.build();
1061         final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1062         client.register(feature);
1063
1064         client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1065         if (APP_JSON.equalsIgnoreCase(mediaType)) {
1066             client.register(GsonMessageBodyHandler.class);
1067         } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
1068             client.register(YamlMessageBodyHandler.class);
1069         }
1070
1071         final WebTarget webTarget = client.target("https://localhost:" + apiPort + "/policy/api/v1/" + endpoint);
1072
1073         final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
1074
1075         if (!NetworkUtil.isTcpPortOpen("localhost", apiPort, 60, 1000L)) {
1076             throw new IllegalStateException("cannot connect to port " + apiPort);
1077         }
1078         return invocationBuilder;
1079     }
1080
1081     private void updateApiStatistics() {
1082
1083         ApiStatisticsManager.updateTotalApiCallCount();
1084         ApiStatisticsManager.updateApiCallSuccessCount();
1085         ApiStatisticsManager.updateApiCallFailureCount();
1086         ApiStatisticsManager.updateTotalPolicyGetCount();
1087         ApiStatisticsManager.updateTotalPolicyPostCount();
1088         ApiStatisticsManager.updateTotalPolicyTypeGetCount();
1089         ApiStatisticsManager.updateTotalPolicyTypePostCount();
1090         ApiStatisticsManager.updatePolicyGetSuccessCount();
1091         ApiStatisticsManager.updatePolicyGetFailureCount();
1092         ApiStatisticsManager.updatePolicyPostSuccessCount();
1093         ApiStatisticsManager.updatePolicyPostFailureCount();
1094         ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
1095         ApiStatisticsManager.updatePolicyTypeGetFailureCount();
1096         ApiStatisticsManager.updatePolicyTypePostSuccessCount();
1097         ApiStatisticsManager.updatePolicyTypePostFailureCount();
1098     }
1099
1100     private void validateStatisticsReport(final StatisticsReport report, final int code) {
1101
1102         assertEquals(code, report.getCode());
1103     }
1104
1105     private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
1106             final String message, final HealthCheckReport report) {
1107
1108         assertEquals(name, report.getName());
1109         assertEquals(url, report.getUrl());
1110         assertEquals(healthy, report.isHealthy());
1111         assertEquals(code, report.getCode());
1112         assertEquals(message, report.getMessage());
1113     }
1114 }