f9a0143fd22091be203a0429d61fd3ab1911418a
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / utils / ToscaServiceTemplateUtilsTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 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.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
25
26 import java.util.Iterator;
27
28 import org.junit.Test;
29 import org.onap.policy.models.base.PfConceptKey;
30 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType;
31 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes;
32 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies;
33 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy;
34 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType;
35 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes;
36 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
37 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
38
39 /**
40  * Import the {@link ToscaServiceTemplateUtilsTest} class.
41  *
42  * @author Liam Fallon (liam.fallon@est.tech)
43  */
44 public class ToscaServiceTemplateUtilsTest {
45     @Test
46     public void testAddFragmentNulls() {
47         assertThatThrownBy(() -> {
48             ToscaServiceTemplateUtils.addFragment(null, null);
49         }).hasMessageMatching("originalTemplate is marked .*on.*ull but is null");
50
51         assertThatThrownBy(() -> {
52             ToscaServiceTemplateUtils.addFragment(null, new JpaToscaServiceTemplate());
53         }).hasMessageMatching("originalTemplate is marked .*on.*ull but is null");
54
55         assertThatThrownBy(() -> {
56             ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), null);
57         }).hasMessageMatching("fragmentTemplate is marked .*on.*ull but is null");
58
59         assertEquals(new JpaToscaServiceTemplate(),
60                 ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), new JpaToscaServiceTemplate()));
61     }
62
63     @Test
64     public void testAddFragment() {
65         JpaToscaServiceTemplate originalTemplate = new JpaToscaServiceTemplate();
66         JpaToscaServiceTemplate fragmentTemplate00 = new JpaToscaServiceTemplate();
67
68         assertEquals(originalTemplate, ToscaServiceTemplateUtils.addFragment(originalTemplate, originalTemplate));
69         assertEquals(originalTemplate, ToscaServiceTemplateUtils.addFragment(originalTemplate, fragmentTemplate00));
70         assertEquals(originalTemplate, ToscaServiceTemplateUtils.addFragment(fragmentTemplate00, originalTemplate));
71         assertEquals(originalTemplate, ToscaServiceTemplateUtils.addFragment(fragmentTemplate00, fragmentTemplate00));
72         assertEquals(fragmentTemplate00, ToscaServiceTemplateUtils.addFragment(originalTemplate, originalTemplate));
73         assertEquals(fragmentTemplate00, ToscaServiceTemplateUtils.addFragment(originalTemplate, fragmentTemplate00));
74         assertEquals(fragmentTemplate00, ToscaServiceTemplateUtils.addFragment(fragmentTemplate00, originalTemplate));
75         assertEquals(fragmentTemplate00, ToscaServiceTemplateUtils.addFragment(fragmentTemplate00, fragmentTemplate00));
76
77         fragmentTemplate00.setDataTypes(new JpaToscaDataTypes());
78         fragmentTemplate00.setPolicyTypes(new JpaToscaPolicyTypes());
79
80         JpaToscaServiceTemplate compositeTemplate00 =
81                 ToscaServiceTemplateUtils.addFragment(originalTemplate, fragmentTemplate00);
82         assertEquals(compositeTemplate00,
83                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate00));
84         assertEquals(compositeTemplate00,
85                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, new JpaToscaServiceTemplate()));
86         assertEquals(compositeTemplate00,
87                 ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), compositeTemplate00));
88
89         JpaToscaDataType dt0 = new JpaToscaDataType();
90         dt0.setKey(new PfConceptKey("dt0", "0.0.1"));
91         dt0.setDescription("dt0 description");
92         JpaToscaServiceTemplate fragmentTemplate01 = new JpaToscaServiceTemplate();
93         fragmentTemplate01.setDataTypes(new JpaToscaDataTypes());
94         fragmentTemplate01.getDataTypes().getConceptMap().put(dt0.getKey(), dt0);
95
96         JpaToscaServiceTemplate compositeTemplate01 =
97                 ToscaServiceTemplateUtils.addFragment(originalTemplate, fragmentTemplate01);
98         assertEquals(compositeTemplate01,
99                 ToscaServiceTemplateUtils.addFragment(compositeTemplate01, fragmentTemplate01));
100         assertEquals(compositeTemplate01,
101                 ToscaServiceTemplateUtils.addFragment(compositeTemplate01, new JpaToscaServiceTemplate()));
102         assertEquals(compositeTemplate01,
103                 ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), compositeTemplate01));
104
105         JpaToscaServiceTemplate compositeTemplate02 =
106                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate01);
107         assertEquals(compositeTemplate02,
108                 ToscaServiceTemplateUtils.addFragment(compositeTemplate02, fragmentTemplate01));
109         assertEquals(compositeTemplate02,
110                 ToscaServiceTemplateUtils.addFragment(compositeTemplate02, new JpaToscaServiceTemplate()));
111         assertEquals(compositeTemplate02,
112                 ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), compositeTemplate02));
113
114         JpaToscaDataType otherDt0 = new JpaToscaDataType();
115         otherDt0.setKey(new PfConceptKey("dt0", "0.0.1"));
116         otherDt0.setDescription("dt0 description");
117         JpaToscaServiceTemplate fragmentTemplate02 = new JpaToscaServiceTemplate();
118         fragmentTemplate02.setDataTypes(new JpaToscaDataTypes());
119         fragmentTemplate02.getDataTypes().getConceptMap().put(otherDt0.getKey(), otherDt0);
120
121         compositeTemplate00 = ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate02);
122         assertEquals(compositeTemplate00,
123                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate02));
124
125         JpaToscaDataType badOtherDt0 = new JpaToscaDataType();
126         badOtherDt0.setKey(new PfConceptKey("dt0", "0.0.1"));
127         badOtherDt0.setDescription("dt0 bad description");
128         JpaToscaServiceTemplate fragmentTemplate03 = new JpaToscaServiceTemplate();
129         fragmentTemplate03.setDataTypes(new JpaToscaDataTypes());
130         fragmentTemplate03.getDataTypes().getConceptMap().put(otherDt0.getKey(), otherDt0);
131         fragmentTemplate03.getDataTypes().getConceptMap().put(badOtherDt0.getKey(), badOtherDt0);
132
133         final JpaToscaServiceTemplate compositeTestTemplate = new JpaToscaServiceTemplate(compositeTemplate00);
134         assertThatThrownBy(() -> {
135             ToscaServiceTemplateUtils.addFragment(compositeTestTemplate, fragmentTemplate03);
136         }).hasMessageContaining("entity in incoming fragment does not equal existing entity");
137
138         JpaToscaServiceTemplate fragmentTemplate04 = new JpaToscaServiceTemplate();
139         fragmentTemplate04.setDescription("Another service template");
140         assertThatThrownBy(() -> {
141             ToscaServiceTemplateUtils.addFragment(compositeTestTemplate, fragmentTemplate04);
142         }).hasMessageContaining("service template in incoming fragment does not equal existing service template");
143
144         JpaToscaServiceTemplate fragmentTemplate05 = new JpaToscaServiceTemplate();
145         fragmentTemplate05.setTopologyTemplate(new JpaToscaTopologyTemplate());
146         fragmentTemplate05.getTopologyTemplate().setDescription("topology template description");
147         JpaToscaServiceTemplate compositeTemplate03 =
148                 ToscaServiceTemplateUtils.addFragment(compositeTemplate02, fragmentTemplate05);
149         assertEquals(fragmentTemplate05.getTopologyTemplate(), compositeTemplate03.getTopologyTemplate());
150
151         JpaToscaServiceTemplate fragmentTemplate06 = new JpaToscaServiceTemplate();
152         fragmentTemplate06.setTopologyTemplate(new JpaToscaTopologyTemplate());
153         fragmentTemplate06.getTopologyTemplate().setDescription("topology template description");
154         JpaToscaServiceTemplate compositeTemplate04 =
155                 ToscaServiceTemplateUtils.addFragment(compositeTemplate03, fragmentTemplate06);
156         assertEquals(fragmentTemplate06.getTopologyTemplate(), compositeTemplate04.getTopologyTemplate());
157
158         JpaToscaServiceTemplate fragmentTemplate07 = new JpaToscaServiceTemplate();
159         fragmentTemplate07.setTopologyTemplate(new JpaToscaTopologyTemplate());
160         fragmentTemplate07.getTopologyTemplate().setDescription("topology template other description");
161         assertThatThrownBy(() -> {
162             ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate07);
163         }).hasMessageContaining("topology template in incoming fragment does not equal existing topology template");
164
165         JpaToscaDataType dt1 = new JpaToscaDataType();
166         dt1.setKey(new PfConceptKey("dt1", "0.0.1"));
167         dt1.setDescription("dt1 description");
168
169         JpaToscaPolicyType pt0 = new JpaToscaPolicyType();
170         pt0.setKey(new PfConceptKey("pt0", "0.0.1"));
171         pt0.setDescription("pt0 description");
172
173         JpaToscaPolicy p0 = new JpaToscaPolicy();
174         p0.setKey(new PfConceptKey("p0", "0.0.1"));
175         p0.setDescription("pt0 description");
176
177         JpaToscaServiceTemplate fragmentTemplate08 = new JpaToscaServiceTemplate();
178
179         fragmentTemplate08.setDataTypes(new JpaToscaDataTypes());
180         fragmentTemplate08.getDataTypes().getConceptMap().put(dt1.getKey(), dt1);
181
182         fragmentTemplate08.setPolicyTypes(new JpaToscaPolicyTypes());
183         fragmentTemplate08.getPolicyTypes().getConceptMap().put(pt0.getKey(), pt0);
184
185         fragmentTemplate08.setTopologyTemplate(new JpaToscaTopologyTemplate());
186         fragmentTemplate08.getTopologyTemplate().setDescription("topology template description");
187
188         fragmentTemplate08.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
189         fragmentTemplate08.getTopologyTemplate().getPolicies().getConceptMap().put(p0.getKey(), p0);
190
191         assertThatThrownBy(() -> {
192             ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate08);
193         }).hasMessageContaining("JpaToscaPolicy:INVALID:type is null or a null key");
194
195         p0.setType(pt0.getKey());
196
197         JpaToscaServiceTemplate compositeTemplate05 =
198                 ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate08);
199         Iterator<JpaToscaDataType> dtIterator = compositeTemplate05.getDataTypes().getAll(null).iterator();
200         assertEquals(dt0, dtIterator.next());
201         assertEquals(dt1, dtIterator.next());
202         assertEquals(pt0, compositeTemplate05.getPolicyTypes().getAll(null).iterator().next());
203         assertEquals(p0, compositeTemplate05.getTopologyTemplate().getPolicies().getAll(null).iterator().next());
204
205         JpaToscaServiceTemplate fragmentTemplate09 = new JpaToscaServiceTemplate();
206
207         fragmentTemplate09.setDataTypes(new JpaToscaDataTypes());
208         fragmentTemplate09.getDataTypes().getConceptMap().put(dt1.getKey(), dt1);
209
210         fragmentTemplate09.setPolicyTypes(new JpaToscaPolicyTypes());
211         fragmentTemplate09.getPolicyTypes().getConceptMap().put(pt0.getKey(), pt0);
212
213         fragmentTemplate09.setTopologyTemplate(null);
214
215         JpaToscaServiceTemplate compositeTemplate06 =
216                 ToscaServiceTemplateUtils.addFragment(compositeTemplate05, fragmentTemplate09);
217         assertEquals(compositeTemplate05.getTopologyTemplate(), compositeTemplate06.getTopologyTemplate());
218     }
219 }