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.HashMap;
52 import java.util.List;
55 import static org.junit.Assert.assertEquals;
56 import static org.junit.Assert.assertSame;
57 import static org.junit.Assert.assertTrue;
58 import static org.mockito.ArgumentMatchers.eq;
59 import static org.mockito.Mockito.when;
61 public class NodeTemplateOperationTest extends ModelTestBase {
63 private final static String COMPONENT_ID = "componentId";
64 private final static String TO_INSTANCE_ID = "toInstanceId";
65 private final static String FROM_INSTANCE_ID = "fromInstanceId";
66 private final static String RELATION_ID = "relationId";
67 private final static String CAPABILITY_OWNER_ID = "capabilityOwnerId";
68 private final static String CAPABILITY_UID = "capabilityUid";
69 private final static String CAPABILITY_NAME = "capabilityName";
70 private final static String REQUIREMENT_OWNER_ID = "requirementOwnerId";
71 private final static String REQUIREMENT_UID = "requirementUid";
72 private final static String REQUIREMENT_NAME = "requirementName";
73 private final static String RELATIONSHIP_TYPE = "relationshipType";
75 private static Map<String, MapListCapabilityDataDefinition> fulfilledCapability;
76 private static Map<String, MapListRequirementDataDefinition> fulfilledRequirement;
77 private static CapabilityDataDefinition capability;
78 private static RequirementDataDefinition requirement;
79 private static RequirementCapabilityRelDef relation;
81 private static TitanDao titanDao;
82 private static NodeTemplateOperation operation;
85 public static void setup() {
87 titanDao = Mockito.mock(TitanDao.class);
88 operation = new NodeTemplateOperation();
89 operation.setTitanDao(titanDao);
90 buildDataDefinition();
93 private static void buildDataDefinition() {
94 buildCapabiltyDataDefinition();
95 buildRequirementDataDefinition();
100 public void testGetFulfilledCapabilityByRelationSuccess(){
101 GraphVertex vertex = Mockito.mock(GraphVertex.class);
102 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
103 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
105 GraphVertex dataVertex = new GraphVertex();
106 dataVertex.setJson(fulfilledCapability);
107 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.left(dataVertex);
108 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_CAPABILITIES), eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
109 Either<CapabilityDataDefinition, StorageOperationStatus> result = operation.getFulfilledCapabilityByRelation(COMPONENT_ID, TO_INSTANCE_ID, relation, this::isBelongingCapability);
110 assertTrue(result.isLeft());
111 assertEquals(result.left().value(), capability);
115 public void testGetFulfilledRequirementByRelationSuccess(){
116 GraphVertex vertex = Mockito.mock(GraphVertex.class);
117 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
118 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
120 GraphVertex dataVertex = new GraphVertex();
121 dataVertex.setJson(fulfilledRequirement);
122 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.left(dataVertex);
123 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_REQUIREMENTS), eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
124 Either<RequirementDataDefinition, StorageOperationStatus> result = operation.getFulfilledRequirementByRelation(COMPONENT_ID, FROM_INSTANCE_ID, relation, this::isBelongingRequirement);
125 assertTrue(result.isLeft());
126 assertEquals(result.left().value(), requirement);
130 public void testGetFulfilledCapabilityByRelationNotFoundFailure(){
131 GraphVertex vertex = Mockito.mock(GraphVertex.class);
132 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
133 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
135 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.right(TitanOperationStatus.NOT_FOUND);
136 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_CAPABILITIES), eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
137 Either<CapabilityDataDefinition, StorageOperationStatus> result = operation.getFulfilledCapabilityByRelation(COMPONENT_ID, TO_INSTANCE_ID, relation, this::isBelongingCapability);
138 assertTrue(result.isRight());
139 assertSame(result.right().value(), StorageOperationStatus.NOT_FOUND);
143 public void testGetFulfilledRequirementByRelationNotFoundFailure(){
144 GraphVertex vertex = Mockito.mock(GraphVertex.class);
145 Either<GraphVertex, TitanOperationStatus> vertexRes = Either.left(vertex);
146 when(titanDao.getVertexById(eq(COMPONENT_ID), eq(JsonParseFlagEnum.ParseAll))).thenReturn(vertexRes);
148 Either<GraphVertex, TitanOperationStatus> childVertexRes = Either.right(TitanOperationStatus.NOT_FOUND);
149 when(titanDao.getChildVertex(eq(vertex), eq(EdgeLabelEnum.FULLFILLED_REQUIREMENTS), eq(JsonParseFlagEnum.ParseJson))).thenReturn(childVertexRes);
150 Either<RequirementDataDefinition, StorageOperationStatus> result = operation.getFulfilledRequirementByRelation(COMPONENT_ID, FROM_INSTANCE_ID, relation, this::isBelongingRequirement);
151 assertTrue(result.isRight());
152 assertSame(result.right().value(), StorageOperationStatus.NOT_FOUND);
155 private static void buildRequirementDataDefinition() {
157 fulfilledRequirement = new HashMap<>();
158 MapListRequirementDataDefinition mapListRequirementDataDefinition = new MapListRequirementDataDefinition();
159 mapListRequirementDataDefinition.add(requirement.getCapability(), requirement);
160 fulfilledRequirement.put(FROM_INSTANCE_ID, mapListRequirementDataDefinition);
164 private static void buildRequirement() {
165 requirement = new RequirementDataDefinition();
166 requirement.setOwnerId(REQUIREMENT_OWNER_ID);
167 requirement.setUniqueId(REQUIREMENT_UID);
168 requirement.setName(REQUIREMENT_NAME);
169 requirement.setRelationship(RELATIONSHIP_TYPE);
172 private static void buildCapabiltyDataDefinition() {
174 fulfilledCapability = new HashMap<>();
175 MapListCapabilityDataDefinition mapListCapabiltyDataDefinition = new MapListCapabilityDataDefinition();
176 mapListCapabiltyDataDefinition.add(capability.getType(), capability);
177 fulfilledCapability.put(TO_INSTANCE_ID, mapListCapabiltyDataDefinition);
180 private static void buildCapability() {
181 capability = new CapabilityDataDefinition();
182 capability.setOwnerId(CAPABILITY_OWNER_ID);
183 capability.setUniqueId(CAPABILITY_UID);
184 capability.setName(CAPABILITY_NAME);
187 private static void buildRelation() {
189 relation = new RequirementCapabilityRelDef();
190 CapabilityRequirementRelationship relationship = new CapabilityRequirementRelationship();
191 RelationshipInfo relationInfo = new RelationshipInfo();
192 relationInfo.setId(RELATION_ID);
193 relationship.setRelation(relationInfo);
195 relation.setRelationships(Lists.newArrayList(relationship));
196 relation.setToNode(TO_INSTANCE_ID);
197 relation.setFromNode(FROM_INSTANCE_ID);
199 relationInfo.setCapabilityOwnerId(CAPABILITY_OWNER_ID);
200 relationInfo.setCapabilityUid(CAPABILITY_UID);
201 relationInfo.setCapability(CAPABILITY_NAME);
202 relationInfo.setRequirementOwnerId(REQUIREMENT_OWNER_ID);
203 relationInfo.setRequirementUid(REQUIREMENT_UID);
204 relationInfo.setRequirement(REQUIREMENT_NAME);
205 RelationshipImpl relationshipImpl = new RelationshipImpl();
206 relationshipImpl.setType(RELATIONSHIP_TYPE);
207 relationInfo.setRelationships(relationshipImpl);
210 private boolean isBelongingRequirement(RelationshipInfo relationshipInfo, RequirementDataDefinition req) {
211 return req.getRelationship().equals(relationshipInfo.getRelationship().getType()) &&
212 req.getName().equals(relationshipInfo.getRequirement()) &&
213 req.getUniqueId().equals(relationshipInfo.getRequirementUid()) &&
214 req.getOwnerId().equals(relationshipInfo.getRequirementOwnerId());
217 private boolean isBelongingCapability(RelationshipInfo relationshipInfo, CapabilityDataDefinition cap) {
218 return cap.getName().equals(relationshipInfo.getCapability()) &&
219 cap.getUniqueId().equals(relationshipInfo.getCapabilityUid()) &&
220 cap.getOwnerId().equals(relationshipInfo.getCapabilityOwnerId());
223 private NodeTemplateOperation createTestSubject() {
228 public void testGetDefaultHeatTimeout() {
232 result = NodeTemplateOperation.getDefaultHeatTimeout();
236 public void testPrepareInstDeploymentArtifactPerInstance() {
237 NodeTemplateOperation testSubject;
238 Map<String, Object> deploymentResourceArtifacts = new HashMap<>();
239 Map<String, ArtifactDataDefinition> deploymentArtifacts = new HashMap<>();
240 ArtifactDataDefinition artifactDataDefinition = new ArtifactDataDefinition();
241 artifactDataDefinition.setArtifactType("HEAT");
242 artifactDataDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
243 deploymentArtifacts.put("1", artifactDataDefinition);
244 deploymentResourceArtifacts.put("1", artifactDataDefinition);
245 String componentInstanceId = "componentInstanceId";
246 User user = new User();
247 user.setUserId("userId");
248 user.setFirstName("first");
249 user.setLastName("last");
250 String envType = "VfHeatEnv";
251 MapArtifactDataDefinition result;
253 testSubject = createTestSubject();
255 result = testSubject.prepareInstDeploymentArtifactPerInstance(deploymentArtifacts, componentInstanceId, user,
257 Assert.assertEquals(2, result.getMapToscaDataDefinition().size());
263 public void testCreateCapPropertyKey() throws Exception {
265 String instanceId = "";
269 result = NodeTemplateOperation.createCapPropertyKey(key, instanceId);
274 public void testPrepareCalculatedCapabiltyForNodeType() throws Exception {
275 NodeTemplateOperation testSubject;
276 Map<String, ListCapabilityDataDefinition> capabilities = null;
277 ComponentInstanceDataDefinition componentInstance = null;
278 MapListCapabilityDataDefinition result;
281 testSubject = createTestSubject();
283 result = testSubject.prepareCalculatedCapabiltyForNodeType(capabilities, componentInstance);
284 Assert.assertEquals(null, result);
289 public void testPrepareCalculatedRequirementForNodeType() throws Exception {
290 NodeTemplateOperation testSubject;
291 Map<String, ListRequirementDataDefinition> requirements = null;
292 ComponentInstanceDataDefinition componentInstance = null;
293 MapListRequirementDataDefinition result;
296 testSubject = createTestSubject();
298 result = testSubject.prepareCalculatedRequirementForNodeType(requirements, componentInstance);
299 Assert.assertEquals(null, result);
304 public void testAddGroupInstancesToComponentInstance() throws Exception {
305 NodeTemplateOperation testSubject;
306 Component containerComponent = null;
307 ComponentInstanceDataDefinition componentInstance = null;
308 List<GroupDefinition> groups = null;
309 Map<String, List<ArtifactDefinition>> groupInstancesArtifacts = null;
310 StorageOperationStatus result;
313 testSubject = createTestSubject();
314 groupInstancesArtifacts = null;
315 result = testSubject.addGroupInstancesToComponentInstance(containerComponent, componentInstance, groups,
316 groupInstancesArtifacts);
317 Assert.assertEquals(StorageOperationStatus.OK, result);
321 public void testGenerateCustomizationUUIDOnInstanceGroup() throws Exception {
322 NodeTemplateOperation testSubject;
323 String componentId = "";
324 String instanceId = "";
325 List<String> groupInstances = null;
326 StorageOperationStatus result;
329 testSubject = createTestSubject();
330 groupInstances = null;
331 result = testSubject.generateCustomizationUUIDOnInstanceGroup(componentId, instanceId, groupInstances);
332 Assert.assertEquals(StorageOperationStatus.OK, result);