6abd5355c9ad67de2ce7119db03827316032a184
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2025-2026 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 import static org.junit.jupiter.api.Assertions.assertEquals;
26
27 import java.util.List;
28 import java.util.Map;
29 import org.junit.jupiter.api.Test;
30 import org.onap.policy.clamp.models.acm.document.base.DocConceptKey;
31 import org.onap.policy.models.base.PfKey;
32 import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType;
33 import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint;
34 import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType;
35 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
36 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
37 import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
38 import org.onap.policy.models.tosca.authorative.concepts.ToscaRelationshipType;
39 import org.onap.policy.models.tosca.authorative.concepts.ToscaRequirement;
40 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
42
43 class DocToscaServiceTemplateTest {
44
45     private static final String NAME = "name";
46     private static final String NAME_VERSION = "name:0.0.0";
47
48     @Test
49     void test() {
50         var serviceTemplate = new ToscaServiceTemplate();
51         serviceTemplate.setName(PfKey.NULL_KEY_NAME);
52         serviceTemplate.setVersion(PfKey.NULL_KEY_VERSION);
53         var doc = new DocToscaServiceTemplate(serviceTemplate);
54         assertThat(doc.toAuthorative()).isNotNull();
55         assertThat(doc).isNotEqualByComparingTo(null)
56                 .isEqualByComparingTo(doc);
57
58         var doc2 = new DocToscaServiceTemplate(doc);
59         assertThat(doc2.toAuthorative()).isNotNull();
60         assertThat(doc).isEqualByComparingTo(doc2);
61
62         serviceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
63         doc = new DocToscaServiceTemplate(serviceTemplate);
64         assertThat(doc).isNotEqualByComparingTo(doc2);
65         doc2.setToscaTopologyTemplate(doc.getToscaTopologyTemplate());
66         assertThat(doc).isEqualByComparingTo(doc2);
67
68         serviceTemplate.setDataTypes(Map.of(NAME, new ToscaDataType()));
69         doc = new DocToscaServiceTemplate(serviceTemplate);
70         assertThat(doc).isNotEqualByComparingTo(doc2);
71         doc2.setDataTypes(doc.getDataTypes());
72         assertThat(doc).isEqualByComparingTo(doc2);
73
74         serviceTemplate.setCapabilityTypes(Map.of(NAME, new ToscaCapabilityType()));
75         doc = new DocToscaServiceTemplate(serviceTemplate);
76         assertThat(doc).isNotEqualByComparingTo(doc2);
77         doc2.setCapabilityTypes(doc.getCapabilityTypes());
78         assertThat(doc).isEqualByComparingTo(doc2);
79
80         serviceTemplate.setRelationshipTypes(Map.of(NAME, new ToscaRelationshipType()));
81         doc = new DocToscaServiceTemplate(serviceTemplate);
82         assertThat(doc).isNotEqualByComparingTo(doc2);
83         doc2.setRelationshipTypes(doc.getRelationshipTypes());
84         assertThat(doc).isEqualByComparingTo(doc2);
85
86         serviceTemplate.setNodeTypes(Map.of(NAME, new ToscaNodeType()));
87         doc = new DocToscaServiceTemplate(serviceTemplate);
88         assertThat(doc).isNotEqualByComparingTo(doc2);
89         doc2.setNodeTypes(doc.getNodeTypes());
90         assertThat(doc).isEqualByComparingTo(doc2);
91
92         serviceTemplate.setPolicyTypes(Map.of(NAME, new ToscaPolicyType()));
93         doc = new DocToscaServiceTemplate(serviceTemplate);
94         assertThat(doc).isNotEqualByComparingTo(doc2);
95         doc2.setPolicyTypes(doc.getPolicyTypes());
96         assertThat(doc).isEqualByComparingTo(doc2);
97         assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
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 docConceptKey = new DocConceptKey();
235         assertThatThrownBy(() -> docConceptKey.setName(null)).   isInstanceOf(NullPointerException.class);
236         assertThatThrownBy(() -> docConceptKey.setVersion(null)).   isInstanceOf(NullPointerException.class);
237         assertEquals("NULL", docConceptKey.getKey().getName());
238         assertThat(docConceptKey.getKeys()).hasSize(1);
239     }
240 }