Merge "Add REST Apis for Tosca Node template operations"
[policy/api.git] / main / src / test / java / org / onap / policy / api / main / rest / TestApiRestServer.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
4  *  Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
5  *  Modifications Copyright (C) 2019-2020,2022 Nordix Foundation.
6  *  Modifications Copyright (C) 2020-2022 Bell Canada. All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  * SPDX-License-Identifier: Apache-2.0
21  * ============LICENSE_END=========================================================
22  */
23
24 package org.onap.policy.api.main.rest;
25
26 import static org.assertj.core.api.Assertions.assertThat;
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertFalse;
29 import static org.junit.Assert.assertNotNull;
30 import static org.junit.Assert.assertNull;
31
32 import java.io.File;
33 import java.io.IOException;
34 import java.util.List;
35 import java.util.Map;
36 import javax.ws.rs.client.Invocation;
37 import javax.ws.rs.core.Response;
38 import javax.ws.rs.core.Response.Status;
39 import org.junit.BeforeClass;
40 import org.junit.Test;
41 import org.junit.runner.RunWith;
42 import org.onap.policy.api.main.PolicyApiApplication;
43 import org.onap.policy.api.main.rest.utils.CommonTestRestController;
44 import org.onap.policy.common.endpoints.report.HealthCheckReport;
45 import org.onap.policy.common.utils.coder.StandardCoder;
46 import org.onap.policy.common.utils.coder.StandardYamlCoder;
47 import org.onap.policy.common.utils.network.NetworkUtil;
48 import org.onap.policy.common.utils.resources.ResourceUtils;
49 import org.onap.policy.common.utils.resources.TextFileUtils;
50 import org.onap.policy.common.utils.security.SelfSignedKeyStore;
51 import org.onap.policy.models.errors.concepts.ErrorResponse;
52 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
53 import org.springframework.beans.factory.annotation.Autowired;
54 import org.springframework.boot.test.context.SpringBootTest;
55 import org.springframework.boot.web.server.LocalServerPort;
56 import org.springframework.test.annotation.DirtiesContext;
57 import org.springframework.test.annotation.DirtiesContext.ClassMode;
58 import org.springframework.test.context.ActiveProfiles;
59 import org.springframework.test.context.DynamicPropertyRegistry;
60 import org.springframework.test.context.DynamicPropertySource;
61 import org.springframework.test.context.junit4.SpringRunner;
62
63 /**
64  * Class to perform unit test of {@link ApiRestController}.
65  *
66  * @author Chenfei Gao (cgao@research.att.com)
67  */
68 @RunWith(SpringRunner.class)
69 @SpringBootTest(classes = PolicyApiApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
70 @ActiveProfiles("test")
71 @DirtiesContext(classMode = ClassMode.AFTER_CLASS)
72 public class TestApiRestServer extends CommonTestRestController {
73
74     private static final String ALIVE = "alive";
75     private static final String SELF = NetworkUtil.getHostname();
76     private static final String NAME = "Policy API";
77     private static final String APP_JSON = "application/json";
78     private static final String APP_YAML = "application/yaml";
79
80     private static final String HEALTHCHECK_ENDPOINT = "healthcheck";
81     private static final String STATISTICS_ENDPOINT = "statistics";
82
83     private static final String OP_POLICY_NAME_VCPE = "operational.restart";
84
85     private static final String POLICYTYPES = "policytypes";
86     private static final String POLICYTYPES_TCA = "policytypes/onap.policies.monitoring.tcagen2";
87     private static final String POLICYTYPES_COLLECTOR =
88             "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server";
89     private static final String POLICYTYPES_TCA_VERSION = "policytypes/onap.policies.monitoring.tcagen2/versions/1.0.0";
90     private static final String POLICYTYPES_TCA_LATEST = "policytypes/onap.policies.monitoring.tcagen2/versions/latest";
91     private static final String POLICYTYPES_COLLECTOR_VERSION =
92             "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server/versions/1.0.0";
93     private static final String POLICYTYPES_COLLECTOR_LATEST =
94             "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server/versions/latest";
95
96     private static final String POLICYTYPES_DROOLS = "policytypes/onap.policies.controlloop.operational.common.Drools";
97     private static final String POLICYTYPES_DROOLS_VERSION = POLICYTYPES_DROOLS + "/versions/1.0.0";
98     private static final String POLICYTYPES_DROOLS_VERSION_LATEST = POLICYTYPES_DROOLS + "/versions/latest";
99
100     private static final String POLICYTYPES_NAMING_VERSION = POLICYTYPES + "/onap.policies.Naming/versions/1.0.0";
101
102     private static final String POLICYTYPES_TCA_POLICIES =
103             "policytypes/onap.policies.monitoring.tcagen2/versions/1.0.0/policies";
104     private static final String POLICYTYPES_TCA_POLICIES_VCPE =
105             "policytypes/onap.policies.monitoring.tcagen2/versions/1.0.0/policies/onap.restart.tca";
106     private static final String POLICYTYPES_TCA_POLICIES_VCPE_VERSION1 =
107             "policytypes/" + "onap.policies.monitoring.tcagen2/versions/1.0.0/policies/onap.restart.tca/versions/1.0.0";
108     private static final String POLICYTYPES_TCA_POLICIES_VCPE_LATEST = "policytypes/"
109             + "onap.policies.monitoring.tcagen2/versions/1.0.0/policies/onap.restart.tca/versions/latest";
110
111     private static final String POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION =
112             POLICYTYPES_DROOLS_VERSION + "/policies/" + OP_POLICY_NAME_VCPE + "/versions/1.0.0";
113
114     private static final String POLICIES = "policies";
115
116     // @formatter:off
117     private static final String[] TOSCA_POLICY_RESOURCE_NAMES = {"policies/vCPE.policy.monitoring.input.tosca.json",
118         "policies/vCPE.policy.monitoring.input.tosca.yaml", "policies/vDNS.policy.monitoring.input.tosca.json",
119         "policies/vDNS.policy.monitoring.input.tosca.v2.yaml"};
120
121     private static final String[] TOSCA_POLICIES_RESOURCE_NAMES = {
122         "policies/vCPE.policies.optimization.input.tosca.json", "policies/vCPE.policies.optimization.input.tosca.yaml"};
123
124     private static final String TOSCA_POLICYTYPE_OP_RESOURCE =
125         "policytypes/onap.policies.controlloop.operational.Common.yaml";
126
127     private static final String[] TOSCA_POLICYTYPE_RESOURCE_NAMES = {
128         "policytypes/onap.policies.monitoring.tcagen2.yaml",
129         "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
130         "policytypes/onap.policies.controlloop.operational.common.Drools.yaml",
131         "policytypes/onap.policies.controlloop.guard.Common.yaml",
132         "policytypes/onap.policies.controlloop.guard.common.Blacklist.yaml",
133         "policytypes/onap.policies.controlloop.guard.common.FrequencyLimiter.yaml",
134         "policytypes/onap.policies.controlloop.guard.common.MinMax.yaml",
135         "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
136         "policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml",
137         "policytypes/onap.policies.optimization.resource.DistancePolicy.yaml",
138         "policytypes/onap.policies.optimization.resource.HpaPolicy.yaml",
139         "policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml",
140         "policytypes/onap.policies.optimization.resource.PciPolicy.yaml",
141         "policytypes/onap.policies.optimization.service.QueryPolicy.yaml",
142         "policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml",
143         "policytypes/onap.policies.optimization.resource.Vim_fit.yaml",
144         "policytypes/onap.policies.optimization.resource.VnfPolicy.yaml"};
145
146     private static final String TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_JSON =
147         "policies/vCPE.policy.operational.input.tosca.json";
148
149     private static final String TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML =
150         "policies/vCPE.policy.operational.input.tosca.yaml";
151
152     private static final String POLICIES_VCPE_VERSION1 = "policies/onap.restart.tca/versions/1.0.0";
153     // @formatter:on
154
155     private static final StandardCoder standardCoder = new StandardCoder();
156     private static StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
157     private static SelfSignedKeyStore keystore;
158
159     @LocalServerPort
160     private int apiPort;
161
162     @Autowired
163     private ApiStatisticsManager mgr;
164
165     /**
166      * Initializes parameters and set up test environment.
167      *
168      * @throws IOException on I/O exceptions
169      * @throws InterruptedException if interrupted
170      */
171     @BeforeClass
172     public static void setupParameters() throws IOException, InterruptedException {
173         keystore = new SelfSignedKeyStore();
174     }
175
176     @DynamicPropertySource
177     static void registerPgProperties(DynamicPropertyRegistry registry) {
178         registry.add("server.ssl.enabled", () -> "true");
179         registry.add("server.ssl.key-store", () -> keystore.getKeystoreName());
180         registry.add("server.ssl.key-store-password", () -> SelfSignedKeyStore.KEYSTORE_PASSWORD);
181         registry.add("server.ssl.key-store-type", () -> "PKCS12");
182         registry.add("server.ssl.key-alias", () -> "policy@policy.onap.org");
183         registry.add("server.ssl.key-password", () -> SelfSignedKeyStore.PRIVATE_KEY_PASSWORD);
184     }
185
186     @Test
187     public void testCreatePolicyTypes() throws Exception {
188         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
189             Response rawResponse = createResource(POLICYTYPES, resrcName, apiPort);
190             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
191             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
192             assertNotNull(response);
193             assertFalse(response.getPolicyTypes().isEmpty());
194         }
195
196         // Send a policy type with a null value to trigger an error
197         Response rawResponse = readResource(POLICYTYPES, APP_JSON, apiPort);
198         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
199         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
200         String firstPolicyType = response.getPolicyTypes().keySet().iterator().next();
201         response.getPolicyTypes().put(firstPolicyType, null);
202         Response rawResponse2 = createResource(POLICYTYPES, standardCoder.encode(response), apiPort);
203         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse2.getStatus());
204         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
205         assertEquals("no policy types specified on service template", errorResponse.getErrorMessage());
206     }
207
208     @Test
209     public void testCreatePolicies() throws Exception {
210         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
211             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, apiPort);
212             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
213         }
214
215         new File("src/test/resources/policies/BadTestPolicy.yaml").deleteOnExit();
216
217         // Send a policy with no policy type trigger an error
218         String toscaPolicy = ResourceUtils
219                 .getResourceAsString(TOSCA_POLICY_RESOURCE_NAMES[TOSCA_POLICIES_RESOURCE_NAMES.length - 1]);
220
221         toscaPolicy = toscaPolicy.replaceAll("onap.policies.monitoring.tcagen2", "IDontExist");
222         TextFileUtils.putStringAsTextFile(toscaPolicy, "src/test/resources/policies/BadTestPolicy.yaml");
223
224         Response rawResponse2 =
225                 createResource(POLICYTYPES_TCA_POLICIES,
226                     "src/test/resources/policies/BadTestPolicy.yaml", apiPort);
227         assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), rawResponse2.getStatus());
228         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
229         assertThat(errorResponse.getErrorMessage())
230                 .contains("item \"entity\" value \"onap.restart.tca:1.0.0\" INVALID, does not equal existing entity");
231     }
232
233     @Test
234     public void testSimpleCreatePolicies() throws Exception {
235         for (String resrcName : TOSCA_POLICIES_RESOURCE_NAMES) {
236             Response rawResponse = createResource(POLICIES, resrcName, apiPort);
237             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
238         }
239
240         new File("src/test/resources/policies/BadTestPolicy.yaml").deleteOnExit();
241
242         // Send a policy with no policy type trigger an error
243         String toscaPolicy = ResourceUtils
244                 .getResourceAsString(TOSCA_POLICY_RESOURCE_NAMES[TOSCA_POLICIES_RESOURCE_NAMES.length - 1]);
245
246         toscaPolicy = toscaPolicy.replaceAll("onap.policies.monitoring.tcagen2", "IDontExist");
247         toscaPolicy = toscaPolicy.replaceAll("onap.restart.tca", "onap.restart.tca.IDontExist");
248         TextFileUtils.putStringAsTextFile(toscaPolicy, "src/test/resources/policies/BadTestPolicy.yaml");
249
250         Response rawResponse2 =
251             createResource(POLICIES, "src/test/resources/policies/BadTestPolicy.yaml", apiPort);
252         ErrorResponse errorResponse = rawResponse2.readEntity(ErrorResponse.class);
253         assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), rawResponse2.getStatus());
254         assertThat(errorResponse.getErrorMessage())
255                 .contains("item \"policy type\" value \"IDontExist:1.0.0\" INVALID, not found");
256     }
257
258     @SuppressWarnings("unchecked")
259     @Test
260     public void testToscaCompliantOpDroolsPolicies() throws Exception {
261         Response rawResponse = createResource(POLICYTYPES, TOSCA_POLICYTYPE_OP_RESOURCE, apiPort);
262         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
263
264         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, APP_JSON, apiPort);
265         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
266
267         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_JSON, apiPort);
268         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
269
270         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML, apiPort);
271         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
272
273         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON, apiPort);
274         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
275
276         rawResponse = deleteResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON, apiPort);
277         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
278
279         rawResponse = createResource(POLICIES, TOSCA_POLICY_OP_DROOLS_VCPE_RESOURSE_YAML, apiPort);
280         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
281
282         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON, apiPort);
283         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
284
285         rawResponse = readResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_YAML, apiPort);
286         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
287
288         ToscaServiceTemplate toscaVcpeSt = rawResponse.readEntity(ToscaServiceTemplate.class);
289         assertEquals(1, toscaVcpeSt.getToscaTopologyTemplate().getPolicies().size());
290         assertEquals(OP_POLICY_NAME_VCPE,
291                 toscaVcpeSt.getToscaTopologyTemplate().getPolicies().get(0).get(OP_POLICY_NAME_VCPE).getName());
292
293         Map<String, Object> props =
294                 toscaVcpeSt.getToscaTopologyTemplate().getPolicies().get(0).get(OP_POLICY_NAME_VCPE).getProperties();
295         assertNotNull(props);
296
297         List<Object> operations = (List<Object>) props.get("operations");
298         assertEquals(1, operations.size());
299         assertEquals(props.get("trigger"), ((Map<String, Object>) operations.get(0)).get("id"));
300
301         Map<String, Object> operation =
302                 (Map<String, Object>) ((Map<String, Object>) operations.get(0)).get("operation");
303         assertEquals("APPC", operation.get("actor"));
304         assertEquals("Restart", operation.get("operation"));
305
306         rawResponse = deleteResource(POLICYTYPES_DROOLS_POLICIES_VCPE_VERSION, APP_JSON, apiPort);
307         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
308     }
309
310     @Test
311     public void testHealthCheckSuccessJson() throws Exception {
312         testHealthCheckSuccess(APP_JSON);
313     }
314
315     @Test
316     public void testHealthCheckSuccessYaml() throws Exception {
317         testHealthCheckSuccess(APP_YAML);
318     }
319
320     private void testHealthCheckSuccess(String mediaType) throws Exception {
321         final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT, mediaType, apiPort);
322         final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
323         validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
324     }
325
326     @Test
327     public void testApiStatistics_200_Json() throws Exception {
328         testApiStatistics_200(APP_JSON);
329     }
330
331     @Test
332     public void testApiStatistics_200_Yaml() throws Exception {
333         testApiStatistics_200(APP_YAML);
334     }
335
336     private void testApiStatistics_200(String mediaType) throws Exception {
337         Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType, apiPort);
338         StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
339         validateStatisticsReport(report, 200);
340         updateApiStatistics();
341         invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT, mediaType, apiPort);
342         report = invocationBuilder.get(StatisticsReport.class);
343         validateStatisticsReport(report, 200);
344         // ApiStatisticsManager.resetAllStatistics();
345     }
346
347     @Test
348     public void testReadPolicyTypesJson() throws Exception {
349         testReadPolicyTypes(APP_JSON);
350     }
351
352     @Test
353     public void testReadPolicyTypesYaml() throws Exception {
354         testReadPolicyTypes(APP_YAML);
355     }
356
357     private void testReadPolicyTypes(String mediaType) throws Exception {
358         Response rawResponse =
359             readResource("policytypes/onap.policies.optimization.resource.HpaPolicy", mediaType,
360                 apiPort);
361         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
362         ToscaServiceTemplate namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
363         assertNotNull(namingServiceTemplate);
364         assertEquals(3, namingServiceTemplate.getPolicyTypesAsMap().size());
365         assertEquals(5, namingServiceTemplate.getDataTypesAsMap().size());
366
367         rawResponse = readResource(POLICYTYPES, mediaType, apiPort);
368         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
369         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
370         assertFalse(response.getPolicyTypes().isEmpty());
371
372         rawResponse = readResource(POLICYTYPES_TCA, mediaType, apiPort);
373         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
374
375         rawResponse = readResource(POLICYTYPES_TCA_VERSION, mediaType, apiPort);
376         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
377
378         rawResponse = readResource(POLICYTYPES_TCA_LATEST, mediaType, apiPort);
379         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
380
381         rawResponse = readResource(POLICYTYPES_COLLECTOR, mediaType, apiPort);
382         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
383
384         rawResponse = readResource(POLICYTYPES_COLLECTOR_VERSION, mediaType, apiPort);
385         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
386
387         rawResponse = readResource(POLICYTYPES_COLLECTOR_LATEST, mediaType, apiPort);
388         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
389
390         rawResponse = readResource(POLICYTYPES_DROOLS, mediaType, apiPort);
391         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
392
393         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION, mediaType, apiPort);
394         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
395
396         rawResponse = readResource(POLICYTYPES_DROOLS_VERSION_LATEST, mediaType, apiPort);
397         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
398
399         rawResponse = readResource(POLICYTYPES_NAMING_VERSION, mediaType, apiPort);
400         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
401     }
402
403     @Test
404     public void testDeletePolicyTypeJson() throws Exception {
405         testDeletePolicyType(APP_JSON);
406     }
407
408     @Test
409     public void testDeletePolicyTypeYaml() throws Exception {
410         testDeletePolicyType(APP_YAML);
411     }
412
413     private void testDeletePolicyType(String mediaType) throws Exception {
414         Response rawResponse = deleteResource("policytypes/onap.policies.IDoNotExist/versions/1.0.0",
415             mediaType, apiPort);
416         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
417
418         rawResponse = createResource(POLICYTYPES, "policytypes/onap.policies.Test.yaml", apiPort);
419         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
420
421         rawResponse =
422             readResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType, apiPort);
423         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
424
425         rawResponse =
426             deleteResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType, apiPort);
427         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
428
429         rawResponse =
430             readResource("policytypes/onap.policies.Test/versions/1.0.0", mediaType, apiPort);
431         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
432     }
433
434     @Test
435     public void testReadPoliciesJson() throws Exception {
436         testReadPolicies(APP_JSON);
437     }
438
439     @Test
440     public void testReadPoliciesYaml() throws Exception {
441         testReadPolicies(APP_YAML);
442     }
443
444     private void testReadPolicies(String mediaType) throws Exception {
445         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
446             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, apiPort);
447             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
448         }
449
450         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType, apiPort);
451         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
452
453         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType, apiPort);
454         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
455
456         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType, apiPort);
457         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
458
459         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType, apiPort);
460         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
461
462         rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType, apiPort);
463         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
464
465     }
466
467     @Test
468     public void testNamingPolicyGet() throws Exception {
469
470         Response rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
471                 + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/1.0.0", APP_JSON, apiPort);
472         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
473
474         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
475                 + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/1.0.0?mode=referenced", APP_JSON, apiPort);
476         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
477
478         ToscaServiceTemplate namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
479         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
480         assertEquals(1, namingServiceTemplate.getPolicyTypesAsMap().size());
481         assertEquals(3, namingServiceTemplate.getDataTypesAsMap().size());
482
483         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
484                 + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/latest?mode=referenced", APP_JSON, apiPort);
485         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
486
487         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
488         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
489         assertEquals(1, namingServiceTemplate.getPolicyTypesAsMap().size());
490         assertEquals(3, namingServiceTemplate.getDataTypesAsMap().size());
491
492         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/policies"
493                 + "?mode=referenced", APP_JSON, apiPort);
494         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
495
496         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
497         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
498         assertEquals(1, namingServiceTemplate.getPolicyTypesAsMap().size());
499         assertEquals(3, namingServiceTemplate.getDataTypesAsMap().size());
500
501         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
502                 + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/1.0.0", APP_JSON, apiPort);
503         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
504
505         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
506
507         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
508         assertNull(namingServiceTemplate.getPolicyTypes());
509         assertNull(namingServiceTemplate.getDataTypes());
510
511         rawResponse = readResource("policytypes/onap.policies.Naming/versions/1.0.0/"
512                 + "policies/SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP/versions/latest", APP_JSON, apiPort);
513         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
514
515         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
516         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
517         assertNull(namingServiceTemplate.getPolicyTypes());
518         assertNull(namingServiceTemplate.getDataTypes());
519
520         rawResponse =
521             readResource("policytypes/onap.policies.Naming/versions/1.0.0/policies", APP_JSON,
522                 apiPort);
523         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
524
525         namingServiceTemplate = rawResponse.readEntity(ToscaServiceTemplate.class);
526         assertEquals(1, namingServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().size());
527         assertNull(namingServiceTemplate.getPolicyTypes());
528         assertNull(namingServiceTemplate.getDataTypes());
529     }
530
531     @Test
532     public void testDeletePoliciesJson() throws Exception {
533         testDeletePolicies(APP_JSON);
534     }
535
536     @Test
537     public void testDeletePoliciesYaml() throws Exception {
538         testDeletePolicies(APP_YAML);
539     }
540
541     private void testDeletePolicies(String mediaType) throws Exception {
542         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType, apiPort);
543         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
544         ErrorResponse error = rawResponse.readEntity(ErrorResponse.class);
545         assertEquals("policy onap.restart.tca:1.0.0 not found", error.getErrorMessage());
546     }
547
548     @Test
549     public void testDeletePolicyVersionJson() throws Exception {
550         testDeletePolicyVersion(APP_JSON);
551     }
552
553     @Test
554     public void testDeletePolicyVersionYaml() throws Exception {
555         testDeletePolicyVersion(APP_YAML);
556     }
557
558     private void testDeletePolicyVersion(String mediaType) throws Exception {
559         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
560             Response rawResponse = createResource(POLICYTYPES, resrcName, apiPort);
561             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
562             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
563             assertNotNull(response);
564             assertFalse(response.getPolicyTypes().isEmpty());
565         }
566         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
567             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, apiPort);
568             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
569         }
570         Response rawResponse = deleteResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType, apiPort);
571         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
572
573         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_VERSION1, mediaType, apiPort);
574         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
575         ErrorResponse errorResponse = rawResponse.readEntity(ErrorResponse.class);
576         assertEquals("policies for onap.restart.tca:1.0.0 do not exist", errorResponse.getErrorMessage());
577
578         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE, mediaType, apiPort);
579         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
580         errorResponse = rawResponse.readEntity(ErrorResponse.class);
581         assertEquals("policies for onap.restart.tca:null do not exist", errorResponse.getErrorMessage());
582
583         rawResponse = readResource(POLICYTYPES_TCA_POLICIES_VCPE_LATEST, mediaType, apiPort);
584         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), rawResponse.getStatus());
585         errorResponse = rawResponse.readEntity(ErrorResponse.class);
586         assertEquals("policies for onap.restart.tca:null do not exist", errorResponse.getErrorMessage());
587     }
588
589     @Test
590     public void testGetAllVersionOfPolicyJson() throws Exception {
591         testGetAllVersionOfPolicy(APP_JSON);
592     }
593
594     @Test
595     public void testGetAllVersionOfPolicyYaml() throws Exception {
596         testGetAllVersionOfPolicy(APP_YAML);
597     }
598
599     private void testGetAllVersionOfPolicy(String mediaType) throws Exception {
600         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
601             Response rawResponse = createResource(POLICYTYPES, resrcName, apiPort);
602             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
603             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
604             assertNotNull(response);
605             assertFalse(response.getPolicyTypes().isEmpty());
606         }
607         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
608             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, apiPort);
609             assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
610         }
611         Response rawResponse = readResource(POLICYTYPES_TCA_POLICIES, mediaType, apiPort);
612         assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
613     }
614
615     @Test
616     public void testGetPoliciesJson() throws Exception {
617         getPolicies(APP_JSON);
618     }
619
620     @Test
621     public void testGetPoliciesYaml() throws Exception {
622         getPolicies(APP_YAML);
623     }
624
625     private void getPolicies(String mediaType) throws Exception {
626         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
627             Response rawResponse = createResource(POLICYTYPES, resrcName, apiPort);
628             assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
629             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
630             assertThat(response).isNotNull();
631             assertThat(response.getPolicyTypes()).isNotEmpty();
632         }
633         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
634             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, apiPort);
635             assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
636         }
637         Response rawResponse = readResource(POLICIES, mediaType, apiPort);
638         assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
639         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
640         assertThat(response.getToscaTopologyTemplate().getPolicies()).isNotEmpty();
641     }
642
643     @Test
644     public void testGetSpecificPolicyJson() throws Exception {
645         getSpecificPolicy(APP_JSON);
646     }
647
648     @Test
649     public void testGetSpecificPolicyYaml() throws Exception {
650         getSpecificPolicy(APP_YAML);
651     }
652
653     private void getSpecificPolicy(String mediaType) throws Exception {
654         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
655             Response rawResponse = createResource(POLICYTYPES, resrcName, apiPort);
656             assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
657             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
658             assertThat(response).isNotNull();
659             assertThat(response.getPolicyTypes()).isNotEmpty();
660         }
661         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
662             Response rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, apiPort);
663             assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
664         }
665         Response rawResponse = readResource(POLICIES_VCPE_VERSION1, mediaType, apiPort);
666         assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
667         ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
668         assertThat(response.getToscaTopologyTemplate().getPolicies()).hasSize(1);
669     }
670
671     @Test
672     public void testDeleteSpecificPolicy() throws Exception {
673         Response rawResponse;
674         for (String resrcName : TOSCA_POLICYTYPE_RESOURCE_NAMES) {
675             rawResponse = createResource(POLICYTYPES, resrcName, apiPort);
676             assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
677             ToscaServiceTemplate response = rawResponse.readEntity(ToscaServiceTemplate.class);
678             assertThat(response).isNotNull();
679             assertThat(response.getPolicyTypes()).isNotEmpty();
680         }
681         for (String resrcName : TOSCA_POLICY_RESOURCE_NAMES) {
682             rawResponse = createResource(POLICYTYPES_TCA_POLICIES, resrcName, apiPort);
683             assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
684         }
685
686         rawResponse = readResource(POLICIES_VCPE_VERSION1, APP_JSON, apiPort);
687         assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
688
689         // delete a particular policy
690         rawResponse = deleteResource(POLICIES_VCPE_VERSION1, APP_JSON, apiPort);
691         assertThat(rawResponse.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
692
693         rawResponse = readResource(POLICIES_VCPE_VERSION1, APP_JSON, apiPort);
694         assertThat(rawResponse.getStatus()).isEqualTo(Status.NOT_FOUND.getStatusCode());
695
696         rawResponse = deleteResource(POLICIES_VCPE_VERSION1, APP_JSON, apiPort);
697         assertThat(rawResponse.getStatus()).isEqualTo(Status.NOT_FOUND.getStatusCode());
698
699     }
700
701     private void updateApiStatistics() {
702         mgr.updateTotalApiCallCount();
703         mgr.updateApiCallSuccessCount();
704         mgr.updateApiCallFailureCount();
705         mgr.updateTotalPolicyGetCount();
706         mgr.updateTotalPolicyPostCount();
707         mgr.updateTotalPolicyTypeGetCount();
708         mgr.updateTotalPolicyTypePostCount();
709         mgr.updatePolicyGetSuccessCount();
710         mgr.updatePolicyGetFailureCount();
711         mgr.updatePolicyPostSuccessCount();
712         mgr.updatePolicyPostFailureCount();
713         mgr.updatePolicyTypeGetSuccessCount();
714         mgr.updatePolicyTypeGetFailureCount();
715         mgr.updatePolicyTypePostSuccessCount();
716         mgr.updatePolicyTypePostFailureCount();
717     }
718
719     private void validateStatisticsReport(final StatisticsReport report, final int code) {
720
721         assertEquals(code, report.getCode());
722     }
723
724     private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
725             final String message, final HealthCheckReport report) {
726
727         assertEquals(name, report.getName());
728         assertEquals(url, report.getUrl());
729         assertEquals(healthy, report.isHealthy());
730         assertEquals(code, report.getCode());
731         assertEquals(message, report.getMessage());
732     }
733 }