ad29a7199fa0a4d3cdfbe72d4cfb8e1f311555c4
[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  *  Modifications Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.models.tosca.utils;
23
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26
27 import java.util.Iterator;
28 import org.junit.Test;
29 import org.onap.policy.models.base.PfConceptKey;
30 import org.onap.policy.models.base.Validated;
31 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType;
32 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes;
33 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies;
34 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy;
35 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType;
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 ToscaServiceTemplateUtilsTest} class.
42  *
43  * @author Liam Fallon (liam.fallon@est.tech)
44  */
45 public class ToscaServiceTemplateUtilsTest {
46     @Test
47     public void testAddFragmentNulls() {
48         assertThatThrownBy(() -> {
49             ToscaServiceTemplateUtils.addFragment(null, null);
50         }).hasMessageMatching("originalTemplate is marked .*on.*ull but is null");
51
52         assertThatThrownBy(() -> {
53             ToscaServiceTemplateUtils.addFragment(null, new JpaToscaServiceTemplate());
54         }).hasMessageMatching("originalTemplate is marked .*on.*ull but is null");
55
56         assertThatThrownBy(() -> {
57             ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), null);
58         }).hasMessageMatching("fragmentTemplate is marked .*on.*ull but is null");
59
60         assertEquals(new JpaToscaServiceTemplate(),
61                 ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), new JpaToscaServiceTemplate()));
62     }
63
64     @Test
65     public void testAddFragment() {
66         JpaToscaServiceTemplate originalTemplate = new JpaToscaServiceTemplate();
67         JpaToscaServiceTemplate fragmentTemplate00 = new JpaToscaServiceTemplate();
68
69         assertEquals(originalTemplate, ToscaServiceTemplateUtils.addFragment(originalTemplate, originalTemplate));
70         assertEquals(originalTemplate, ToscaServiceTemplateUtils.addFragment(originalTemplate, fragmentTemplate00));
71         assertEquals(originalTemplate, ToscaServiceTemplateUtils.addFragment(fragmentTemplate00, originalTemplate));
72         assertEquals(originalTemplate, ToscaServiceTemplateUtils.addFragment(fragmentTemplate00, fragmentTemplate00));
73         assertEquals(fragmentTemplate00, ToscaServiceTemplateUtils.addFragment(originalTemplate, originalTemplate));
74         assertEquals(fragmentTemplate00, ToscaServiceTemplateUtils.addFragment(originalTemplate, fragmentTemplate00));
75         assertEquals(fragmentTemplate00, ToscaServiceTemplateUtils.addFragment(fragmentTemplate00, originalTemplate));
76         assertEquals(fragmentTemplate00, ToscaServiceTemplateUtils.addFragment(fragmentTemplate00, fragmentTemplate00));
77
78         fragmentTemplate00.setDataTypes(new JpaToscaDataTypes());
79         fragmentTemplate00.setPolicyTypes(new JpaToscaPolicyTypes());
80
81         JpaToscaServiceTemplate compositeTemplate00 =
82                 ToscaServiceTemplateUtils.addFragment(originalTemplate, fragmentTemplate00);
83         assertEquals(compositeTemplate00,
84                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate00));
85         assertEquals(compositeTemplate00,
86                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, new JpaToscaServiceTemplate()));
87         assertEquals(compositeTemplate00,
88                 ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), compositeTemplate00));
89
90         JpaToscaDataType dt0 = new JpaToscaDataType();
91         dt0.setKey(new PfConceptKey("dt0", "0.0.1"));
92         dt0.setDescription("dt0 description");
93         JpaToscaServiceTemplate fragmentTemplate01 = new JpaToscaServiceTemplate();
94         fragmentTemplate01.setDataTypes(new JpaToscaDataTypes());
95         fragmentTemplate01.getDataTypes().getConceptMap().put(dt0.getKey(), dt0);
96
97         JpaToscaServiceTemplate compositeTemplate01 =
98                 ToscaServiceTemplateUtils.addFragment(originalTemplate, fragmentTemplate01);
99         assertEquals(compositeTemplate01,
100                 ToscaServiceTemplateUtils.addFragment(compositeTemplate01, fragmentTemplate01));
101         assertEquals(compositeTemplate01,
102                 ToscaServiceTemplateUtils.addFragment(compositeTemplate01, new JpaToscaServiceTemplate()));
103         assertEquals(compositeTemplate01,
104                 ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), compositeTemplate01));
105
106         JpaToscaServiceTemplate compositeTemplate02 =
107                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate01);
108         assertEquals(compositeTemplate02,
109                 ToscaServiceTemplateUtils.addFragment(compositeTemplate02, fragmentTemplate01));
110         assertEquals(compositeTemplate02,
111                 ToscaServiceTemplateUtils.addFragment(compositeTemplate02, new JpaToscaServiceTemplate()));
112         assertEquals(compositeTemplate02,
113                 ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), compositeTemplate02));
114
115         JpaToscaDataType otherDt0 = new JpaToscaDataType();
116         otherDt0.setKey(new PfConceptKey("dt0", "0.0.1"));
117         otherDt0.setDescription("dt0 description");
118         JpaToscaServiceTemplate fragmentTemplate02 = new JpaToscaServiceTemplate();
119         fragmentTemplate02.setDataTypes(new JpaToscaDataTypes());
120         fragmentTemplate02.getDataTypes().getConceptMap().put(otherDt0.getKey(), otherDt0);
121
122         compositeTemplate00 = ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate02);
123         assertEquals(compositeTemplate00,
124                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate02));
125
126         JpaToscaDataType badOtherDt0 = new JpaToscaDataType();
127         badOtherDt0.setKey(new PfConceptKey("dt0", "0.0.1"));
128         badOtherDt0.setDescription("dt0 bad description");
129         JpaToscaServiceTemplate fragmentTemplate03 = new JpaToscaServiceTemplate();
130         fragmentTemplate03.setDataTypes(new JpaToscaDataTypes());
131         fragmentTemplate03.getDataTypes().getConceptMap().put(otherDt0.getKey(), otherDt0);
132         fragmentTemplate03.getDataTypes().getConceptMap().put(badOtherDt0.getKey(), badOtherDt0);
133
134         final JpaToscaServiceTemplate compositeTestTemplate = new JpaToscaServiceTemplate(compositeTemplate00);
135         assertThatThrownBy(() -> {
136             ToscaServiceTemplateUtils.addFragment(compositeTestTemplate, fragmentTemplate03);
137         }).hasMessageContaining("incoming fragment").hasMessageContaining("entity").hasMessageContaining("dt0:0.0.1")
138                         .hasMessageContaining("does not equal existing entity");
139
140         JpaToscaServiceTemplate fragmentTemplate04 = new JpaToscaServiceTemplate();
141         fragmentTemplate04.setDescription("Another service template");
142         assertThatThrownBy(() -> {
143             ToscaServiceTemplateUtils.addFragment(compositeTestTemplate, fragmentTemplate04);
144         }).hasMessageContaining("service template").hasMessageContaining("does not equal existing service template");
145
146         JpaToscaServiceTemplate fragmentTemplate05 = new JpaToscaServiceTemplate();
147         fragmentTemplate05.setTopologyTemplate(new JpaToscaTopologyTemplate());
148         fragmentTemplate05.getTopologyTemplate().setDescription("topology template description");
149         JpaToscaServiceTemplate compositeTemplate03 =
150                 ToscaServiceTemplateUtils.addFragment(compositeTemplate02, fragmentTemplate05);
151         assertEquals(fragmentTemplate05.getTopologyTemplate(), compositeTemplate03.getTopologyTemplate());
152
153         JpaToscaServiceTemplate fragmentTemplate06 = new JpaToscaServiceTemplate();
154         fragmentTemplate06.setTopologyTemplate(new JpaToscaTopologyTemplate());
155         fragmentTemplate06.getTopologyTemplate().setDescription("topology template description");
156         JpaToscaServiceTemplate compositeTemplate04 =
157                 ToscaServiceTemplateUtils.addFragment(compositeTemplate03, fragmentTemplate06);
158         assertEquals(fragmentTemplate06.getTopologyTemplate(), compositeTemplate04.getTopologyTemplate());
159
160         JpaToscaServiceTemplate fragmentTemplate07 = new JpaToscaServiceTemplate();
161         fragmentTemplate07.setTopologyTemplate(new JpaToscaTopologyTemplate());
162         fragmentTemplate07.getTopologyTemplate().setDescription("topology template other description");
163         assertThatThrownBy(() -> {
164             ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate07);
165         }).hasMessageContaining("incoming fragment").hasMessageContaining("topology template")
166                         .hasMessageContaining("does not equal existing topology template");
167
168         JpaToscaDataType dt1 = new JpaToscaDataType();
169         dt1.setKey(new PfConceptKey("dt1", "0.0.1"));
170         dt1.setDescription("dt1 description");
171
172         JpaToscaPolicyType pt0 = new JpaToscaPolicyType();
173         pt0.setKey(new PfConceptKey("pt0", "0.0.1"));
174         pt0.setDescription("pt0 description");
175
176         JpaToscaPolicy p0 = new JpaToscaPolicy();
177         p0.setKey(new PfConceptKey("p0", "0.0.1"));
178         p0.setDescription("pt0 description");
179
180         JpaToscaServiceTemplate fragmentTemplate08 = new JpaToscaServiceTemplate();
181
182         fragmentTemplate08.setDataTypes(new JpaToscaDataTypes());
183         fragmentTemplate08.getDataTypes().getConceptMap().put(dt1.getKey(), dt1);
184
185         fragmentTemplate08.setPolicyTypes(new JpaToscaPolicyTypes());
186         fragmentTemplate08.getPolicyTypes().getConceptMap().put(pt0.getKey(), pt0);
187
188         fragmentTemplate08.setTopologyTemplate(new JpaToscaTopologyTemplate());
189         fragmentTemplate08.getTopologyTemplate().setDescription("topology template description");
190
191         fragmentTemplate08.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
192         fragmentTemplate08.getTopologyTemplate().getPolicies().getConceptMap().put(p0.getKey(), p0);
193
194         assertThatThrownBy(() -> {
195             ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate08);
196         }).hasMessageContaining("type").hasMessageContaining(Validated.IS_A_NULL_KEY);
197
198         p0.setType(pt0.getKey());
199
200         JpaToscaServiceTemplate compositeTemplate05 =
201                 ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate08);
202         Iterator<JpaToscaDataType> dtIterator = compositeTemplate05.getDataTypes().getAll(null).iterator();
203         assertEquals(dt0, dtIterator.next());
204         assertEquals(dt1, dtIterator.next());
205         assertEquals(pt0, compositeTemplate05.getPolicyTypes().getAll(null).iterator().next());
206         assertEquals(p0, compositeTemplate05.getTopologyTemplate().getPolicies().getAll(null).iterator().next());
207
208         JpaToscaServiceTemplate fragmentTemplate09 = new JpaToscaServiceTemplate();
209
210         fragmentTemplate09.setDataTypes(new JpaToscaDataTypes());
211         fragmentTemplate09.getDataTypes().getConceptMap().put(dt1.getKey(), dt1);
212
213         fragmentTemplate09.setPolicyTypes(new JpaToscaPolicyTypes());
214         fragmentTemplate09.getPolicyTypes().getConceptMap().put(pt0.getKey(), pt0);
215
216         fragmentTemplate09.setTopologyTemplate(null);
217
218         JpaToscaServiceTemplate compositeTemplate06 =
219                 ToscaServiceTemplateUtils.addFragment(compositeTemplate05, fragmentTemplate09);
220         assertEquals(compositeTemplate05.getTopologyTemplate(), compositeTemplate06.getTopologyTemplate());
221     }
222 }