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