2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
4 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
5 * Modifications Copyright (C) 2019 Nordix Foundation.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 * SPDX-License-Identifier: Apache-2.0
20 * ============LICENSE_END=========================================================
23 package org.onap.policy.api.main.rest;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertFalse;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertTrue;
29 import static org.junit.Assert.fail;
31 import java.lang.reflect.Constructor;
32 import java.lang.reflect.Modifier;
33 import java.security.SecureRandom;
34 import java.security.cert.X509Certificate;
35 import java.util.Base64;
36 import java.util.Properties;
38 import javax.net.ssl.SSLContext;
39 import javax.net.ssl.TrustManager;
40 import javax.net.ssl.X509TrustManager;
41 import javax.ws.rs.client.Client;
42 import javax.ws.rs.client.ClientBuilder;
43 import javax.ws.rs.client.Entity;
44 import javax.ws.rs.client.Invocation;
45 import javax.ws.rs.client.WebTarget;
46 import javax.ws.rs.core.Response;
47 import org.glassfish.jersey.client.ClientConfig;
48 import org.glassfish.jersey.client.ClientProperties;
49 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
50 import org.junit.After;
51 import org.junit.Test;
52 import org.onap.policy.api.main.exception.PolicyApiException;
53 import org.onap.policy.api.main.parameters.ApiParameterGroup;
54 import org.onap.policy.api.main.parameters.CommonTestData;
55 import org.onap.policy.api.main.rest.provider.PolicyProvider;
56 import org.onap.policy.api.main.rest.provider.PolicyTypeProvider;
57 import org.onap.policy.api.main.startstop.Main;
58 import org.onap.policy.common.endpoints.http.server.RestServer;
59 import org.onap.policy.common.endpoints.http.server.YamlMessageBodyHandler;
60 import org.onap.policy.common.endpoints.parameters.RestServerParameters;
61 import org.onap.policy.common.endpoints.report.HealthCheckReport;
62 import org.onap.policy.common.gson.GsonMessageBodyHandler;
63 import org.onap.policy.common.parameters.ParameterService;
64 import org.onap.policy.common.utils.coder.StandardCoder;
65 import org.onap.policy.common.utils.coder.StandardYamlCoder;
66 import org.onap.policy.common.utils.network.NetworkUtil;
67 import org.onap.policy.common.utils.resources.ResourceUtils;
68 import org.onap.policy.models.base.PfModelException;
69 import org.onap.policy.models.errors.concepts.ErrorResponse;
70 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
71 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
72 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
73 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
74 import org.slf4j.Logger;
75 import org.slf4j.LoggerFactory;
78 * Class to perform unit test of {@link ApiRestServer}.
80 * @author Chenfei Gao (cgao@research.att.com)
82 public class TestApiRestServer {
84 private static final Logger LOGGER = LoggerFactory.getLogger(TestApiRestServer.class);
85 private static final String NOT_ALIVE = "not alive";
86 private static final String ALIVE = "alive";
87 private static final String SELF = "self";
88 private static final String NAME = "Policy API";
89 private static final String APP_JSON = "application/json";
90 private static final String APP_YAML = "application/yaml";
92 private static final String HEALTHCHECK_ENDPOINT = "healthcheck";
93 private static final String STATISTICS_ENDPOINT = "statistics";
95 private static final String POLICYTYPES = "policytypes";
96 private static final String POLICYTYPES_TCA = "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app";
97 private static final String POLICYTYPES_COLLECTOR =
98 "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server";
99 private static final String POLICYTYPES_TCA_VERSION =
100 "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0";
101 private static final String POLICYTYPES_TCA_LATEST =
102 "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/latest";
103 private static final String POLICYTYPES_COLLECTOR_VERSION =
104 "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server/versions/1.0.0";
105 private static final String POLICYTYPES_COLLECTOR_LATEST =
106 "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server/versions/latest";
108 private static final String POLICYTYPES_TCA_POLICIES =
109 "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies";
110 private static final String POLICYTYPES_TCA_POLICIES_VCPE =
111 "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca";
112 private static final String POLICYTYPES_TCA_POLICIES_VCPE_VERSION = "policytypes/"
113 + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/1.0.0";
114 private static final String POLICYTYPES_TCA_POLICIES_VCPE_LATEST = "policytypes/"
115 + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/latest";
116 private static final String POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED = "policytypes/"
117 + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/deployed";
119 private static final String GUARD_POLICIES = "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies";
120 private static final String GUARD_POLICIES_VDNS_FL_LATEST =
121 "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout"
122 + "/versions/latest";
123 private static final String GUARD_POLICIES_VDNS_FL_DEPLOYED =
124 "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout"
125 + "/versions/deployed";
126 private static final String GUARD_POLICIES_VDNS_MINMAX_LATEST =
127 "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout"
128 + "/versions/latest";
129 private static final String GUARD_POLICIES_VDNS_FL_VERSION = "policytypes/"
130 + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout/versions/1";
131 private static final String GUARD_POLICIES_VDNS_MINMAX_VERSION =
132 "policytypes/" + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout/versions/1";
134 private static final String OPS_POLICIES =
135 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies";
136 private static final String OPS_POLICIES_VCPE_LATEST =
137 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.restart"
138 + "/versions/latest";
139 private static final String OPS_POLICIES_VCPE_DEPLOYED =
140 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.restart"
141 + "/versions/deployed";
142 private static final String OPS_POLICIES_VDNS_LATEST =
143 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.scaleout"
144 + "/versions/latest";
145 private static final String OPS_POLICIES_VFIREWALL_LATEST =
146 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.modifyconfig"
147 + "/versions/latest";
148 private static final String OPS_POLICIES_VCPE_VERSION = "policytypes/"
149 + "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.restart/versions/1";
150 private static final String OPS_POLICIES_VDNS_VERSION = "policytypes/"
151 + "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.scaleout/versions/1";
152 private static final String OPS_POLICIES_VFIREWALL_VERSION = "policytypes/"
153 + "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.modifyconfig/versions/1";
154 private static final String POLICIES = "policies";
156 private static final String KEYSTORE = System.getProperty("user.dir") + "/src/test/resources/ssl/policy-keystore";
157 private static final CommonTestData COMMON_TEST_DATA = new CommonTestData();
159 private RestServer restServer;
160 private StandardCoder standardCoder = new StandardCoder();
161 private StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
165 private String[] toscaPolicyResourceNames = {
166 "policies/vCPE.policy.monitoring.input.tosca.json",
167 "policies/vCPE.policy.monitoring.input.tosca.yaml",
168 "policies/vDNS.policy.monitoring.input.tosca.json",
169 "policies/vDNS.policy.monitoring.input.tosca.yaml",
170 "policies/vFirewall.policy.monitoring.input.tosca.json",
171 "policies/vFirewall.policy.monitoring.input.tosca.yaml"
174 private String[] toscaPoliciesResourceNames = {
175 "policies/vCPE.policies.optimization.input.tosca.json",
176 "policies/vCPE.policies.optimization.input.tosca.yaml"
179 private String[] toscaPolicyTypeResourceNames = {
180 "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml",
181 "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
182 "policytypes/onap.policies.Optimization.yaml",
183 "policytypes/onap.policies.controlloop.Operational.yaml",
184 "policytypes/onap.policies.controlloop.guard.Blacklist.yaml",
185 "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml",
186 "policytypes/onap.policies.controlloop.guard.MinMax.yaml",
187 "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
188 "policytypes/onap.policies.optimization.AffinityPolicy.yaml",
189 "policytypes/onap.policies.optimization.DistancePolicy.yaml",
190 "policytypes/onap.policies.optimization.HpaPolicy.yaml",
191 "policytypes/onap.policies.optimization.OptimizationPolicy.yaml",
192 "policytypes/onap.policies.optimization.PciPolicy.yaml",
193 "policytypes/onap.policies.optimization.QueryPolicy.yaml",
194 "policytypes/onap.policies.optimization.SubscriberPolicy.yaml",
195 "policytypes/onap.policies.optimization.Vim_fit.yaml",
196 "policytypes/onap.policies.optimization.VnfPolicy.yaml"
199 private String[] legacyGuardPolicyResourceNames = {
200 "policies/vDNS.policy.guard.frequency.input.json",
201 "policies/vDNS.policy.guard.minmax.input.json"
204 private String[] legacyOperationalPolicyResourceNames = {
205 "policies/vCPE.policy.operational.input.json",
206 "policies/vDNS.policy.operational.input.json",
207 "policies/vFirewall.policy.operational.input.json"
210 private static PolicyModelsProviderParameters providerParams;
211 private static ApiParameterGroup apiParamGroup;
212 private static PolicyProvider policyProvider;
213 private static PolicyTypeProvider policyTypeProvider;
218 * Initializes parameters.
220 * @throws PfModelException the PfModel parsing exception
222 private void setupParameters() throws PfModelException {
224 standardCoder = new StandardCoder();
225 providerParams = new PolicyModelsProviderParameters();
226 providerParams.setDatabaseDriver("org.h2.Driver");
227 providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
228 providerParams.setDatabaseUser("policy");
229 providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
230 providerParams.setPersistenceUnit("ToscaConceptTest");
231 apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams);
232 ParameterService.register(apiParamGroup, true);
233 policyTypeProvider = new PolicyTypeProvider();
234 policyProvider = new PolicyProvider();
238 * Method for cleanup after each test.
241 public void teardown() throws Exception {
242 if (policyTypeProvider != null) {
243 policyTypeProvider.close();
245 if (policyProvider != null) {
246 policyProvider.close();
249 stopApiService(main);
250 } else if (restServer != null) {
256 public void testApiStatisticsConstructorIsPrivate() {
259 final Constructor<ApiStatisticsManager> constructor = ApiStatisticsManager.class.getDeclaredConstructor();
260 assertTrue(Modifier.isPrivate(constructor.getModifiers()));
261 constructor.setAccessible(true);
262 constructor.newInstance();
263 } catch (final Exception exp) {
264 assertTrue(exp.getCause().toString().contains("Instantiation of the class is not allowed"));
269 public void testCreatePolicyTypes() {
271 main = startApiService(true);
272 for (String resrcName : toscaPolicyTypeResourceNames) {
273 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
274 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
275 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
276 assertNotNull(response);
277 assertFalse(response.getPolicyTypes().isEmpty());
279 } catch (Exception exp) {
280 fail("Test should not throw an exception");
285 public void testCreatePolicies() {
287 main = startApiService(true);
288 for (String resrcName : toscaPolicyResourceNames) {
289 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
290 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
291 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
292 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
293 error.getErrorMessage());
295 } catch (Exception exp) {
296 fail("Test should not throw an exception");
301 public void testCreatePoliciesPersistent() throws Exception {
302 setupParameters(); // setup DB
303 main = startApiService(true);
304 for (String resrcName : toscaPolicyResourceNames) {
305 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
306 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
307 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
308 assertNotNull(response);
309 assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
314 public void testSimpleCreatePolicies() throws Exception {
315 main = startApiService(true);
316 for (String resrcName : toscaPoliciesResourceNames) {
317 Response rawResponse = createResource(POLICIES, resrcName, true);
318 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
319 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
320 assertEquals("policy type onap.policies.optimization.AffinityPolicy:0.0.0 for "
321 + "policy OSDF_CASABLANCA.Affinity_vCPE_1:1.0.0 does not exist", error.getErrorMessage());
326 public void testSimpleCreatePoliciesPersistent() throws Exception {
327 setupParameters(); // setup DB
328 main = startApiService(true);
329 for (String resrcName : toscaPoliciesResourceNames) {
330 Response rawResponse = createResource(POLICIES, resrcName, true);
331 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
332 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
333 assertNotNull(response);
334 assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
339 public void testCreateGuardPolicies() {
341 main = startApiService(true);
342 for (String resrcName : legacyGuardPolicyResourceNames) {
343 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
344 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
346 } catch (Exception exp) {
347 fail("Test should not throw an exception");
352 public void testCreateGuardPoliciesPersistent() {
354 setupParameters(); // setup DB
355 main = startApiService(true);
356 for (String resrcName : legacyGuardPolicyResourceNames) {
357 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
358 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
360 } catch (Exception exp) {
361 fail("Test should not throw an exception");
366 public void testCreateOperationalPolicies() {
368 main = startApiService(true);
369 for (String resrcName : legacyOperationalPolicyResourceNames) {
370 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
371 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
373 } catch (Exception exp) {
374 fail("Test should not throw an exception");
379 public void testCreateOperationalPoliciesPersistent() {
381 setupParameters(); // setup DB
382 main = startApiService(true);
383 for (String resrcName : legacyOperationalPolicyResourceNames) {
384 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
385 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
387 } catch (Exception exp) {
388 fail("Test should not throw an exception");
393 public void testHttpsCreatePolicyTypes() {
395 main = startApiService(false);
396 for (String resrcName : toscaPolicyTypeResourceNames) {
397 Response rawResponse = createResource(POLICYTYPES, resrcName, false);
398 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
399 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
400 assertNotNull(response);
401 assertFalse(response.getPolicyTypes().isEmpty());
403 } catch (Exception exp) {
404 fail("Test should not throw an exception");
409 public void testHttpsCreatePolicies() {
411 main = startApiService(false);
412 for (String resrcName : toscaPolicyResourceNames) {
413 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, false);
414 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
415 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
416 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
417 error.getErrorMessage());
419 } catch (Exception exp) {
420 fail("Test should not throw an exception");
425 public void testHttpsCreatePoliciesPersistent() throws Exception {
426 setupParameters(); // setup DB
427 main = startApiService(false);
428 for (String resrcName : toscaPolicyResourceNames) {
429 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, false);
430 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
431 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
432 assertNotNull(response);
433 assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
438 public void testHttpsSimpleCreatePolicies() throws Exception {
439 main = startApiService(false);
440 for (String resrcName : toscaPoliciesResourceNames) {
441 Response rawResponse = createResource(POLICIES, resrcName, false);
442 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
443 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
444 assertEquals("policy type onap.policies.optimization.AffinityPolicy:0.0.0 for "
445 + "policy OSDF_CASABLANCA.Affinity_vCPE_1:1.0.0 does not exist", error.getErrorMessage());
450 public void testHttpsSimpleCreatePoliciesPersistent() throws Exception {
451 setupParameters(); // setup DB
452 main = startApiService(false);
453 for (String resrcName : toscaPoliciesResourceNames) {
454 Response rawResponse = createResource(POLICIES, resrcName, false);
455 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
456 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
457 assertNotNull(response);
458 assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
463 public void testHttpsCreateGuardPolicies() {
465 main = startApiService(false);
466 for (String resrcName : legacyGuardPolicyResourceNames) {
467 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, false);
468 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
470 } catch (Exception exp) {
471 fail("Test should not throw an exception");
476 public void testHttpsCreateOperationalPolicies() {
478 main = startApiService(false);
479 for (String resrcName : legacyOperationalPolicyResourceNames) {
480 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, false);
481 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
483 } catch (Exception exp) {
484 fail("Test should not throw an exception");
489 public void testHealthCheckSuccessJson() {
490 testHealthCheckSuccess(APP_JSON);
494 public void testHealthCheckSuccessYaml() {
495 testHealthCheckSuccess(APP_YAML);
500 private void testHealthCheckSuccess(String mediaType) {
503 main = startApiService(true);
504 final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT, mediaType);
505 final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
506 validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
507 } catch (final Exception exp) {
508 LOGGER.error("testHealthCheckSuccess failed", exp);
509 fail("Test should not throw an exception");
514 public void testHealthCheckFailureJson() {
515 testHealthCheckFailure(APP_JSON);
519 public void testHealthCheckFailureYaml() {
520 testHealthCheckFailure(APP_YAML);
523 private void testHealthCheckFailure(String mediaType) {
525 port = NetworkUtil.allocPort();
526 final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false, port);
527 restServerParams.setName(CommonTestData.API_GROUP_NAME);
528 restServer = new RestServer(restServerParams, null, ApiRestController.class);
531 final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT, mediaType);
532 final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
533 validateHealthCheckReport(NAME, SELF, false, 500, NOT_ALIVE, report);
534 assertTrue(restServer.isAlive());
535 assertTrue(restServer.toString().startsWith("RestServer [servers="));
536 } catch (Exception exp) {
537 fail("Test should not throw an exception");
542 public void testHttpsHealthCheckSuccessJson() {
543 testHttpsHealthCheckSuccess(APP_JSON);
547 public void testHttpsHealthCheckSuccessYaml() {
548 testHttpsHealthCheckSuccess(APP_YAML);
551 private void testHttpsHealthCheckSuccess(String mediaType) {
553 main = startApiService(false);
554 final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT, mediaType);
555 final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
556 validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
557 } catch (Exception exp) {
558 fail("Test should not throw an exception");
563 public void testApiStatistics_200_Json() {
564 testApiStatistics_200(APP_JSON);
568 public void testApiStatistics_200_Yaml() {
569 testApiStatistics_200(APP_YAML);
572 private void testApiStatistics_200(String mediaType) {
574 main = startApiService(true);
575 Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT, mediaType);
576 StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
577 validateStatisticsReport(report, 200);
578 updateApiStatistics();
579 invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT, mediaType);
580 report = invocationBuilder.get(StatisticsReport.class);
581 validateStatisticsReport(report, 200);
582 ApiStatisticsManager.resetAllStatistics();
583 } catch (Exception exp) {
584 fail("Test should not throw an exception");
589 public void testHttpsApiStatisticsJson() {
590 testHttpsApiStatistics(APP_JSON);
594 public void testHttpsApiStatisticsYaml() {
595 testHttpsApiStatistics(APP_YAML);
598 private void testHttpsApiStatistics(String mediaType) {
600 main = startApiService(false);
601 final Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType);
602 final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
603 validateStatisticsReport(report, 200);
604 } catch (Exception exp) {
605 fail("Test should not throw an exception");
610 public void testApiStatistics_500_Json() {
611 testApiStatistics_500(APP_JSON);
615 public void testApiStatistics_500_Yaml() {
616 testApiStatistics_500(APP_YAML);
620 private void testApiStatistics_500(String mediaType) {
622 port = NetworkUtil.allocPort();
623 final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false, port);
624 restServerParams.setName(CommonTestData.API_GROUP_NAME);
625 restServer = new RestServer(restServerParams, null, ApiRestController.class);
628 final Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT, mediaType);
629 final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
630 validateStatisticsReport(report, 500);
631 ApiStatisticsManager.resetAllStatistics();
632 } catch (Exception exp) {
633 fail("Test should not throw an exception");
639 public void testReadPolicyTypesJson() {
640 testReadPolicyTypes(APP_JSON);
644 public void testReadPolicyTypesYaml() {
645 testReadPolicyTypes(APP_YAML);
648 private void testReadPolicyTypes(String mediaType) {
650 main = startApiService(true);
651 Response rawResponse = readResource(POLICYTYPES, true, mediaType);
652 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
653 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
654 assertTrue(response.getPolicyTypes().isEmpty());
656 rawResponse = readResource(POLICYTYPES_TCA, true, mediaType);
657 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
658 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
659 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:null does not exist",
660 error.getErrorMessage());
662 rawResponse = readResource(POLICYTYPES_TCA_VERSION, true, mediaType);
663 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
664 error = rawResponse.readEntity(ErrorResponse.class);
665 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
666 error.getErrorMessage());
668 rawResponse = readResource(POLICYTYPES_TCA_LATEST, true, mediaType);
669 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
670 error = rawResponse.readEntity(ErrorResponse.class);
671 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:null does not exist",
672 error.getErrorMessage());
674 rawResponse = readResource(POLICYTYPES_COLLECTOR, true, mediaType);
675 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
676 error = rawResponse.readEntity(ErrorResponse.class);
677 assertEquals("policy type with ID "
678 + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:null does not exist",
679 error.getErrorMessage());
681 rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, true, mediaType);
682 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
683 error = rawResponse.readEntity(ErrorResponse.class);
684 assertEquals("policy type with ID "
685 + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:1.0.0 does not exist",
686 error.getErrorMessage());
688 rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, true, mediaType);
689 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
690 error = rawResponse.readEntity(ErrorResponse.class);
691 assertEquals("policy type with ID "
692 + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:null does not exist",
693 error.getErrorMessage());
694 } catch (Exception exp) {
695 fail("Test should not throw an exception");
700 public void testReadPolicyTypesPersistentJson() {
701 testReadPolicyTypesPersistent(APP_JSON);
705 public void testReadPolicyTypesPersistentYaml() {
706 testReadPolicyTypesPersistent(APP_YAML);
709 private void testReadPolicyTypesPersistent(String mediaType) {
712 main = startApiService(true);
713 for (String resrcName : toscaPolicyTypeResourceNames) {
714 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
715 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
716 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
717 assertNotNull(response);
718 assertFalse(response.getPolicyTypes().isEmpty());
721 for (String resrcName : toscaPolicyResourceNames) {
722 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
723 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
726 Response rawResponse = readResource(POLICYTYPES_TCA, true, mediaType);
727 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
729 rawResponse = readResource(POLICYTYPES_TCA_VERSION, true, mediaType);
730 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
733 rawResponse = readResource(POLICYTYPES_TCA_LATEST, true, mediaType);
734 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
737 rawResponse = readResource(POLICYTYPES_COLLECTOR, true, mediaType);
738 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
741 rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, true, mediaType);
742 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
745 rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, true, mediaType);
746 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
747 } catch (Exception exp) {
748 fail("Test should not throw an exception");
753 public void testDeletePolicyTypeJson() {
754 testDeletePolicyType(APP_JSON);
758 public void testDeletePolicyTypeYaml() {
759 testDeletePolicyType(APP_YAML);
762 private void testDeletePolicyType(String mediaType) {
764 main = startApiService(true);
765 Response rawResponse = deleteResource(POLICYTYPES_TCA_VERSION, true, mediaType);
766 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
767 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
768 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
769 error.getErrorMessage());
771 rawResponse = deleteResource(POLICYTYPES_COLLECTOR_VERSION, true, mediaType);
772 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
773 error = rawResponse.readEntity(ErrorResponse.class);
774 assertEquals("policy type with ID "
775 + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:1.0.0 does not exist",
776 error.getErrorMessage());
777 } catch (Exception exp) {
778 fail("Test should not throw an exception");
783 public void testDeletePolicyTypePersistentJson() {
784 testDeletePolicyTypePersistent(APP_JSON);
788 public void testDeletePolicyTypePersistentYaml() {
789 testDeletePolicyTypePersistent(APP_YAML);
792 private void testDeletePolicyTypePersistent(String mediaType) {
794 setupParameters(); // setup DB
795 main = startApiService(true);// create policy types
796 for (String resrcName : toscaPolicyTypeResourceNames) {
797 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
798 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
799 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
800 assertNotNull(response);
801 assertFalse(response.getPolicyTypes().isEmpty());
803 Response rawResponse = deleteResource(POLICYTYPES_TCA_VERSION, true, mediaType);
804 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
805 } catch (Exception exp) {
806 fail("Test should not throw an exception");
812 public void testReadPoliciesJson() {
813 testReadPolicies(APP_JSON);
817 public void testReadPoliciesYaml() {
818 testReadPolicies(APP_YAML);
821 private void testReadPolicies(String mediaType) {
823 main = startApiService(true);
824 Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, true, mediaType);
825 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
826 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
828 "policy with ID null:null and "
829 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
830 error.getErrorMessage());
832 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, true, mediaType);
833 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
834 error = rawResponse.readEntity(ErrorResponse.class);
836 "policy with ID onap.restart.tca:null and "
837 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
838 error.getErrorMessage());
840 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
841 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
842 error = rawResponse.readEntity(ErrorResponse.class);
844 "policy with ID onap.restart.tca:1.0.0 and "
845 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
846 error.getErrorMessage());
848 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, true, mediaType);
849 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
850 error = rawResponse.readEntity(ErrorResponse.class);
852 "policy with ID onap.restart.tca:null and "
853 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
854 error.getErrorMessage());
855 } catch (Exception exp) {
856 fail("Test should not throw an exception");
861 public void testReadPoliciesPersistentJson() {
862 testReadPoliciesPersistent(APP_JSON);
866 public void testReadPoliciesPersistentYaml() {
867 testReadPoliciesPersistent(APP_YAML);
870 private void testReadPoliciesPersistent(String mediaType) {
873 main = startApiService(true);
874 for (String resrcName : toscaPolicyTypeResourceNames) {
875 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
876 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
877 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
878 assertNotNull(response);
879 assertFalse(response.getPolicyTypes().isEmpty());
882 for (String resrcName : toscaPolicyResourceNames) {
883 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
884 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
887 Response rawResponse;
888 rawResponse = readResource(POLICYTYPES_TCA, true, mediaType);
889 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
891 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, true, mediaType);
892 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
894 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
895 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
897 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, true, mediaType);
898 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
899 } catch (Exception exp) {
900 fail("Test should not throw an exception");
905 public void testDeletePoliciesJson() {
906 testDeletePolicies(APP_JSON);
910 public void testDeletePoliciesYaml() {
911 testDeletePolicies(APP_YAML);
914 private void testDeletePolicies(String mediaType) {
916 main = startApiService(true);
917 Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
918 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
919 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
921 "policy with ID onap.restart.tca:1.0.0 and "
922 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
923 error.getErrorMessage());
924 } catch (Exception exp) {
925 fail("Test should not throw an exception");
930 public void testDeletePolicyVersionJson() {
931 testDeletePolicyVersion(APP_JSON);
935 public void testDeletePolicyVersionYaml() {
936 testDeletePolicyVersion(APP_YAML);
939 private void testDeletePolicyVersion(String mediaType) {
941 setupParameters(); // setup DB
942 main = startApiService(true);// create policy types
943 for (String resrcName : toscaPolicyTypeResourceNames) {
944 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
945 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
946 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
947 assertNotNull(response);
948 assertFalse(response.getPolicyTypes().isEmpty());
950 for (String resrcName : toscaPolicyResourceNames) {
951 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
952 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
954 Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
955 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
956 } catch (Exception exp) {
957 fail("Test should not throw an exception");
962 public void testGetAllVersionOfPolicyJson() {
963 testGetAllVersionOfPolicy(APP_JSON);
967 public void testGetAllVersionOfPolicyYaml() {
968 testGetAllVersionOfPolicy(APP_YAML);
971 private void testGetAllVersionOfPolicy(String mediaType) {
973 setupParameters(); // setup DB
974 main = startApiService(true);// create policy types
975 for (String resrcName : toscaPolicyTypeResourceNames) {
976 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
977 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
978 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
979 assertNotNull(response);
980 assertFalse(response.getPolicyTypes().isEmpty());
982 for (String resrcName : toscaPolicyResourceNames) {
983 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
984 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
986 Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, true, mediaType);
987 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
988 } catch (Exception exp) {
989 fail("Test should not throw an exception");
995 public void testReadGuardPoliciesJson() {
996 testReadGuardPolicies(APP_JSON);
1000 public void testReadGuardPoliciesYaml() {
1001 testReadGuardPolicies(APP_YAML);
1004 private void testReadGuardPolicies(String mediaType) {
1006 main = startApiService(true);
1007 Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, true, mediaType);
1008 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1009 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1010 assertEquals("no policy found for policy: guard.frequency.scaleout:null", error.getErrorMessage());
1012 rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1013 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1014 error = rawResponse.readEntity(ErrorResponse.class);
1015 assertEquals("no policy found for policy: guard.frequency.scaleout:1", error.getErrorMessage());
1017 rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, true, mediaType);
1018 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1019 error = rawResponse.readEntity(ErrorResponse.class);
1020 assertEquals("no policy found for policy: guard.minmax.scaleout:null", error.getErrorMessage());
1022 rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, true, mediaType);
1023 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1024 error = rawResponse.readEntity(ErrorResponse.class);
1025 assertEquals("no policy found for policy: guard.minmax.scaleout:1", error.getErrorMessage());
1026 } catch (Exception exp) {
1027 fail("Test should not throw an exception");
1032 public void testReadGuardPoliciesPersistentJson() {
1033 testReadGuardPoliciesPersistent(APP_JSON);
1037 public void testReadGuardPoliciesPersistentYaml() {
1038 testReadGuardPoliciesPersistent(APP_YAML);
1041 private void testReadGuardPoliciesPersistent(String mediaType) {
1043 setupParameters(); // setup DB
1044 main = startApiService(true);
1045 for (String resrcName : legacyGuardPolicyResourceNames) {
1046 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
1047 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1050 Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, true, mediaType);
1051 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1054 rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1055 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1057 rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, true, mediaType);
1058 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1061 rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, true, mediaType);
1062 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1063 } catch (Exception exp) {
1064 fail("Test should not throw an exception");
1070 public void testReadOperationalPoliciesJson() {
1071 testReadOperationalPolicies(APP_JSON);
1075 public void testReadOperationalPoliciesYaml() {
1076 testReadOperationalPolicies(APP_YAML);
1079 private void testReadOperationalPolicies(String mediaType) {
1081 main = startApiService(true);
1082 Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, true, mediaType);
1083 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1084 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1085 assertEquals("no policy found for policy: operational.restart:null", error.getErrorMessage());
1087 rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1088 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1089 error = rawResponse.readEntity(ErrorResponse.class);
1090 assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
1092 rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true, mediaType);
1093 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1094 error = rawResponse.readEntity(ErrorResponse.class);
1095 assertEquals("no policy found for policy: operational.scaleout:null", error.getErrorMessage());
1097 rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1098 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1099 error = rawResponse.readEntity(ErrorResponse.class);
1100 assertEquals("no policy found for policy: operational.scaleout:1", error.getErrorMessage());
1102 rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, true, mediaType);
1103 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1104 error = rawResponse.readEntity(ErrorResponse.class);
1105 assertEquals("no policy found for policy: operational.modifyconfig:null", error.getErrorMessage());
1107 rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, true, mediaType);
1108 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1109 error = rawResponse.readEntity(ErrorResponse.class);
1110 assertEquals("no policy found for policy: operational.modifyconfig:1", error.getErrorMessage());
1111 } catch (Exception exp) {
1112 fail("Test should not throw an exception");
1117 public void testReadOperationalPoliciesPersistentJson() {
1118 testReadOperationalPoliciesPersistent(APP_JSON);
1122 public void testReadOperationalPoliciesPersistentYaml() {
1123 testReadOperationalPoliciesPersistent(APP_YAML);
1126 private void testReadOperationalPoliciesPersistent(String mediaType) {
1128 setupParameters(); // setup DB
1129 main = startApiService(true);
1130 for (String resrcName : legacyOperationalPolicyResourceNames) {
1131 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
1132 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1135 Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, true, mediaType);
1136 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1139 rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1140 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1143 rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true, mediaType);
1144 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1147 rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1148 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1151 rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, true, mediaType);
1152 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1155 rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, true, mediaType);
1156 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1157 } catch (Exception exp) {
1158 fail("Test should not throw an exception");
1163 public void testDeleteGuardPolicyJson() {
1164 testDeleteGuardPolicy(APP_JSON);
1168 public void testDeleteGuardPolicyYaml() {
1169 testDeleteGuardPolicy(APP_YAML);
1172 private void testDeleteGuardPolicy(String mediaType) {
1174 main = startApiService(true);
1175 Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1176 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1177 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1178 assertEquals("no policy found for policy: guard.frequency.scaleout:1", error.getErrorMessage());
1179 } catch (Exception exp) {
1180 fail("Test should not throw an exception");
1185 public void testDeleteGuardPolicyPersistentJson() {
1186 testDeleteGuardPolicyPersistent(APP_JSON);
1190 public void testDeleteGuardPolicyPersistentYaml() {
1191 testDeleteGuardPolicyPersistent(APP_YAML);
1194 private void testDeleteGuardPolicyPersistent(String mediaType) {
1196 setupParameters(); // setup DB
1197 main = startApiService(true);
1199 for (String resrcName : legacyGuardPolicyResourceNames) {
1200 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
1201 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1204 Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1205 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1206 } catch (Exception exp) {
1207 fail("Test should not throw an exception");
1212 public void testGetDeployedVersionsOfGuardPolicyJson() {
1213 testGetDeployedVersionsOfGuardPolicy(APP_JSON);
1217 public void testGetDeployedVersionsOfGuardPolicyYaml() {
1218 testGetDeployedVersionsOfGuardPolicy(APP_YAML);
1221 private void testGetDeployedVersionsOfGuardPolicy(String mediaType) {
1223 main = startApiService(true);
1224 Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_DEPLOYED, true, mediaType);
1225 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
1226 } catch (Exception exp) {
1227 fail("Test should not throw an exception");
1232 public void testDeleteOperationalPolicyJson() {
1233 testDeleteOperationalPolicy(APP_JSON);
1237 public void testDeleteOperationalPolicyYaml() {
1238 testDeleteOperationalPolicy(APP_YAML);
1241 private void testDeleteOperationalPolicy(String mediaType) {
1243 main = startApiService(true);
1244 Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1245 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1246 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1247 assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
1248 } catch (Exception exp) {
1249 fail("Test should not throw an exception");
1254 public void testDeleteOperationalPolicyPersistentJson() {
1255 testDeleteOperationalPolicyPersistent(APP_JSON);
1259 public void testDeleteOperationalPolicyPersistentYaml() {
1260 testDeleteOperationalPolicyPersistent(APP_YAML);
1263 private void testDeleteOperationalPolicyPersistent(String mediaType) {
1265 setupParameters(); // setup DB
1266 main = startApiService(true);
1267 for (String resrcName : legacyOperationalPolicyResourceNames) {
1268 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
1269 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1271 Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1272 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1273 } catch (Exception exp) {
1274 fail("Test should not throw an exception");
1280 public void testGetDeployedVersionsOfPolicyJson() {
1281 testGetDeployedVersionsOfPolicy(APP_JSON);
1285 public void testGetDeployedVersionsOfPolicyYaml() {
1286 testGetDeployedVersionsOfPolicy(APP_YAML);
1289 private void testGetDeployedVersionsOfPolicy(String mediaType) {
1291 main = startApiService(true);
1292 Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED, true, mediaType);
1293 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
1294 } catch (Exception exp) {
1295 fail("Test should not throw an exception");
1300 public void testGetLatestVersionOfOperationalPolicyJson() {
1301 testGetLatestVersionOfOperationalPolicy(APP_JSON);
1305 public void testGetLatestVersionOfOperationalPolicyYaml() {
1306 testGetLatestVersionOfOperationalPolicy(APP_YAML);
1309 private void testGetLatestVersionOfOperationalPolicy(String mediaType) {
1311 main = startApiService(true);
1312 Response rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true, mediaType);
1313 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1314 } catch (Exception exp) {
1315 fail("Test should not throw an exception");
1320 public void testGetSpecificVersionOfOperationalPolicyJson() {
1321 testGetSpecificVersionOfOperationalPolicy(APP_JSON);
1325 public void testGetSpecificVersionOfOperationalPolicyYaml() {
1326 testGetSpecificVersionOfOperationalPolicy(APP_YAML);
1329 private void testGetSpecificVersionOfOperationalPolicy(String mediaType) {
1331 main = startApiService(true);
1332 Response rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1333 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1334 } catch (Exception exp) {
1335 fail("Test should not throw an exception");
1340 public void testGetDeployedVersionsOfOperationalPolicyJson() {
1341 testGetDeployedVersionsOfOperationalPolicy(APP_JSON);
1345 public void testGetDeployedVersionsOfOperationalPolicyYaml() {
1346 testGetDeployedVersionsOfOperationalPolicy(APP_YAML);
1349 private void testGetDeployedVersionsOfOperationalPolicy(String mediaType) {
1351 main = startApiService(true);
1352 Response rawResponse = readResource(OPS_POLICIES_VCPE_DEPLOYED, true, mediaType);
1353 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
1354 } catch (Exception exp) {
1355 fail("Test should not throw an exception");
1360 public void testDeleteSpecificVersionOfOperationalPolicyJson() {
1361 testDeleteSpecificVersionOfOperationalPolicy(APP_JSON);
1365 public void testDeleteSpecificVersionOfOperationalPolicyYaml() {
1366 testDeleteSpecificVersionOfOperationalPolicy(APP_YAML);
1369 private void testDeleteSpecificVersionOfOperationalPolicy(String mediaType) {
1371 main = startApiService(true);
1372 Response rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1373 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1374 } catch (Exception exp) {
1375 fail("Test should not throw an exception");
1379 private Response createResource(String endpoint, String resourceName, boolean http)
1382 String mediaType = APP_JSON; // default media type
1383 ToscaServiceTemplate rawServiceTemplate = new ToscaServiceTemplate();
1384 if (resourceName.endsWith(".json")) {
1385 rawServiceTemplate = standardCoder.decode(
1386 ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
1387 } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1388 mediaType = APP_YAML;
1389 rawServiceTemplate = standardYamlCoder.decode(
1390 ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
1393 final Invocation.Builder invocationBuilder;
1396 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1398 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1401 Entity<ToscaServiceTemplate> entity = Entity.entity(rawServiceTemplate, mediaType);
1402 return invocationBuilder.post(entity);
1405 private Response createGuardPolicy(String endpoint, String resourceName, boolean http)
1408 String mediaType = APP_JSON; // default media type
1409 LegacyGuardPolicyInput rawGuardPolicy = new LegacyGuardPolicyInput();
1410 if (resourceName.endsWith(".json")) {
1411 rawGuardPolicy = standardCoder.decode(
1412 ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
1413 } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1414 mediaType = APP_YAML;
1415 rawGuardPolicy = standardYamlCoder.decode(
1416 ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
1419 final Invocation.Builder invocationBuilder;
1422 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1424 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1427 Entity<LegacyGuardPolicyInput> entity = Entity.entity(rawGuardPolicy, mediaType);
1428 return invocationBuilder.post(entity);
1431 private Response createOperationalPolicy(String endpoint, String resourceName, boolean http)
1434 String mediaType = APP_JSON; // default media type
1435 LegacyOperationalPolicy rawOpsPolicy = new LegacyOperationalPolicy();
1436 if (resourceName.endsWith(".json")) {
1437 rawOpsPolicy = standardCoder.decode(
1438 ResourceUtils.getResourceAsString(resourceName), LegacyOperationalPolicy.class);
1439 } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1440 mediaType = APP_YAML;
1441 rawOpsPolicy = standardYamlCoder.decode(
1442 ResourceUtils.getResourceAsString(resourceName), LegacyOperationalPolicy.class);
1445 final Invocation.Builder invocationBuilder;
1448 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1450 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1453 Entity<LegacyOperationalPolicy> entity = Entity.entity(rawOpsPolicy, mediaType);
1454 return invocationBuilder.post(entity);
1457 private Response readResource(String endpoint, boolean http, String mediaType) throws Exception {
1459 final Invocation.Builder invocationBuilder;
1462 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1464 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1467 return invocationBuilder.get();
1471 private Response deleteResource(String endpoint, boolean http, String mediaType) throws Exception {
1473 final Invocation.Builder invocationBuilder;
1476 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1478 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1481 return invocationBuilder.delete();
1484 private Main startApiService(final boolean http) throws Exception {
1485 port = NetworkUtil.allocPort();
1487 final String[] apiConfigParameters = new String[2];
1489 COMMON_TEST_DATA.makeParameters("src/test/resources/parameters/ApiConfigParameters.json",
1490 "src/test/resources/parameters/ApiConfigParametersXXX.json", port);
1491 apiConfigParameters[0] = "-c";
1492 apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParametersXXX.json";
1494 final Properties systemProps = System.getProperties();
1495 systemProps.put("javax.net.ssl.keyStore", KEYSTORE);
1496 systemProps.put("javax.net.ssl.keyStorePassword", "Pol1cy_0nap");
1497 System.setProperties(systemProps);
1498 COMMON_TEST_DATA.makeParameters("src/test/resources/parameters/ApiConfigParameters_Https.json",
1499 "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json", port);
1500 apiConfigParameters[0] = "-c";
1501 apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json";
1503 return new Main(apiConfigParameters);
1506 private void stopApiService(final Main main) throws PolicyApiException {
1511 private Invocation.Builder sendHttpRequest(final String endpoint, String mediaType) throws Exception {
1513 final ClientConfig clientConfig = new ClientConfig();
1515 final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1516 clientConfig.register(feature);
1518 final Client client = ClientBuilder.newClient(clientConfig);
1520 client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1521 if (APP_JSON.equalsIgnoreCase(mediaType)) {
1522 client.register(GsonMessageBodyHandler.class);
1523 } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
1524 client.register(YamlMessageBodyHandler.class);
1527 final WebTarget webTarget = client.target("http://localhost:" + port + "/policy/api/v1/" + endpoint);
1529 final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
1531 if (!NetworkUtil.isTcpPortOpen("localhost", port, 60, 1000L)) {
1532 throw new IllegalStateException("cannot connect to port " + port);
1534 return invocationBuilder;
1537 private Invocation.Builder sendHttpsRequest(final String endpoint, String mediaType) throws Exception {
1539 final TrustManager[] noopTrustManager = new TrustManager[] { new X509TrustManager() {
1542 public X509Certificate[] getAcceptedIssuers() {
1543 return new X509Certificate[0];
1547 public void checkClientTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {}
1550 public void checkServerTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {}
1553 final SSLContext sc = SSLContext.getInstance("TLSv1.2");
1554 sc.init(null, noopTrustManager, new SecureRandom());
1555 final ClientBuilder clientBuilder =
1556 ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
1557 final Client client = clientBuilder.build();
1558 final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1559 client.register(feature);
1561 client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1562 if (APP_JSON.equalsIgnoreCase(mediaType)) {
1563 client.register(GsonMessageBodyHandler.class);
1564 } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
1565 client.register(YamlMessageBodyHandler.class);
1568 final WebTarget webTarget = client.target("https://localhost:" + port + "/policy/api/v1/" + endpoint);
1570 final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
1572 if (!NetworkUtil.isTcpPortOpen("localhost", port, 60, 1000L)) {
1573 throw new IllegalStateException("cannot connect to port " + port);
1575 return invocationBuilder;
1578 private void updateApiStatistics() {
1580 ApiStatisticsManager.updateTotalApiCallCount();
1581 ApiStatisticsManager.updateApiCallSuccessCount();
1582 ApiStatisticsManager.updateApiCallFailureCount();
1583 ApiStatisticsManager.updateTotalPolicyGetCount();
1584 ApiStatisticsManager.updateTotalPolicyPostCount();
1585 ApiStatisticsManager.updateTotalPolicyTypeGetCount();
1586 ApiStatisticsManager.updateTotalPolicyTypePostCount();
1587 ApiStatisticsManager.updatePolicyGetSuccessCount();
1588 ApiStatisticsManager.updatePolicyGetFailureCount();
1589 ApiStatisticsManager.updatePolicyPostSuccessCount();
1590 ApiStatisticsManager.updatePolicyPostFailureCount();
1591 ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
1592 ApiStatisticsManager.updatePolicyTypeGetFailureCount();
1593 ApiStatisticsManager.updatePolicyTypePostSuccessCount();
1594 ApiStatisticsManager.updatePolicyTypePostFailureCount();
1597 private void validateStatisticsReport(final StatisticsReport report, final int code) {
1599 assertEquals(code, report.getCode());
1602 private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
1603 final String message, final HealthCheckReport report) {
1605 assertEquals(name, report.getName());
1606 assertEquals(url, report.getUrl());
1607 assertEquals(healthy, report.isHealthy());
1608 assertEquals(code, report.getCode());
1609 assertEquals(message, report.getMessage());