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