2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.model.jsonjanusgraph.operations;
23 import static org.assertj.core.api.Assertions.assertThat;
25 import java.util.Arrays;
26 import java.util.HashMap;
27 import java.util.List;
29 import javax.annotation.Resource;
30 import org.junit.jupiter.api.AfterEach;
31 import org.junit.jupiter.api.BeforeAll;
32 import org.junit.jupiter.api.BeforeEach;
33 import org.junit.jupiter.api.Test;
34 import org.openecomp.sdc.be.dao.config.JanusGraphSpringConfig;
35 import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphDao;
36 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
37 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
38 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
39 import org.openecomp.sdc.be.datatypes.elements.MapCapabilityProperty;
40 import org.openecomp.sdc.be.datatypes.elements.MapPropertiesDataDefinition;
41 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
42 import org.openecomp.sdc.be.model.Component;
43 import org.openecomp.sdc.be.model.ComponentParametersView;
44 import org.openecomp.sdc.be.model.ModelTestBase;
45 import org.openecomp.sdc.be.model.PropertyDefinition;
46 import org.openecomp.sdc.be.model.config.ModelOperationsSpringConfig;
47 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.TopologyTemplate;
48 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
49 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
51 @SpringJUnitConfig(classes = {JanusGraphSpringConfig.class, ModelOperationsSpringConfig.class})
52 public class TopologyTemplateOperationCapabilityIntegrationTest extends ModelTestBase {
54 private static final String CONTAINER_ID = "id";
55 private Map<String, MapCapabilityProperty> capabilitiesPropsMap;
56 private List<CapabilityPropertyDataObject> capabilitiesProperties;
59 private TopologyTemplateOperation topologyTemplateOperation;
62 private HealingJanusGraphDao janusGraphDao;
63 private CapabilityPropertyDataObject capabilityProperty1;
64 private CapabilityPropertyDataObject capabilityProperty2;
65 private CapabilityPropertyDataObject capabilityProperty3;
68 public static void setupBeforeClass() {
74 public void setUp() throws Exception {
76 capabilitiesPropsMap = new HashMap<>();
77 capabilityProperty1 = new CapabilityPropertyDataObject("instance1", "capability1", "prop1", "val1");
78 capabilityProperty2 = new CapabilityPropertyDataObject("instance1", "capability2", "prop2", "val2");
79 capabilityProperty3 = new CapabilityPropertyDataObject("instance2", "capability3", "prop3", "val3");
80 capabilitiesProperties = Arrays.asList(capabilityProperty1, capabilityProperty2, capabilityProperty3);
82 //capablities props == Map<instance id, Map<capability id, Map<prop id, property>>>
83 capabilitiesProperties.forEach(capabilitiesProperty -> {
84 capabilitiesPropsMap.computeIfAbsent(capabilitiesProperty.getInstanceId(), k -> new MapCapabilityProperty(new HashMap<>()))
85 .getMapToscaDataDefinition()
86 .computeIfAbsent(capabilitiesProperty.getCapabilityId(), k -> new MapPropertiesDataDefinition(new HashMap<>()))
87 .getMapToscaDataDefinition().computeIfAbsent(capabilitiesProperty.getPropName(),
88 k -> new PropertyDefinition(createPropWithValue(capabilitiesProperty.getPropValue())));
91 GraphVertex resource = new GraphVertex(VertexTypeEnum.TOPOLOGY_TEMPLATE);
92 resource.addMetadataProperty(GraphPropertyEnum.UNIQUE_ID, CONTAINER_ID);
93 janusGraphDao.createVertex(resource);
94 GraphVertex loadedResource = janusGraphDao.getVertexById(CONTAINER_ID).left().value();
95 topologyTemplateOperation.associateElementToData(loadedResource, VertexTypeEnum.CALCULATED_CAP_PROPERTIES,
96 EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, capabilitiesPropsMap).left().value();
100 public void tearDown() {
101 janusGraphDao.rollback();
105 public void overrideCalculatedCapabilityProperties() {
106 Map<String, MapCapabilityProperty> loadedCapPropsMap = fetchCapabilitiesProps(CONTAINER_ID);
107 compareCapabilitiesProperties(capabilitiesProperties, loadedCapPropsMap);
108 capabilityProperty1.setPropValue("newVal1");
109 capabilityProperty3.setPropValue("newVal3");
110 setPropertyValue(capabilitiesPropsMap, capabilityProperty1);
111 setPropertyValue(capabilitiesPropsMap, capabilityProperty3);
112 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID,
113 EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, capabilitiesPropsMap);
114 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.OK);
115 Map<String, MapCapabilityProperty> updatedCapPropsMap = fetchCapabilitiesProps(CONTAINER_ID);
116 compareCapabilitiesProperties(capabilitiesProperties, updatedCapPropsMap);
120 public void updateToscaDataDeepElementsBlockToToscaElement() {
121 assertCapabilityPropValue(capabilityProperty1, "val1");
122 assertCapabilityPropValue(capabilityProperty2, "val2");
123 assertCapabilityPropValue(capabilityProperty3, "val3");
125 MapCapabilityProperty instance1Props = capabilitiesPropsMap.get("instance1");
126 capabilityProperty1.setPropValue("newVal1");
127 setPropertyValue(capabilitiesPropsMap, capabilityProperty1);
129 capabilityProperty3.setPropValue("newVal3");
130 setPropertyValue(capabilitiesPropsMap, capabilityProperty3);
132 Component component = new org.openecomp.sdc.be.model.Resource();
133 component.setUniqueId(CONTAINER_ID);
134 StorageOperationStatus updateStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID,
135 EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, instance1Props, "instance1");
137 assertThat(updateStatus).isEqualTo(StorageOperationStatus.OK);
138 assertCapabilityPropValue(capabilityProperty1, "newVal1");
139 assertCapabilityPropValue(capabilityProperty2, "val2");
140 assertCapabilityPropValue(capabilityProperty3, "val3");//only instance1 props should be updated
143 private Map<String, MapCapabilityProperty> fetchCapabilitiesProps(String containerId) {
144 ComponentParametersView capabilityPropsFilter = new ComponentParametersView(true);
145 capabilityPropsFilter.setIgnoreCapabiltyProperties(false);
146 return ((TopologyTemplate) topologyTemplateOperation.getToscaElement(containerId, capabilityPropsFilter).left()
147 .value()).getCalculatedCapabilitiesProperties();
150 private void compareCapabilitiesProperties(List<CapabilityPropertyDataObject> expected, Map<String, MapCapabilityProperty> actual) {
151 expected.forEach(expectedCapabilityProp -> {
153 getPropertyValue(actual, expectedCapabilityProp.instanceId, expectedCapabilityProp.capabilityId, expectedCapabilityProp.propName))
154 .isEqualTo(expectedCapabilityProp.propValue);
158 private String getPropertyValue(Map<String, MapCapabilityProperty> capabilityPropertyMap, String instance, String capability, String prop) {
159 return capabilityPropertyMap.get(instance).getMapToscaDataDefinition().get(capability).getMapToscaDataDefinition().get(prop).getValue();
162 private void setPropertyValue(Map<String, MapCapabilityProperty> capabilityPropertyMap, CapabilityPropertyDataObject capabilityProperty) {
163 setPropertyValue(capabilityPropertyMap.get(capabilityProperty.getInstanceId()), capabilityProperty);
167 private void setPropertyValue(MapCapabilityProperty capabilitiesInstanceProperties, CapabilityPropertyDataObject capabilityProperty) {
168 capabilitiesInstanceProperties.getMapToscaDataDefinition().get(capabilityProperty.getCapabilityId())
169 .getMapToscaDataDefinition().get(capabilityProperty.getPropName())
170 .setValue(capabilityProperty.getPropValue());
173 private void assertCapabilityPropValue(CapabilityPropertyDataObject prop, String expectedValue) {
174 Map<String, MapCapabilityProperty> loadedCapPropsMap = fetchCapabilitiesProps(CONTAINER_ID);
175 String propertyValue = getPropertyValue(loadedCapPropsMap, prop.getInstanceId(), prop.getCapabilityId(), prop.getPropName());
176 assertThat(propertyValue).isEqualTo(expectedValue);
180 private PropertyDefinition createPropWithValue(String val) {
181 PropertyDefinition propertyDefinition = new PropertyDefinition();
182 propertyDefinition.setValue(val);
183 return propertyDefinition;
186 private static class CapabilityPropertyDataObject {
188 private String instanceId;
189 private String capabilityId;
190 private String propName;
191 private String propValue;
193 CapabilityPropertyDataObject(String instanceId, String capabilityId, String propName, String propValue) {
194 this.instanceId = instanceId;
195 this.capabilityId = capabilityId;
196 this.propName = propName;
197 this.propValue = propValue;
200 String getInstanceId() {
204 String getCapabilityId() {
208 String getPropName() {
212 String getPropValue() {
216 void setPropValue(String propValue) {
217 this.propValue = propValue;