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.Collections;
37 import java.util.Properties;
39 import javax.net.ssl.SSLContext;
40 import javax.net.ssl.TrustManager;
41 import javax.net.ssl.X509TrustManager;
42 import javax.ws.rs.client.Client;
43 import javax.ws.rs.client.ClientBuilder;
44 import javax.ws.rs.client.Entity;
45 import javax.ws.rs.client.Invocation;
46 import javax.ws.rs.client.WebTarget;
47 import javax.ws.rs.core.Response;
48 import org.glassfish.jersey.client.ClientConfig;
49 import org.glassfish.jersey.client.ClientProperties;
50 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
51 import org.junit.After;
52 import org.junit.Test;
53 import org.onap.policy.api.main.exception.PolicyApiException;
54 import org.onap.policy.api.main.parameters.ApiParameterGroup;
55 import org.onap.policy.api.main.parameters.CommonTestData;
56 import org.onap.policy.api.main.rest.provider.PolicyProvider;
57 import org.onap.policy.api.main.rest.provider.PolicyTypeProvider;
58 import org.onap.policy.api.main.startstop.Main;
59 import org.onap.policy.common.endpoints.http.server.RestServer;
60 import org.onap.policy.common.endpoints.http.server.YamlMessageBodyHandler;
61 import org.onap.policy.common.endpoints.parameters.RestServerParameters;
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.models.base.PfModelException;
70 import org.onap.policy.models.errors.concepts.ErrorResponse;
71 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
72 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
73 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
74 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
75 import org.slf4j.Logger;
76 import org.slf4j.LoggerFactory;
79 * Class to perform unit test of {@link ApiRestServer}.
81 * @author Chenfei Gao (cgao@research.att.com)
83 public class TestApiRestServer {
85 private static final Logger LOGGER = LoggerFactory.getLogger(TestApiRestServer.class);
86 private static final String NOT_ALIVE = "not alive";
87 private static final String ALIVE = "alive";
88 private static final String SELF = "self";
89 private static final String NAME = "Policy API";
90 private static final String APP_JSON = "application/json";
91 private static final String APP_YAML = "application/yaml";
93 private static final String HEALTHCHECK_ENDPOINT = "healthcheck";
94 private static final String STATISTICS_ENDPOINT = "statistics";
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";
109 private static final String POLICYTYPES_TCA_POLICIES =
110 "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies";
111 private static final String POLICYTYPES_TCA_POLICIES_VCPE =
112 "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca";
113 private static final String POLICYTYPES_TCA_POLICIES_VCPE_VERSION = "policytypes/"
114 + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/1.0.0";
115 private static final String POLICYTYPES_TCA_POLICIES_VCPE_LATEST = "policytypes/"
116 + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/latest";
117 private static final String POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED = "policytypes/"
118 + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/onap.restart.tca/versions/deployed";
120 private static final String GUARD_POLICIES = "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies";
121 private static final String GUARD_POLICIES_VDNS_FL_LATEST =
122 "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout"
123 + "/versions/latest";
124 private static final String GUARD_POLICIES_VDNS_FL_DEPLOYED =
125 "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout"
126 + "/versions/deployed";
127 private static final String GUARD_POLICIES_VDNS_MINMAX_LATEST =
128 "policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout"
129 + "/versions/latest";
130 private static final String GUARD_POLICIES_VDNS_FL_VERSION = "policytypes/"
131 + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.frequency.scaleout/versions/1";
132 private static final String GUARD_POLICIES_VDNS_MINMAX_VERSION =
133 "policytypes/" + "onap.policies.controlloop.Guard/versions/1.0.0/policies/guard.minmax.scaleout/versions/1";
135 private static final String OPS_POLICIES =
136 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies";
137 private static final String OPS_POLICIES_VCPE_LATEST =
138 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.restart"
139 + "/versions/latest";
140 private static final String OPS_POLICIES_VCPE_DEPLOYED =
141 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.restart"
142 + "/versions/deployed";
143 private static final String OPS_POLICIES_VDNS_LATEST =
144 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.scaleout"
145 + "/versions/latest";
146 private static final String OPS_POLICIES_VFIREWALL_LATEST =
147 "policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.modifyconfig"
148 + "/versions/latest";
149 private static final String OPS_POLICIES_VCPE_VERSION = "policytypes/"
150 + "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.restart/versions/1";
151 private static final String OPS_POLICIES_VDNS_VERSION = "policytypes/"
152 + "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.scaleout/versions/1";
153 private static final String OPS_POLICIES_VFIREWALL_VERSION = "policytypes/"
154 + "onap.policies.controlloop.Operational/versions/1.0.0/policies/operational.modifyconfig/versions/1";
155 private static final String POLICIES = "policies";
157 private static final String KEYSTORE = System.getProperty("user.dir") + "/src/test/resources/ssl/policy-keystore";
158 private static final CommonTestData COMMON_TEST_DATA = new CommonTestData();
160 private RestServer restServer;
161 private StandardCoder standardCoder = new StandardCoder();
162 private StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
166 private String[] toscaPolicyResourceNames = {
167 "policies/vCPE.policy.monitoring.input.tosca.json",
168 "policies/vCPE.policy.monitoring.input.tosca.yaml",
169 "policies/vDNS.policy.monitoring.input.tosca.json",
170 "policies/vDNS.policy.monitoring.input.tosca.yaml",
171 "policies/vFirewall.policy.monitoring.input.tosca.json",
172 "policies/vFirewall.policy.monitoring.input.tosca.yaml"
175 private String[] toscaPoliciesResourceNames = {
176 "policies/vCPE.policies.optimization.input.tosca.json",
177 "policies/vCPE.policies.optimization.input.tosca.yaml"
180 private String[] toscaPolicyTypeResourceNames = {
181 "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml",
182 "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
183 "policytypes/onap.policies.Optimization.yaml",
184 "policytypes/onap.policies.controlloop.Operational.yaml",
185 "policytypes/onap.policies.controlloop.guard.Blacklist.yaml",
186 "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml",
187 "policytypes/onap.policies.controlloop.guard.MinMax.yaml",
188 "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
189 "policytypes/onap.policies.optimization.AffinityPolicy.yaml",
190 "policytypes/onap.policies.optimization.DistancePolicy.yaml",
191 "policytypes/onap.policies.optimization.HpaPolicy.yaml",
192 "policytypes/onap.policies.optimization.OptimizationPolicy.yaml",
193 "policytypes/onap.policies.optimization.PciPolicy.yaml",
194 "policytypes/onap.policies.optimization.QueryPolicy.yaml",
195 "policytypes/onap.policies.optimization.SubscriberPolicy.yaml",
196 "policytypes/onap.policies.optimization.Vim_fit.yaml",
197 "policytypes/onap.policies.optimization.VnfPolicy.yaml"
200 private String[] legacyGuardPolicyResourceNames = {
201 "policies/vDNS.policy.guard.frequency.input.json",
202 "policies/vDNS.policy.guard.minmax.input.json"
205 private String[] legacyOperationalPolicyResourceNames = {
206 "policies/vCPE.policy.operational.input.json",
207 "policies/vDNS.policy.operational.input.json",
208 "policies/vFirewall.policy.operational.input.json"
211 private static PolicyModelsProviderParameters providerParams;
212 private static ApiParameterGroup apiParamGroup;
213 private static PolicyProvider policyProvider;
214 private static PolicyTypeProvider policyTypeProvider;
219 * Initializes parameters.
221 * @throws PfModelException the PfModel parsing exception
223 private void setupParameters() throws PfModelException {
225 standardCoder = new StandardCoder();
226 providerParams = new PolicyModelsProviderParameters();
227 providerParams.setDatabaseDriver("org.h2.Driver");
228 providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
229 providerParams.setDatabaseUser("policy");
230 providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
231 providerParams.setPersistenceUnit("ToscaConceptTest");
232 apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams, Collections.emptyList());
233 ParameterService.register(apiParamGroup, true);
234 policyTypeProvider = new PolicyTypeProvider();
235 policyProvider = new PolicyProvider();
239 * Method for cleanup after each test.
242 public void teardown() throws Exception {
243 if (policyTypeProvider != null) {
244 policyTypeProvider.close();
246 if (policyProvider != null) {
247 policyProvider.close();
250 stopApiService(main);
251 } else if (restServer != null) {
257 public void testApiStatisticsConstructorIsPrivate() {
260 final Constructor<ApiStatisticsManager> constructor = ApiStatisticsManager.class.getDeclaredConstructor();
261 assertTrue(Modifier.isPrivate(constructor.getModifiers()));
262 constructor.setAccessible(true);
263 constructor.newInstance();
264 } catch (final Exception exp) {
265 assertTrue(exp.getCause().toString().contains("Instantiation of the class is not allowed"));
270 public void testCreatePolicyTypes() {
272 main = startApiService(true);
273 for (String resrcName : toscaPolicyTypeResourceNames) {
274 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
275 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
276 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
277 assertNotNull(response);
278 assertFalse(response.getPolicyTypes().isEmpty());
280 } catch (Exception exp) {
281 fail("Test should not throw an exception");
286 public void testCreatePolicies() {
288 main = startApiService(true);
289 for (String resrcName : toscaPolicyResourceNames) {
290 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
291 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
292 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
293 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
294 error.getErrorMessage());
296 } catch (Exception exp) {
297 fail("Test should not throw an exception");
302 public void testCreatePoliciesPersistent() throws Exception {
303 setupParameters(); // setup DB
304 main = startApiService(true);
305 for (String resrcName : toscaPolicyResourceNames) {
306 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
307 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
308 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
309 assertNotNull(response);
310 assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
315 public void testSimpleCreatePolicies() throws Exception {
316 main = startApiService(true);
317 for (String resrcName : toscaPoliciesResourceNames) {
318 Response rawResponse = createResource(POLICIES, resrcName, true);
319 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
320 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
321 assertEquals("policy type onap.policies.optimization.AffinityPolicy:0.0.0 for "
322 + "policy OSDF_CASABLANCA.Affinity_vCPE_1:1.0.0 does not exist", error.getErrorMessage());
327 public void testSimpleCreatePoliciesPersistent() throws Exception {
328 setupParameters(); // setup DB
329 main = startApiService(true);
330 for (String resrcName : toscaPoliciesResourceNames) {
331 Response rawResponse = createResource(POLICIES, resrcName, true);
332 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
333 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
334 assertNotNull(response);
335 assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
340 public void testCreateGuardPolicies() {
342 main = startApiService(true);
343 for (String resrcName : legacyGuardPolicyResourceNames) {
344 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
345 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
347 } catch (Exception exp) {
348 fail("Test should not throw an exception");
353 public void testCreateGuardPoliciesPersistent() {
355 setupParameters(); // setup DB
356 main = startApiService(true);
357 for (String resrcName : legacyGuardPolicyResourceNames) {
358 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
359 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
361 } catch (Exception exp) {
362 fail("Test should not throw an exception");
367 public void testCreateOperationalPolicies() {
369 main = startApiService(true);
370 for (String resrcName : legacyOperationalPolicyResourceNames) {
371 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
372 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
374 } catch (Exception exp) {
375 fail("Test should not throw an exception");
380 public void testCreateOperationalPoliciesPersistent() {
382 setupParameters(); // setup DB
383 main = startApiService(true);
384 for (String resrcName : legacyOperationalPolicyResourceNames) {
385 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
386 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
388 } catch (Exception exp) {
389 fail("Test should not throw an exception");
394 public void testHttpsCreatePolicyTypes() {
396 main = startApiService(false);
397 for (String resrcName : toscaPolicyTypeResourceNames) {
398 Response rawResponse = createResource(POLICYTYPES, resrcName, false);
399 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
400 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
401 assertNotNull(response);
402 assertFalse(response.getPolicyTypes().isEmpty());
404 } catch (Exception exp) {
405 fail("Test should not throw an exception");
410 public void testHttpsCreatePolicies() {
412 main = startApiService(false);
413 for (String resrcName : toscaPolicyResourceNames) {
414 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, false);
415 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
416 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
417 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
418 error.getErrorMessage());
420 } catch (Exception exp) {
421 fail("Test should not throw an exception");
426 public void testHttpsCreatePoliciesPersistent() throws Exception {
427 setupParameters(); // setup DB
428 main = startApiService(false);
429 for (String resrcName : toscaPolicyResourceNames) {
430 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, false);
431 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
432 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
433 assertNotNull(response);
434 assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
439 public void testHttpsSimpleCreatePolicies() throws Exception {
440 main = startApiService(false);
441 for (String resrcName : toscaPoliciesResourceNames) {
442 Response rawResponse = createResource(POLICIES, resrcName, false);
443 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
444 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
445 assertEquals("policy type onap.policies.optimization.AffinityPolicy:0.0.0 for "
446 + "policy OSDF_CASABLANCA.Affinity_vCPE_1:1.0.0 does not exist", error.getErrorMessage());
451 public void testHttpsSimpleCreatePoliciesPersistent() throws Exception {
452 setupParameters(); // setup DB
453 main = startApiService(false);
454 for (String resrcName : toscaPoliciesResourceNames) {
455 Response rawResponse = createResource(POLICIES, resrcName, false);
456 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
457 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
458 assertNotNull(response);
459 assertFalse(response.getToscaTopologyTemplate().getPolicies().isEmpty());
464 public void testHttpsCreateGuardPolicies() {
466 main = startApiService(false);
467 for (String resrcName : legacyGuardPolicyResourceNames) {
468 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, false);
469 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
471 } catch (Exception exp) {
472 fail("Test should not throw an exception");
477 public void testHttpsCreateOperationalPolicies() {
479 main = startApiService(false);
480 for (String resrcName : legacyOperationalPolicyResourceNames) {
481 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, false);
482 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
484 } catch (Exception exp) {
485 fail("Test should not throw an exception");
490 public void testHealthCheckSuccessJson() {
491 testHealthCheckSuccess(APP_JSON);
495 public void testHealthCheckSuccessYaml() {
496 testHealthCheckSuccess(APP_YAML);
501 private void testHealthCheckSuccess(String mediaType) {
504 main = startApiService(true);
505 final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT, mediaType);
506 final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
507 validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
508 } catch (final Exception exp) {
509 LOGGER.error("testHealthCheckSuccess failed", exp);
510 fail("Test should not throw an exception");
515 public void testHealthCheckFailureJson() {
516 testHealthCheckFailure(APP_JSON);
520 public void testHealthCheckFailureYaml() {
521 testHealthCheckFailure(APP_YAML);
524 private void testHealthCheckFailure(String mediaType) {
526 port = NetworkUtil.allocPort();
527 final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false, port);
528 restServerParams.setName(CommonTestData.API_GROUP_NAME);
529 restServer = new RestServer(restServerParams, null, ApiRestController.class);
532 final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT, mediaType);
533 final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
534 validateHealthCheckReport(NAME, SELF, false, 500, NOT_ALIVE, report);
535 assertTrue(restServer.isAlive());
536 assertTrue(restServer.toString().startsWith("RestServer [servers="));
537 } catch (Exception exp) {
538 fail("Test should not throw an exception");
543 public void testHttpsHealthCheckSuccessJson() {
544 testHttpsHealthCheckSuccess(APP_JSON);
548 public void testHttpsHealthCheckSuccessYaml() {
549 testHttpsHealthCheckSuccess(APP_YAML);
552 private void testHttpsHealthCheckSuccess(String mediaType) {
554 main = startApiService(false);
555 final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT, mediaType);
556 final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
557 validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
558 } catch (Exception exp) {
559 fail("Test should not throw an exception");
564 public void testApiStatistics_200_Json() {
565 testApiStatistics_200(APP_JSON);
569 public void testApiStatistics_200_Yaml() {
570 testApiStatistics_200(APP_YAML);
573 private void testApiStatistics_200(String mediaType) {
575 main = startApiService(true);
576 Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT, mediaType);
577 StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
578 validateStatisticsReport(report, 200);
579 updateApiStatistics();
580 invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT, mediaType);
581 report = invocationBuilder.get(StatisticsReport.class);
582 validateStatisticsReport(report, 200);
583 ApiStatisticsManager.resetAllStatistics();
584 } catch (Exception exp) {
585 fail("Test should not throw an exception");
590 public void testHttpsApiStatisticsJson() {
591 testHttpsApiStatistics(APP_JSON);
595 public void testHttpsApiStatisticsYaml() {
596 testHttpsApiStatistics(APP_YAML);
599 private void testHttpsApiStatistics(String mediaType) {
601 main = startApiService(false);
602 final Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType);
603 final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
604 validateStatisticsReport(report, 200);
605 } catch (Exception exp) {
606 fail("Test should not throw an exception");
611 public void testApiStatistics_500_Json() {
612 testApiStatistics_500(APP_JSON);
616 public void testApiStatistics_500_Yaml() {
617 testApiStatistics_500(APP_YAML);
621 private void testApiStatistics_500(String mediaType) {
623 port = NetworkUtil.allocPort();
624 final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false, port);
625 restServerParams.setName(CommonTestData.API_GROUP_NAME);
626 restServer = new RestServer(restServerParams, null, ApiRestController.class);
629 final Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT, mediaType);
630 final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
631 validateStatisticsReport(report, 500);
632 ApiStatisticsManager.resetAllStatistics();
633 } catch (Exception exp) {
634 fail("Test should not throw an exception");
640 public void testReadPolicyTypesJson() {
641 testReadPolicyTypes(APP_JSON);
645 public void testReadPolicyTypesYaml() {
646 testReadPolicyTypes(APP_YAML);
649 private void testReadPolicyTypes(String mediaType) {
651 main = startApiService(true);
652 Response rawResponse = readResource(POLICYTYPES, true, mediaType);
653 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
654 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
655 assertTrue(response.getPolicyTypes().isEmpty());
657 rawResponse = readResource(POLICYTYPES_TCA, true, mediaType);
658 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
659 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
660 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:null does not exist",
661 error.getErrorMessage());
663 rawResponse = readResource(POLICYTYPES_TCA_VERSION, true, mediaType);
664 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
665 error = rawResponse.readEntity(ErrorResponse.class);
666 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
667 error.getErrorMessage());
669 rawResponse = readResource(POLICYTYPES_TCA_LATEST, true, mediaType);
670 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
671 error = rawResponse.readEntity(ErrorResponse.class);
672 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:null does not exist",
673 error.getErrorMessage());
675 rawResponse = readResource(POLICYTYPES_COLLECTOR, true, mediaType);
676 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
677 error = rawResponse.readEntity(ErrorResponse.class);
678 assertEquals("policy type with ID "
679 + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:null does not exist",
680 error.getErrorMessage());
682 rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, true, mediaType);
683 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
684 error = rawResponse.readEntity(ErrorResponse.class);
685 assertEquals("policy type with ID "
686 + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:1.0.0 does not exist",
687 error.getErrorMessage());
689 rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, true, mediaType);
690 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
691 error = rawResponse.readEntity(ErrorResponse.class);
692 assertEquals("policy type with ID "
693 + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:null does not exist",
694 error.getErrorMessage());
695 } catch (Exception exp) {
696 fail("Test should not throw an exception");
701 public void testReadPreloadPolicyTypesPersistentJson() throws Exception {
703 main = startApiService(true);
704 Response rawResponse = readResource(POLICYTYPES, true, APP_JSON);
705 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
706 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
707 assertEquals(21, response.getPolicyTypes().size());
711 public void testReadPreloadPolicyTypesPersistentYaml() throws Exception {
713 main = startApiService(true);
714 Response rawResponse = readResource(POLICYTYPES, true, APP_YAML);
715 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
716 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
717 assertEquals(21, response.getPolicyTypes().size());
721 public void testReadPolicyTypesPersistentJson() {
722 testReadPolicyTypesPersistent(APP_JSON);
726 public void testReadPolicyTypesPersistentYaml() {
727 testReadPolicyTypesPersistent(APP_YAML);
730 private void testReadPolicyTypesPersistent(String mediaType) {
733 main = startApiService(true);
734 for (String resrcName : toscaPolicyTypeResourceNames) {
735 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
736 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
737 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
738 assertNotNull(response);
739 assertFalse(response.getPolicyTypes().isEmpty());
742 for (String resrcName : toscaPolicyResourceNames) {
743 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
744 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
747 Response rawResponse = readResource(POLICYTYPES_TCA, true, mediaType);
748 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
750 rawResponse = readResource(POLICYTYPES_TCA_VERSION, true, mediaType);
751 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
754 rawResponse = readResource(POLICYTYPES_TCA_LATEST, true, mediaType);
755 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
758 rawResponse = readResource(POLICYTYPES_COLLECTOR, true, mediaType);
759 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
762 rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, true, mediaType);
763 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
766 rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, true, mediaType);
767 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
768 } catch (Exception exp) {
769 fail("Test should not throw an exception");
774 public void testDeletePolicyTypeJson() {
775 testDeletePolicyType(APP_JSON);
779 public void testDeletePolicyTypeYaml() {
780 testDeletePolicyType(APP_YAML);
783 private void testDeletePolicyType(String mediaType) {
785 main = startApiService(true);
786 Response rawResponse = deleteResource(POLICYTYPES_TCA_VERSION, true, mediaType);
787 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
788 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
789 assertEquals("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
790 error.getErrorMessage());
792 rawResponse = deleteResource(POLICYTYPES_COLLECTOR_VERSION, true, mediaType);
793 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
794 error = rawResponse.readEntity(ErrorResponse.class);
795 assertEquals("policy type with ID "
796 + "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:1.0.0 does not exist",
797 error.getErrorMessage());
798 } catch (Exception exp) {
799 fail("Test should not throw an exception");
804 public void testDeletePolicyTypePersistentJson() {
805 testDeletePolicyTypePersistent(APP_JSON);
809 public void testDeletePolicyTypePersistentYaml() {
810 testDeletePolicyTypePersistent(APP_YAML);
813 private void testDeletePolicyTypePersistent(String mediaType) {
815 setupParameters(); // setup DB
816 main = startApiService(true);// create policy types
817 for (String resrcName : toscaPolicyTypeResourceNames) {
818 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
819 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
820 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
821 assertNotNull(response);
822 assertFalse(response.getPolicyTypes().isEmpty());
824 Response rawResponse = deleteResource(POLICYTYPES_TCA_VERSION, true, mediaType);
825 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
826 } catch (Exception exp) {
827 fail("Test should not throw an exception");
833 public void testReadPoliciesJson() {
834 testReadPolicies(APP_JSON);
838 public void testReadPoliciesYaml() {
839 testReadPolicies(APP_YAML);
842 private void testReadPolicies(String mediaType) {
844 main = startApiService(true);
845 Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, true, mediaType);
846 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
847 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
849 "policy with ID null:null and "
850 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
851 error.getErrorMessage());
853 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, true, mediaType);
854 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
855 error = rawResponse.readEntity(ErrorResponse.class);
857 "policy with ID onap.restart.tca:null and "
858 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
859 error.getErrorMessage());
861 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
862 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
863 error = rawResponse.readEntity(ErrorResponse.class);
865 "policy with ID onap.restart.tca:1.0.0 and "
866 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
867 error.getErrorMessage());
869 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, true, mediaType);
870 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
871 error = rawResponse.readEntity(ErrorResponse.class);
873 "policy with ID onap.restart.tca:null and "
874 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
875 error.getErrorMessage());
876 } catch (Exception exp) {
877 fail("Test should not throw an exception");
882 public void testReadPoliciesPersistentJson() {
883 testReadPoliciesPersistent(APP_JSON);
887 public void testReadPoliciesPersistentYaml() {
888 testReadPoliciesPersistent(APP_YAML);
891 private void testReadPoliciesPersistent(String mediaType) {
894 main = startApiService(true);
895 for (String resrcName : toscaPolicyTypeResourceNames) {
896 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
897 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
898 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
899 assertNotNull(response);
900 assertFalse(response.getPolicyTypes().isEmpty());
903 for (String resrcName : toscaPolicyResourceNames) {
904 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
905 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
908 Response rawResponse;
909 rawResponse = readResource(POLICYTYPES_TCA, true, mediaType);
910 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
912 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, true, mediaType);
913 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
915 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
916 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
918 rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, true, mediaType);
919 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
920 } catch (Exception exp) {
921 fail("Test should not throw an exception");
926 public void testDeletePoliciesJson() {
927 testDeletePolicies(APP_JSON);
931 public void testDeletePoliciesYaml() {
932 testDeletePolicies(APP_YAML);
935 private void testDeletePolicies(String mediaType) {
937 main = startApiService(true);
938 Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
939 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
940 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
942 "policy with ID onap.restart.tca:1.0.0 and "
943 + "type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist",
944 error.getErrorMessage());
945 } catch (Exception exp) {
946 fail("Test should not throw an exception");
951 public void testDeletePolicyVersionJson() {
952 testDeletePolicyVersion(APP_JSON);
956 public void testDeletePolicyVersionYaml() {
957 testDeletePolicyVersion(APP_YAML);
960 private void testDeletePolicyVersion(String mediaType) {
962 setupParameters(); // setup DB
963 main = startApiService(true);// create policy types
964 for (String resrcName : toscaPolicyTypeResourceNames) {
965 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
966 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
967 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
968 assertNotNull(response);
969 assertFalse(response.getPolicyTypes().isEmpty());
971 for (String resrcName : toscaPolicyResourceNames) {
972 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
973 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
975 Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION, true, mediaType);
976 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
977 } catch (Exception exp) {
978 fail("Test should not throw an exception");
983 public void testGetAllVersionOfPolicyJson() {
984 testGetAllVersionOfPolicy(APP_JSON);
988 public void testGetAllVersionOfPolicyYaml() {
989 testGetAllVersionOfPolicy(APP_YAML);
992 private void testGetAllVersionOfPolicy(String mediaType) {
994 setupParameters(); // setup DB
995 main = startApiService(true);// create policy types
996 for (String resrcName : toscaPolicyTypeResourceNames) {
997 Response rawResponse = createResource(POLICYTYPES, resrcName, true);
998 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
999 ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
1000 assertNotNull(response);
1001 assertFalse(response.getPolicyTypes().isEmpty());
1003 for (String resrcName : toscaPolicyResourceNames) {
1004 Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, true);
1005 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1007 Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, true, mediaType);
1008 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1009 } catch (Exception exp) {
1010 fail("Test should not throw an exception");
1016 public void testReadGuardPoliciesJson() {
1017 testReadGuardPolicies(APP_JSON);
1021 public void testReadGuardPoliciesYaml() {
1022 testReadGuardPolicies(APP_YAML);
1025 private void testReadGuardPolicies(String mediaType) {
1027 main = startApiService(true);
1028 Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, true, mediaType);
1029 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1030 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1031 assertEquals("no policy found for policy: guard.frequency.scaleout:null", error.getErrorMessage());
1033 rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1034 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1035 error = rawResponse.readEntity(ErrorResponse.class);
1036 assertEquals("no policy found for policy: guard.frequency.scaleout:1", error.getErrorMessage());
1038 rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, true, mediaType);
1039 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1040 error = rawResponse.readEntity(ErrorResponse.class);
1041 assertEquals("no policy found for policy: guard.minmax.scaleout:null", error.getErrorMessage());
1043 rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, true, mediaType);
1044 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1045 error = rawResponse.readEntity(ErrorResponse.class);
1046 assertEquals("no policy found for policy: guard.minmax.scaleout:1", error.getErrorMessage());
1047 } catch (Exception exp) {
1048 fail("Test should not throw an exception");
1053 public void testReadGuardPoliciesPersistentJson() {
1054 testReadGuardPoliciesPersistent(APP_JSON);
1058 public void testReadGuardPoliciesPersistentYaml() {
1059 testReadGuardPoliciesPersistent(APP_YAML);
1062 private void testReadGuardPoliciesPersistent(String mediaType) {
1064 setupParameters(); // setup DB
1065 main = startApiService(true);
1066 for (String resrcName : legacyGuardPolicyResourceNames) {
1067 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
1068 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1071 Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_LATEST, true, mediaType);
1072 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1075 rawResponse = readResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1076 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1078 rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_LATEST, true, mediaType);
1079 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1082 rawResponse = readResource(GUARD_POLICIES_VDNS_MINMAX_VERSION, true, mediaType);
1083 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1084 } catch (Exception exp) {
1085 fail("Test should not throw an exception");
1091 public void testReadOperationalPoliciesJson() {
1092 testReadOperationalPolicies(APP_JSON);
1096 public void testReadOperationalPoliciesYaml() {
1097 testReadOperationalPolicies(APP_YAML);
1100 private void testReadOperationalPolicies(String mediaType) {
1102 main = startApiService(true);
1103 Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, true, mediaType);
1104 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1105 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1106 assertEquals("no policy found for policy: operational.restart:null", error.getErrorMessage());
1108 rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1109 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1110 error = rawResponse.readEntity(ErrorResponse.class);
1111 assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
1113 rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true, mediaType);
1114 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1115 error = rawResponse.readEntity(ErrorResponse.class);
1116 assertEquals("no policy found for policy: operational.scaleout:null", error.getErrorMessage());
1118 rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1119 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1120 error = rawResponse.readEntity(ErrorResponse.class);
1121 assertEquals("no policy found for policy: operational.scaleout:1", error.getErrorMessage());
1123 rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, true, mediaType);
1124 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1125 error = rawResponse.readEntity(ErrorResponse.class);
1126 assertEquals("no policy found for policy: operational.modifyconfig:null", error.getErrorMessage());
1128 rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, true, mediaType);
1129 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1130 error = rawResponse.readEntity(ErrorResponse.class);
1131 assertEquals("no policy found for policy: operational.modifyconfig:1", error.getErrorMessage());
1132 } catch (Exception exp) {
1133 fail("Test should not throw an exception");
1138 public void testReadOperationalPoliciesPersistentJson() {
1139 testReadOperationalPoliciesPersistent(APP_JSON);
1143 public void testReadOperationalPoliciesPersistentYaml() {
1144 testReadOperationalPoliciesPersistent(APP_YAML);
1147 private void testReadOperationalPoliciesPersistent(String mediaType) {
1149 setupParameters(); // setup DB
1150 main = startApiService(true);
1151 for (String resrcName : legacyOperationalPolicyResourceNames) {
1152 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
1153 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1156 Response rawResponse = readResource(OPS_POLICIES_VCPE_LATEST, true, mediaType);
1157 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1160 rawResponse = readResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1161 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1164 rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true, mediaType);
1165 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1168 rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1169 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1172 rawResponse = readResource(OPS_POLICIES_VFIREWALL_LATEST, true, mediaType);
1173 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1176 rawResponse = readResource(OPS_POLICIES_VFIREWALL_VERSION, true, mediaType);
1177 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1178 } catch (Exception exp) {
1179 fail("Test should not throw an exception");
1184 public void testDeleteGuardPolicyJson() {
1185 testDeleteGuardPolicy(APP_JSON);
1189 public void testDeleteGuardPolicyYaml() {
1190 testDeleteGuardPolicy(APP_YAML);
1193 private void testDeleteGuardPolicy(String mediaType) {
1195 main = startApiService(true);
1196 Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1197 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1198 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1199 assertEquals("no policy found for policy: guard.frequency.scaleout:1", error.getErrorMessage());
1200 } catch (Exception exp) {
1201 fail("Test should not throw an exception");
1206 public void testDeleteGuardPolicyPersistentJson() {
1207 testDeleteGuardPolicyPersistent(APP_JSON);
1211 public void testDeleteGuardPolicyPersistentYaml() {
1212 testDeleteGuardPolicyPersistent(APP_YAML);
1215 private void testDeleteGuardPolicyPersistent(String mediaType) {
1217 setupParameters(); // setup DB
1218 main = startApiService(true);
1220 for (String resrcName : legacyGuardPolicyResourceNames) {
1221 Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
1222 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1225 Response rawResponse = deleteResource(GUARD_POLICIES_VDNS_FL_VERSION, true, mediaType);
1226 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1227 } catch (Exception exp) {
1228 fail("Test should not throw an exception");
1233 public void testGetDeployedVersionsOfGuardPolicyJson() {
1234 testGetDeployedVersionsOfGuardPolicy(APP_JSON);
1238 public void testGetDeployedVersionsOfGuardPolicyYaml() {
1239 testGetDeployedVersionsOfGuardPolicy(APP_YAML);
1242 private void testGetDeployedVersionsOfGuardPolicy(String mediaType) {
1244 main = startApiService(true);
1245 Response rawResponse = readResource(GUARD_POLICIES_VDNS_FL_DEPLOYED, true, mediaType);
1246 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
1247 } catch (Exception exp) {
1248 fail("Test should not throw an exception");
1253 public void testDeleteOperationalPolicyJson() {
1254 testDeleteOperationalPolicy(APP_JSON);
1258 public void testDeleteOperationalPolicyYaml() {
1259 testDeleteOperationalPolicy(APP_YAML);
1262 private void testDeleteOperationalPolicy(String mediaType) {
1264 main = startApiService(true);
1265 Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1266 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1267 ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
1268 assertEquals("no policy found for policy: operational.restart:1", error.getErrorMessage());
1269 } catch (Exception exp) {
1270 fail("Test should not throw an exception");
1275 public void testDeleteOperationalPolicyPersistentJson() {
1276 testDeleteOperationalPolicyPersistent(APP_JSON);
1280 public void testDeleteOperationalPolicyPersistentYaml() {
1281 testDeleteOperationalPolicyPersistent(APP_YAML);
1284 private void testDeleteOperationalPolicyPersistent(String mediaType) {
1286 setupParameters(); // setup DB
1287 main = startApiService(true);
1288 for (String resrcName : legacyOperationalPolicyResourceNames) {
1289 Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
1290 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1292 Response rawResponse = deleteResource(OPS_POLICIES_VCPE_VERSION, true, mediaType);
1293 assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
1294 } catch (Exception exp) {
1295 fail("Test should not throw an exception");
1301 public void testGetDeployedVersionsOfPolicyJson() {
1302 testGetDeployedVersionsOfPolicy(APP_JSON);
1306 public void testGetDeployedVersionsOfPolicyYaml() {
1307 testGetDeployedVersionsOfPolicy(APP_YAML);
1310 private void testGetDeployedVersionsOfPolicy(String mediaType) {
1312 main = startApiService(true);
1313 Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_DEPLOYED, true, mediaType);
1314 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
1315 } catch (Exception exp) {
1316 fail("Test should not throw an exception");
1321 public void testGetLatestVersionOfOperationalPolicyJson() {
1322 testGetLatestVersionOfOperationalPolicy(APP_JSON);
1326 public void testGetLatestVersionOfOperationalPolicyYaml() {
1327 testGetLatestVersionOfOperationalPolicy(APP_YAML);
1330 private void testGetLatestVersionOfOperationalPolicy(String mediaType) {
1332 main = startApiService(true);
1333 Response rawResponse = readResource(OPS_POLICIES_VDNS_LATEST, true, mediaType);
1334 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1335 } catch (Exception exp) {
1336 fail("Test should not throw an exception");
1341 public void testGetSpecificVersionOfOperationalPolicyJson() {
1342 testGetSpecificVersionOfOperationalPolicy(APP_JSON);
1346 public void testGetSpecificVersionOfOperationalPolicyYaml() {
1347 testGetSpecificVersionOfOperationalPolicy(APP_YAML);
1350 private void testGetSpecificVersionOfOperationalPolicy(String mediaType) {
1352 main = startApiService(true);
1353 Response rawResponse = readResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1354 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1355 } catch (Exception exp) {
1356 fail("Test should not throw an exception");
1361 public void testGetDeployedVersionsOfOperationalPolicyJson() {
1362 testGetDeployedVersionsOfOperationalPolicy(APP_JSON);
1366 public void testGetDeployedVersionsOfOperationalPolicyYaml() {
1367 testGetDeployedVersionsOfOperationalPolicy(APP_YAML);
1370 private void testGetDeployedVersionsOfOperationalPolicy(String mediaType) {
1372 main = startApiService(true);
1373 Response rawResponse = readResource(OPS_POLICIES_VCPE_DEPLOYED, true, mediaType);
1374 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
1375 } catch (Exception exp) {
1376 fail("Test should not throw an exception");
1381 public void testDeleteSpecificVersionOfOperationalPolicyJson() {
1382 testDeleteSpecificVersionOfOperationalPolicy(APP_JSON);
1386 public void testDeleteSpecificVersionOfOperationalPolicyYaml() {
1387 testDeleteSpecificVersionOfOperationalPolicy(APP_YAML);
1390 private void testDeleteSpecificVersionOfOperationalPolicy(String mediaType) {
1392 main = startApiService(true);
1393 Response rawResponse = deleteResource(OPS_POLICIES_VDNS_VERSION, true, mediaType);
1394 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
1395 } catch (Exception exp) {
1396 fail("Test should not throw an exception");
1400 private Response createResource(String endpoint, String resourceName, boolean http)
1403 String mediaType = APP_JSON; // default media type
1404 ToscaServiceTemplate rawServiceTemplate = new ToscaServiceTemplate();
1405 if (resourceName.endsWith(".json")) {
1406 rawServiceTemplate = standardCoder.decode(
1407 ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
1408 } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1409 mediaType = APP_YAML;
1410 rawServiceTemplate = standardYamlCoder.decode(
1411 ResourceUtils.getResourceAsString(resourceName), ToscaServiceTemplate.class);
1414 final Invocation.Builder invocationBuilder;
1417 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1419 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1422 Entity<ToscaServiceTemplate> entity = Entity.entity(rawServiceTemplate, mediaType);
1423 return invocationBuilder.post(entity);
1426 private Response createGuardPolicy(String endpoint, String resourceName, boolean http)
1429 String mediaType = APP_JSON; // default media type
1430 LegacyGuardPolicyInput rawGuardPolicy = new LegacyGuardPolicyInput();
1431 if (resourceName.endsWith(".json")) {
1432 rawGuardPolicy = standardCoder.decode(
1433 ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
1434 } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1435 mediaType = APP_YAML;
1436 rawGuardPolicy = standardYamlCoder.decode(
1437 ResourceUtils.getResourceAsString(resourceName), LegacyGuardPolicyInput.class);
1440 final Invocation.Builder invocationBuilder;
1443 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1445 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1448 Entity<LegacyGuardPolicyInput> entity = Entity.entity(rawGuardPolicy, mediaType);
1449 return invocationBuilder.post(entity);
1452 private Response createOperationalPolicy(String endpoint, String resourceName, boolean http)
1455 String mediaType = APP_JSON; // default media type
1456 LegacyOperationalPolicy rawOpsPolicy = new LegacyOperationalPolicy();
1457 if (resourceName.endsWith(".json")) {
1458 rawOpsPolicy = standardCoder.decode(
1459 ResourceUtils.getResourceAsString(resourceName), LegacyOperationalPolicy.class);
1460 } else if (resourceName.endsWith(".yaml") || resourceName.endsWith(".yml")) {
1461 mediaType = APP_YAML;
1462 rawOpsPolicy = standardYamlCoder.decode(
1463 ResourceUtils.getResourceAsString(resourceName), LegacyOperationalPolicy.class);
1466 final Invocation.Builder invocationBuilder;
1469 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1471 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1474 Entity<LegacyOperationalPolicy> entity = Entity.entity(rawOpsPolicy, mediaType);
1475 return invocationBuilder.post(entity);
1478 private Response readResource(String endpoint, boolean http, String mediaType) throws Exception {
1480 final Invocation.Builder invocationBuilder;
1483 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1485 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1488 return invocationBuilder.get();
1492 private Response deleteResource(String endpoint, boolean http, String mediaType) throws Exception {
1494 final Invocation.Builder invocationBuilder;
1497 invocationBuilder = sendHttpRequest(endpoint, mediaType);
1499 invocationBuilder = sendHttpsRequest(endpoint, mediaType);
1502 return invocationBuilder.delete();
1505 private Main startApiService(final boolean http) throws Exception {
1506 port = NetworkUtil.allocPort();
1508 final String[] apiConfigParameters = new String[2];
1510 COMMON_TEST_DATA.makeParameters("src/test/resources/parameters/ApiConfigParameters.json",
1511 "src/test/resources/parameters/ApiConfigParametersXXX.json", port);
1512 apiConfigParameters[0] = "-c";
1513 apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParametersXXX.json";
1515 final Properties systemProps = System.getProperties();
1516 systemProps.put("javax.net.ssl.keyStore", KEYSTORE);
1517 systemProps.put("javax.net.ssl.keyStorePassword", "Pol1cy_0nap");
1518 System.setProperties(systemProps);
1519 COMMON_TEST_DATA.makeParameters("src/test/resources/parameters/ApiConfigParameters_Https.json",
1520 "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json", port);
1521 apiConfigParameters[0] = "-c";
1522 apiConfigParameters[1] = "src/test/resources/parameters/ApiConfigParameters_HttpsXXX.json";
1524 return new Main(apiConfigParameters);
1527 private void stopApiService(final Main main) throws PolicyApiException {
1532 private Invocation.Builder sendHttpRequest(final String endpoint, String mediaType) throws Exception {
1534 final ClientConfig clientConfig = new ClientConfig();
1536 final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1537 clientConfig.register(feature);
1539 final Client client = ClientBuilder.newClient(clientConfig);
1541 client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1542 if (APP_JSON.equalsIgnoreCase(mediaType)) {
1543 client.register(GsonMessageBodyHandler.class);
1544 } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
1545 client.register(YamlMessageBodyHandler.class);
1548 final WebTarget webTarget = client.target("http://localhost:" + port + "/policy/api/v1/" + endpoint);
1550 final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
1552 if (!NetworkUtil.isTcpPortOpen("localhost", port, 60, 1000L)) {
1553 throw new IllegalStateException("cannot connect to port " + port);
1555 return invocationBuilder;
1558 private Invocation.Builder sendHttpsRequest(final String endpoint, String mediaType) throws Exception {
1560 final TrustManager[] noopTrustManager = new TrustManager[] { new X509TrustManager() {
1563 public X509Certificate[] getAcceptedIssuers() {
1564 return new X509Certificate[0];
1568 public void checkClientTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {}
1571 public void checkServerTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {}
1574 final SSLContext sc = SSLContext.getInstance("TLSv1.2");
1575 sc.init(null, noopTrustManager, new SecureRandom());
1576 final ClientBuilder clientBuilder =
1577 ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
1578 final Client client = clientBuilder.build();
1579 final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
1580 client.register(feature);
1582 client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
1583 if (APP_JSON.equalsIgnoreCase(mediaType)) {
1584 client.register(GsonMessageBodyHandler.class);
1585 } else if (APP_YAML.equalsIgnoreCase(mediaType)) {
1586 client.register(YamlMessageBodyHandler.class);
1589 final WebTarget webTarget = client.target("https://localhost:" + port + "/policy/api/v1/" + endpoint);
1591 final Invocation.Builder invocationBuilder = webTarget.request(mediaType);
1593 if (!NetworkUtil.isTcpPortOpen("localhost", port, 60, 1000L)) {
1594 throw new IllegalStateException("cannot connect to port " + port);
1596 return invocationBuilder;
1599 private void updateApiStatistics() {
1601 ApiStatisticsManager.updateTotalApiCallCount();
1602 ApiStatisticsManager.updateApiCallSuccessCount();
1603 ApiStatisticsManager.updateApiCallFailureCount();
1604 ApiStatisticsManager.updateTotalPolicyGetCount();
1605 ApiStatisticsManager.updateTotalPolicyPostCount();
1606 ApiStatisticsManager.updateTotalPolicyTypeGetCount();
1607 ApiStatisticsManager.updateTotalPolicyTypePostCount();
1608 ApiStatisticsManager.updatePolicyGetSuccessCount();
1609 ApiStatisticsManager.updatePolicyGetFailureCount();
1610 ApiStatisticsManager.updatePolicyPostSuccessCount();
1611 ApiStatisticsManager.updatePolicyPostFailureCount();
1612 ApiStatisticsManager.updatePolicyTypeGetSuccessCount();
1613 ApiStatisticsManager.updatePolicyTypeGetFailureCount();
1614 ApiStatisticsManager.updatePolicyTypePostSuccessCount();
1615 ApiStatisticsManager.updatePolicyTypePostFailureCount();
1618 private void validateStatisticsReport(final StatisticsReport report, final int code) {
1620 assertEquals(code, report.getCode());
1623 private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
1624 final String message, final HealthCheckReport report) {
1626 assertEquals(name, report.getName());
1627 assertEquals(url, report.getUrl());
1628 assertEquals(healthy, report.isHealthy());
1629 assertEquals(code, report.getCode());
1630 assertEquals(message, report.getMessage());