1 package org.openecomp.sdc.be.model.jsontitan.operations;
3 import static org.junit.Assert.assertTrue;
4 import static org.mockito.ArgumentMatchers.eq;
5 import static org.mockito.Mockito.when;
7 import java.util.HashMap;
10 import java.util.function.BiPredicate;
12 import org.apache.commons.lang3.tuple.ImmutablePair;
13 import org.apache.tinkerpop.gremlin.structure.T;
14 import org.junit.Assert;
15 import org.junit.BeforeClass;
16 import org.junit.Test;
17 import org.mockito.Mockito;
18 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
19 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
20 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
21 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
22 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
23 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
24 import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition;
25 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
26 import org.openecomp.sdc.be.datatypes.elements.ComponentInstanceDataDefinition;
27 import org.openecomp.sdc.be.datatypes.elements.CompositionDataDefinition;
28 import org.openecomp.sdc.be.datatypes.elements.ListCapabilityDataDefinition;
29 import org.openecomp.sdc.be.datatypes.elements.ListRequirementDataDefinition;
30 import org.openecomp.sdc.be.datatypes.elements.MapArtifactDataDefinition;
31 import org.openecomp.sdc.be.datatypes.elements.MapCapabiltyProperty;
32 import org.openecomp.sdc.be.datatypes.elements.MapListCapabiltyDataDefinition;
33 import org.openecomp.sdc.be.datatypes.elements.MapListRequirementDataDefinition;
34 import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition;
35 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
36 import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
37 import org.openecomp.sdc.be.model.ArtifactDefinition;
38 import org.openecomp.sdc.be.model.CapabilityRequirementRelationship;
39 import org.openecomp.sdc.be.model.Component;
40 import org.openecomp.sdc.be.model.ComponentInstance;
41 import org.openecomp.sdc.be.model.ComponentInstanceInput;
42 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
43 import org.openecomp.sdc.be.model.ComponentParametersView;
44 import org.openecomp.sdc.be.model.GroupDefinition;
45 import org.openecomp.sdc.be.model.GroupInstance;
46 import org.openecomp.sdc.be.model.ModelTestBase;
47 import org.openecomp.sdc.be.model.RelationshipImpl;
48 import org.openecomp.sdc.be.model.RelationshipInfo;
49 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
50 import org.openecomp.sdc.be.model.Resource;
51 import org.openecomp.sdc.be.model.Service;
52 import org.openecomp.sdc.be.model.User;
53 import org.openecomp.sdc.be.model.jsontitan.datamodel.TopologyTemplate;
54 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
55 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
56 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
58 import com.google.common.collect.Lists;
60 import fj.data.Either;
62 public class NodeTemplateOperationTest extends ModelTestBase {
64 private final static String COMPONENT_ID = "componentId";
65 private final static String TO_INSTANCE_ID = "toInstanceId";
66 private final static String FROM_INSTANCE_ID = "fromInstanceId";
67 private final static String RELATION_ID = "relationId";
68 private final static String CAPABILITY_OWNER_ID = "capabilityOwnerId";
69 private final static String CAPABILITY_UID = "capabilityUid";
70 private final static String CAPABILITY_NAME = "capabilityName";
71 private final static String REQUIREMENT_OWNER_ID = "requirementOwnerId";
72 private final static String REQUIREMENT_UID = "requirementUid";
73 private final static String REQUIREMENT_NAME = "requirementName";
74 private final static String RELATIONSHIP_TYPE = "relationshipType";
76 private static Map<String, MapListCapabiltyDataDefinition> fulfilledCapability;
77 private static Map<String, MapListRequirementDataDefinition> fulfilledRequirement;
78 private static CapabilityDataDefinition capability;
79 private static RequirementDataDefinition requirement;
80 private static RequirementCapabilityRelDef relation;
82 private static TitanDao titanDao;
83 private static NodeTemplateOperation operation;
86 public static void setup() {
88 titanDao = Mockito.mock(TitanDao.class);
89 operation = new NodeTemplateOperation();
90 operation.setTitanDao(titanDao);
91 buildDataDefinition();
94 private static void buildDataDefinition() {
95 buildCapabiltyDataDefinition();
96 buildRequirementDataDefinition();
101 public void testGetFulfilledCapabilityByRelationSuccess() {
102 GraphVertex vertex = Mockito.mock(GraphVertex.class);
103 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
104 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
106 GraphVertex dataVertex = new GraphVertex();
107 dataVertex.setJson(fulfilledCapability);
108 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.left(dataVertex);
109 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_CAPABILITIES),
110 eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
111 Either<CapabilityDataDefinition, StorageOperationStatus> result = operation.getFulfilledCapabilityByRelation(
112 COMPONENT_ID, TO_INSTANCE_ID, relation, (rel, cap) -> isBelongingCapability(rel, cap));
113 assertTrue(result.isLeft());
114 assertTrue(result.left().value().equals(capability));
118 public void testGetFulfilledRequirementByRelationSuccess() {
119 GraphVertex vertex = Mockito.mock(GraphVertex.class);
120 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
121 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
123 GraphVertex dataVertex = new GraphVertex();
124 dataVertex.setJson(fulfilledRequirement);
125 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.left(dataVertex);
126 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_REQUIREMENTS),
127 eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
128 Either<RequirementDataDefinition, StorageOperationStatus> result = operation.getFulfilledRequirementByRelation(
129 COMPONENT_ID, FROM_INSTANCE_ID, relation, (rel, req) -> isBelongingRequirement(rel, req));
130 assertTrue(result.isLeft());
131 assertTrue(result.left().value().equals(requirement));
135 public void testGetFulfilledCapabilityByRelationNotFoundFailure() {
136 GraphVertex vertex = Mockito.mock(GraphVertex.class);
137 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
138 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
140 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.right(TitanOperationStatus.NOT_FOUND);
141 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_CAPABILITIES),
142 eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
143 Either<CapabilityDataDefinition, StorageOperationStatus> result = operation.getFulfilledCapabilityByRelation(
144 COMPONENT_ID, TO_INSTANCE_ID, relation, (rel, cap) -> isBelongingCapability(rel, cap));
145 assertTrue(result.isRight());
146 assertTrue(result.right().value() == StorageOperationStatus.NOT_FOUND);
150 public void testGetFulfilledRequirementByRelationNotFoundFailure() {
151 GraphVertex vertex = Mockito.mock(GraphVertex.class);
152 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
153 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
155 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.right(TitanOperationStatus.NOT_FOUND);
156 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_REQUIREMENTS),
157 eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
158 Either<RequirementDataDefinition, StorageOperationStatus> result = operation.getFulfilledRequirementByRelation(
159 COMPONENT_ID, FROM_INSTANCE_ID, relation, (rel, req) -> isBelongingRequirement(rel, req));
160 assertTrue(result.isRight());
161 assertTrue(result.right().value() == StorageOperationStatus.NOT_FOUND);
164 private static void buildRequirementDataDefinition() {
166 fulfilledRequirement = new HashMap<>();
167 MapListRequirementDataDefinition mapListRequirementDataDefinition = new MapListRequirementDataDefinition();
168 mapListRequirementDataDefinition.add(requirement.getCapability(), requirement);
169 fulfilledRequirement.put(FROM_INSTANCE_ID, mapListRequirementDataDefinition);
173 private static void buildRequirement() {
174 requirement = new RequirementDataDefinition();
175 requirement.setOwnerId(REQUIREMENT_OWNER_ID);
176 requirement.setUniqueId(REQUIREMENT_UID);
177 requirement.setName(REQUIREMENT_NAME);
178 requirement.setRelationship(RELATIONSHIP_TYPE);
181 private static void buildCapabiltyDataDefinition() {
183 fulfilledCapability = new HashMap<>();
184 MapListCapabiltyDataDefinition mapListCapabiltyDataDefinition = new MapListCapabiltyDataDefinition();
185 mapListCapabiltyDataDefinition.add(capability.getType(), capability);
186 fulfilledCapability.put(TO_INSTANCE_ID, mapListCapabiltyDataDefinition);
189 private static void buildCapability() {
190 capability = new CapabilityDataDefinition();
191 capability.setOwnerId(CAPABILITY_OWNER_ID);
192 capability.setUniqueId(CAPABILITY_UID);
193 capability.setName(CAPABILITY_NAME);
196 private static void buildRelation() {
198 relation = new RequirementCapabilityRelDef();
199 CapabilityRequirementRelationship relationship = new CapabilityRequirementRelationship();
200 RelationshipInfo relationInfo = new RelationshipInfo();
201 relationInfo.setId(RELATION_ID);
202 relationship.setRelation(relationInfo);
204 relation.setRelationships(Lists.newArrayList(relationship));
205 relation.setToNode(TO_INSTANCE_ID);
206 relation.setFromNode(FROM_INSTANCE_ID);
208 relationInfo.setCapabilityOwnerId(CAPABILITY_OWNER_ID);
209 relationInfo.setCapabilityUid(CAPABILITY_UID);
210 relationInfo.setCapability(CAPABILITY_NAME);
211 relationInfo.setRequirementOwnerId(REQUIREMENT_OWNER_ID);
212 relationInfo.setRequirementUid(REQUIREMENT_UID);
213 relationInfo.setRequirement(REQUIREMENT_NAME);
214 RelationshipImpl relationshipImpl = new RelationshipImpl();
215 relationshipImpl.setType(RELATIONSHIP_TYPE);
216 relationInfo.setRelationships(relationshipImpl);
219 private boolean isBelongingRequirement(RelationshipInfo relationshipInfo, RequirementDataDefinition req) {
220 return req.getRelationship().equals(relationshipInfo.getRelationship().getType())
221 && req.getName().equals(relationshipInfo.getRequirement())
222 && req.getUniqueId().equals(relationshipInfo.getRequirementUid())
223 && req.getOwnerId().equals(relationshipInfo.getRequirementOwnerId());
226 private boolean isBelongingCapability(RelationshipInfo relationshipInfo, CapabilityDataDefinition cap) {
227 return cap.getName().equals(relationshipInfo.getCapability())
228 && cap.getUniqueId().equals(relationshipInfo.getCapabilityUid())
229 && cap.getOwnerId().equals(relationshipInfo.getCapabilityOwnerId());
232 private NodeTemplateOperation createTestSubject() {
238 public void testGetDefaultHeatTimeout() throws Exception {
242 result = NodeTemplateOperation.getDefaultHeatTimeout();
257 public void testPrepareInstDeploymentArtifactPerInstance() throws Exception {
258 NodeTemplateOperation testSubject;
259 Map<String, ArtifactDataDefinition> deploymentArtifacts = null;
260 String componentInstanceId = "";
263 MapArtifactDataDefinition result;
266 testSubject = createTestSubject();
267 deploymentArtifacts = null;
268 result = testSubject.prepareInstDeploymentArtifactPerInstance(deploymentArtifacts, componentInstanceId, user,
270 Assert.assertEquals(null, result);
276 public void testCreateCapPropertyKey() throws Exception {
278 String instanceId = "";
282 result = NodeTemplateOperation.createCapPropertyKey(key, instanceId);
287 public void testPrepareCalculatedCapabiltyForNodeType() throws Exception {
288 NodeTemplateOperation testSubject;
289 Map<String, ListCapabilityDataDefinition> capabilities = null;
290 ComponentInstanceDataDefinition componentInstance = null;
291 MapListCapabiltyDataDefinition result;
294 testSubject = createTestSubject();
296 result = testSubject.prepareCalculatedCapabiltyForNodeType(capabilities, componentInstance);
297 Assert.assertEquals(null, result);
302 public void testPrepareCalculatedRequirementForNodeType() throws Exception {
303 NodeTemplateOperation testSubject;
304 Map<String, ListRequirementDataDefinition> requirements = null;
305 ComponentInstanceDataDefinition componentInstance = null;
306 MapListRequirementDataDefinition result;
309 testSubject = createTestSubject();
311 result = testSubject.prepareCalculatedRequirementForNodeType(requirements, componentInstance);
312 Assert.assertEquals(null, result);
317 public void testAddGroupInstancesToComponentInstance() throws Exception {
318 NodeTemplateOperation testSubject;
319 Component containerComponent = null;
320 ComponentInstanceDataDefinition componentInstance = null;
321 List<GroupDefinition> groups = null;
322 Map<String, List<ArtifactDefinition>> groupInstancesArtifacts = null;
323 StorageOperationStatus result;
326 testSubject = createTestSubject();
327 groupInstancesArtifacts = null;
328 result = testSubject.addGroupInstancesToComponentInstance(containerComponent, componentInstance, groups,
329 groupInstancesArtifacts);
330 Assert.assertEquals(StorageOperationStatus.OK, result);
334 public void testGenerateCustomizationUUIDOnInstanceGroup() throws Exception {
335 NodeTemplateOperation testSubject;
336 String componentId = "";
337 String instanceId = "";
338 List<String> groupInstances = null;
339 StorageOperationStatus result;
342 testSubject = createTestSubject();
343 groupInstances = null;
344 result = testSubject.generateCustomizationUUIDOnInstanceGroup(componentId, instanceId, groupInstances);
345 Assert.assertEquals(StorageOperationStatus.OK, result);