3 * Copyright (c) 2018 AT&T Intellectual Property.
7 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
15 * http://www.apache.org/licenses/LICENSE-2.0
19 * Unless required by applicable law or agreed to in writing, software
21 * distributed under the License is distributed on an "AS IS" BASIS,
23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25 * See the License for the specific language governing permissions and
27 * limitations under the License.
30 package org.openecomp.sdc.be.model.jsontitan.operations;
32 import com.google.common.collect.Lists;
33 import fj.data.Either;
34 import org.mockito.Mock;
35 import org.junit.Assert;
36 import org.junit.BeforeClass;
37 import org.junit.Test;
38 import org.mockito.Mockito;
39 import org.openecomp.sdc.be.config.Configuration;
40 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
41 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
42 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
43 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
44 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
45 import org.openecomp.sdc.be.datatypes.elements.*;
46 import org.openecomp.sdc.be.model.*;
47 import org.openecomp.sdc.be.datatypes.elements.MapListCapabilityDataDefinition;
48 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
49 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
51 import java.util.ArrayList;
52 import java.util.HashMap;
53 import java.util.List;
56 import static org.junit.Assert.assertEquals;
57 import static org.junit.Assert.assertSame;
58 import static org.junit.Assert.assertTrue;
59 import static org.mockito.ArgumentMatchers.eq;
60 import static org.mockito.Mockito.when;
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, MapListCapabilityDataDefinition> 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), eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
110 Either<CapabilityDataDefinition, StorageOperationStatus> result = operation.getFulfilledCapabilityByRelation(COMPONENT_ID, TO_INSTANCE_ID, relation, this::isBelongingCapability);
111 assertTrue(result.isLeft());
112 assertEquals(result.left().value(), capability);
116 public void testGetFulfilledRequirementByRelationSuccess(){
117 GraphVertex vertex = Mockito.mock(GraphVertex.class);
118 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
119 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
121 GraphVertex dataVertex = new GraphVertex();
122 dataVertex.setJson(fulfilledRequirement);
123 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.left(dataVertex);
124 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_REQUIREMENTS), eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
125 Either<RequirementDataDefinition, StorageOperationStatus> result = operation.getFulfilledRequirementByRelation(COMPONENT_ID, FROM_INSTANCE_ID, relation, this::isBelongingRequirement);
126 assertTrue(result.isLeft());
127 assertEquals(result.left().value(), requirement);
131 public void testGetFulfilledCapabilityByRelationNotFoundFailure(){
132 GraphVertex vertex = Mockito.mock(GraphVertex.class);
133 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
134 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
136 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.right(TitanOperationStatus.NOT_FOUND);
137 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_CAPABILITIES), eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
138 Either<CapabilityDataDefinition, StorageOperationStatus> result = operation.getFulfilledCapabilityByRelation(COMPONENT_ID, TO_INSTANCE_ID, relation, this::isBelongingCapability);
139 assertTrue(result.isRight());
140 assertSame(result.right().value(), StorageOperationStatus.NOT_FOUND);
144 public void testGetFulfilledRequirementByRelationNotFoundFailure(){
145 GraphVertex vertex = Mockito.mock(GraphVertex.class);
146 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
147 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
149 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.right(TitanOperationStatus.NOT_FOUND);
150 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_REQUIREMENTS), eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
151 Either<RequirementDataDefinition, StorageOperationStatus> result = operation.getFulfilledRequirementByRelation(COMPONENT_ID, FROM_INSTANCE_ID, relation, this::isBelongingRequirement);
152 assertTrue(result.isRight());
153 assertSame(result.right().value(), StorageOperationStatus.NOT_FOUND);
156 private static void buildRequirementDataDefinition() {
158 fulfilledRequirement = new HashMap<>();
159 MapListRequirementDataDefinition mapListRequirementDataDefinition = new MapListRequirementDataDefinition();
160 mapListRequirementDataDefinition.add(requirement.getCapability(), requirement);
161 fulfilledRequirement.put(FROM_INSTANCE_ID, mapListRequirementDataDefinition);
165 private static void buildRequirement() {
166 requirement = new RequirementDataDefinition();
167 requirement.setOwnerId(REQUIREMENT_OWNER_ID);
168 requirement.setUniqueId(REQUIREMENT_UID);
169 requirement.setName(REQUIREMENT_NAME);
170 requirement.setRelationship(RELATIONSHIP_TYPE);
173 private static void buildCapabiltyDataDefinition() {
175 fulfilledCapability = new HashMap<>();
176 MapListCapabilityDataDefinition mapListCapabiltyDataDefinition = new MapListCapabilityDataDefinition();
177 mapListCapabiltyDataDefinition.add(capability.getType(), capability);
178 fulfilledCapability.put(TO_INSTANCE_ID, mapListCapabiltyDataDefinition);
181 private static void buildCapability() {
182 capability = new CapabilityDataDefinition();
183 capability.setOwnerId(CAPABILITY_OWNER_ID);
184 capability.setUniqueId(CAPABILITY_UID);
185 capability.setName(CAPABILITY_NAME);
188 private static void buildRelation() {
190 relation = new RequirementCapabilityRelDef();
191 CapabilityRequirementRelationship relationship = new CapabilityRequirementRelationship();
192 RelationshipInfo relationInfo = new RelationshipInfo();
193 relationInfo.setId(RELATION_ID);
194 relationship.setRelation(relationInfo);
196 relation.setRelationships(Lists.newArrayList(relationship));
197 relation.setToNode(TO_INSTANCE_ID);
198 relation.setFromNode(FROM_INSTANCE_ID);
200 relationInfo.setCapabilityOwnerId(CAPABILITY_OWNER_ID);
201 relationInfo.setCapabilityUid(CAPABILITY_UID);
202 relationInfo.setCapability(CAPABILITY_NAME);
203 relationInfo.setRequirementOwnerId(REQUIREMENT_OWNER_ID);
204 relationInfo.setRequirementUid(REQUIREMENT_UID);
205 relationInfo.setRequirement(REQUIREMENT_NAME);
206 RelationshipImpl relationshipImpl = new RelationshipImpl();
207 relationshipImpl.setType(RELATIONSHIP_TYPE);
208 relationInfo.setRelationships(relationshipImpl);
211 private boolean isBelongingRequirement(RelationshipInfo relationshipInfo, RequirementDataDefinition req) {
212 return req.getRelationship().equals(relationshipInfo.getRelationship().getType()) &&
213 req.getName().equals(relationshipInfo.getRequirement()) &&
214 req.getUniqueId().equals(relationshipInfo.getRequirementUid()) &&
215 req.getOwnerId().equals(relationshipInfo.getRequirementOwnerId());
218 private boolean isBelongingCapability(RelationshipInfo relationshipInfo, CapabilityDataDefinition cap) {
219 return cap.getName().equals(relationshipInfo.getCapability()) &&
220 cap.getUniqueId().equals(relationshipInfo.getCapabilityUid()) &&
221 cap.getOwnerId().equals(relationshipInfo.getCapabilityOwnerId());
224 private NodeTemplateOperation createTestSubject() {
229 public void testGetDefaultHeatTimeout() {
233 result = NodeTemplateOperation.getDefaultHeatTimeout();
237 public void testPrepareInstDeploymentArtifactPerInstance() {
238 NodeTemplateOperation testSubject;
239 Map<String, Object> deploymentResourceArtifacts = new HashMap<>();
240 Map<String, ArtifactDataDefinition> deploymentArtifacts = new HashMap<>();
241 ArtifactDataDefinition artifactDataDefinition = new ArtifactDataDefinition();
242 artifactDataDefinition.setArtifactType("HEAT");
243 artifactDataDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
244 deploymentArtifacts.put("1", artifactDataDefinition);
245 deploymentResourceArtifacts.put("1", artifactDataDefinition);
246 String componentInstanceId = "componentInstanceId";
247 User user = new User();
248 user.setUserId("userId");
249 user.setFirstName("first");
250 user.setLastName("last");
251 String envType = "VfHeatEnv";
252 MapArtifactDataDefinition result;
254 testSubject = createTestSubject();
256 result = testSubject.prepareInstDeploymentArtifactPerInstance(deploymentArtifacts, componentInstanceId, user,
258 Assert.assertEquals(2, result.getMapToscaDataDefinition().size());
264 public void testCreateCapPropertyKey() throws Exception {
266 String instanceId = "";
270 result = NodeTemplateOperation.createCapPropertyKey(key, instanceId);
275 public void testPrepareCalculatedCapabiltyForNodeType() {
276 NodeTemplateOperation testSubject;
277 Map<String, ListCapabilityDataDefinition> capabilities = new HashMap<>();
278 ListCapabilityDataDefinition listCapDataDefinition = new ListCapabilityDataDefinition();
279 List<CapabilityDataDefinition> listToscaDataDefinition = new ArrayList<>();
280 CapabilityDataDefinition capabilityDataDefinition = new CapabilityDefinition();
281 capabilityDataDefinition.setMaxOccurrences("1");
282 listToscaDataDefinition.add(capabilityDataDefinition);
283 listCapDataDefinition.setListToscaDataDefinition(listToscaDataDefinition);
284 capabilities.put("1", listCapDataDefinition);
285 ComponentInstance componentInstance = createCompInstance();
286 MapListCapabilityDataDefinition result;
289 testSubject = createTestSubject();
290 result = testSubject.prepareCalculatedCapabiltyForNodeType(capabilities, componentInstance);
291 Assert.assertEquals(1, result.getMapToscaDataDefinition().size());
296 public void testPrepareCalculatedReqForNodeType() {
297 NodeTemplateOperation testSubject;
298 Map<String, ListRequirementDataDefinition> requirements = new HashMap<>();
299 ListRequirementDataDefinition listReqDataDef = new ListRequirementDataDefinition();
300 List<RequirementDataDefinition> listToscaDataDefinition = new ArrayList<>();
301 RequirementDataDefinition reqDataDefinition = new RequirementDataDefinition();
302 reqDataDefinition.setMaxOccurrences("1");
303 listToscaDataDefinition.add(reqDataDefinition);
304 listReqDataDef.setListToscaDataDefinition(listToscaDataDefinition);
305 requirements.put("1", listReqDataDef);
306 ComponentInstance componentInstance = createCompInstance();
307 MapListRequirementDataDefinition result;
310 testSubject = createTestSubject();
311 result = testSubject.prepareCalculatedRequirementForNodeType(requirements, componentInstance);
312 Assert.assertEquals(1, result.getMapToscaDataDefinition().size());
316 public void testAddGroupInstancesToComponentInstance() throws Exception {
317 NodeTemplateOperation testSubject;
318 Component containerComponent = null;
319 ComponentInstanceDataDefinition componentInstance = null;
320 List<GroupDefinition> groups = null;
321 Map<String, List<ArtifactDefinition>> groupInstancesArtifacts = null;
322 StorageOperationStatus result;
325 testSubject = createTestSubject();
326 groupInstancesArtifacts = null;
327 result = testSubject.addGroupInstancesToComponentInstance(containerComponent, componentInstance, groups,
328 groupInstancesArtifacts);
329 Assert.assertEquals(StorageOperationStatus.OK, result);
333 public void testGenerateCustomizationUUIDOnInstanceGroup() throws Exception {
334 NodeTemplateOperation testSubject;
335 String componentId = "";
336 String instanceId = "";
337 List<String> groupInstances = null;
338 StorageOperationStatus result;
341 testSubject = createTestSubject();
342 groupInstances = null;
343 result = testSubject.generateCustomizationUUIDOnInstanceGroup(componentId, instanceId, groupInstances);
344 Assert.assertEquals(StorageOperationStatus.OK, result);
347 private ComponentInstance createCompInstance() {
348 ComponentInstance componentInstance = new ComponentInstance();
350 componentInstance.setComponentUid(id);
351 componentInstance.setUniqueId(id);
352 componentInstance.setName(id);
353 return componentInstance;