0f18e8e0002680bb2838a3e7357f7d355293156e
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2025 OpenInfra Foundation Europe. All rights reserved.
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.clamp.models.acm.document.concepts;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25
26 import java.util.List;
27 import java.util.Map;
28 import org.junit.jupiter.api.Test;
29 import org.onap.policy.clamp.models.acm.document.base.DocConceptKey;
30 import org.onap.policy.models.base.PfKey;
31 import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType;
32 import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint;
33 import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType;
34 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
35 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
36 import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
37 import org.onap.policy.models.tosca.authorative.concepts.ToscaRelationshipType;
38 import org.onap.policy.models.tosca.authorative.concepts.ToscaRequirement;
39 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
40 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
41
42 class DocToscaServiceTemplateTest {
43
44     private static final String NAME = "name";
45     private static final String NAME_VERSION = "name:0.0.0";
46
47     @Test
48     void test() {
49         var serviceTemplate = new ToscaServiceTemplate();
50         serviceTemplate.setName(PfKey.NULL_KEY_NAME);
51         serviceTemplate.setVersion(PfKey.NULL_KEY_VERSION);
52         var doc = new DocToscaServiceTemplate(serviceTemplate);
53         assertThat(doc.toAuthorative()).isNotNull();
54         assertThat(doc).isNotEqualByComparingTo(null)
55                 .isEqualByComparingTo(doc);
56
57         var doc2 = new DocToscaServiceTemplate(doc);
58         assertThat(doc2.toAuthorative()).isNotNull();
59         assertThat(doc).isEqualByComparingTo(doc2);
60
61         serviceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
62         doc = new DocToscaServiceTemplate(serviceTemplate);
63         assertThat(doc).isNotEqualByComparingTo(doc2);
64         doc2.setToscaTopologyTemplate(doc.getToscaTopologyTemplate());
65         assertThat(doc).isEqualByComparingTo(doc2);
66
67         serviceTemplate.setDataTypes(Map.of(NAME, new ToscaDataType()));
68         doc = new DocToscaServiceTemplate(serviceTemplate);
69         assertThat(doc).isNotEqualByComparingTo(doc2);
70         doc2.setDataTypes(doc.getDataTypes());
71         assertThat(doc).isEqualByComparingTo(doc2);
72
73         serviceTemplate.setCapabilityTypes(Map.of(NAME, new ToscaCapabilityType()));
74         doc = new DocToscaServiceTemplate(serviceTemplate);
75         assertThat(doc).isNotEqualByComparingTo(doc2);
76         doc2.setCapabilityTypes(doc.getCapabilityTypes());
77         assertThat(doc).isEqualByComparingTo(doc2);
78
79         serviceTemplate.setRelationshipTypes(Map.of(NAME, new ToscaRelationshipType()));
80         doc = new DocToscaServiceTemplate(serviceTemplate);
81         assertThat(doc).isNotEqualByComparingTo(doc2);
82         doc2.setRelationshipTypes(doc.getRelationshipTypes());
83         assertThat(doc).isEqualByComparingTo(doc2);
84
85         serviceTemplate.setNodeTypes(Map.of(NAME, new ToscaNodeType()));
86         doc = new DocToscaServiceTemplate(serviceTemplate);
87         assertThat(doc).isNotEqualByComparingTo(doc2);
88         doc2.setNodeTypes(doc.getNodeTypes());
89         assertThat(doc).isEqualByComparingTo(doc2);
90
91         serviceTemplate.setPolicyTypes(Map.of(NAME, new ToscaPolicyType()));
92         doc = new DocToscaServiceTemplate(serviceTemplate);
93         assertThat(doc).isNotEqualByComparingTo(doc2);
94         doc2.setPolicyTypes(doc.getPolicyTypes());
95         assertThat(doc).isEqualByComparingTo(doc2);
96         assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
97         assertThat(doc.validate("serviceTemplate")).isNotNull();
98
99         serviceTemplate.setName(NAME);
100         serviceTemplate.setVersion("1.1.1");
101         doc.fromAuthorative(serviceTemplate);
102         assertThat(doc.toAuthorative()).isNotNull();
103     }
104
105     @Test
106     void testToscaDataType() {
107         var serviceTemplate = new ToscaServiceTemplate();
108         var dataType = new ToscaDataType();
109         serviceTemplate.setDataTypes(Map.of(NAME, dataType));
110         var toscaConstraint = new ToscaConstraint();
111         toscaConstraint.setRangeValues(List.of("value"));
112         toscaConstraint.setValidValues(List.of("value"));
113         var doc = new DocToscaServiceTemplate(serviceTemplate);
114         var doc2 = new DocToscaServiceTemplate(doc);
115
116         dataType.setConstraints(List.of(toscaConstraint));
117         doc = new DocToscaServiceTemplate(serviceTemplate);
118         assertThat(doc).isNotEqualByComparingTo(doc2);
119         doc2.setDataTypes(Map.of(NAME_VERSION, doc.getDataTypes().get(NAME_VERSION)));
120         assertThat(doc).isEqualByComparingTo(doc2);
121         assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
122
123         var property = new ToscaProperty();
124         property.setType("type");
125         dataType.setProperties(Map.of(NAME, property));
126         doc = new DocToscaServiceTemplate(serviceTemplate);
127         assertThat(doc).isNotEqualByComparingTo(doc2);
128     }
129
130     @Test
131     void testDocToscaEntity() {
132         var serviceTemplate = new ToscaServiceTemplate();
133         var doc = new DocToscaServiceTemplate(serviceTemplate);
134         assertThat(doc.getType()).isNull();
135         assertThat(doc.getTypeVersion()).isNull();
136         assertThat(doc.getDefinedName()).isEqualTo("tosca");
137         assertThat(doc.getDefinedVersion()).isEqualTo("1.0.0");
138
139         serviceTemplate.setDerivedFrom(NAME);
140         var doc2 = new DocToscaServiceTemplate(doc);
141         doc = new DocToscaServiceTemplate(serviceTemplate);
142         assertThat(doc).isNotEqualByComparingTo(doc2);
143         doc2.setDerivedFrom(doc.getDerivedFrom());
144         assertThat(doc).isEqualByComparingTo(doc2);
145
146         serviceTemplate.setDescription("Description");
147         doc = new DocToscaServiceTemplate(serviceTemplate);
148         assertThat(doc).isNotEqualByComparingTo(doc2);
149         doc2.setDescription(doc.getDescription());
150         assertThat(doc).isEqualByComparingTo(doc2);
151
152         serviceTemplate.setMetadata(Map.of("key", "value"));
153         doc = new DocToscaServiceTemplate(serviceTemplate);
154         assertThat(doc).isNotEqualByComparingTo(doc2);
155         doc2.setMetadata(doc.getMetadata());
156         assertThat(doc).isEqualByComparingTo(doc2);
157
158         var d = new DocToscaEntity<ToscaServiceTemplate>();
159         var result = doc.compareTo(d);
160         assertThat(result).isNotZero();
161     }
162
163     @Test
164     void testDocToscaNodeType() {
165         var serviceTemplate = new ToscaServiceTemplate();
166         var nodeType = new ToscaNodeType();
167         serviceTemplate.setNodeTypes(Map.of(NAME, nodeType));
168         var doc = new DocToscaServiceTemplate(serviceTemplate);
169         var doc2 = new DocToscaServiceTemplate(doc);
170         var docNodeType = doc.getNodeTypes().get(NAME_VERSION);
171         doc2.setNodeTypes(Map.of(NAME_VERSION, docNodeType));
172         assertThat(doc).isEqualByComparingTo(doc2);
173
174         var requirement = new ToscaRequirement();
175         requirement.setType(NAME);
176         requirement.setTypeVersion("1.0.0");
177         nodeType.setRequirements(List.of(Map.of(NAME, requirement)));
178         doc = new DocToscaServiceTemplate(serviceTemplate);
179         assertThat(doc).isNotEqualByComparingTo(doc2);
180         docNodeType = doc.getNodeTypes().get(NAME_VERSION);
181         doc2.getNodeTypes().get(NAME_VERSION).setRequirements(docNodeType.getRequirements());
182         assertThat(doc).isEqualByComparingTo(doc2);
183
184         var docRequirement = docNodeType.getRequirements().get(0).get(NAME_VERSION);
185         assertThat(docRequirement)
186                 .isNotEqualByComparingTo(null)
187                 .isEqualByComparingTo(docRequirement);
188
189         assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
190         doc2 = new DocToscaServiceTemplate(doc);
191         assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
192     }
193
194     @Test
195     void testDocToscaProperty() {
196         var serviceTemplate = new ToscaServiceTemplate();
197         var property = new ToscaProperty();
198         property.setType("type");
199         var nodeType = new ToscaNodeType();
200         nodeType.setProperties(Map.of(NAME, property));
201         serviceTemplate.setNodeTypes(Map.of(NAME, nodeType));
202         var doc = new DocToscaServiceTemplate(serviceTemplate);
203         var doc2 = new DocToscaServiceTemplate(doc);
204
205         property.setDescription("Description");
206         doc = new DocToscaServiceTemplate(serviceTemplate);
207         assertThat(doc).isNotEqualByComparingTo(doc2);
208         var docNodeType = doc2.getNodeTypes().get(NAME_VERSION);
209         var docProperty = docNodeType.getProperties().get(NAME);
210         docProperty.setDescription(property.getDescription());
211         assertThat(doc).isEqualByComparingTo(doc2);
212
213         property.setRequired(true);
214         doc = new DocToscaServiceTemplate(serviceTemplate);
215         assertThat(doc).isNotEqualByComparingTo(doc2);
216         docProperty.setRequired(property.isRequired());
217         assertThat(doc).isEqualByComparingTo(doc2);
218
219         property.setDefaultValue("Default");
220         doc = new DocToscaServiceTemplate(serviceTemplate);
221         assertThat(doc).isNotEqualByComparingTo(doc2);
222         docProperty.setDefaultValue(property.getDefaultValue());
223         assertThat(doc).isEqualByComparingTo(doc2);
224
225         property.setStatus(ToscaProperty.Status.SUPPORTED);
226         doc = new DocToscaServiceTemplate(serviceTemplate);
227         assertThat(doc).isNotEqualByComparingTo(doc2);
228         docProperty.setStatus(property.getStatus());
229         assertThat(doc).isEqualByComparingTo(doc2);
230     }
231
232     @Test
233     void testNullPointer() {
234         var docCapabilityType = new DocToscaCapabilityType();
235         assertThatThrownBy(() -> docCapabilityType.validate(null)).   isInstanceOf(NullPointerException.class);
236
237         var docConceptKey = new DocConceptKey();
238         assertThatThrownBy(() -> docConceptKey.setName(null)).   isInstanceOf(NullPointerException.class);
239         assertThatThrownBy(() -> docConceptKey.setVersion(null)).   isInstanceOf(NullPointerException.class);
240     }
241 }