6a257d33de16932ece5385fec72237c53dca4619
[sdc.git] /
1 package org.openecomp.sdc.be.model.jsontitan.operations;
2
3 import static org.apache.commons.collections.ListUtils.union;
4 import static org.assertj.core.api.Assertions.assertThat;
5
6 import java.util.Arrays;
7 import java.util.Collections;
8 import java.util.List;
9 import java.util.Map;
10
11 import javax.annotation.Resource;
12
13 import org.junit.After;
14 import org.junit.Before;
15 import org.junit.BeforeClass;
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18 import org.openecomp.sdc.be.dao.config.TitanSpringConfig;
19 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
20 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
21 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
22 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
23 import org.openecomp.sdc.be.datatypes.elements.PolicyDataDefinition;
24 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
25 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
26 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
27 import org.openecomp.sdc.be.model.Component;
28 import org.openecomp.sdc.be.model.ComponentParametersView;
29 import org.openecomp.sdc.be.model.ModelTestBase;
30 import org.openecomp.sdc.be.model.PolicyDefinition;
31 import org.openecomp.sdc.be.model.config.ModelOperationsSpringConfig;
32 import org.openecomp.sdc.be.model.jsontitan.datamodel.TopologyTemplate;
33 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
34 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
35 import org.springframework.test.context.ContextConfiguration;
36 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
37
38 import fj.data.Either;
39
40 @RunWith(SpringJUnit4ClassRunner.class)
41 @ContextConfiguration(classes = {TitanSpringConfig.class, ModelOperationsSpringConfig.class})
42 public class PolicyOperationIntegrationTest extends ModelTestBase {
43
44     private static final String CONTAINER_ID = "container";
45     public static final String POLICY_ID = "policy";
46     @Resource
47     private TopologyTemplateOperation topologyTemplateOperation;
48     @Resource
49     private TitanDao titanDao;
50     @Resource
51     private PolicyOperation policyOperation;
52     private PropertyDataDefinition prop1, prop2;
53     private PolicyDefinition policy;
54
55     @BeforeClass
56     public static void setupBeforeClass() {
57
58         ModelTestBase.init();
59     }
60
61     @Before
62     public void setUp() throws Exception {
63         prop1 = new PropertyDataDefinition();
64         prop1.setUniqueId("prop1");
65         prop1.setName("prop1");
66         prop1.setValue("prop1");
67
68         prop2 = new PropertyDataDefinition();
69         prop2.setUniqueId("prop2");
70         prop2.setName("prop2");
71         prop2.setValue("prop2");
72
73         policy = new PolicyDefinition();
74         policy.setUniqueId(POLICY_ID);
75
76         policy.setProperties(Arrays.asList(prop1, prop2));
77
78         GraphVertex resource = new GraphVertex(VertexTypeEnum.TOPOLOGY_TEMPLATE);
79         resource.addMetadataProperty(GraphPropertyEnum.UNIQUE_ID, CONTAINER_ID);
80         titanDao.createVertex(resource);
81         GraphVertex loadedResource = titanDao.getVertexById(CONTAINER_ID).left().value();
82         topologyTemplateOperation.addToscaDataToToscaElement(loadedResource, EdgeLabelEnum.POLICIES, VertexTypeEnum.POLICIES, policy, JsonPresentationFields.UNIQUE_ID);
83         titanDao.commit();
84     }
85
86     @After
87     public void tearDown() {
88         titanDao.rollback();
89     }
90
91     @Test
92     public void testUpdatePolicyProperties_singleProperty() {
93         PropertyDataDefinition prop1Copy = new PropertyDataDefinition(prop1);
94         prop1Copy.setValue("prop1NewValue");
95         testUpdatePolicyProperties(Collections.singletonList(prop1Copy), Collections.singletonList(prop2));
96     }
97
98     @Test
99     public void testUpdatePolicyProperties_multipleProperties() {
100         PropertyDataDefinition prop1Copy = new PropertyDataDefinition(prop1);
101         prop1Copy.setValue("prop1NewValue");
102
103         PropertyDataDefinition prop2Copy = new PropertyDataDefinition(prop2);
104         prop2Copy.setValue("prop2NewValue");
105
106         testUpdatePolicyProperties(Arrays.asList(prop1Copy, prop2Copy), Collections.emptyList());
107     }
108
109     private void testUpdatePolicyProperties(List<PropertyDataDefinition> updatedProperties, List<PropertyDataDefinition> nonUpdatedPropeties) {
110         Component cmpt = new org.openecomp.sdc.be.model.Resource();
111         cmpt.setUniqueId(CONTAINER_ID);
112         cmpt.setPolicies(Collections.singletonMap(POLICY_ID, policy));
113         StorageOperationStatus storageOperationStatus = policyOperation.updatePolicyProperties(cmpt, POLICY_ID, updatedProperties);
114         assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.OK);
115
116         ComponentParametersView componentParametersView = new ComponentParametersView();
117         componentParametersView.disableAll();
118         componentParametersView.setIgnorePolicies(false);
119         Either<ToscaElement, StorageOperationStatus> loadedCmptEither = topologyTemplateOperation.getToscaElement(CONTAINER_ID, componentParametersView);
120
121         assertThat(loadedCmptEither.isLeft());
122         ToscaElement loadedCmpt = loadedCmptEither.left().value();
123         assertThat(loadedCmpt).isInstanceOf(TopologyTemplate.class);
124         @SuppressWarnings("unchecked") List<PropertyDataDefinition> allProperties = union(updatedProperties, nonUpdatedPropeties);
125         verifyPolicyPropertiesValuesUpdated((TopologyTemplate) loadedCmpt, allProperties);
126     }
127
128     private void verifyPolicyPropertiesValuesUpdated(TopologyTemplate toscaElement, List<PropertyDataDefinition> expectedUpdatedProperties) {
129         Map<String, PolicyDataDefinition> policies = toscaElement.getPolicies();
130         PolicyDataDefinition policy = policies.get(POLICY_ID);
131         List<PropertyDataDefinition> policyProperties = policy.getProperties();
132         assertThat(policyProperties).usingElementComparatorOnFields("value")
133                                     .containsAll(expectedUpdatedProperties);
134     }
135 }