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