0cca2ffcd9d92c0c9d76cfe25b02ed4387d1fde7
[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.guard.Blacklist.yaml",
194         "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml",
195         "policytypes/onap.policies.controlloop.guard.MinMax.yaml",
196         "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
197         "policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml",
198         "policytypes/onap.policies.optimization.resource.DistancePolicy.yaml",
199         "policytypes/onap.policies.optimization.resource.HpaPolicy.yaml",
200         "policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml",
201         "policytypes/onap.policies.optimization.resource.PciPolicy.yaml",
202         "policytypes/onap.policies.optimization.service.QueryPolicy.yaml",
203         "policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml",
204         "policytypes/onap.policies.optimization.resource.Vim_fit.yaml",
205         "policytypes/onap.policies.optimization.resource.VnfPolicy.yaml"
206     };
207
208     private static final String TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_JSON =
209         "policies/vCPE.policy.operational.input.tosca.json";
210
211     private static final String TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML =
212         "policies/vCPE.policy.operational.input.tosca.yaml";
213
214     private static final String[] LEGACY_GUARD_POLICY_RESOURCE_NAMES = {
215         "policies/vDNS.policy.guard.frequency.input.json",
216         "policies/vDNS.policy.guard.minmax.input.json"
217     };
218
219     private static final String[] LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES = {
220         "policies/vCPE.policy.operational.input.json",
221         "policies/vDNS.policy.operational.input.json",
222         "policies/vFirewall.policy.operational.input.json"
223     };
224
225     private static PolicyModelsProviderParameters providerParams;
226     private static ApiParameterGroup apiParamGroup;
227     private static PolicyProvider policyProvider;
228     private static PolicyTypeProvider policyTypeProvider;
229
230     // @formatter:on
231
232     private static final StandardCoder standardCoder = new StandardCoder();
233
234     private static int apiPort;
235     private static Main apiMain;
236
237     private static StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
238
239     /**
240      * Initializes parameters and set up test environment.
241      *
242      * @throws PfModelException the PfModel parsing exception
243      * @throws IOException on I/O exceptions
244      */
245     @BeforeClass
246     public static void setupParameters() throws PfModelException, IOException {
247         providerParams = new PolicyModelsProviderParameters();
248         // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
249         providerParams.setDatabaseDriver("org.h2.Driver");
250         providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
251         providerParams.setDatabaseUser("policy");
252         providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
253         providerParams.setPersistenceUnit("ToscaConceptTest");
254         apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams, Collections.emptyList());
255         ParameterService.register(apiParamGroup, true);
256
257         policyTypeProvider = new PolicyTypeProvider();
258         policyProvider = new PolicyProvider();
259
260         apiPort = NetworkUtil.allocPort();
261
262         final String[] apiConfigParameters = new String[2];
263         final Properties systemProps = System.getProperties();
264         systemProps.put("javax.net.ssl.keyStore", KEYSTORE);
265         systemProps.put("javax.net.ssl.keyStorePassword", "Pol1cy_0nap");
266         System.setProperties(systemProps);
267         new CommonTestData().makeParameters("src/test/resources/parameters/ApiConfigParameters_Https.json",
268                 "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json", apiPort);
269         apiConfigParameters[0] = "-c";
270         apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json";
271
272         apiMain = new Main(apiConfigParameters);
273     }
274
275     /**
276      * Method for cleanup after each test.
277      */
278     @AfterClass
279     public static void teardown() throws Exception {
280         policyTypeProvider.close();
281         policyProvider.close();
282
283         if (apiMain != null) {
284             apiMain.shutdown();
285         }
286     }
287
288     @Test
289     public void testApiStatisticsConstructorIsPrivate() {
290
291         try {
292             final Constructor<ApiStatisticsManager> constructor = ApiStatisticsManager.class.getDeclaredConstructor();
293             assertTrue(Modifier.isPrivate(constructor.getModifiers()));
294             constructor.setAccessible(true);
295             constructor.newInstance();
296
297         } catch (final Exception exp) {
298             assertTrue(exp.getCause().toString().contains("Instantiation of the class is not allowed"));
299         }
300     }
301
302     @Test
303     public void testCreatePolicyTypes() throws Exception {
304         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
305             Response rawResponse = createResource(POLICYTYPES, resrcName);
306             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
307             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
308             assertNotNull(response);
309             assertFalse(response.getPolicyTypes().isEmpty());
310         }
311
312         // Send a policy type with a null value to trigger an error
313         Response rawResponse = readResource(POLICYTYPES, APP_JSON);
314         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
315         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
316         String firstPolicyType = response.getPolicyTypes().keySet().iterator().next();
317         response.getPolicyTypes().put(firstPolicyType, null);
318         Response rawResponse2 = createResource(POLICYTYPES, standardCoder.encode(response));
319         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse2.getStatus());
320         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
321         assertEquals("no policy types specified in the service template", errorResponse.getErrorMessage());
322     }
323
324     @Test
325     public void testCreatePolicies() throws Exception {
326         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
327             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
328             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
329         }
330
331         new File("src/test/resources/policies/BadTestPolicy.yaml").deleteOnExit();
332
333         // Send a policy with no policy type trigger an error
334         String toscaPolicy = ResourceUtils
335                 .getResourceAsString(TOSCA_POLICY_RESOURCE_NAMES[TOSCA_POLICIES_RESOURCE_NAMES.length - 1]);
336
337         toscaPolicy = toscaPolicy.replaceAll("onap.policies.monitoring.cdap.tca.hi.lo.app", "");
338         TextFileUtils.putStringAsTextFile(toscaPolicy, "src/test/resources/policies/BadTestPolicy.yaml");
339
340         Response rawResponse2 =
341                 createResource(POLICYTYPES_TCA_POLICIES, "src/test/resources/policies/BadTestPolicy.yaml");
342         assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), rawResponse2.getStatus());
343         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
344         assertThat(errorResponse.getErrorMessage())
345                 .contains("entity in incoming fragment does not equal existing entity");
346     }
347
348     @Test
349     public void testSimpleCreatePolicies() throws Exception {
350         for (String resrcName : TOSCA_POLICIES_RESOURCE_NAMES) {
351             Response rawResponse = createResource(POLICIES, resrcName);
352             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
353         }
354
355         new File("src/test/resources/policies/BadTestPolicy.yaml").deleteOnExit();
356
357         // Send a policy with no policy type trigger an error
358         String toscaPolicy = ResourceUtils
359                 .getResourceAsString(TOSCA_POLICY_RESOURCE_NAMES[TOSCA_POLICIES_RESOURCE_NAMES.length - 1]);
360
361         toscaPolicy = toscaPolicy.replaceAll("onap.policies.monitoring.cdap.tca.hi.lo.app", "");
362         TextFileUtils.putStringAsTextFile(toscaPolicy, "src/test/resources/policies/BadTestPolicy.yaml");
363
364         Response rawResponse2 = createResource(POLICIES, "src/test/resources/policies/BadTestPolicy.yaml");
365         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
366         assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), rawResponse2.getStatus());
367         assertThat(errorResponse.getErrorMessage()).contains("policy type NULL:1.0.0 referenced in policy not found");
368     }
369
370     @Test
371     public void testCreateGuardPolicies() throws Exception {
372         for (String resrcName : LEGACY_GUARD_POLICY_RESOURCE_NAMES) {
373             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName);
374             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
375         }
376
377         Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, APP_JSON);
378         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
379
380         rawResponse = deleteResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, APP_JSON);
381         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
382     }
383
384     @Test
385     public void testCreateOperationalPolicies() throws Exception {
386         for (String resrcName : LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES) {
387             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName);
388             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
389         }
390
391         Response rawResponse = deleteResource(OPS_POLICIES + "/operational.restart/versions/1", APP_JSON);
392         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
393
394         rawResponse = deleteResource(OPS_POLICIES + "/operational.scaleout/versions/1", APP_JSON);
395         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
396
397         rawResponse = deleteResource(OPS_POLICIES + "/operational.modifyconfig/versions/1", APP_JSON);
398         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
399     }
400
401     @SuppressWarnings("unchecked")
402     @Test
403     public void testToscaCompliantOpDroolsPolicies() throws Exception {
404         Response rawResponse = createResource(POLICYTYPES, TOSCA_POLICYTYPE_OP_RESOURCE);
405         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
406
407         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, APP_JSON);
408         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
409
410         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_JSON);
411         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
412
413         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML);
414         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
415
416         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
417         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
418
419         rawResponse = deleteResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
420         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
421
422         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML);
423         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
424
425         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
426         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
427
428         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_YAML);
429         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
430
431         ToscaServiceTemplate toscaVcpeSt = rawResponse.readEntity(ToscaServiceTemplate.class);
432         assertEquals(1, toscaVcpeSt.getToscaTopologyTemplate().getPolicies().size());
433         assertEquals(OP_POLICY_NAME_VCPE,
434                 toscaVcpeSt.getToscaTopologyTemplate().getPolicies().get(0).get(OP_POLICY_NAME_VCPE).getName());
435
436         Map<String, Object> props =
437                 toscaVcpeSt.getToscaTopologyTemplate().getPolicies().get(0).get(OP_POLICY_NAME_VCPE).getProperties();
438         assertNotNull(props);
439
440         List<Object> operations = (List<Object>) props.get("operations");
441         assertEquals(1, operations.size());
442         assertEquals(props.get("trigger"), ((Map<String, Object>) operations.get(0)).get("id"));
443
444         Map<String, Object> operation =
445                 (Map<String, Object>) ((Map<String, Object>) operations.get(0)).get("operation");
446         assertEquals("APPC", operation.get("actor"));
447         assertEquals("Restart", operation.get("operation"));
448
449         rawResponse = deleteResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON);
450         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
451     }
452
453     @Test
454     public void testHealthCheckSuccessJson() throws Exception {
455         testHealthCheckSuccess(APP_JSON);
456     }
457
458     @Test
459     public void testHealthCheckSuccessYaml() throws Exception {
460         testHealthCheckSuccess(APP_YAML);
461     }
462
463     private void testHealthCheckSuccess(String mediaType) throws Exception {
464         final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT, mediaType);
465         final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
466         validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
467     }
468
469     @Test
470     public void testApiStatistics_200_Json() throws Exception {
471         testApiStatistics_200(APP_JSON);
472     }
473
474     @Test
475     public void testApiStatistics_200_Yaml() throws Exception {
476         testApiStatistics_200(APP_YAML);
477     }
478
479     private void testApiStatistics_200(String mediaType) throws Exception {
480         Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType);
481         StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
482         validateStatisticsReport(report, 200);
483         updateApiStatistics();
484         invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType);
485         report = invocationBuilder.get(StatisticsReport.class);
486         validateStatisticsReport(report, 200);
487         ApiStatisticsManager.resetAllStatistics();
488     }
489
490     @Test
491     public void testReadPolicyTypesJson() throws Exception {
492         testReadPolicyTypes(APP_JSON);
493     }
494
495     @Test
496     public void testReadPolicyTypesYaml() throws Exception {
497         testReadPolicyTypes(APP_YAML);
498     }
499
500     private void testReadPolicyTypes(String mediaType) throws Exception {
501         Response rawResponse = readResource(POLICYTYPES, mediaType);
502         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
503         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
504         assertFalse(response.getPolicyTypes().isEmpty());
505
506         rawResponse = readResource(POLICYTYPES_TCA, mediaType);
507         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
508
509         rawResponse = readResource(POLICYTYPES_TCA_VERSION, mediaType);
510         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
511
512         rawResponse = readResource(POLICYTYPES_TCA_LATEST, mediaType);
513         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
514
515         rawResponse = readResource(POLICYTYPES_COLLECTOR, mediaType);
516         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
517
518         rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, mediaType);
519         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
520
521         rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, mediaType);
522         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
523
524         rawResponse = readResource(POLICYTYPES_DROOLS, mediaType);
525         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
526
527         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, mediaType);
528         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
529
530         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION_LATEST, mediaType);
531         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
532     }
533
534     @Test
535     public void testDeletePolicyTypeJson() throws Exception {
536         testDeletePolicyType(APP_JSON);
537     }
538
539     @Test
540     public void testDeletePolicyTypeYaml() throws Exception {
541         testDeletePolicyType(APP_YAML);
542     }
543
544     private void testDeletePolicyType(String mediaType) throws Exception {
545         Response rawResponse = deleteResource("policytypes/onap.policies.IDoNotExist/versions/1.0.0", mediaType);
546         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
547
548         rawResponse = createResource(POLICYTYPES, "policytypes/onap.policies.Test.yaml");
549         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
550
551         rawResponse = readResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType);
552         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
553
554         rawResponse = deleteResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType);
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.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
559     }
560
561     @Test
562     public void testReadPoliciesJson() throws Exception {
563         testReadPolicies(APP_JSON);
564     }
565
566     @Test
567     public void testReadPoliciesYaml() throws Exception {
568         testReadPolicies(APP_YAML);
569     }
570
571     private void testReadPolicies(String mediaType) throws Exception {
572         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
573             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
574             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
575         }
576
577         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType);
578         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
579
580         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType);
581         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
582
583         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
584         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
585
586         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
587         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
588
589         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType);
590         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
591
592         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
593         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
594
595         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
596         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
597     }
598
599     @Test
600     public void testDeletePoliciesJson() throws Exception {
601         testDeletePolicies(APP_JSON);
602     }
603
604     @Test
605     public void testDeletePoliciesYaml() throws Exception {
606         testDeletePolicies(APP_YAML);
607     }
608
609     private void testDeletePolicies(String mediaType) throws Exception {
610         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
611         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
612         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
613         assertEquals("policies for onap.restart.tca:1.0.0 do not exist", error.getErrorMessage());
614     }
615
616     @Test
617     public void testDeletePolicyVersionJson() throws Exception {
618         testDeletePolicyVersion(APP_JSON);
619     }
620
621     @Test
622     public void testDeletePolicyVersionYaml() throws Exception {
623         testDeletePolicyVersion(APP_YAML);
624     }
625
626     private void testDeletePolicyVersion(String mediaType) throws Exception {
627         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
628             Response rawResponse = createResource(POLICYTYPES, resrcName);
629             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
630             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
631             assertNotNull(response);
632             assertFalse(response.getPolicyTypes().isEmpty());
633         }
634         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
635             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
636             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
637         }
638         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
639         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
640
641         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType);
642         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
643         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
644         assertEquals(
645                 "policy with ID onap.restart.tca:1.0.0 and type "
646                         + "onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
647                 errorResponse.getErrorMessage());
648
649         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
650         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
651
652         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION2, mediaType);
653         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
654         errorResponse = rawResponse.readEntity(ErrorResponse.class);
655         assertEquals("policies for onap.restart.tca:2.0.0 do not exist", errorResponse.getErrorMessage());
656
657         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType);
658         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
659         errorResponse = rawResponse.readEntity(ErrorResponse.class);
660         assertEquals("policies for onap.restart.tca:null do not exist", errorResponse.getErrorMessage());
661
662         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType);
663         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
664         errorResponse = rawResponse.readEntity(ErrorResponse.class);
665         assertEquals("policies for onap.restart.tca:null do not exist", errorResponse.getErrorMessage());
666     }
667
668     @Test
669     public void testGetAllVersionOfPolicyJson() throws Exception {
670         testGetAllVersionOfPolicy(APP_JSON);
671     }
672
673     @Test
674     public void testGetAllVersionOfPolicyYaml() throws Exception {
675         testGetAllVersionOfPolicy(APP_YAML);
676     }
677
678     private void testGetAllVersionOfPolicy(String mediaType) throws Exception {
679         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
680             Response rawResponse = createResource(POLICYTYPES, resrcName);
681             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
682             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
683             assertNotNull(response);
684             assertFalse(response.getPolicyTypes().isEmpty());
685         }
686         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
687             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName);
688             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
689         }
690         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType);
691         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
692     }
693
694     @Test
695     public void testReadGuardPoliciesJson() throws Exception {
696         testReadGuardPolicies(APP_JSON);
697     }
698
699     @Test
700     public void testReadGuardPoliciesYaml() throws Exception {
701         testReadGuardPolicies(APP_YAML);
702     }
703
704     private void testReadGuardPolicies(String mediaType) throws Exception {
705         for (String resrcName : LEGACY_GUARD_POLICY_RESOURCE_NAMES) {
706             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName);
707             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
708         }
709
710         Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, mediaType);
711         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
712
713         rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, mediaType);
714         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
715
716         rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, mediaType);
717         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
718
719         rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, mediaType);
720         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
721
722         rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, mediaType);
723         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
724
725         rawResponse = deleteResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, APP_JSON);
726         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
727     }
728
729     @Test
730     public void testReadOperationalPoliciesJson() throws Exception {
731         testReadOperationalPolicies(APP_JSON);
732     }
733
734     @Test
735     public void testReadOperationalPoliciesYaml() throws Exception {
736         testReadOperationalPolicies(APP_YAML);
737     }
738
739     private void testReadOperationalPolicies(String mediaType) throws Exception {
740         for (String resrcName : LEGACY_OPERATIONAL_POLICY_RESOURCE_NAMES) {
741             Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName);
742             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
743         }
744
745         Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, mediaType);
746         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
747
748         rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, mediaType);
749         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
750
751         rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
752         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
753
754         rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
755         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
756
757         rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, mediaType);
758         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
759
760         rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, mediaType);
761         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
762
763         rawResponse = deleteResource(OPS_POLICIES + "/operational.restart/versions/1", APP_JSON);
764         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
765
766         rawResponse = deleteResource(OPS_POLICIES + "/operational.scaleout/versions/1", APP_JSON);
767         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
768
769         rawResponse = deleteResource(OPS_POLICIES + "/operational.modifyconfig/versions/1", APP_JSON);
770         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
771
772     }
773
774     @Test
775     public void testDeleteGuardPolicyJson() throws Exception {
776         testDeleteGuardPolicy(APP_JSON);
777     }
778
779     @Test
780     public void testDeleteGuardPolicyYaml() throws Exception {
781         testDeleteGuardPolicy(APP_YAML);
782     }
783
784     private void testDeleteGuardPolicy(String mediaType) throws Exception {
785         for (String resrcName : LEGACY_GUARD_POLICY_RESOURCE_NAMES) {
786             Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName);
787             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
788         }
789
790         Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, mediaType);
791         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
792
793         rawResponse = deleteResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, APP_JSON);
794         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
795     }
796
797     @Test
798     public void testGetDeployedVersionsOfGuardPolicyJson() throws Exception {
799         testGetDeployedVersionsOfGuardPolicy(APP_JSON);
800     }
801
802     @Test
803     public void testGetDeployedVersionsOfGuardPolicyYaml() throws Exception {
804         testGetDeployedVersionsOfGuardPolicy(APP_YAML);
805     }
806
807     private void testGetDeployedVersionsOfGuardPolicy(String mediaType) throws Exception {
808         Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_DEPLOYED, mediaType);
809         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
810         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
811         assertEquals(
812                 "could not find policy with ID guard.frequency.scaleout and type "
813                         + "onap.policies.controlloop.guard.FrequencyLimiter:1.0.0 deployed in any pdp group",
814                 errorResponse.getErrorMessage());
815     }
816
817     @Test
818     public void testDeleteOperationalPolicyJson() throws Exception {
819         testDeleteOperationalPolicy(APP_JSON);
820     }
821
822     @Test
823     public void testDeleteOperationalPolicyYaml() throws Exception {
824         testDeleteOperationalPolicy(APP_YAML);
825     }
826
827     private void testDeleteOperationalPolicy(String mediaType) throws Exception {
828         Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, mediaType);
829         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
830         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
831         assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
832     }
833
834     @Test
835     public void testGetDeployedVersionsOfPolicyJson() throws Exception {
836         testGetDeployedVersionsOfPolicy(APP_JSON);
837     }
838
839     @Test
840     public void testGetDeployedVersionsOfPolicyYaml() throws Exception {
841         testGetDeployedVersionsOfPolicy(APP_YAML);
842     }
843
844     private void testGetDeployedVersionsOfPolicy(String mediaType) throws Exception {
845         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED, mediaType);
846         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
847         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
848         assertEquals(
849                 "could not find policy with ID onap.restart.tca and type "
850                         + "onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group",
851                 errorResponse.getErrorMessage());
852     }
853
854     @Test
855     public void testGetLatestVersionOfOperationalPolicyJson() throws Exception {
856         testGetLatestVersionOfOperationalPolicy(APP_JSON);
857     }
858
859     @Test
860     public void testGetLatestVersionOfOperationalPolicyYaml() throws Exception {
861         testGetLatestVersionOfOperationalPolicy(APP_YAML);
862     }
863
864     private void testGetLatestVersionOfOperationalPolicy(String mediaType) throws Exception {
865         Response rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, mediaType);
866         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
867         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
868         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":null", errorResponse.getErrorMessage());
869     }
870
871     @Test
872     public void testGetSpecificVersionOfOperationalPolicyJson() throws Exception {
873         testGetSpecificVersionOfOperationalPolicy(APP_JSON);
874     }
875
876     @Test
877     public void testGetSpecificVersionOfOperationalPolicyYaml() throws Exception {
878         testGetSpecificVersionOfOperationalPolicy(APP_YAML);
879     }
880
881     private void testGetSpecificVersionOfOperationalPolicy(String mediaType) throws Exception {
882         Response rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, mediaType);
883         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
884         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
885         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
886     }
887
888     @Test
889     public void testGetDeployedVersionsOfOperationalPolicyJson() throws Exception {
890         testGetDeployedVersionsOfOperationalPolicy(APP_JSON);
891     }
892
893     @Test
894     public void testGetDeployedVersionsOfOperationalPolicyYaml() throws Exception {
895         testGetDeployedVersionsOfOperationalPolicy(APP_YAML);
896     }
897
898     private void testGetDeployedVersionsOfOperationalPolicy(String mediaType) throws Exception {
899         Response rawResponse = readResource(OPS_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 " + OP_POLICY_NAME_VCPE + " and type "
904                         + "onap.policies.controlloop.Operational:1.0.0 deployed in any pdp group",
905                 errorResponse.getErrorMessage());
906     }
907
908     @Test
909     public void testDeleteSpecificVersionOfOperationalPolicy() throws Exception {
910         Response rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, APP_YAML);
911         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
912         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
913         assertEquals("no policy found for policy: " + OP_POLICY_NAME_VDNS + ":1", errorResponse.getErrorMessage());
914     }
915
916     private Response createResource(String endpoint, String resourceName) throws Exception {
917
918         String mediaType = APP_JSON; // default media type
919         ToscaServiceTemplate rawServiceTemplate = new ToscaServiceTemplate();
920         if (resourceName.endsWith(".json")) {
921             rawServiceTemplate =
922                     standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
923         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
924             mediaType = APP_YAML;
925             rawServiceTemplate = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
926                     ToscaServiceTemplate.class);
927         }
928
929         final Invocation.Builder invocationBuilder;
930
931         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
932
933         Entity<ToscaServiceTemplate> entity = Entity.entity(rawServiceTemplate, mediaType);
934         return invocationBuilder.post(entity);
935     }
936
937     private Response createGuardPolicy(String endpoint, String resourceName) throws Exception {
938
939         String mediaType = APP_JSON; // default media type
940         LegacyGuardPolicyInput rawGuardPolicy = new LegacyGuardPolicyInput();
941         if (resourceName.endsWith(".json")) {
942             rawGuardPolicy =
943                     standardCoder.decode(ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
944         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
945             mediaType = APP_YAML;
946             rawGuardPolicy = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
947                     LegacyGuardPolicyInput.class);
948         }
949
950         final Invocation.Builder invocationBuilder;
951
952         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
953
954         Entity<LegacyGuardPolicyInput> entity = Entity.entity(rawGuardPolicy, mediaType);
955         return invocationBuilder.post(entity);
956     }
957
958     private Response createOperationalPolicy(String endpoint, String resourceName) throws Exception {
959
960         String mediaType = APP_JSON; // default media type
961         LegacyOperationalPolicy rawOpsPolicy = new LegacyOperationalPolicy();
962         if (resourceName.endsWith(".json")) {
963             rawOpsPolicy = standardCoder.decode(ResourceUtils.getResourceAsString(resourceName),
964                     LegacyOperationalPolicy.class);
965         } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
966             mediaType = APP_YAML;
967             rawOpsPolicy = standardYamlCoder.decode(ResourceUtils.getResourceAsString(resourceName),
968                     LegacyOperationalPolicy.class);
969         }
970
971         final Invocation.Builder invocationBuilder;
972
973         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
974
975         Entity<LegacyOperationalPolicy> entity = Entity.entity(rawOpsPolicy, mediaType);
976         return invocationBuilder.post(entity);
977     }
978
979     private Response readResource(String endpoint, String mediaType) throws Exception {
980
981         final Invocation.Builder invocationBuilder;
982
983         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
984
985         return invocationBuilder.get();
986
987     }
988
989     private Response deleteResource(String endpoint, String mediaType) throws Exception {
990
991         final Invocation.Builder invocationBuilder;
992
993         invocationBuilder = sendHttpsRequest(endpoint, mediaType);
994
995         return invocationBuilder.delete();
996     }
997
998     private Invocation.Builder sendHttpsRequest(final String endpoint, String mediaType) throws Exception {
999
1000         final TrustManager[] noopTrustManager = NetworkUtil.getAlwaysTrustingManager();
1001
1002         final SSLContext sc = SSLContext.getInstance("TLSv1.2");
1003         sc.init(null, noopTrustManager, new SecureRandom());
1004         final ClientBuilder clientBuilder =
1005                 ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
1006         final Client client = clientBuilder.build();
1007         final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1008         client.register(feature);
1009
1010         client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1011         if (APP_JSON.equalsIgnoreCase(mediaType)) {
1012             client.register(GsonMessageBodyHandler.class);
1013         } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
1014             client.register(YamlMessageBodyHandler.class);
1015         }
1016
1017         final WebTarget webTarget = client.target("https://localhost:" + apiPort + "/policy/api/v1/" + endpoint);
1018
1019         final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
1020
1021         if (!NetworkUtil.isTcpPortOpen("localhost", apiPort, 60, 1000L)) {
1022             throw new IllegalStateException("cannot connect to port " + apiPort);
1023         }
1024         return invocationBuilder;
1025     }
1026
1027     private void updateApiStatistics() {
1028
1029         ApiStatisticsManager.updateTotalApiCallCount();
1030         ApiStatisticsManager.updateApiCallSuccessCount();
1031         ApiStatisticsManager.updateApiCallFailureCount();
1032         ApiStatisticsManager.updateTotalPolicyGetCount();
1033         ApiStatisticsManager.updateTotalPolicyPostCount();
1034         ApiStatisticsManager.updateTotalPolicyTypeGetCount();
1035         ApiStatisticsManager.updateTotalPolicyTypePostCount();
1036         ApiStatisticsManager.updatePolicyGetSuccessCount();
1037         ApiStatisticsManager.updatePolicyGetFailureCount();
1038         ApiStatisticsManager.updatePolicyPostSuccessCount();
1039         ApiStatisticsManager.updatePolicyPostFailureCount();
1040         ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
1041         ApiStatisticsManager.updatePolicyTypeGetFailureCount();
1042         ApiStatisticsManager.updatePolicyTypePostSuccessCount();
1043         ApiStatisticsManager.updatePolicyTypePostFailureCount();
1044     }
1045
1046     private void validateStatisticsReport(final StatisticsReport report, final int code) {
1047
1048         assertEquals(code, report.getCode());
1049     }
1050
1051     private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
1052             final String message, final HealthCheckReport report) {
1053
1054         assertEquals(name, report.getName());
1055         assertEquals(url, report.getUrl());
1056         assertEquals(healthy, report.isHealthy());
1057         assertEquals(code, report.getCode());
1058         assertEquals(message, report.getMessage());
1059     }
1060 }