Add vaidation for entity hierarchies
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / utils / ToscaUtilsTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019-2020 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.tosca.utils;
22
23 import static org.assertj.core.api.Assertions.assertThatCode;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertFalse;
27 import static org.junit.Assert.assertTrue;
28
29 import org.junit.Test;
30 import org.onap.policy.models.base.PfConceptKey;
31 import org.onap.policy.models.base.PfKey;
32 import org.onap.policy.models.base.PfValidationResult;
33 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType;
34 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes;
35 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies;
36 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes;
37 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
38 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
39
40 /**
41  * Import the {@link ToscaUtils} class.
42  *
43  * @author Liam Fallon (liam.fallon@est.tech)
44  */
45 public class ToscaUtilsTest {
46
47     @Test
48     public void testAssertDataTypes() {
49         JpaToscaServiceTemplate jpaToscaServiceTemplate = new JpaToscaServiceTemplate();
50
51         assertFalse(ToscaUtils.doDataTypesExist(jpaToscaServiceTemplate));
52         assertEquals("no data types specified on service template",
53                 ToscaUtils.checkDataTypesExist(jpaToscaServiceTemplate));
54         assertThatThrownBy(() -> {
55             ToscaUtils.assertDataTypesExist(jpaToscaServiceTemplate);
56         }).hasMessage("no data types specified on service template");
57
58         jpaToscaServiceTemplate.setDataTypes(new JpaToscaDataTypes());
59
60         assertFalse(ToscaUtils.doDataTypesExist(jpaToscaServiceTemplate));
61         assertEquals("list of data types specified on service template is empty",
62                 ToscaUtils.checkDataTypesExist(jpaToscaServiceTemplate));
63         assertThatThrownBy(() -> {
64             ToscaUtils.assertDataTypesExist(jpaToscaServiceTemplate);
65         }).hasMessage("list of data types specified on service template is empty");
66
67         jpaToscaServiceTemplate.getDataTypes().getConceptMap().put(new PfConceptKey(), null);
68
69         assertTrue(ToscaUtils.doDataTypesExist(jpaToscaServiceTemplate));
70         assertEquals(null, ToscaUtils.checkDataTypesExist(jpaToscaServiceTemplate));
71         assertThatCode(() -> {
72             ToscaUtils.assertDataTypesExist(jpaToscaServiceTemplate);
73         }).doesNotThrowAnyException();
74
75     }
76
77     @Test
78     public void testAssertPolicyTypes() {
79         JpaToscaServiceTemplate jpaToscaServiceTemplate = new JpaToscaServiceTemplate();
80
81         assertFalse(ToscaUtils.doPolicyTypesExist(jpaToscaServiceTemplate));
82         assertEquals("no policy types specified on service template",
83                 ToscaUtils.checkPolicyTypesExist(jpaToscaServiceTemplate));
84         assertThatThrownBy(() -> {
85             ToscaUtils.assertPolicyTypesExist(jpaToscaServiceTemplate);
86         }).hasMessage("no policy types specified on service template");
87
88         jpaToscaServiceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
89
90         assertFalse(ToscaUtils.doPolicyTypesExist(jpaToscaServiceTemplate));
91         assertEquals("list of policy types specified on service template is empty",
92                 ToscaUtils.checkPolicyTypesExist(jpaToscaServiceTemplate));
93         assertThatThrownBy(() -> {
94             ToscaUtils.assertPolicyTypesExist(jpaToscaServiceTemplate);
95         }).hasMessage("list of policy types specified on service template is empty");
96
97         jpaToscaServiceTemplate.getPolicyTypes().getConceptMap().put(new PfConceptKey(), null);
98
99         assertTrue(ToscaUtils.doPolicyTypesExist(jpaToscaServiceTemplate));
100         assertEquals(null, ToscaUtils.checkPolicyTypesExist(jpaToscaServiceTemplate));
101         assertThatCode(() -> {
102             ToscaUtils.assertPolicyTypesExist(jpaToscaServiceTemplate);
103         }).doesNotThrowAnyException();
104     }
105
106     @Test
107     public void testAssertPolicies() {
108         JpaToscaServiceTemplate jpaToscaServiceTemplate = new JpaToscaServiceTemplate();
109
110         assertFalse(ToscaUtils.doPoliciesExist(jpaToscaServiceTemplate));
111         assertEquals("topology template not specified on service template",
112                 ToscaUtils.checkPoliciesExist(jpaToscaServiceTemplate));
113         assertThatThrownBy(() -> {
114             ToscaUtils.assertPoliciesExist(jpaToscaServiceTemplate);
115         }).hasMessage("topology template not specified on service template");
116
117         jpaToscaServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
118
119         assertFalse(ToscaUtils.doPoliciesExist(jpaToscaServiceTemplate));
120         assertEquals("no policies specified on topology template of service template",
121                 ToscaUtils.checkPoliciesExist(jpaToscaServiceTemplate));
122         assertThatThrownBy(() -> {
123             ToscaUtils.assertPoliciesExist(jpaToscaServiceTemplate);
124         }).hasMessage("no policies specified on topology template of service template");
125
126         jpaToscaServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
127
128         assertFalse(ToscaUtils.doPoliciesExist(jpaToscaServiceTemplate));
129         assertEquals("list of policies specified on topology template of service template is empty",
130                 ToscaUtils.checkPoliciesExist(jpaToscaServiceTemplate));
131         assertThatThrownBy(() -> {
132             ToscaUtils.assertPoliciesExist(jpaToscaServiceTemplate);
133         }).hasMessage("list of policies specified on topology template of service template is empty");
134
135         jpaToscaServiceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(new PfConceptKey(), null);
136
137         assertTrue(ToscaUtils.doPoliciesExist(jpaToscaServiceTemplate));
138         assertEquals(null, ToscaUtils.checkPoliciesExist(jpaToscaServiceTemplate));
139         assertThatCode(() -> {
140             ToscaUtils.assertPoliciesExist(jpaToscaServiceTemplate);
141         }).doesNotThrowAnyException();
142     }
143
144     @Test
145     public void testGetentityTypeAncestors() {
146         assertThatThrownBy(() -> {
147             ToscaUtils.getEntityTypeAncestors(null, null, null);
148         }).hasMessageMatching("entityTypes is marked .*on.*ull but is null");
149
150         assertThatThrownBy(() -> {
151             ToscaUtils.getEntityTypeAncestors(null, null, new PfValidationResult());
152         }).hasMessageMatching("entityTypes is marked .*on.*ull but is null");
153
154         assertThatThrownBy(() -> {
155             ToscaUtils.getEntityTypeAncestors(null, new JpaToscaDataType(), null);
156         }).hasMessageMatching("entityTypes is marked .*on.*ull but is null");
157
158         assertThatThrownBy(() -> {
159             ToscaUtils.getEntityTypeAncestors(null, new JpaToscaDataType(), new PfValidationResult());
160         }).hasMessageMatching("entityTypes is marked .*on.*ull but is null");
161
162         assertThatThrownBy(() -> {
163             ToscaUtils.getEntityTypeAncestors(new JpaToscaDataTypes(), null, null);
164         }).hasMessageMatching("entityType is marked .*on.*ull but is null");
165
166         assertThatThrownBy(() -> {
167             ToscaUtils.getEntityTypeAncestors(new JpaToscaDataTypes(), null, new PfValidationResult());
168         }).hasMessageMatching("entityType is marked .*on.*ull but is null");
169
170         assertThatThrownBy(() -> {
171             ToscaUtils.getEntityTypeAncestors(new JpaToscaDataTypes(), new JpaToscaDataType(), null);
172         }).hasMessageMatching("result is marked .*on.*ull but is null");
173
174         JpaToscaDataTypes dataTypes = new JpaToscaDataTypes();
175         JpaToscaDataType dt0 = new JpaToscaDataType();
176         dt0.setKey(new PfConceptKey("dt0", "0.0.1"));
177         dt0.setDescription("dt0 description");
178         PfValidationResult result = new PfValidationResult();
179
180         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
181
182         dataTypes.getConceptMap().put(dt0.getKey(), dt0);
183         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
184         assertTrue(result.isValid());
185
186         dt0.setDerivedFrom(null);
187         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
188         assertTrue(result.isValid());
189
190         dt0.setDerivedFrom(new PfConceptKey("tosca.datatyps.Root", PfKey.NULL_KEY_VERSION));
191         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
192         assertTrue(result.isValid());
193
194         dt0.setDerivedFrom(new PfConceptKey("some.thing.Else", PfKey.NULL_KEY_VERSION));
195         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
196         assertFalse(result.isValid());
197         assertTrue(result.toString().contains("parent some.thing.Else:0.0.0 of entity not found"));
198
199         result = new PfValidationResult();
200         dt0.setDerivedFrom(new PfConceptKey("tosca.datatyps.Root", PfKey.NULL_KEY_VERSION));
201
202         JpaToscaDataType dt1 = new JpaToscaDataType();
203         dt1.setKey(new PfConceptKey("dt1", "0.0.1"));
204         dt1.setDescription("dt1 description");
205         dataTypes.getConceptMap().put(dt1.getKey(), dt1);
206         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
207         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt1, result).isEmpty());
208         assertTrue(result.isValid());
209
210         dt1.setDerivedFrom(dt0.getKey());
211         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
212         assertFalse(ToscaUtils.getEntityTypeAncestors(dataTypes, dt1, result).isEmpty());
213         assertEquals(1, ToscaUtils.getEntityTypeAncestors(dataTypes, dt1, result).size());
214         assertTrue(result.isValid());
215
216         JpaToscaDataType dt2 = new JpaToscaDataType();
217         dt2.setKey(new PfConceptKey("dt2", "0.0.1"));
218         dt2.setDescription("dt2 description");
219         dataTypes.getConceptMap().put(dt2.getKey(), dt2);
220         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
221         assertFalse(ToscaUtils.getEntityTypeAncestors(dataTypes, dt1, result).isEmpty());
222         assertEquals(1, ToscaUtils.getEntityTypeAncestors(dataTypes, dt1, result).size());
223         assertTrue(result.isValid());
224
225         dt2.setDerivedFrom(dt1.getKey());
226         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
227         assertFalse(ToscaUtils.getEntityTypeAncestors(dataTypes, dt1, result).isEmpty());
228         assertFalse(ToscaUtils.getEntityTypeAncestors(dataTypes, dt2, result).isEmpty());
229         assertEquals(1, ToscaUtils.getEntityTypeAncestors(dataTypes, dt1, result).size());
230         assertEquals(2, ToscaUtils.getEntityTypeAncestors(dataTypes, dt2, result).size());
231         assertTrue(result.isValid());
232
233         dt1.setDerivedFrom(new PfConceptKey("tosca.datatyps.Root", PfKey.NULL_KEY_VERSION));
234         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty());
235         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt1, result).isEmpty());
236         assertFalse(ToscaUtils.getEntityTypeAncestors(dataTypes, dt2, result).isEmpty());
237         assertEquals(0, ToscaUtils.getEntityTypeAncestors(dataTypes, dt1, result).size());
238         assertEquals(1, ToscaUtils.getEntityTypeAncestors(dataTypes, dt2, result).size());
239         assertTrue(result.isValid());
240
241         dataTypes.getConceptMap().remove(dt1.getKey());
242         assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt2, result).isEmpty());
243         assertFalse(result.isValid());
244         assertTrue(result.toString().contains("parent dt1:0.0.1 of entity not found"));
245     }
246 }