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 org.junit.After;
24 import org.junit.Before;
25 import org.junit.BeforeClass;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.openecomp.sdc.be.dao.config.JanusGraphSpringConfig;
29 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
30 import org.openecomp.sdc.be.dao.jsongraph.HealingJanusGraphDao;
31 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
32 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
33 import org.openecomp.sdc.be.datatypes.elements.MapCapabilityProperty;
34 import org.openecomp.sdc.be.datatypes.elements.MapPropertiesDataDefinition;
35 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
36 import org.openecomp.sdc.be.model.Component;
37 import org.openecomp.sdc.be.model.ComponentParametersView;
38 import org.openecomp.sdc.be.model.ModelTestBase;
39 import org.openecomp.sdc.be.model.PropertyDefinition;
40 import org.openecomp.sdc.be.model.config.ModelOperationsSpringConfig;
41 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.TopologyTemplate;
42 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
43 import org.springframework.test.context.ContextConfiguration;
44 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
46 import javax.annotation.Resource;
47 import java.util.Arrays;
48 import java.util.HashMap;
49 import java.util.List;
52 import static org.assertj.core.api.Assertions.assertThat;
54 @RunWith(SpringJUnit4ClassRunner.class)
55 @ContextConfiguration(classes = {JanusGraphSpringConfig.class, ModelOperationsSpringConfig.class})
56 public class TopologyTemplateOperationCapabilityIntegrationTest extends ModelTestBase {
58 private static final String CONTAINER_ID = "id";
59 private Map<String, MapCapabilityProperty> capabilitiesPropsMap;
60 private List<CapabilityPropertyDataObject> capabilitiesProperties;
63 private TopologyTemplateOperation topologyTemplateOperation;
66 private HealingJanusGraphDao janusGraphDao;
67 private CapabilityPropertyDataObject capabilityProperty1;
68 private CapabilityPropertyDataObject capabilityProperty2;
69 private CapabilityPropertyDataObject capabilityProperty3;
72 public static void setupBeforeClass() {
78 public void setUp() throws Exception {
80 capabilitiesPropsMap = new HashMap<>();
81 capabilityProperty1 = new CapabilityPropertyDataObject("instance1", "capability1", "prop1", "val1");
82 capabilityProperty2 = new CapabilityPropertyDataObject("instance1", "capability2", "prop2", "val2");
83 capabilityProperty3 = new CapabilityPropertyDataObject("instance2", "capability3", "prop3", "val3");
84 capabilitiesProperties = Arrays.asList(capabilityProperty1, capabilityProperty2, capabilityProperty3);
87 //capablities props == Map<instance id, Map<capability id, Map<prop id, property>>>
88 capabilitiesProperties.forEach(capabilitiesProperty -> {
89 capabilitiesPropsMap.computeIfAbsent(capabilitiesProperty.getInstanceId(), k -> new MapCapabilityProperty(new HashMap<>()))
90 .getMapToscaDataDefinition().computeIfAbsent(capabilitiesProperty.getCapabilityId(), k -> new MapPropertiesDataDefinition(new HashMap<>()))
91 .getMapToscaDataDefinition().computeIfAbsent(capabilitiesProperty.getPropName(), k -> new PropertyDefinition(createPropWithValue(capabilitiesProperty.getPropValue())));
94 GraphVertex resource = new GraphVertex(VertexTypeEnum.TOPOLOGY_TEMPLATE);
95 resource.addMetadataProperty(GraphPropertyEnum.UNIQUE_ID, CONTAINER_ID);
96 janusGraphDao.createVertex(resource);
97 GraphVertex loadedResource = janusGraphDao.getVertexById(CONTAINER_ID).left().value();
98 topologyTemplateOperation.associateElementToData(loadedResource, VertexTypeEnum.CALCULATED_CAP_PROPERTIES, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, capabilitiesPropsMap).left().value();
102 public void tearDown() {
103 janusGraphDao.rollback();
107 public void overrideCalculatedCapabilityProperties() {
108 Map<String, MapCapabilityProperty> loadedCapPropsMap = fetchCapabilitiesProps(CONTAINER_ID);
109 compareCapabilitiesProperties(capabilitiesProperties, loadedCapPropsMap);
110 capabilityProperty1.setPropValue("newVal1");
111 capabilityProperty3.setPropValue("newVal3");
112 setPropertyValue(capabilitiesPropsMap, capabilityProperty1);
113 setPropertyValue(capabilitiesPropsMap, capabilityProperty3);
114 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, capabilitiesPropsMap);
115 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.OK);
116 Map<String, MapCapabilityProperty> updatedCapPropsMap = fetchCapabilitiesProps(CONTAINER_ID);
117 compareCapabilitiesProperties(capabilitiesProperties, updatedCapPropsMap);
121 public void updateToscaDataDeepElementsBlockToToscaElement() {
122 assertCapabilityPropValue(capabilityProperty1, "val1");
123 assertCapabilityPropValue(capabilityProperty2, "val2");
124 assertCapabilityPropValue(capabilityProperty3, "val3");
126 MapCapabilityProperty instance1Props = capabilitiesPropsMap.get("instance1");
127 capabilityProperty1.setPropValue("newVal1");
128 setPropertyValue(capabilitiesPropsMap, capabilityProperty1);
130 capabilityProperty3.setPropValue("newVal3");
131 setPropertyValue(capabilitiesPropsMap, capabilityProperty3);
133 Component component = new org.openecomp.sdc.be.model.Resource();
134 component.setUniqueId(CONTAINER_ID);
135 StorageOperationStatus updateStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, 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().value()).getCalculatedCapabilitiesProperties();
149 private void compareCapabilitiesProperties(List<CapabilityPropertyDataObject> expected, Map<String, MapCapabilityProperty> actual) {
150 expected.forEach(expectedCapabilityProp -> {
151 assertThat(getPropertyValue(actual, expectedCapabilityProp.instanceId, expectedCapabilityProp.capabilityId, expectedCapabilityProp.propName))
152 .isEqualTo(expectedCapabilityProp.propValue);
156 private String getPropertyValue(Map<String, MapCapabilityProperty> capabilityPropertyMap, String instance, String capability, String prop) {
157 return capabilityPropertyMap.get(instance).getMapToscaDataDefinition().get(capability).getMapToscaDataDefinition().get(prop).getValue();
160 private void setPropertyValue(Map<String, MapCapabilityProperty> capabilityPropertyMap, CapabilityPropertyDataObject capabilityProperty) {
161 setPropertyValue(capabilityPropertyMap.get(capabilityProperty.getInstanceId()), capabilityProperty);
165 private void setPropertyValue(MapCapabilityProperty capabilitiesInstanceProperties, CapabilityPropertyDataObject capabilityProperty) {
166 capabilitiesInstanceProperties.getMapToscaDataDefinition().get(capabilityProperty.getCapabilityId())
167 .getMapToscaDataDefinition().get(capabilityProperty.getPropName())
168 .setValue(capabilityProperty.getPropValue());
171 private void assertCapabilityPropValue(CapabilityPropertyDataObject prop, String expectedValue) {
172 Map<String, MapCapabilityProperty> loadedCapPropsMap = fetchCapabilitiesProps(CONTAINER_ID);
173 String propertyValue = getPropertyValue(loadedCapPropsMap, prop.getInstanceId(), prop.getCapabilityId(), prop.getPropName());
174 assertThat(propertyValue).isEqualTo(expectedValue);
178 private PropertyDefinition createPropWithValue(String val) {
179 PropertyDefinition propertyDefinition = new PropertyDefinition();
180 propertyDefinition.setValue(val);
181 return propertyDefinition;
184 private static class CapabilityPropertyDataObject {
185 private String instanceId;
186 private String capabilityId;
187 private String propName;
188 private String propValue;
190 CapabilityPropertyDataObject(String instanceId, String capabilityId, String propName, String propValue) {
191 this.instanceId = instanceId;
192 this.capabilityId = capabilityId;
193 this.propName = propName;
194 this.propValue = propValue;
197 String getInstanceId() {
201 String getCapabilityId() {
205 String getPropName() {
209 String getPropValue() {
213 void setPropValue(String propValue) {
214 this.propValue = propValue;