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