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