1 package org.openecomp.sdc.be.model.jsonjanusgraph.operations;
3 import org.janusgraph.core.JanusGraphVertex;
5 import org.apache.tinkerpop.gremlin.structure.Direction;
6 import org.apache.tinkerpop.gremlin.structure.Edge;
8 import org.junit.runner.RunWith;
9 import org.mockito.InjectMocks;
10 import org.mockito.Mock;
11 import org.mockito.Mockito;
12 import org.mockito.junit.MockitoJUnitRunner;
13 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
14 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
15 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
16 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
17 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
18 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
19 import org.openecomp.sdc.be.datatypes.elements.MapCapabilityProperty;
20 import org.openecomp.sdc.be.datatypes.elements.MapListCapabilityDataDefinition;
21 import org.openecomp.sdc.be.datatypes.elements.MapListRequirementDataDefinition;
22 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
23 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
24 import org.openecomp.sdc.be.model.DistributionStatusEnum;
25 import org.openecomp.sdc.be.model.PolicyDefinition;
26 import org.openecomp.sdc.be.model.User;
27 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
28 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
29 import org.openecomp.sdc.be.model.ComponentParametersView;
30 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElement;
34 import static org.assertj.core.api.Assertions.assertThat;
35 import static org.junit.Assert.assertEquals;
36 import static org.mockito.ArgumentMatchers.any;
37 import static org.mockito.ArgumentMatchers.eq;
38 import static org.mockito.Mockito.when;
40 @RunWith(MockitoJUnitRunner.class)
42 public class TopologyTemplateOperationTest {
44 private static final String CONTAINER_ID = "containerId";
46 private TopologyTemplateOperation topologyTemplateOperation;
48 private JanusGraphDao janusGraphDao;
51 public void overrideToscaDataOfToscaElement_failedToFetchContainerVertex() {
52 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(
53 JanusGraphOperationStatus.INVALID_ID));
54 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
55 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
59 public void overrideToscaDataOfToscaElement_failedToFetchDataVertex() {
60 GraphVertex containerVertex = new GraphVertex();
61 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
62 when(janusGraphDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(
63 JanusGraphOperationStatus.NOT_FOUND));
64 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
65 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
69 public void updateToscaDataDeepElements_failedToFetchContainerVertex() {
70 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(
71 JanusGraphOperationStatus.INVALID_ID));
72 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
73 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
77 public void updateToscaDataDeepElements_failedToFetchDataVertex() {
78 GraphVertex containerVertex = new GraphVertex();
79 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
80 when(janusGraphDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(
81 JanusGraphOperationStatus.NOT_FOUND));
82 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
83 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
87 public void addPolicyToToscaElementSuccessTest(){
88 JanusGraphOperationStatus status = JanusGraphOperationStatus.OK;
89 StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
90 assertThat(result).isEqualTo(StorageOperationStatus.OK);
94 public void addPolicyToToscaElementFailureTest(){
95 JanusGraphOperationStatus status = JanusGraphOperationStatus.ALREADY_EXIST;
96 StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
97 assertThat(result).isEqualTo(StorageOperationStatus.ENTITY_ALREADY_EXISTS);
101 public void testAssociateOrAddCalcCapReqToComponent() {
102 StorageOperationStatus result;
103 GraphVertex graphVertex = new GraphVertex();
104 Map<String, MapListRequirementDataDefinition> calcRequirements = new HashMap<>();
105 Map<String, MapListCapabilityDataDefinition> calcCapabilty = new HashMap<>();
106 Map<String, MapCapabilityProperty> calCapabilitiesProps = new HashMap<>();
107 addPolicyToToscaElementWithStatus(JanusGraphOperationStatus.OK);
108 result = topologyTemplateOperation.associateOrAddCalcCapReqToComponent(graphVertex, calcRequirements, calcCapabilty, calCapabilitiesProps);
109 assertEquals(StorageOperationStatus.OK, result);
113 public void testSetDataTypesFromGraph() {
114 GraphVertex containerVertex = new GraphVertex();
115 ComponentParametersView filter = new ComponentParametersView(true);
116 filter.setIgnoreComponentInstancesInterfaces(true);
117 filter.setIgnoreDataType(false);
118 String componentName = "componentName";
119 String componentId = UniqueIdBuilder.buildResourceUniqueId();
120 containerVertex.setVertex(Mockito.mock(JanusGraphVertex.class));
121 containerVertex.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
122 containerVertex.setUniqueId(componentId);
123 containerVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
124 when(janusGraphDao.getChildVertex(any(GraphVertex.class), any(EdgeLabelEnum.class), any(JsonParseFlagEnum.class))).thenReturn(Either.right(
125 JanusGraphOperationStatus.GENERAL_ERROR));
126 Either<ToscaElement, StorageOperationStatus> storageOperationStatus = topologyTemplateOperation.getToscaElement(containerVertex, filter);
127 assertThat(storageOperationStatus).isEqualTo(Either.right(StorageOperationStatus.GENERAL_ERROR));
131 public void testUpdateDistributionStatus() {
132 Either<GraphVertex, StorageOperationStatus> result;
133 String uniqueId = "uniqueId";
134 User user = new User();
135 String userId = "userId";
136 user.setUserId(userId);
137 Iterator<Edge> edgeIterator = new Iterator<Edge>() {
139 public boolean hasNext() {
148 GraphVertex graphVertex = Mockito.mock(GraphVertex.class);
149 JanusGraphVertex janusGraphVertex = Mockito.mock(JanusGraphVertex.class);
150 when(graphVertex.getVertex()).thenReturn(janusGraphVertex);
151 when(janusGraphVertex.edges(Direction.IN, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER.name())).thenReturn(edgeIterator);
153 .getVertexByPropertyAndLabel(GraphPropertyEnum.USERID, userId, VertexTypeEnum.USER, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(graphVertex));
154 when(janusGraphDao.getVertexById(uniqueId, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.left(graphVertex));
155 when(janusGraphDao.createEdge(graphVertex, graphVertex, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER, null)).thenReturn(
156 JanusGraphOperationStatus.OK);
157 when(janusGraphDao.updateVertex(graphVertex)).thenReturn(Either.left(graphVertex));
158 result = topologyTemplateOperation.updateDistributionStatus(uniqueId, user, DistributionStatusEnum.DISTRIBUTED);
159 assertThat(result.isLeft());
162 @SuppressWarnings("unchecked")
163 private StorageOperationStatus addPolicyToToscaElementWithStatus(JanusGraphOperationStatus status) {
164 GraphVertex componentV = new GraphVertex();
165 componentV.setVertex(Mockito.mock(JanusGraphVertex.class));
166 GraphVertex dataV = new GraphVertex();
167 dataV.setVertex(Mockito.mock(JanusGraphVertex.class));
168 String componentName = "componentName";
169 String componentId = UniqueIdBuilder.buildResourceUniqueId();
170 String policyTypeName = "org.openecomp.policies.placement.valet.Affinity";
171 componentV.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
172 componentV.setUniqueId(componentId);
173 PolicyDefinition policy = new PolicyDefinition();
174 policy.setPolicyTypeName(policyTypeName);
176 Either<GraphVertex, JanusGraphOperationStatus> toscaDataVertexRes = Either.right(
177 JanusGraphOperationStatus.NOT_FOUND);
178 when(janusGraphDao.getChildVertex(eq(componentV), eq(EdgeLabelEnum.POLICIES), eq(JsonParseFlagEnum.ParseJson))).thenReturn(toscaDataVertexRes);
179 Either<GraphVertex, JanusGraphOperationStatus> createVertex = Either.left(dataV);
180 when(janusGraphDao.createVertex(any(GraphVertex.class))).thenReturn(createVertex);
181 when(janusGraphDao.createEdge(any(JanusGraphVertex.class), any(JanusGraphVertex.class), any(EdgeLabelEnum.class), any(HashMap.class))).thenReturn(status);
182 return topologyTemplateOperation.addPolicyToToscaElement(componentV, policy, counter);