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 fj.data.Either;
 
  24 import org.junit.After;
 
  25 import org.junit.Before;
 
  26 import org.junit.BeforeClass;
 
  27 import org.junit.Test;
 
  28 import org.junit.runner.RunWith;
 
  29 import org.openecomp.sdc.be.dao.config.JanusGraphSpringConfig;
 
  30 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
 
  31 import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphDao;
 
  32 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
 
  33 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
 
  34 import org.openecomp.sdc.be.datatypes.elements.PolicyDataDefinition;
 
  35 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
 
  36 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
 
  37 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
 
  38 import org.openecomp.sdc.be.model.Component;
 
  39 import org.openecomp.sdc.be.model.ComponentParametersView;
 
  40 import org.openecomp.sdc.be.model.ModelTestBase;
 
  41 import org.openecomp.sdc.be.model.PolicyDefinition;
 
  42 import org.openecomp.sdc.be.model.config.ModelOperationsSpringConfig;
 
  43 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.TopologyTemplate;
 
  44 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElement;
 
  45 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 
  46 import org.springframework.test.context.ContextConfiguration;
 
  47 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
  49 import javax.annotation.Resource;
 
  50 import java.util.Arrays;
 
  51 import java.util.Collections;
 
  52 import java.util.List;
 
  55 import static org.apache.commons.collections.ListUtils.union;
 
  56 import static org.assertj.core.api.Assertions.assertThat;
 
  58 @RunWith(SpringJUnit4ClassRunner.class)
 
  59 @ContextConfiguration(classes = {JanusGraphSpringConfig.class, ModelOperationsSpringConfig.class})
 
  60 public class PolicyOperationIntegrationTest extends ModelTestBase {
 
  62     private static final String CONTAINER_ID = "container";
 
  63     public static final String POLICY_ID = "policy";
 
  65     private TopologyTemplateOperation topologyTemplateOperation;
 
  67     private HealingJanusGraphDao janusGraphDao;
 
  69     private PolicyOperation policyOperation;
 
  70     private PropertyDataDefinition prop1, prop2;
 
  71     private PolicyDefinition policy;
 
  74     public static void setupBeforeClass() {
 
  80     public void setUp() throws Exception {
 
  81         prop1 = new PropertyDataDefinition();
 
  82         prop1.setUniqueId("prop1");
 
  83         prop1.setName("prop1");
 
  84         prop1.setValue("prop1");
 
  86         prop2 = new PropertyDataDefinition();
 
  87         prop2.setUniqueId("prop2");
 
  88         prop2.setName("prop2");
 
  89         prop2.setValue("prop2");
 
  91         policy = new PolicyDefinition();
 
  92         policy.setUniqueId(POLICY_ID);
 
  94         policy.setProperties(Arrays.asList(prop1, prop2));
 
  96         GraphVertex resource = new GraphVertex(VertexTypeEnum.TOPOLOGY_TEMPLATE);
 
  97         resource.addMetadataProperty(GraphPropertyEnum.UNIQUE_ID, CONTAINER_ID);
 
  98         janusGraphDao.createVertex(resource);
 
  99         GraphVertex loadedResource = janusGraphDao.getVertexById(CONTAINER_ID).left().value();
 
 100         topologyTemplateOperation.addToscaDataToToscaElement(loadedResource, EdgeLabelEnum.POLICIES, VertexTypeEnum.POLICIES, policy, JsonPresentationFields.UNIQUE_ID);
 
 101 //        janusGraphDao.commit();
 
 105     public void tearDown() {
 
 106         janusGraphDao.rollback();
 
 110     public void testUpdatePolicyProperties_singleProperty() {
 
 111         PropertyDataDefinition prop1Copy = new PropertyDataDefinition(prop1);
 
 112         prop1Copy.setValue("prop1NewValue");
 
 113         testUpdatePolicyProperties(Collections.singletonList(prop1Copy), Collections.singletonList(prop2));
 
 117     public void testUpdatePolicyProperties_multipleProperties() {
 
 118         PropertyDataDefinition prop1Copy = new PropertyDataDefinition(prop1);
 
 119         prop1Copy.setValue("prop1NewValue");
 
 121         PropertyDataDefinition prop2Copy = new PropertyDataDefinition(prop2);
 
 122         prop2Copy.setValue("prop2NewValue");
 
 124         testUpdatePolicyProperties(Arrays.asList(prop1Copy, prop2Copy), Collections.emptyList());
 
 127     private void testUpdatePolicyProperties(List<PropertyDataDefinition> updatedProperties, List<PropertyDataDefinition> nonUpdatedPropeties) {
 
 128         Component cmpt = new org.openecomp.sdc.be.model.Resource();
 
 129         cmpt.setUniqueId(CONTAINER_ID);
 
 130         cmpt.setPolicies(Collections.singletonMap(POLICY_ID, policy));
 
 131         StorageOperationStatus storageOperationStatus = policyOperation.updatePolicyProperties(cmpt, POLICY_ID, updatedProperties);
 
 132         assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.OK);
 
 134         ComponentParametersView componentParametersView = new ComponentParametersView();
 
 135         componentParametersView.disableAll();
 
 136         componentParametersView.setIgnorePolicies(false);
 
 137         Either<ToscaElement, StorageOperationStatus> loadedCmptEither = topologyTemplateOperation.getToscaElement(CONTAINER_ID, componentParametersView);
 
 139         assertThat(loadedCmptEither.isLeft()).isTrue();
 
 140         ToscaElement loadedCmpt = loadedCmptEither.left().value();
 
 141         assertThat(loadedCmpt).isInstanceOf(TopologyTemplate.class);
 
 142         @SuppressWarnings("unchecked") List<PropertyDataDefinition> allProperties = union(updatedProperties, nonUpdatedPropeties);
 
 143         verifyPolicyPropertiesValuesUpdated((TopologyTemplate) loadedCmpt, allProperties);
 
 146     private void verifyPolicyPropertiesValuesUpdated(TopologyTemplate toscaElement, List<PropertyDataDefinition> expectedUpdatedProperties) {
 
 147         Map<String, PolicyDataDefinition> policies = toscaElement.getPolicies();
 
 148         PolicyDataDefinition policy = policies.get(POLICY_ID);
 
 149         List<PropertyDataDefinition> policyProperties = policy.getProperties();
 
 150         assertThat(policyProperties).usingElementComparatorOnFields("value")
 
 151                                     .containsAll(expectedUpdatedProperties);