c234e0a9e280c71ecda2356b691864ad3c172497
[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         assertThat(doc.validate("serviceTemplate")).isNotNull();
99
100         serviceTemplate.setName(NAME);
101         serviceTemplate.setVersion("1.1.1");
102         doc.fromAuthorative(serviceTemplate);
103         assertThat(doc.toAuthorative()).isNotNull();
104     }
105
106     @Test
107     void testToscaDataType() {
108         var serviceTemplate = new ToscaServiceTemplate();
109         var dataType = new ToscaDataType();
110         serviceTemplate.setDataTypes(Map.of(NAME, dataType));
111         var toscaConstraint = new ToscaConstraint();
112         toscaConstraint.setRangeValues(List.of("value"));
113         toscaConstraint.setValidValues(List.of("value"));
114         var doc = new DocToscaServiceTemplate(serviceTemplate);
115         var doc2 = new DocToscaServiceTemplate(doc);
116
117         dataType.setConstraints(List.of(toscaConstraint));
118         doc = new DocToscaServiceTemplate(serviceTemplate);
119         assertThat(doc).isNotEqualByComparingTo(doc2);
120         doc2.setDataTypes(Map.of(NAME_VERSION, doc.getDataTypes().get(NAME_VERSION)));
121         assertThat(doc).isEqualByComparingTo(doc2);
122         assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
123
124         var property = new ToscaProperty();
125         property.setType("type");
126         dataType.setProperties(Map.of(NAME, property));
127         doc = new DocToscaServiceTemplate(serviceTemplate);
128         assertThat(doc).isNotEqualByComparingTo(doc2);
129     }
130
131     @Test
132     void testDocToscaEntity() {
133         var serviceTemplate = new ToscaServiceTemplate();
134         var doc = new DocToscaServiceTemplate(serviceTemplate);
135         assertThat(doc.getType()).isNull();
136         assertThat(doc.getTypeVersion()).isNull();
137         assertThat(doc.getDefinedName()).isEqualTo("tosca");
138         assertThat(doc.getDefinedVersion()).isEqualTo("1.0.0");
139
140         serviceTemplate.setDerivedFrom(NAME);
141         var doc2 = new DocToscaServiceTemplate(doc);
142         doc = new DocToscaServiceTemplate(serviceTemplate);
143         assertThat(doc).isNotEqualByComparingTo(doc2);
144         doc2.setDerivedFrom(doc.getDerivedFrom());
145         assertThat(doc).isEqualByComparingTo(doc2);
146
147         serviceTemplate.setDescription("Description");
148         doc = new DocToscaServiceTemplate(serviceTemplate);
149         assertThat(doc).isNotEqualByComparingTo(doc2);
150         doc2.setDescription(doc.getDescription());
151         assertThat(doc).isEqualByComparingTo(doc2);
152
153         serviceTemplate.setMetadata(Map.of("key", "value"));
154         doc = new DocToscaServiceTemplate(serviceTemplate);
155         assertThat(doc).isNotEqualByComparingTo(doc2);
156         doc2.setMetadata(doc.getMetadata());
157         assertThat(doc).isEqualByComparingTo(doc2);
158
159         var d = new DocToscaEntity<ToscaServiceTemplate>();
160         var result = doc.compareTo(d);
161         assertThat(result).isNotZero();
162     }
163
164     @Test
165     void testDocToscaNodeType() {
166         var serviceTemplate = new ToscaServiceTemplate();
167         var nodeType = new ToscaNodeType();
168         serviceTemplate.setNodeTypes(Map.of(NAME, nodeType));
169         var doc = new DocToscaServiceTemplate(serviceTemplate);
170         var doc2 = new DocToscaServiceTemplate(doc);
171         var docNodeType = doc.getNodeTypes().get(NAME_VERSION);
172         doc2.setNodeTypes(Map.of(NAME_VERSION, docNodeType));
173         assertThat(doc).isEqualByComparingTo(doc2);
174
175         var requirement = new ToscaRequirement();
176         requirement.setType(NAME);
177         requirement.setTypeVersion("1.0.0");
178         nodeType.setRequirements(List.of(Map.of(NAME, requirement)));
179         doc = new DocToscaServiceTemplate(serviceTemplate);
180         assertThat(doc).isNotEqualByComparingTo(doc2);
181         docNodeType = doc.getNodeTypes().get(NAME_VERSION);
182         doc2.getNodeTypes().get(NAME_VERSION).setRequirements(docNodeType.getRequirements());
183         assertThat(doc).isEqualByComparingTo(doc2);
184
185         var docRequirement = docNodeType.getRequirements().get(0).get(NAME_VERSION);
186         assertThat(docRequirement)
187                 .isNotEqualByComparingTo(null)
188                 .isEqualByComparingTo(docRequirement);
189
190         assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
191         doc2 = new DocToscaServiceTemplate(doc);
192         assertThat(doc.toAuthorative()).isEqualTo(doc2.toAuthorative());
193     }
194
195     @Test
196     void testDocToscaProperty() {
197         var serviceTemplate = new ToscaServiceTemplate();
198         var property = new ToscaProperty();
199         property.setType("type");
200         var nodeType = new ToscaNodeType();
201         nodeType.setProperties(Map.of(NAME, property));
202         serviceTemplate.setNodeTypes(Map.of(NAME, nodeType));
203         var doc = new DocToscaServiceTemplate(serviceTemplate);
204         var doc2 = new DocToscaServiceTemplate(doc);
205
206         property.setDescription("Description");
207         doc = new DocToscaServiceTemplate(serviceTemplate);
208         assertThat(doc).isNotEqualByComparingTo(doc2);
209         var docNodeType = doc2.getNodeTypes().get(NAME_VERSION);
210         var docProperty = docNodeType.getProperties().get(NAME);
211         docProperty.setDescription(property.getDescription());
212         assertThat(doc).isEqualByComparingTo(doc2);
213
214         property.setRequired(true);
215         doc = new DocToscaServiceTemplate(serviceTemplate);
216         assertThat(doc).isNotEqualByComparingTo(doc2);
217         docProperty.setRequired(property.isRequired());
218         assertThat(doc).isEqualByComparingTo(doc2);
219
220         property.setDefaultValue("Default");
221         doc = new DocToscaServiceTemplate(serviceTemplate);
222         assertThat(doc).isNotEqualByComparingTo(doc2);
223         docProperty.setDefaultValue(property.getDefaultValue());
224         assertThat(doc).isEqualByComparingTo(doc2);
225
226         property.setStatus(ToscaProperty.Status.SUPPORTED);
227         doc = new DocToscaServiceTemplate(serviceTemplate);
228         assertThat(doc).isNotEqualByComparingTo(doc2);
229         docProperty.setStatus(property.getStatus());
230         assertThat(doc).isEqualByComparingTo(doc2);
231     }
232
233     @Test
234     void testNullPointer() {
235         var docCapabilityType = new DocToscaCapabilityType();
236         assertThatThrownBy(() -> docCapabilityType.validate(null)).   isInstanceOf(NullPointerException.class);
237
238         var docConceptKey = new DocConceptKey();
239         assertThatThrownBy(() -> docConceptKey.setName(null)).   isInstanceOf(NullPointerException.class);
240         assertThatThrownBy(() -> docConceptKey.setVersion(null)).   isInstanceOf(NullPointerException.class);
241         assertEquals("NULL", docConceptKey.getKey().getName());
242         assertThat(docConceptKey.getKeys()).hasSize(1);
243     }
244 }