Fix sonar issues on policy-models
[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  * ================================================================================
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         checkFragments(compositeTemplate00, fragmentTemplate00);
84
85         JpaToscaDataType dt0 = new JpaToscaDataType();
86         dt0.setKey(new PfConceptKey("dt0", "0.0.1"));
87         dt0.setDescription("dt0 description");
88         JpaToscaServiceTemplate fragmentTemplate01 = new JpaToscaServiceTemplate();
89         fragmentTemplate01.setDataTypes(new JpaToscaDataTypes());
90         fragmentTemplate01.getDataTypes().getConceptMap().put(dt0.getKey(), dt0);
91
92         JpaToscaServiceTemplate compositeTemplate01 =
93                 ToscaServiceTemplateUtils.addFragment(originalTemplate, fragmentTemplate01);
94         checkFragments(compositeTemplate01, fragmentTemplate01);
95
96         JpaToscaServiceTemplate compositeTemplate02 =
97                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate01);
98         checkFragments(compositeTemplate02, fragmentTemplate01);
99
100         JpaToscaDataType otherDt0 = new JpaToscaDataType();
101         otherDt0.setKey(new PfConceptKey("dt0", "0.0.1"));
102         otherDt0.setDescription("dt0 description");
103         JpaToscaServiceTemplate fragmentTemplate02 = new JpaToscaServiceTemplate();
104         fragmentTemplate02.setDataTypes(new JpaToscaDataTypes());
105         fragmentTemplate02.getDataTypes().getConceptMap().put(otherDt0.getKey(), otherDt0);
106
107         compositeTemplate00 = ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate02);
108         assertEquals(compositeTemplate00,
109                 ToscaServiceTemplateUtils.addFragment(compositeTemplate00, fragmentTemplate02));
110
111         JpaToscaDataType badOtherDt0 = new JpaToscaDataType();
112         badOtherDt0.setKey(new PfConceptKey("dt0", "0.0.1"));
113         badOtherDt0.setDescription("dt0 bad description");
114         JpaToscaServiceTemplate fragmentTemplate03 = new JpaToscaServiceTemplate();
115         fragmentTemplate03.setDataTypes(new JpaToscaDataTypes());
116         fragmentTemplate03.getDataTypes().getConceptMap().put(otherDt0.getKey(), otherDt0);
117         fragmentTemplate03.getDataTypes().getConceptMap().put(badOtherDt0.getKey(), badOtherDt0);
118
119         final JpaToscaServiceTemplate compositeTestTemplate = new JpaToscaServiceTemplate(compositeTemplate00);
120         assertThatThrownBy(() -> {
121             ToscaServiceTemplateUtils.addFragment(compositeTestTemplate, fragmentTemplate03);
122         }).hasMessageContaining("incoming fragment").hasMessageContaining("entity").hasMessageContaining("dt0:0.0.1")
123                         .hasMessageContaining("does not equal existing entity");
124
125         JpaToscaServiceTemplate fragmentTemplate04 = new JpaToscaServiceTemplate();
126         fragmentTemplate04.setDescription("Another service template");
127         assertThatThrownBy(() -> {
128             ToscaServiceTemplateUtils.addFragment(compositeTestTemplate, fragmentTemplate04);
129         }).hasMessageContaining("service template").hasMessageContaining("does not equal existing service template");
130
131         JpaToscaServiceTemplate fragmentTemplate05 = new JpaToscaServiceTemplate();
132         fragmentTemplate05.setTopologyTemplate(new JpaToscaTopologyTemplate());
133         fragmentTemplate05.getTopologyTemplate().setDescription("topology template description");
134         JpaToscaServiceTemplate compositeTemplate03 =
135                 ToscaServiceTemplateUtils.addFragment(compositeTemplate02, fragmentTemplate05);
136         assertEquals(fragmentTemplate05.getTopologyTemplate(), compositeTemplate03.getTopologyTemplate());
137
138         JpaToscaServiceTemplate fragmentTemplate06 = new JpaToscaServiceTemplate();
139         fragmentTemplate06.setTopologyTemplate(new JpaToscaTopologyTemplate());
140         fragmentTemplate06.getTopologyTemplate().setDescription("topology template description");
141         JpaToscaServiceTemplate compositeTemplate04 =
142                 ToscaServiceTemplateUtils.addFragment(compositeTemplate03, fragmentTemplate06);
143         assertEquals(fragmentTemplate06.getTopologyTemplate(), compositeTemplate04.getTopologyTemplate());
144
145         JpaToscaServiceTemplate fragmentTemplate07 = new JpaToscaServiceTemplate();
146         fragmentTemplate07.setTopologyTemplate(new JpaToscaTopologyTemplate());
147         fragmentTemplate07.getTopologyTemplate().setDescription("topology template other description");
148         assertThatThrownBy(() -> {
149             ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate07);
150         }).hasMessageContaining("incoming fragment").hasMessageContaining("topology template")
151                         .hasMessageContaining("does not equal existing topology template");
152
153         JpaToscaDataType dt1 = new JpaToscaDataType();
154         dt1.setKey(new PfConceptKey("dt1", "0.0.1"));
155         dt1.setDescription("dt1 description");
156
157         JpaToscaPolicyType pt0 = new JpaToscaPolicyType();
158         pt0.setKey(new PfConceptKey("pt0", "0.0.1"));
159         pt0.setDescription("pt0 description");
160
161         JpaToscaPolicy p0 = new JpaToscaPolicy();
162         p0.setKey(new PfConceptKey("p0", "0.0.1"));
163         p0.setDescription("pt0 description");
164
165         JpaToscaServiceTemplate fragmentTemplate08 = new JpaToscaServiceTemplate();
166
167         fragmentTemplate08.setDataTypes(new JpaToscaDataTypes());
168         fragmentTemplate08.getDataTypes().getConceptMap().put(dt1.getKey(), dt1);
169
170         fragmentTemplate08.setPolicyTypes(new JpaToscaPolicyTypes());
171         fragmentTemplate08.getPolicyTypes().getConceptMap().put(pt0.getKey(), pt0);
172
173         fragmentTemplate08.setTopologyTemplate(new JpaToscaTopologyTemplate());
174         fragmentTemplate08.getTopologyTemplate().setDescription("topology template description");
175
176         fragmentTemplate08.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
177         fragmentTemplate08.getTopologyTemplate().getPolicies().getConceptMap().put(p0.getKey(), p0);
178
179         assertThatThrownBy(() -> {
180             ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate08);
181         }).hasMessageContaining("type").hasMessageContaining(Validated.IS_A_NULL_KEY);
182
183         p0.setType(pt0.getKey());
184
185         JpaToscaServiceTemplate compositeTemplate05 =
186                 ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate08);
187         Iterator<JpaToscaDataType> dtIterator = compositeTemplate05.getDataTypes().getAll(null).iterator();
188         assertEquals(dt0, dtIterator.next());
189         assertEquals(dt1, dtIterator.next());
190         assertEquals(pt0, compositeTemplate05.getPolicyTypes().getAll(null).iterator().next());
191         assertEquals(p0, compositeTemplate05.getTopologyTemplate().getPolicies().getAll(null).iterator().next());
192
193         JpaToscaServiceTemplate fragmentTemplate09 = new JpaToscaServiceTemplate();
194
195         fragmentTemplate09.setDataTypes(new JpaToscaDataTypes());
196         fragmentTemplate09.getDataTypes().getConceptMap().put(dt1.getKey(), dt1);
197
198         fragmentTemplate09.setPolicyTypes(new JpaToscaPolicyTypes());
199         fragmentTemplate09.getPolicyTypes().getConceptMap().put(pt0.getKey(), pt0);
200
201         fragmentTemplate09.setTopologyTemplate(null);
202
203         JpaToscaServiceTemplate compositeTemplate06 =
204                 ToscaServiceTemplateUtils.addFragment(compositeTemplate05, fragmentTemplate09);
205         assertEquals(compositeTemplate05.getTopologyTemplate(), compositeTemplate06.getTopologyTemplate());
206     }
207
208     private void checkFragments(JpaToscaServiceTemplate compositeTemplate, JpaToscaServiceTemplate fragmentTemplate) {
209         assertEquals(compositeTemplate,
210                 ToscaServiceTemplateUtils.addFragment(compositeTemplate, fragmentTemplate));
211         assertEquals(compositeTemplate,
212                 ToscaServiceTemplateUtils.addFragment(compositeTemplate, new JpaToscaServiceTemplate()));
213         assertEquals(compositeTemplate,
214                 ToscaServiceTemplateUtils.addFragment(new JpaToscaServiceTemplate(), compositeTemplate));
215     }
216 }