2 * Copyright © 2016-2019 European Support Limited
3 * Modifications © 2020 AT&T
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 package org.openecomp.sdc.be.datamodel;
21 import static org.assertj.core.api.Assertions.assertThat;
22 import static org.hibernate.validator.internal.util.CollectionHelper.asSet;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.mockito.Mockito.mock;
26 import static org.mockito.Mockito.when;
28 import java.util.Arrays;
29 import java.util.Collections;
30 import java.util.HashMap;
31 import java.util.List;
34 import org.junit.Before;
35 import org.junit.BeforeClass;
36 import org.junit.Test;
37 import org.openecomp.sdc.be.components.impl.GroupTypeBusinessLogic;
38 import org.openecomp.sdc.be.components.impl.PolicyTypeBusinessLogic;
39 import org.openecomp.sdc.be.components.utils.GroupDefinitionBuilder;
40 import org.openecomp.sdc.be.components.utils.InputsBuilder;
41 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
42 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
43 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
44 import org.openecomp.sdc.be.components.utils.ServiceBuilder;
45 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
46 import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
47 import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition;
48 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
49 import org.openecomp.sdc.be.datatypes.elements.PropertyFilterConstraintDataDefinition;
50 import org.openecomp.sdc.be.datatypes.elements.SubstitutionFilterDataDefinition;
51 import org.openecomp.sdc.be.datatypes.elements.SubstitutionFilterPropertyDataDefinition;
52 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
53 import org.openecomp.sdc.be.datatypes.enums.FilterValueType;
54 import org.openecomp.sdc.be.datatypes.enums.PropertyFilterTargetType;
55 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
56 import org.openecomp.sdc.be.model.GroupDefinition;
57 import org.openecomp.sdc.be.model.InputDefinition;
58 import org.openecomp.sdc.be.model.InterfaceDefinition;
59 import org.openecomp.sdc.be.model.OutputDefinition;
60 import org.openecomp.sdc.be.model.PolicyDefinition;
61 import org.openecomp.sdc.be.model.PropertyDefinition;
62 import org.openecomp.sdc.be.model.Resource;
63 import org.openecomp.sdc.be.model.Service;
64 import org.openecomp.sdc.be.ui.model.UIConstraint;
65 import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer;
66 import org.openecomp.sdc.be.ui.model.UiComponentMetadata;
67 import org.openecomp.sdc.be.ui.model.UiServiceDataTransfer;
69 public class UiComponentDataConverterTest {
71 private PolicyDefinition policy1, policy2;
72 private GroupDefinition group1, group2;
73 private InputDefinition input1;
74 private OutputDefinition output;
75 private PropertyDefinition propertyDef;
76 private InterfaceDefinition interfaceDef;
79 private static GroupTypeBusinessLogic groupTypeBusinessLogic;
80 private static PolicyTypeBusinessLogic policyTypeBusinessLogic;
81 private static UiComponentDataConverter uiComponentDataConverter;
83 private static final String PROPERTY_UID = "propertyUid";
84 private static final String NODE_FILTER_UID = "nodeFilterUid";
85 private static final String SUBSTITUTION_FILTER_UID = "substitutionFilterUid";
86 private static final String COMPONENT_UID = "componentUid";
89 public static void initClass() {
90 groupTypeBusinessLogic = mock(GroupTypeBusinessLogic.class);
91 policyTypeBusinessLogic = mock(PolicyTypeBusinessLogic.class);
92 uiComponentDataConverter = new UiComponentDataConverter(groupTypeBusinessLogic, policyTypeBusinessLogic);
96 public void setUp() throws Exception {
97 policy1 = PolicyDefinitionBuilder.create()
103 policy2 = PolicyDefinitionBuilder.create()
108 group1 = GroupDefinitionBuilder.create()
109 .setUniqueId("group1")
113 group2 = GroupDefinitionBuilder.create()
114 .setUniqueId("group2")
119 input1 = InputsBuilder.create()
121 .setPropertyId("inputid")
124 propertyDef = new PropertyDataDefinitionBuilder()
128 .setUniqueId("property1")
135 public void getUiDataTransferFromResourceByParams_groups_allGroups() {
136 Resource resourceWithGroups = buildResourceWithGroups();
137 UiComponentDataTransfer componentDTO1 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("PROPERTIES"));
138 UiComponentDataTransfer componentDTO2 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("properties"));
139 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("groups"));
140 assertThat(componentDTO.getGroups()).isEqualTo(resourceWithGroups.getGroups());
144 public void getUiDataTransferFromResourceByParams_groups_excludedGroups() {
145 Resource resourceWithGroups = buildResourceWithGroups();
146 when(groupTypeBusinessLogic.getExcludedGroupTypes("VFC")).thenReturn(buildExcludedTypesList());
147 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("nonExcludedGroups"));
148 List<GroupDefinition> groups = componentDTO.getGroups();
149 assertThat(groups.size()).isEqualTo(1);
150 assertThat(groups.get(0)).isEqualTo(group2);
154 public void getUiDataTransferFromResourceByParams_policies_noPoliciesForResource() {
155 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(new Resource(), Collections.singletonList("policies"));
156 assertThat(componentDTO.getPolicies()).isEmpty();
160 public void getUiDataTransferFromResourceByParams_All() {
161 Resource resourceWithGroups = buildResourceWithGroups();
162 Resource resourceWithInputs = buildResourceWithInputs();
163 Resource resourceWithOutputs = buildResourceWithOutputs();
165 UiComponentDataTransfer componentDTO1 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("PROPERTIES"));
166 UiComponentDataTransfer componentDTO2 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("properties"));
167 UiComponentDataTransfer componentDTO3 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("interfaces"));
168 UiComponentDataTransfer componentDTO4 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("attributes"));
169 UiComponentDataTransfer componentDTO5 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("metadata"));
170 UiComponentDataTransfer componentDTO6 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("derivedFrom"));
171 UiComponentDataTransfer componentDTO7 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("additionalInformation"));
173 UiComponentDataTransfer componentDTO8 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("inputs"));
174 UiComponentDataTransfer componentDTO81 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithInputs, Collections.singletonList("inputs"));
175 UiComponentDataTransfer componentDTO82 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithOutputs, Collections.singletonList("outputs"));
177 UiComponentDataTransfer componentDTO9 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("users"));
178 UiComponentDataTransfer componentDTO10 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstances"));
179 UiComponentDataTransfer componentDTO11 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstancesProperties"));
180 UiComponentDataTransfer componentDTO12 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("capabilities"));
181 UiComponentDataTransfer componentDTO13 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("requirements"));
182 UiComponentDataTransfer componentDTO14 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("allVersions"));
183 UiComponentDataTransfer componentDTO15 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("artifacts"));
185 UiComponentDataTransfer componentDTO16 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("interfaces"));
186 UiComponentDataTransfer componentDTO17 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstancesAttributes"));
187 UiComponentDataTransfer componentDTO18= uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstancesInputs"));
188 UiComponentDataTransfer componentDTO19 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("toscaArtifacts"));
190 UiComponentDataTransfer componentDTO21= uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstancesRelations"));
191 UiComponentDataTransfer componentDTO20 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("deploymentArtifacts"));
193 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("groups"));
194 assertThat(componentDTO.getGroups()).isEqualTo(resourceWithGroups.getGroups());
198 public void getUiDataTransferFromServiceByParams_policies_noPoliciesForResource() {
199 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("policies"));
200 assertThat(componentDTO.getPolicies()).isEmpty();
204 public void getUiDataTransferFromServiceByParams_SERVICE_API_ARTIFACTS() {
205 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("serviceApiArtifacts"));
206 assertThat(componentDTO.getArtifacts()).isNull();
210 public void getUiDataTransferFromServiceByParams_FORWARDING_PATHS() {
211 UiServiceDataTransfer componentDTO = (UiServiceDataTransfer) uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("forwardingPaths"));
212 assertThat(componentDTO.getForwardingPaths()).isEmpty();
216 public void getUiDataTransferFromServiceByParams_METADATA() {
217 UiServiceDataTransfer componentDTO = (UiServiceDataTransfer) uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("metadata"));
218 assertThat(componentDTO.getMetadata().getNamingPolicy()).isEmpty();
222 public void getUiDataTransferFromServiceByParams_INTERFACES() {
223 UiServiceDataTransfer componentDTO = (UiServiceDataTransfer) uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("interfaces"));
224 assertThat(componentDTO.getInterfaces()).isEmpty();
228 public void getUiDataTransferFromResourceByParams_policies() {
229 Resource resourceWithPolicies = buildResourceWithPolicies();
230 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithPolicies, Collections.singletonList("policies"));
231 List<PolicyDefinition> expectedPolicies = resourceWithPolicies.resolvePoliciesList();
232 assertThat(componentDTO.getPolicies()).containsExactlyInAnyOrder((PolicyDefinition[]) expectedPolicies.toArray(new PolicyDefinition[expectedPolicies.size()]));
236 public void getUiDataTransferFromServiceByParams_policies() {
237 Service resourceWithPolicies = buildServiceWithPolicies();
238 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromServiceByParams(resourceWithPolicies, Collections.singletonList("policies"));
239 List<PolicyDefinition> expectedPolicies = resourceWithPolicies.resolvePoliciesList();
240 assertThat(componentDTO.getPolicies()).containsExactlyInAnyOrder((PolicyDefinition[]) expectedPolicies.toArray(new PolicyDefinition[expectedPolicies.size()]));
244 public void getUiDataTransferFromResourceByParams_policies_excludedPolicies() {
245 Resource resourceWithPolicies = buildResourceWithPolicies();
246 when(policyTypeBusinessLogic.getExcludedPolicyTypes("VFC")).thenReturn(buildExcludedTypesList());
247 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithPolicies, Collections.singletonList("nonExcludedPolicies"));
248 List<PolicyDefinition> policies = componentDTO.getPolicies();
249 assertThat(policies.size()).isEqualTo(1);
250 assertThat(policies.get(0)).isEqualTo(policy2);
254 public void convertToUiComponentMetadataTestResource() {
255 Resource resourceWithPolicies = buildResourceWithPolicies();
256 when(policyTypeBusinessLogic.getExcludedPolicyTypes("VFC")).thenReturn(buildExcludedTypesList());
257 UiComponentMetadata componentMd = uiComponentDataConverter.convertToUiComponentMetadata(resourceWithPolicies);
258 assertThat(componentMd.getComponentType().getValue()).isEqualTo("Resource");
263 public void convertToUiComponentMetadataTestService() {
264 Service resourceWithPolicies = buildServiceWithPolicies();
265 when(policyTypeBusinessLogic.getExcludedPolicyTypes("VFC")).thenReturn(buildExcludedTypesList());
266 UiComponentMetadata componentMd = uiComponentDataConverter.convertToUiComponentMetadata(resourceWithPolicies);
267 assertThat(componentMd.getComponentType().getValue()).isEqualTo("Service");
271 public void getResourceWithoutGroupsAndPolicies_returnsEmptyLists() {
272 Resource resource = new ResourceBuilder().build();
273 UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource, Arrays.asList("nonExcludedPolicies", "nonExcludedGroups"));
274 List<PolicyDefinition> policies = componentDTO.getPolicies();
275 assertThat(policies.size()).isZero();
276 List<GroupDefinition> groups = componentDTO.getGroups();
277 assertThat(groups.size()).isZero();
281 public void testGetDeclaredPolicies() {
282 ComponentInstanceProperty property = new ComponentInstanceProperty();
283 property.setName(PROPERTY_UID);
285 GetPolicyValueDataDefinition getPolicy = new GetPolicyValueDataDefinition();
286 getPolicy.setPolicyId(PROPERTY_UID);
287 getPolicy.setPropertyName(PROPERTY_UID);
288 property.setGetPolicyValues(Collections.singletonList(getPolicy));
290 Map<String, List<ComponentInstanceProperty>> instanceProperties = new HashMap<>();
291 instanceProperties.put(COMPONENT_UID, Collections.singletonList(property));
293 Resource resource = new ResourceBuilder().build();
294 resource.setComponentInstancesProperties(instanceProperties);
296 UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
297 Collections.singletonList("policies"));
299 assertThat(uiComponentDataTransfer.getPolicies()).isNotEmpty();
303 public void testGetNodeFilterEmptyList() {
304 Resource resource = new ResourceBuilder().build();
305 UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
306 Collections.singletonList("nodeFilter"));
308 assertThat(uiComponentDataTransfer.getNodeFilter()).isNull();
312 public void testGetNodeFilter() {
313 CINodeFilterDataDefinition nodeFilter = new CINodeFilterDataDefinition();
314 nodeFilter.setID(NODE_FILTER_UID);
316 Map<String, CINodeFilterDataDefinition> nodeFilterMap = new HashMap<>();
317 nodeFilterMap.put(NODE_FILTER_UID, nodeFilter);
319 Resource resource = new ResourceBuilder().build();
320 resource.setNodeFilterComponents(nodeFilterMap);
322 UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
323 Collections.singletonList("nodeFilter"));
325 assertThat(uiComponentDataTransfer.getNodeFilterforNode()).isNotEmpty();
329 public void testGetSubstitutionFilterEmptyList() {
330 Resource resource = new ResourceBuilder().build();
331 UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
332 Collections.singletonList("substitutionFilter"));
334 assertThat(uiComponentDataTransfer.getSubstitutionFilters()).isNull();
338 public void testGetSubstitutionFilter() {
339 SubstitutionFilterDataDefinition substitutionFilter = new SubstitutionFilterDataDefinition();
340 substitutionFilter.setID(SUBSTITUTION_FILTER_UID);
342 final ListDataDefinition<SubstitutionFilterPropertyDataDefinition> expectedPropertyFilters = new ListDataDefinition<>();
343 var filter1 = new SubstitutionFilterPropertyDataDefinition();
344 filter1.setName("filter1");
345 var propertyFilter1 = new PropertyFilterConstraintDataDefinition();
346 propertyFilter1.setPropertyName("constraint1");
347 propertyFilter1.setOperator(ConstraintType.EQUAL);
348 propertyFilter1.setValueType(FilterValueType.STATIC);
349 propertyFilter1.setTargetType(PropertyFilterTargetType.PROPERTY);
350 propertyFilter1.setValue("testvalue1");
351 filter1.setConstraints(List.of(propertyFilter1));
352 expectedPropertyFilters.add(filter1);
354 var filter2 = new SubstitutionFilterPropertyDataDefinition();
355 filter2.setName("filter2");
356 var propertyFilter2 = new PropertyFilterConstraintDataDefinition();
357 propertyFilter2.setPropertyName("constraint2");
358 propertyFilter2.setOperator(ConstraintType.EQUAL);
359 propertyFilter2.setValueType(FilterValueType.STATIC);
360 propertyFilter2.setTargetType(PropertyFilterTargetType.PROPERTY);
361 propertyFilter2.setValue("testvalue2");
362 filter2.setConstraints(List.of(propertyFilter2));
363 expectedPropertyFilters.add(filter2);
365 substitutionFilter.setProperties(expectedPropertyFilters);
367 Resource resource = new ResourceBuilder().build();
368 resource.setSubstitutionFilter(substitutionFilter);
370 UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
371 Collections.singletonList("substitutionFilter"));
372 assertThat(uiComponentDataTransfer.getSubstitutionFilters()).isNotNull();
374 List<UIConstraint> propertyFilters = uiComponentDataTransfer.getSubstitutionFilters().getProperties();
375 assertFalse(propertyFilters.isEmpty());
376 assertEquals(propertyFilters.size(), substitutionFilter.getProperties().getListToscaDataDefinition().size());
378 verifyPropertyFilters(propertyFilters.get(0), "constraint1", "testvalue1", "static", "equal");
379 verifyPropertyFilters(propertyFilters.get(1), "constraint2", "testvalue2", "static", "equal");
382 private void verifyPropertyFilters(UIConstraint uiConstraint, String propertyName, String value, String sourceType, String operator){
383 assertEquals(propertyName, uiConstraint.getServicePropertyName());
384 assertEquals(value, uiConstraint.getValue());
385 assertEquals(sourceType, uiConstraint.getSourceType());
386 assertEquals(operator, uiConstraint.getConstraintOperator());
389 private Resource buildResourceWithGroups() {
390 return new ResourceBuilder()
396 private Resource buildResourceWithInputs() {
397 return new ResourceBuilder()
402 private Resource buildResourceWithOutputs() {
403 return new ResourceBuilder()
408 private Resource buildResourceWithParameter(final String field) {
409 final ResourceBuilder res = new ResourceBuilder();
412 res.addInput(input1);
415 res.addOutput(output);
418 //res.addProperty(propertyDef);
423 return new ResourceBuilder()
429 private Resource buildResourceWithPolicies() {
430 return new ResourceBuilder()
436 private Service buildServiceWithPolicies() {
437 return new ServiceBuilder()
443 private Set<String> buildExcludedTypesList() {