2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 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.operations.impl;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertTrue;
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.HashMap;
30 import java.util.List;
32 import java.util.Map.Entry;
34 import fj.data.Either;
35 import org.apache.commons.collections.CollectionUtils;
36 import org.apache.commons.collections4.MapUtils;
37 import org.apache.commons.lang3.tuple.ImmutablePair;
38 import org.junit.Before;
39 import org.junit.BeforeClass;
40 import org.junit.Test;
41 import org.junit.runner.RunWith;
42 import org.mockito.InjectMocks;
43 import org.mockito.Mock;
44 import org.mockito.Mockito;
45 import org.mockito.MockitoAnnotations;
46 import org.mockito.Spy;
47 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
48 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
49 import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphGenericDao;
50 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
51 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
52 import org.openecomp.sdc.be.datatypes.elements.RelationshipInstDataDefinition;
53 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
54 import org.openecomp.sdc.be.model.ModelTestBase;
55 import org.openecomp.sdc.be.model.PropertyConstraint;
56 import org.openecomp.sdc.be.model.PropertyDefinition;
57 import org.openecomp.sdc.be.model.RelationshipTypeDefinition;
58 import org.openecomp.sdc.be.model.operations.api.DerivedFromOperation;
59 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
60 import org.openecomp.sdc.be.model.tosca.ToscaType;
61 import org.openecomp.sdc.be.model.tosca.constraints.GreaterThanConstraint;
62 import org.openecomp.sdc.be.model.tosca.constraints.InRangeConstraint;
63 import org.openecomp.sdc.be.model.tosca.constraints.LessOrEqualConstraint;
64 import org.openecomp.sdc.be.resources.data.ModelData;
65 import org.openecomp.sdc.be.resources.data.RelationshipTypeData;
66 import org.springframework.test.context.ContextConfiguration;
67 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
69 @RunWith(SpringJUnit4ClassRunner.class)
70 @ContextConfiguration("classpath:application-context-test.xml")
71 public class RelationshipTypeOperationTest extends ModelTestBase {
73 private static final String PROP = "prop";
75 private static final String DOT = ".";
78 HealingJanusGraphGenericDao janusGraphGenericDao;
81 PropertyOperation propertyOperation;
84 DerivedFromOperation derivedFromOperation;
88 private RelationshipTypeOperation relationshipTypeOperation;
90 private RelationshipTypeDefinition relationshipTypeDefinition = new RelationshipTypeDefinition();
93 relationshipTypeDefinition.setDescription("desc1");
94 relationshipTypeDefinition.setType("tosca.relationships.Container1");
95 relationshipTypeDefinition.setDerivedFrom("tosca.relationships.Root");
96 relationshipTypeDefinition.setProperties(createPropertyData("prop1"));
97 relationshipTypeDefinition.setUniqueId("tosca.relationships.Container1");
101 public static void setupBeforeClass() {
102 ModelTestBase.init();
106 public void setUp() throws Exception {
107 MockitoAnnotations.initMocks(this);
109 Mockito.doReturn(JanusGraphOperationStatus.OK).when(janusGraphGenericDao).commit();
110 Mockito.doReturn(JanusGraphOperationStatus.OK).when(janusGraphGenericDao).rollback();
114 public void testDummy() {
115 assertNotNull(relationshipTypeOperation);
119 public void testAddRelationshipTypeValidationFailStatusNullInTransactionFalse() {
120 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_CONNECTED))
121 .when(propertyOperation)
122 .getAllTypePropertiesFromAllDerivedFrom(Mockito.anyString(), Mockito.any(), Mockito.any());
124 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
125 .when(janusGraphGenericDao).getNode(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
127 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
128 .findPropertiesOfNode(Mockito.any(), Mockito.anyString());
131 Either<RelationshipTypeDefinition, StorageOperationStatus> addRelationshipType =
132 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, false);
134 assertTrue(addRelationshipType.isRight());
138 public void testAddRelationshipTypeValidationFailStatusPropertiesReturnedInTransactionFalse() {
139 Mockito.doReturn(Either.left(Collections.singletonMap("prop1", new PropertyDefinition()))).when(propertyOperation)
140 .getAllTypePropertiesFromAllDerivedFrom(Mockito.anyString(), Mockito.any(), Mockito.any());
141 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(propertyOperation)
142 .validatePropertiesUniqueness(Mockito.any(), Mockito.any());
144 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
145 .when(janusGraphGenericDao).getNode(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
147 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
148 .findPropertiesOfNode(Mockito.any(), Mockito.anyString());
150 Either<RelationshipTypeDefinition, StorageOperationStatus> addRelationshipType =
151 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, false);
153 assertTrue(addRelationshipType.isRight());
157 public void testGetAllRelationshipTypesNotFound() {
158 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(
159 janusGraphGenericDao).getByCriteriaForModel(NodeTypeEnum.RelationshipType, null, null,
160 RelationshipTypeData.class);
161 Either<Map<String, RelationshipTypeDefinition>, JanusGraphOperationStatus> either = relationshipTypeOperation.getAllRelationshipTypes(null);
163 assertTrue(either.isLeft() && MapUtils.isEmpty(either.left().value()));
167 public void testGetAllRelationshipTypesNotConnnected() {
168 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_CONNECTED)).when(
169 janusGraphGenericDao).getByCriteriaForModel(NodeTypeEnum.RelationshipType, null, null,
170 RelationshipTypeData.class);
171 Either<Map<String, RelationshipTypeDefinition>, JanusGraphOperationStatus> either = relationshipTypeOperation.getAllRelationshipTypes(null);
173 assertTrue(either.isRight() && JanusGraphOperationStatus.NOT_CONNECTED == either.right().value());
177 public void testGetAllRelationshipTypesSuccess() {
178 List<RelationshipTypeData> relationshipTypeDataList = new ArrayList<>();
180 RelationshipTypeData relationshipTypeData1 = new RelationshipTypeData();
181 RelationshipInstDataDefinition relationshipInstDataDefinition1 = new RelationshipInstDataDefinition();
182 relationshipInstDataDefinition1.setUniqueId("tosca.relationships.Root1");
183 relationshipInstDataDefinition1.setType("tosca.relationships.Root1");
184 relationshipTypeData1.setRelationshipTypeDataDefinition(relationshipInstDataDefinition1);
186 relationshipTypeDataList.add(relationshipTypeData1);
188 Mockito.doReturn(Either.left(relationshipTypeDataList))
189 .when(janusGraphGenericDao).getByCriteriaForModel(NodeTypeEnum.RelationshipType, null, null,
190 RelationshipTypeData.class);
192 Mockito.doReturn(Either.left(relationshipTypeData1)).when(janusGraphGenericDao)
193 .getNode(Mockito.anyString(), Mockito.anyString(), Mockito.eq(RelationshipTypeData.class));
195 Mockito.doReturn(Either.left(createPropertyData("prop1"))).when(propertyOperation)
196 .findPropertiesOfNode(NodeTypeEnum.RelationshipType, "tosca.relationships.Root1");
198 RelationshipInstDataDefinition derivedFromRelationshipTypeDefinition = new RelationshipInstDataDefinition();
199 derivedFromRelationshipTypeDefinition.setUniqueId("tosca.relationships.Root1");
200 derivedFromRelationshipTypeDefinition.setType("tosca.relationships.Parent");
202 Mockito.doReturn(Either.left(new RelationshipTypeData(derivedFromRelationshipTypeDefinition)))
203 .when(derivedFromOperation)
204 .getDerivedFromChild("tosca.relationships.Root1", NodeTypeEnum.RelationshipType, RelationshipTypeData.class);
206 Either<Map<String, RelationshipTypeDefinition>, JanusGraphOperationStatus> either =
207 relationshipTypeOperation.getAllRelationshipTypes(null);
209 assertTrue(either.isLeft());
210 RelationshipTypeDefinition relationshipTypeDefinition = either.left().value().get("tosca.relationships.Root1");
211 assertEquals("tosca.relationships.Parent", relationshipTypeDefinition.getDerivedFrom());
213 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND))
214 .when(janusGraphGenericDao).getByCriteriaForModel(NodeTypeEnum.RelationshipType, null, "modelA",
215 RelationshipTypeData.class);
216 either = relationshipTypeOperation.getAllRelationshipTypes("modelA");
217 assertTrue(either.isLeft());
218 assertTrue(MapUtils.isEmpty(either.left().value()));
221 public RelationshipTypeDefinition createRelationship(String relationshipTypeName) {
223 RelationshipTypeDefinition relationshipTypeDefinition = new RelationshipTypeDefinition();
224 relationshipTypeDefinition.setDescription("desc1");
225 relationshipTypeDefinition.setType(relationshipTypeName);
227 Map<String, PropertyDefinition> properties = new HashMap<>();
229 String propName1 = "disk_size";
230 String propName2 = "num_cpus";
232 PropertyDefinition property1 = buildProperty1();
234 properties.put(propName1, property1);
236 PropertyDefinition property2 = buildProperty2();
238 properties.put(propName2, property2);
240 relationshipTypeDefinition.setProperties(properties);
242 Either<RelationshipTypeDefinition, StorageOperationStatus> addRelationshipType1 =
243 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, true);
245 RelationshipTypeDefinition relationshipTypeDefinitionCreated = addRelationshipType1.left().value();
246 Either<RelationshipTypeDefinition, StorageOperationStatus> relationshipType =
247 relationshipTypeOperation.getRelationshipType(relationshipTypeDefinitionCreated.getUniqueId(), true);
248 assertTrue("check relationship type fetched", relationshipType.isLeft());
249 RelationshipTypeDefinition fetchedCTD = relationshipType.left().value();
251 Map<String, PropertyDefinition> fetchedProps = fetchedCTD.getProperties();
253 compareProperties(fetchedProps, properties);
259 private void compareProperties(Map<String, PropertyDefinition> first, Map<String, PropertyDefinition> second) {
261 assertTrue("check properties are full or empty",
262 ((first == null && second == null) || (first != null && second != null)));
264 assertEquals("check properties size", first.size(), second.size());
266 for (Entry<String, PropertyDefinition> entry : first.entrySet()) {
268 String propName = entry.getKey();
269 PropertyDefinition secondPD = second.get(propName);
270 assertNotNull("Cannot find property " + propName + " in " + second, secondPD);
272 PropertyDefinition firstPD = entry.getValue();
274 comparePropertyDefinition(firstPD, secondPD);
281 private void comparePropertyDefinition(PropertyDefinition first, PropertyDefinition second) {
283 assertTrue("check objects are full or empty",
284 ((first == null && second == null) || (first != null && second != null)));
286 assertTrue("check property description", compareValue(first.getDescription(), second.getDescription()));
287 assertTrue("check property default value", compareValue((String) first.getDefaultValue(),
288 (String) second.getDefaultValue()));
289 assertTrue("check property type", compareValue(first.getType(), second.getType()));
290 compareList(first.getConstraints(), second.getConstraints());
295 private void compareList(List<PropertyConstraint> first, List<PropertyConstraint> second) {
297 assertTrue("check lists are full or empty",
298 ((first == null && second == null) || (first != null && second != null)));
300 assertEquals("check list size", first.size(), second.size());
304 private PropertyDefinition buildProperty2() {
305 PropertyDefinition property2 = new PropertyDefinition();
306 property2.setDefaultValue("2");
307 property2.setDescription("Number of (actual or virtual) CPUs associated with the Compute node.");
308 property2.setType(ToscaType.INTEGER.name().toLowerCase());
309 List<PropertyConstraint> constraints3 = new ArrayList<>();
310 List<String> range = new ArrayList<>();
313 InRangeConstraint propertyConstraint3 = new InRangeConstraint(range);
314 constraints3.add(propertyConstraint3);
315 property2.setConstraints(constraints3);
319 private PropertyDefinition buildProperty1() {
320 PropertyDefinition property1 = new PropertyDefinition();
321 property1.setDefaultValue("10");
322 property1.setDescription("Size of the local disk, in Gigabytes (GB), "
323 + "available to applications running on the Compute node.");
324 property1.setType(ToscaType.INTEGER.name().toLowerCase());
325 List<PropertyConstraint> constraints = new ArrayList<>();
326 GreaterThanConstraint propertyConstraint1 = new GreaterThanConstraint("0");
327 constraints.add(propertyConstraint1);
329 LessOrEqualConstraint propertyConstraint2 = new LessOrEqualConstraint("10");
330 constraints.add(propertyConstraint2);
332 property1.setConstraints(constraints);
336 private boolean compareValue(String first, String second) {
338 if (first == null && second == null) {
342 return first.equals(second);
348 public void setOperations(RelationshipTypeOperation relationshipTypeOperation) {
349 this.relationshipTypeOperation = relationshipTypeOperation;
353 public void testAddRelationshipType() {
355 RelationshipTypeData relationshipTypeData = new RelationshipTypeData();
356 RelationshipInstDataDefinition relationshipInstDataDefinition1 = new RelationshipInstDataDefinition();
357 relationshipInstDataDefinition1.setUniqueId("tosca.relationships.Root");
358 relationshipInstDataDefinition1.setType("tosca.relationships.Root");
359 relationshipTypeData.setRelationshipTypeDataDefinition(relationshipInstDataDefinition1);
361 RelationshipTypeDefinition relationshipTypeDefinition = new RelationshipTypeDefinition(relationshipTypeData);
362 relationshipTypeDefinition.setProperties(createPropertyData("prop1"));
363 relationshipTypeDefinition.setDerivedFrom("tosca.relationships.Root");
367 Mockito.doReturn(Either.left(Collections.singletonMap("prop1", new PropertyDefinition()))).when(propertyOperation)
368 .getAllTypePropertiesFromAllDerivedFrom(Mockito.anyString(), Mockito.any(), Mockito.any());
370 Mockito.doReturn(Either.left(new ArrayList<>(relationshipTypeDefinition.getProperties().values()))).when(propertyOperation)
371 .validatePropertiesUniqueness(Mockito.any(), Mockito.any());
373 Mockito.doReturn(Either.left(relationshipTypeData)).when(janusGraphGenericDao)
374 .createNode(Mockito.any(), Mockito.eq(RelationshipTypeData.class));
376 Mockito.doReturn(Either.left(new HashMap())).when(propertyOperation)
377 .addPropertiesToElementType(Mockito.anyString(), Mockito.any(), Mockito.anyMap());
379 Mockito.doReturn(Either.left(relationshipTypeDefinition))
380 .when(relationshipTypeOperation).getRelationshipTypeByUid(Mockito.anyString());
382 Mockito.doReturn(Either.left(new GraphRelation()))
383 .when(derivedFromOperation)
384 .addDerivedFromRelation(Mockito.anyString(), Mockito.anyString(), Mockito.any());
386 Mockito.doReturn(Either.left(relationshipTypeDefinition))
387 .when(relationshipTypeOperation).getRelationshipType(Mockito.anyString(), Mockito.anyBoolean());
389 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
390 .findPropertiesOfNode(Mockito.any(), Mockito.anyString());
392 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(janusGraphGenericDao)
393 .getChild(Mockito.any(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.eq(RelationshipTypeData.class));
395 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
396 .when(janusGraphGenericDao).getNode(Mockito.anyString(), Mockito.any(), Mockito.eq(RelationshipTypeData.class), Mockito.any());
399 ModelData modelData = new ModelData("modelA", "modelA");
400 ImmutablePair<ModelData, GraphEdge> pair = new ImmutablePair<>(modelData, new GraphEdge());
401 Mockito.doReturn(Either.left(pair))
402 .when(janusGraphGenericDao).getParentNode("uid", relationshipInstDataDefinition1.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model, ModelData.class);
404 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
405 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, true);
407 assertTrue(either.isLeft());
411 public void testAddRelationshipTypeToModel() {
413 final String relationshipName = "tosca.relationships.MyRelationship";
414 final String derivedFromRelationshipName = "tosca.relationships.Root";
415 final String modelName = "modelA";
417 RelationshipTypeDefinition relationshipTypeDefinition = new RelationshipTypeDefinition();
418 relationshipTypeDefinition.setProperties(createPropertyData("prop1"));
419 relationshipTypeDefinition.setUniqueId(modelName + DOT + relationshipName);
420 relationshipTypeDefinition.setType(relationshipName);
421 relationshipTypeDefinition.setModel(modelName);
422 relationshipTypeDefinition.setDerivedFrom(derivedFromRelationshipName);
424 RelationshipTypeData derivedFromRelationshipTypeData = new RelationshipTypeData();
425 RelationshipInstDataDefinition dervideFromRelationshipInstDataDefinition = new RelationshipInstDataDefinition();
426 dervideFromRelationshipInstDataDefinition.setUniqueId("modelA.tosca.relationships.Root");
427 dervideFromRelationshipInstDataDefinition.setType("tosca.relationships.Root");
428 derivedFromRelationshipTypeData.setRelationshipTypeDataDefinition(dervideFromRelationshipInstDataDefinition);
430 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND))
431 .when(janusGraphGenericDao).getNode("uid", relationshipTypeDefinition.getUniqueId(), RelationshipTypeData.class);
433 Mockito.doReturn(Either.left(derivedFromRelationshipTypeData))
434 .when(janusGraphGenericDao).getNode("type", "tosca.relationships.Root", RelationshipTypeData.class, "modelA");
436 Mockito.doReturn(Either.left(Collections.singletonMap("prop1", new PropertyDefinition()))).when(propertyOperation)
437 .getAllTypePropertiesFromAllDerivedFrom(modelName + DOT + derivedFromRelationshipName, NodeTypeEnum.RelationshipType, RelationshipTypeData.class);
439 Mockito.doReturn(Either.left(new ArrayList<>(relationshipTypeDefinition.getProperties().values()))).when(propertyOperation)
440 .validatePropertiesUniqueness(Mockito.any(), Mockito.any());
442 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition))).when(janusGraphGenericDao)
443 .createNode(Mockito.any(), Mockito.eq(RelationshipTypeData.class));
445 Mockito.doReturn(Either.left(new HashMap())).when(propertyOperation)
446 .addPropertiesToElementType(Mockito.anyString(), Mockito.any(), Mockito.anyMap());
448 Mockito.doReturn(Either.left(new GraphRelation())).when(janusGraphGenericDao)
449 .createRelation(Mockito.any(), Mockito.any(), Mockito.eq(GraphEdgeLabels.MODEL_ELEMENT), Mockito.any());
451 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
452 .findPropertiesOfNode(NodeTypeEnum.RelationshipType, derivedFromRelationshipTypeData.getUniqueId());
454 Mockito.doReturn(Either.left(Collections.singletonMap("prop1", new PropertyDefinition()))).when(propertyOperation)
455 .findPropertiesOfNode(NodeTypeEnum.RelationshipType, relationshipTypeDefinition.getUniqueId());
457 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(janusGraphGenericDao)
458 .getChild("uid", derivedFromRelationshipTypeData.getUniqueId(), GraphEdgeLabels.DERIVED_FROM, NodeTypeEnum.RelationshipType, RelationshipTypeData.class);
460 Mockito.doReturn(Either.left(new ImmutablePair(new RelationshipTypeData(relationshipTypeDefinition), null))).when(janusGraphGenericDao)
461 .getChild("uid", relationshipTypeDefinition.getUniqueId(), GraphEdgeLabels.DERIVED_FROM, NodeTypeEnum.RelationshipType, RelationshipTypeData.class);
464 Mockito.doReturn(Either.left(new GraphRelation())).when(derivedFromOperation)
465 .addDerivedFromRelation(relationshipTypeDefinition.getUniqueId(), derivedFromRelationshipTypeData.getUniqueId(), NodeTypeEnum.RelationshipType);
467 ModelData modelData = new ModelData("modelA", "modelA");
468 ImmutablePair<ModelData, GraphEdge> pair = new ImmutablePair<>(modelData, new GraphEdge());
469 Mockito.doReturn(Either.left(pair))
470 .when(janusGraphGenericDao).getParentNode("uid", dervideFromRelationshipInstDataDefinition.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model, ModelData.class);
472 Mockito.doReturn(Either.left(pair))
473 .when(janusGraphGenericDao).getParentNode("uid", relationshipTypeDefinition.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model, ModelData.class);
475 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
476 .when(janusGraphGenericDao).getNode("uid", relationshipTypeDefinition.getUniqueId(), RelationshipTypeData.class);
478 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
479 .when(janusGraphGenericDao).getNode("type", relationshipTypeDefinition.getUniqueId(), RelationshipTypeData.class, "modelA");
481 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
482 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, true);
484 assertTrue(either.isLeft());
488 public void testGetRelationshipTypeNotConnected() {
489 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_CONNECTED))
490 .when(relationshipTypeOperation).getRelationshipTypeByUid(Mockito.anyString());
492 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
493 relationshipTypeOperation.getRelationshipType(Mockito.anyString(), Mockito.anyBoolean());
495 assertTrue(either.isRight());
499 public void testGetRelationshipTypeSuccess() {
500 Mockito.doReturn(Either.left(relationshipTypeDefinition))
501 .when(relationshipTypeOperation).getRelationshipTypeByUid(Mockito.anyString());
503 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
504 relationshipTypeOperation.getRelationshipType(Mockito.anyString(), Mockito.anyBoolean());
506 assertTrue(either.isLeft());
510 public void testUpdateRelationshipType() {
511 RelationshipTypeDefinition newRelationshipTypeDefinition = new RelationshipTypeDefinition();
512 newRelationshipTypeDefinition.setUniqueId("tosca.relationships.Container2");
513 newRelationshipTypeDefinition.setDescription("desc2");
514 newRelationshipTypeDefinition.setType("tosca.relationships.Container2");
515 newRelationshipTypeDefinition.setDerivedFrom("tosca.relationships.Root");
516 newRelationshipTypeDefinition.setProperties(createPropertyData("prop1"));
518 Mockito.doReturn(Either.left(new RelationshipTypeData(newRelationshipTypeDefinition))).when(
519 janusGraphGenericDao)
520 .updateNode(Mockito.any(), Mockito.eq(RelationshipTypeData.class));
522 Mockito.doReturn(Either.left(newRelationshipTypeDefinition.getProperties()))
523 .when(propertyOperation).deletePropertiesAssociatedToNode(Mockito.any(), Mockito.anyString());
525 Mockito.doReturn(Either.left(newRelationshipTypeDefinition.getProperties()))
526 .when(propertyOperation).addPropertiesToElementType(Mockito.anyString(), Mockito.any(), Mockito.anyMap());
528 Mockito.doReturn(Either.left(newRelationshipTypeDefinition)).when(relationshipTypeOperation)
529 .getRelationshipTypeByUid(Mockito.anyString());
531 Mockito.doReturn(StorageOperationStatus.OK).when(derivedFromOperation)
532 .removeDerivedFromRelation(Mockito.anyString(), Mockito.anyString(), Mockito.any());
534 Mockito.doReturn(Either.left(new GraphRelation()))
535 .when(derivedFromOperation)
536 .addDerivedFromRelation(Mockito.anyString(), Mockito.anyString(), Mockito.any());
538 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
539 .when(janusGraphGenericDao).getNode(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
541 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
542 .findPropertiesOfNode(Mockito.any(), Mockito.anyString());
544 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(janusGraphGenericDao)
545 .getChild(Mockito.any(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.eq(RelationshipTypeData.class));
547 ModelData modelData = new ModelData("modelA", "modelA");
548 ImmutablePair<ModelData, GraphEdge> pair = new ImmutablePair<>(modelData, new GraphEdge());
549 Mockito.doReturn(Either.left(pair))
550 .when(janusGraphGenericDao).getParentNode("uid", newRelationshipTypeDefinition.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model, ModelData.class);
552 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
553 relationshipTypeOperation.updateRelationshipType(relationshipTypeDefinition,
554 newRelationshipTypeDefinition, false);
556 assertTrue(either.isLeft());
560 public void testGetRelationshipTypeByUid() {
561 RelationshipTypeData relationshipTypeData = new RelationshipTypeData(relationshipTypeDefinition);
563 Mockito.doReturn(Either.left(relationshipTypeData)).when(janusGraphGenericDao)
564 .getNode(Mockito.anyString(), Mockito.any(), Mockito.eq(RelationshipTypeData.class));
566 Mockito.doReturn(Either.left(relationshipTypeDefinition.getProperties()))
567 .when(propertyOperation).findPropertiesOfNode(Mockito.any(), Mockito.anyString());
569 RelationshipTypeDefinition childRelationshipTypeDefinition = new RelationshipTypeDefinition();
570 childRelationshipTypeDefinition.setType("tosca.relationships.ContainerChild");
572 Mockito.doReturn(Either.left(new ImmutablePair(new RelationshipTypeData(childRelationshipTypeDefinition), null))).when(
573 janusGraphGenericDao)
574 .getChild(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(),
575 Mockito.eq(RelationshipTypeData.class));
577 ModelData modelData = new ModelData("modelA", "modelA");
578 ImmutablePair<ModelData, GraphEdge> pair = new ImmutablePair<>(modelData, new GraphEdge());
579 Mockito.doReturn(Either.left(pair))
580 .when(janusGraphGenericDao).getParentNode("uid", relationshipTypeDefinition.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model, ModelData.class);
582 Either<RelationshipTypeDefinition, JanusGraphOperationStatus> either =
583 relationshipTypeOperation.getRelationshipTypeByUid("tosca.relationships.Container1");
585 assertTrue(either.isLeft()
586 && "tosca.relationships.ContainerChild".equals(either.left().value().getDerivedFrom()));
589 private Map<String, PropertyDefinition> createPropertyData(String value) {
590 PropertyDefinition propertyDefinition = new PropertyDefinition();
591 propertyDefinition.setDefaultValue(value);
592 propertyDefinition.setDescription(PROP + "_" + value);
593 propertyDefinition.setType(ToscaType.INTEGER.name().toLowerCase());
594 List<PropertyConstraint> constraints = new ArrayList<>();
595 List<String> range = new ArrayList<>();
598 InRangeConstraint propertyConstraint = new InRangeConstraint(range);
599 constraints.add(propertyConstraint);
600 propertyDefinition.setConstraints(constraints);
601 Map<String, PropertyDefinition> propertiesMap = new HashMap<>();
602 propertiesMap.put(PROP, propertyDefinition);
603 return propertiesMap;