07675b79570ffc99f712a18f3ab41def3f81bda8
[policy/api.git] / main / src / test / java / org / onap / policy / api / main / rest / provider / TestPolicyTypeProvider.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP Policy API
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2019 Nordix Foundation.
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.provider;
25
26 import static org.assertj.core.api.Assertions.assertThatCode;
27 import static org.assertj.core.api.Assertions.assertThatThrownBy;
28 import static org.junit.Assert.assertFalse;
29
30 import java.util.Base64;
31 import org.junit.AfterClass;
32 import org.junit.BeforeClass;
33 import org.junit.Test;
34 import org.onap.policy.api.main.ApiTestSupportUtilities;
35 import org.onap.policy.api.main.parameters.ApiParameterGroup;
36 import org.onap.policy.common.parameters.ParameterService;
37 import org.onap.policy.common.utils.coder.StandardCoder;
38 import org.onap.policy.common.utils.resources.ResourceUtils;
39 import org.onap.policy.models.base.PfModelException;
40 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
42
43 /**
44  * This class performs unit test of {@link PolicyTypeProvider}.
45  *
46  * @author Chenfei Gao (cgao@research.att.com)
47  */
48 public class TestPolicyTypeProvider {
49
50     private static PolicyTypeProvider policyTypeProvider;
51     private static PolicyProvider policyProvider;
52     private static PolicyModelsProviderParameters providerParams;
53     private static ApiParameterGroup apiParamGroup;
54     private static StandardCoder standardCoder;
55
56     private static final String POLICY_RESOURCE = "policies/vCPE.policy.monitoring.input.tosca.yaml";
57     private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml";
58
59     /**
60      * Initializes parameters.
61      *
62      * @throws PfModelException the PfModel parsing exception
63      */
64     @BeforeClass
65     public static void setupParameters() throws PfModelException {
66
67         standardCoder = new StandardCoder();
68         providerParams = new PolicyModelsProviderParameters();
69         providerParams.setDatabaseDriver("org.h2.Driver");
70         providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
71         providerParams.setDatabaseUser("policy");
72         providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
73         providerParams.setPersistenceUnit("ToscaConceptTest");
74         apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams);
75         ParameterService.register(apiParamGroup, true);
76         policyTypeProvider = new PolicyTypeProvider();
77         policyProvider = new PolicyProvider();
78     }
79
80     /**
81      * Closes up DB connections and deregisters API parameter group.
82      *
83      * @throws PfModelException the PfModel parsing exception
84      */
85     @AfterClass
86     public static void tearDown() throws PfModelException {
87
88         policyTypeProvider.close();
89         policyProvider.close();
90         ParameterService.deregister(apiParamGroup);
91     }
92
93     @Test
94     public void testFetchPolicyTypes() {
95
96         assertThatCode(() -> {
97             ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchPolicyTypes(null, null);
98             assertFalse(serviceTemplate.getPolicyTypes().isEmpty());
99         }).doesNotThrowAnyException();
100
101         assertThatThrownBy(() -> {
102             policyTypeProvider.fetchPolicyTypes("dummy", null);
103         }).hasMessage("policy type with ID dummy:null does not exist");
104
105         assertThatThrownBy(() -> {
106             policyTypeProvider.fetchPolicyTypes("dummy", "dummy");
107         }).hasMessage("policy type with ID dummy:dummy does not exist");
108     }
109
110     @Test
111     public void testFetchLatestPolicyTypes() {
112
113         assertThatThrownBy(() -> {
114             policyTypeProvider.fetchLatestPolicyTypes("dummy");
115         }).hasMessage("policy type with ID dummy:null does not exist");
116     }
117
118     @Test
119     public void testCreatePolicyType() {
120
121         assertThatCode(() -> {
122             String policyTypeString =
123                     ApiTestSupportUtilities.yaml2Json(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE));
124             ToscaServiceTemplate policyTypeServiceTemplate =
125                     standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
126             ToscaServiceTemplate serviceTemplate = policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
127             assertFalse(serviceTemplate.getPolicyTypes().isEmpty());
128         }).doesNotThrowAnyException();
129     }
130
131     @Test
132     public void testDeletePolicyType() {
133
134         assertThatCode(() -> {
135             String policyTypeString =
136                     ApiTestSupportUtilities.yaml2Json(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE));
137             ToscaServiceTemplate policyTypeServiceTemplate =
138                     standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
139             ToscaServiceTemplate serviceTemplate = policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
140             assertFalse(serviceTemplate.getPolicyTypes().isEmpty());
141         }).doesNotThrowAnyException();
142
143         assertThatCode(() -> {
144             String policyString = ApiTestSupportUtilities.yaml2Json(ResourceUtils.getResourceAsString(POLICY_RESOURCE));
145             ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
146             policyProvider.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
147         }).doesNotThrowAnyException();
148
149         String exceptionMessage = "policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 "
150                 + "cannot be deleted as it is parameterized by policies onap.restart.tca:1.0.0";
151         assertThatThrownBy(() -> {
152             policyTypeProvider.deletePolicyType("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0");
153         }).hasMessage(exceptionMessage);
154
155         assertThatCode(() -> {
156             ToscaServiceTemplate serviceTemplate = policyProvider
157                     .deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca", "1.0.0");
158             assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
159         }).doesNotThrowAnyException();
160
161         assertThatCode(() -> {
162             ToscaServiceTemplate serviceTemplate =
163                     policyTypeProvider.deletePolicyType("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0");
164             assertFalse(serviceTemplate.getPolicyTypes().isEmpty());
165         }).doesNotThrowAnyException();
166
167         assertThatThrownBy(() -> {
168             policyTypeProvider.deletePolicyType("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0");
169         }).hasMessage("policy type with ID onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 does not exist");
170     }
171 }