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 fj.data.Either;
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.Collections;
31 import java.util.HashMap;
32 import java.util.List;
34 import java.util.Map.Entry;
35 import org.apache.commons.collections4.MapUtils;
36 import org.apache.commons.lang3.tuple.ImmutablePair;
37 import org.junit.jupiter.api.BeforeAll;
38 import org.junit.jupiter.api.BeforeEach;
39 import org.junit.jupiter.api.Test;
40 import org.mockito.InjectMocks;
41 import org.mockito.Mock;
42 import org.mockito.Mockito;
43 import org.mockito.MockitoAnnotations;
44 import org.mockito.Spy;
45 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
46 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
47 import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphGenericDao;
48 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
49 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
50 import org.openecomp.sdc.be.datatypes.elements.RelationshipInstDataDefinition;
51 import org.openecomp.sdc.be.datatypes.enums.ModelTypeEnum;
52 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
53 import org.openecomp.sdc.be.model.ModelTestBase;
54 import org.openecomp.sdc.be.model.PropertyConstraint;
55 import org.openecomp.sdc.be.model.PropertyDefinition;
56 import org.openecomp.sdc.be.model.RelationshipTypeDefinition;
57 import org.openecomp.sdc.be.model.operations.api.DerivedFromOperation;
58 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
59 import org.openecomp.sdc.be.model.tosca.ToscaType;
60 import org.openecomp.sdc.be.model.tosca.constraints.GreaterThanConstraint;
61 import org.openecomp.sdc.be.model.tosca.constraints.InRangeConstraint;
62 import org.openecomp.sdc.be.model.tosca.constraints.LessOrEqualConstraint;
63 import org.openecomp.sdc.be.resources.data.ModelData;
64 import org.openecomp.sdc.be.resources.data.RelationshipTypeData;
65 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
67 @SpringJUnitConfig(locations = "classpath:application-context-test.xml")
68 public class RelationshipTypeOperationTest extends ModelTestBase {
70 private static final String PROP = "prop";
72 private static final String DOT = ".";
75 HealingJanusGraphGenericDao janusGraphGenericDao;
78 PropertyOperation propertyOperation;
81 DerivedFromOperation derivedFromOperation;
85 private RelationshipTypeOperation relationshipTypeOperation;
87 private RelationshipTypeDefinition relationshipTypeDefinition = new RelationshipTypeDefinition();
90 relationshipTypeDefinition.setDescription("desc1");
91 relationshipTypeDefinition.setType("tosca.relationships.Container1");
92 relationshipTypeDefinition.setDerivedFrom("tosca.relationships.Root");
93 relationshipTypeDefinition.setProperties(createPropertyData("prop1"));
94 relationshipTypeDefinition.setUniqueId("tosca.relationships.Container1");
98 public static void setupBeforeClass() {
103 public void setUp() throws Exception {
104 MockitoAnnotations.openMocks(this);
106 Mockito.doReturn(JanusGraphOperationStatus.OK).when(janusGraphGenericDao).commit();
107 Mockito.doReturn(JanusGraphOperationStatus.OK).when(janusGraphGenericDao).rollback();
111 public void testDummy() {
112 assertNotNull(relationshipTypeOperation);
116 public void testAddRelationshipTypeValidationFailStatusNullInTransactionFalse() {
117 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_CONNECTED))
118 .when(propertyOperation)
119 .getAllTypePropertiesFromAllDerivedFrom(Mockito.anyString(), Mockito.any(), Mockito.any());
121 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
122 .when(janusGraphGenericDao).getNode(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
124 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
125 .findPropertiesOfNode(Mockito.any(), Mockito.anyString());
127 Either<RelationshipTypeDefinition, StorageOperationStatus> addRelationshipType =
128 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, false);
130 assertTrue(addRelationshipType.isRight());
134 public void testAddRelationshipTypeValidationFailStatusPropertiesReturnedInTransactionFalse() {
135 Mockito.doReturn(Either.left(Collections.singletonMap("prop1", new PropertyDefinition()))).when(propertyOperation)
136 .getAllTypePropertiesFromAllDerivedFrom(Mockito.anyString(), Mockito.any(), Mockito.any());
137 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(propertyOperation)
138 .validatePropertiesUniqueness(Mockito.any(), Mockito.any());
140 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
141 .when(janusGraphGenericDao).getNode(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
143 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
144 .findPropertiesOfNode(Mockito.any(), Mockito.anyString());
146 Either<RelationshipTypeDefinition, StorageOperationStatus> addRelationshipType =
147 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, false);
149 assertTrue(addRelationshipType.isRight());
153 public void testGetAllRelationshipTypesNotFound() {
154 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(
155 janusGraphGenericDao).getByCriteriaForModel(NodeTypeEnum.RelationshipType, null, null,
156 RelationshipTypeData.class);
157 Either<Map<String, RelationshipTypeDefinition>, JanusGraphOperationStatus> either = relationshipTypeOperation.getAllRelationshipTypes(null);
159 assertTrue(either.isLeft() && MapUtils.isEmpty(either.left().value()));
163 public void testGetAllRelationshipTypesNotConnnected() {
164 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_CONNECTED)).when(
165 janusGraphGenericDao).getByCriteriaForModel(NodeTypeEnum.RelationshipType, null, null,
166 RelationshipTypeData.class);
167 Either<Map<String, RelationshipTypeDefinition>, JanusGraphOperationStatus> either = relationshipTypeOperation.getAllRelationshipTypes(null);
169 assertTrue(either.isRight() && JanusGraphOperationStatus.NOT_CONNECTED == either.right().value());
173 public void testGetAllRelationshipTypesSuccess() {
174 List<RelationshipTypeData> relationshipTypeDataList = new ArrayList<>();
176 RelationshipTypeData relationshipTypeData1 = new RelationshipTypeData();
177 RelationshipInstDataDefinition relationshipInstDataDefinition1 = new RelationshipInstDataDefinition();
178 relationshipInstDataDefinition1.setUniqueId("tosca.relationships.Root1");
179 relationshipInstDataDefinition1.setType("tosca.relationships.Root1");
180 relationshipTypeData1.setRelationshipTypeDataDefinition(relationshipInstDataDefinition1);
182 relationshipTypeDataList.add(relationshipTypeData1);
184 Mockito.doReturn(Either.left(relationshipTypeDataList))
185 .when(janusGraphGenericDao).getByCriteriaForModel(NodeTypeEnum.RelationshipType, null, null,
186 RelationshipTypeData.class);
188 Mockito.doReturn(Either.left(relationshipTypeData1)).when(janusGraphGenericDao)
189 .getNode(Mockito.anyString(), Mockito.anyString(), Mockito.eq(RelationshipTypeData.class));
191 Mockito.doReturn(Either.left(createPropertyData("prop1"))).when(propertyOperation)
192 .findPropertiesOfNode(NodeTypeEnum.RelationshipType, "tosca.relationships.Root1");
194 RelationshipInstDataDefinition derivedFromRelationshipTypeDefinition = new RelationshipInstDataDefinition();
195 derivedFromRelationshipTypeDefinition.setUniqueId("tosca.relationships.Root1");
196 derivedFromRelationshipTypeDefinition.setType("tosca.relationships.Parent");
198 Mockito.doReturn(Either.left(new RelationshipTypeData(derivedFromRelationshipTypeDefinition)))
199 .when(derivedFromOperation)
200 .getDerivedFromChild("tosca.relationships.Root1", NodeTypeEnum.RelationshipType, RelationshipTypeData.class);
202 Either<Map<String, RelationshipTypeDefinition>, JanusGraphOperationStatus> either =
203 relationshipTypeOperation.getAllRelationshipTypes(null);
205 assertTrue(either.isLeft());
206 RelationshipTypeDefinition relationshipTypeDefinition = either.left().value().get("tosca.relationships.Root1");
207 assertEquals("tosca.relationships.Parent", relationshipTypeDefinition.getDerivedFrom());
209 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND))
210 .when(janusGraphGenericDao).getByCriteriaForModel(NodeTypeEnum.RelationshipType, null, "modelA",
211 RelationshipTypeData.class);
212 either = relationshipTypeOperation.getAllRelationshipTypes("modelA");
213 assertTrue(either.isLeft());
214 assertTrue(MapUtils.isEmpty(either.left().value()));
217 public RelationshipTypeDefinition createRelationship(String relationshipTypeName) {
219 RelationshipTypeDefinition relationshipTypeDefinition = new RelationshipTypeDefinition();
220 relationshipTypeDefinition.setDescription("desc1");
221 relationshipTypeDefinition.setType(relationshipTypeName);
223 Map<String, PropertyDefinition> properties = new HashMap<>();
225 String propName1 = "disk_size";
226 String propName2 = "num_cpus";
228 PropertyDefinition property1 = buildProperty1();
230 properties.put(propName1, property1);
232 PropertyDefinition property2 = buildProperty2();
234 properties.put(propName2, property2);
236 relationshipTypeDefinition.setProperties(properties);
238 Either<RelationshipTypeDefinition, StorageOperationStatus> addRelationshipType1 =
239 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, true);
241 RelationshipTypeDefinition relationshipTypeDefinitionCreated = addRelationshipType1.left().value();
242 Either<RelationshipTypeDefinition, StorageOperationStatus> relationshipType =
243 relationshipTypeOperation.getRelationshipType(relationshipTypeDefinitionCreated.getUniqueId(), true);
244 assertTrue("check relationship type fetched", relationshipType.isLeft());
245 RelationshipTypeDefinition fetchedCTD = relationshipType.left().value();
247 Map<String, PropertyDefinition> fetchedProps = fetchedCTD.getProperties();
249 compareProperties(fetchedProps, properties);
255 private void compareProperties(Map<String, PropertyDefinition> first, Map<String, PropertyDefinition> second) {
257 assertTrue("check properties are full or empty",
258 ((first == null && second == null) || (first != null && second != null)));
260 assertEquals("check properties size", first.size(), second.size());
262 for (Entry<String, PropertyDefinition> entry : first.entrySet()) {
264 String propName = entry.getKey();
265 PropertyDefinition secondPD = second.get(propName);
266 assertNotNull("Cannot find property " + propName + " in " + second, secondPD);
268 PropertyDefinition firstPD = entry.getValue();
270 comparePropertyDefinition(firstPD, secondPD);
277 private void comparePropertyDefinition(PropertyDefinition first, PropertyDefinition second) {
279 assertTrue("check objects are full or empty",
280 ((first == null && second == null) || (first != null && second != null)));
282 assertTrue("check property description", compareValue(first.getDescription(), second.getDescription()));
283 assertTrue("check property default value", compareValue((String) first.getDefaultValue(),
284 (String) second.getDefaultValue()));
285 assertTrue("check property type", compareValue(first.getType(), second.getType()));
286 compareList(first.getConstraints(), second.getConstraints());
291 private void compareList(List<PropertyConstraint> first, List<PropertyConstraint> second) {
293 assertTrue("check lists are full or empty",
294 ((first == null && second == null) || (first != null && second != null)));
296 assertEquals("check list size", first.size(), second.size());
300 private PropertyDefinition buildProperty2() {
301 PropertyDefinition property2 = new PropertyDefinition();
302 property2.setDefaultValue("2");
303 property2.setDescription("Number of (actual or virtual) CPUs associated with the Compute node.");
304 property2.setType(ToscaType.INTEGER.name().toLowerCase());
305 List<PropertyConstraint> constraints3 = new ArrayList<>();
306 InRangeConstraint propertyConstraint3 = new InRangeConstraint(Arrays.asList("1", "4"));
307 constraints3.add(propertyConstraint3);
308 property2.setConstraints(constraints3);
312 private PropertyDefinition buildProperty1() {
313 PropertyDefinition property1 = new PropertyDefinition();
314 property1.setDefaultValue("10");
315 property1.setDescription("Size of the local disk, in Gigabytes (GB), "
316 + "available to applications running on the Compute node.");
317 property1.setType(ToscaType.INTEGER.name().toLowerCase());
318 List<PropertyConstraint> constraints = new ArrayList<>();
319 GreaterThanConstraint propertyConstraint1 = new GreaterThanConstraint("0");
320 constraints.add(propertyConstraint1);
322 LessOrEqualConstraint propertyConstraint2 = new LessOrEqualConstraint("10");
323 constraints.add(propertyConstraint2);
325 property1.setConstraints(constraints);
329 private boolean compareValue(String first, String second) {
331 if (first == null && second == null) {
335 return first.equals(second);
341 public void setOperations(RelationshipTypeOperation relationshipTypeOperation) {
342 this.relationshipTypeOperation = relationshipTypeOperation;
346 public void testAddRelationshipType() {
348 RelationshipTypeData relationshipTypeData = new RelationshipTypeData();
349 RelationshipInstDataDefinition relationshipInstDataDefinition1 = new RelationshipInstDataDefinition();
350 relationshipInstDataDefinition1.setUniqueId("tosca.relationships.Root");
351 relationshipInstDataDefinition1.setType("tosca.relationships.Root");
352 relationshipTypeData.setRelationshipTypeDataDefinition(relationshipInstDataDefinition1);
354 RelationshipTypeDefinition relationshipTypeDefinition = new RelationshipTypeDefinition(relationshipTypeData);
355 relationshipTypeDefinition.setProperties(createPropertyData("prop1"));
356 relationshipTypeDefinition.setDerivedFrom("tosca.relationships.Root");
358 Mockito.doReturn(Either.left(Collections.singletonMap("prop1", new PropertyDefinition()))).when(propertyOperation)
359 .getAllTypePropertiesFromAllDerivedFrom(Mockito.anyString(), Mockito.any(), Mockito.any());
361 Mockito.doReturn(Either.left(new ArrayList<>(relationshipTypeDefinition.getProperties().values()))).when(propertyOperation)
362 .validatePropertiesUniqueness(Mockito.any(), Mockito.any());
364 Mockito.doReturn(Either.left(relationshipTypeData)).when(janusGraphGenericDao)
365 .createNode(Mockito.any(), Mockito.eq(RelationshipTypeData.class));
367 Mockito.doReturn(Either.left(new HashMap())).when(propertyOperation)
368 .addPropertiesToElementType(Mockito.anyString(), Mockito.any(), Mockito.anyMap());
370 Mockito.doReturn(Either.left(relationshipTypeDefinition))
371 .when(relationshipTypeOperation).getRelationshipTypeByUid(Mockito.anyString());
373 Mockito.doReturn(Either.left(new GraphRelation()))
374 .when(derivedFromOperation)
375 .addDerivedFromRelation(Mockito.anyString(), Mockito.anyString(), Mockito.any());
377 Mockito.doReturn(Either.left(relationshipTypeDefinition))
378 .when(relationshipTypeOperation).getRelationshipType(Mockito.anyString(), Mockito.anyBoolean());
380 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
381 .findPropertiesOfNode(Mockito.any(), Mockito.anyString());
383 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(janusGraphGenericDao)
384 .getChild(Mockito.any(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.eq(RelationshipTypeData.class));
386 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
387 .when(janusGraphGenericDao).getNode(Mockito.anyString(), Mockito.any(), Mockito.eq(RelationshipTypeData.class), Mockito.any());
389 ModelData modelData = new ModelData("modelA", "modelA", ModelTypeEnum.NORMATIVE);
390 ImmutablePair<ModelData, GraphEdge> pair = new ImmutablePair<>(modelData, new GraphEdge());
391 Mockito.doReturn(Either.left(pair))
392 .when(janusGraphGenericDao)
393 .getParentNode("uid", relationshipInstDataDefinition1.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model, ModelData.class);
395 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
396 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, true);
398 assertTrue(either.isLeft());
402 public void testAddRelationshipTypeToModel() {
404 final String relationshipName = "tosca.relationships.MyRelationship";
405 final String derivedFromRelationshipName = "tosca.relationships.Root";
406 final String modelName = "modelA";
408 RelationshipTypeDefinition relationshipTypeDefinition = new RelationshipTypeDefinition();
409 relationshipTypeDefinition.setProperties(createPropertyData("prop1"));
410 relationshipTypeDefinition.setUniqueId(modelName + DOT + relationshipName);
411 relationshipTypeDefinition.setType(relationshipName);
412 relationshipTypeDefinition.setModel(modelName);
413 relationshipTypeDefinition.setDerivedFrom(derivedFromRelationshipName);
415 RelationshipTypeData derivedFromRelationshipTypeData = new RelationshipTypeData();
416 RelationshipInstDataDefinition dervideFromRelationshipInstDataDefinition = new RelationshipInstDataDefinition();
417 dervideFromRelationshipInstDataDefinition.setUniqueId("modelA.tosca.relationships.Root");
418 dervideFromRelationshipInstDataDefinition.setType("tosca.relationships.Root");
419 derivedFromRelationshipTypeData.setRelationshipTypeDataDefinition(dervideFromRelationshipInstDataDefinition);
421 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND))
422 .when(janusGraphGenericDao).getNode("uid", relationshipTypeDefinition.getUniqueId(), RelationshipTypeData.class);
424 Mockito.doReturn(Either.left(derivedFromRelationshipTypeData))
425 .when(janusGraphGenericDao).getNode("type", "tosca.relationships.Root", RelationshipTypeData.class, "modelA");
427 Mockito.doReturn(Either.left(Collections.singletonMap("prop1", new PropertyDefinition()))).when(propertyOperation)
428 .getAllTypePropertiesFromAllDerivedFrom(modelName + DOT + derivedFromRelationshipName, NodeTypeEnum.RelationshipType,
429 RelationshipTypeData.class);
431 Mockito.doReturn(Either.left(new ArrayList<>(relationshipTypeDefinition.getProperties().values()))).when(propertyOperation)
432 .validatePropertiesUniqueness(Mockito.any(), Mockito.any());
434 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition))).when(janusGraphGenericDao)
435 .createNode(Mockito.any(), Mockito.eq(RelationshipTypeData.class));
437 Mockito.doReturn(Either.left(new HashMap())).when(propertyOperation)
438 .addPropertiesToElementType(Mockito.anyString(), Mockito.any(), Mockito.anyMap());
440 Mockito.doReturn(Either.left(new GraphRelation())).when(janusGraphGenericDao)
441 .createRelation(Mockito.any(), Mockito.any(), Mockito.eq(GraphEdgeLabels.MODEL_ELEMENT), Mockito.any());
443 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
444 .findPropertiesOfNode(NodeTypeEnum.RelationshipType, derivedFromRelationshipTypeData.getUniqueId());
446 Mockito.doReturn(Either.left(Collections.singletonMap("prop1", new PropertyDefinition()))).when(propertyOperation)
447 .findPropertiesOfNode(NodeTypeEnum.RelationshipType, relationshipTypeDefinition.getUniqueId());
449 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(janusGraphGenericDao)
450 .getChild("uid", derivedFromRelationshipTypeData.getUniqueId(), GraphEdgeLabels.DERIVED_FROM, NodeTypeEnum.RelationshipType,
451 RelationshipTypeData.class);
453 Mockito.doReturn(Either.left(new ImmutablePair(new RelationshipTypeData(relationshipTypeDefinition), null))).when(janusGraphGenericDao)
454 .getChild("uid", relationshipTypeDefinition.getUniqueId(), GraphEdgeLabels.DERIVED_FROM, NodeTypeEnum.RelationshipType,
455 RelationshipTypeData.class);
457 Mockito.doReturn(Either.left(new GraphRelation())).when(derivedFromOperation)
458 .addDerivedFromRelation(relationshipTypeDefinition.getUniqueId(), derivedFromRelationshipTypeData.getUniqueId(),
459 NodeTypeEnum.RelationshipType);
461 ModelData modelData = new ModelData("modelA", "modelA", ModelTypeEnum.NORMATIVE);
462 ImmutablePair<ModelData, GraphEdge> pair = new ImmutablePair<>(modelData, new GraphEdge());
463 Mockito.doReturn(Either.left(pair))
464 .when(janusGraphGenericDao)
465 .getParentNode("uid", dervideFromRelationshipInstDataDefinition.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model,
468 Mockito.doReturn(Either.left(pair))
469 .when(janusGraphGenericDao)
470 .getParentNode("uid", relationshipTypeDefinition.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model, ModelData.class);
472 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
473 .when(janusGraphGenericDao).getNode("uid", relationshipTypeDefinition.getUniqueId(), RelationshipTypeData.class);
475 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
476 .when(janusGraphGenericDao).getNode("type", relationshipTypeDefinition.getUniqueId(), RelationshipTypeData.class, "modelA");
478 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
479 relationshipTypeOperation.addRelationshipType(relationshipTypeDefinition, true);
481 assertTrue(either.isLeft());
485 public void testGetRelationshipTypeNotConnected() {
486 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_CONNECTED))
487 .when(relationshipTypeOperation).getRelationshipTypeByUid(Mockito.anyString());
489 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
490 relationshipTypeOperation.getRelationshipType(Mockito.anyString(), Mockito.anyBoolean());
492 assertTrue(either.isRight());
496 public void testGetRelationshipTypeSuccess() {
497 Mockito.doReturn(Either.left(relationshipTypeDefinition))
498 .when(relationshipTypeOperation).getRelationshipTypeByUid(Mockito.anyString());
500 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
501 relationshipTypeOperation.getRelationshipType(Mockito.anyString(), Mockito.anyBoolean());
503 assertTrue(either.isLeft());
507 public void testUpdateRelationshipType() {
508 RelationshipTypeDefinition newRelationshipTypeDefinition = new RelationshipTypeDefinition();
509 newRelationshipTypeDefinition.setUniqueId("tosca.relationships.Container2");
510 newRelationshipTypeDefinition.setDescription("desc2");
511 newRelationshipTypeDefinition.setType("tosca.relationships.Container2");
512 newRelationshipTypeDefinition.setDerivedFrom("tosca.relationships.Root");
513 newRelationshipTypeDefinition.setProperties(createPropertyData("prop1"));
515 Mockito.doReturn(Either.left(new RelationshipTypeData(newRelationshipTypeDefinition))).when(
516 janusGraphGenericDao)
517 .updateNode(Mockito.any(), Mockito.eq(RelationshipTypeData.class));
519 Mockito.doReturn(Either.left(newRelationshipTypeDefinition.getProperties()))
520 .when(propertyOperation).deletePropertiesAssociatedToNode(Mockito.any(), Mockito.anyString());
522 Mockito.doReturn(Either.left(newRelationshipTypeDefinition.getProperties()))
523 .when(propertyOperation).addPropertiesToElementType(Mockito.anyString(), Mockito.any(), Mockito.anyMap());
525 Mockito.doReturn(Either.left(newRelationshipTypeDefinition)).when(relationshipTypeOperation)
526 .getRelationshipTypeByUid(Mockito.anyString());
528 Mockito.doReturn(StorageOperationStatus.OK).when(derivedFromOperation)
529 .removeDerivedFromRelation(Mockito.anyString(), Mockito.anyString(), Mockito.any());
531 Mockito.doReturn(Either.left(new GraphRelation()))
532 .when(derivedFromOperation)
533 .addDerivedFromRelation(Mockito.anyString(), Mockito.anyString(), Mockito.any());
535 Mockito.doReturn(Either.left(new RelationshipTypeData(relationshipTypeDefinition)))
536 .when(janusGraphGenericDao).getNode(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
538 Mockito.doReturn(Either.left(Collections.singletonMap("derivedFromProp1", new PropertyDefinition()))).when(propertyOperation)
539 .findPropertiesOfNode(Mockito.any(), Mockito.anyString());
541 Mockito.doReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)).when(janusGraphGenericDao)
542 .getChild(Mockito.any(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.eq(RelationshipTypeData.class));
544 ModelData modelData = new ModelData("modelA", "modelA", ModelTypeEnum.NORMATIVE);
545 ImmutablePair<ModelData, GraphEdge> pair = new ImmutablePair<>(modelData, new GraphEdge());
546 Mockito.doReturn(Either.left(pair))
547 .when(janusGraphGenericDao)
548 .getParentNode("uid", newRelationshipTypeDefinition.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model, ModelData.class);
550 Either<RelationshipTypeDefinition, StorageOperationStatus> either =
551 relationshipTypeOperation.updateRelationshipType(relationshipTypeDefinition,
552 newRelationshipTypeDefinition, false);
554 assertTrue(either.isLeft());
558 public void testGetRelationshipTypeByUid() {
559 RelationshipTypeData relationshipTypeData = new RelationshipTypeData(relationshipTypeDefinition);
561 Mockito.doReturn(Either.left(relationshipTypeData)).when(janusGraphGenericDao)
562 .getNode(Mockito.anyString(), Mockito.any(), Mockito.eq(RelationshipTypeData.class));
564 Mockito.doReturn(Either.left(relationshipTypeDefinition.getProperties()))
565 .when(propertyOperation).findPropertiesOfNode(Mockito.any(), Mockito.anyString());
567 RelationshipTypeDefinition childRelationshipTypeDefinition = new RelationshipTypeDefinition();
568 childRelationshipTypeDefinition.setType("tosca.relationships.ContainerChild");
570 Mockito.doReturn(Either.left(new ImmutablePair(new RelationshipTypeData(childRelationshipTypeDefinition), null))).when(
571 janusGraphGenericDao)
572 .getChild(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(),
573 Mockito.eq(RelationshipTypeData.class));
575 ModelData modelData = new ModelData("modelA", "modelA", ModelTypeEnum.NORMATIVE);
576 ImmutablePair<ModelData, GraphEdge> pair = new ImmutablePair<>(modelData, new GraphEdge());
577 Mockito.doReturn(Either.left(pair))
578 .when(janusGraphGenericDao)
579 .getParentNode("uid", relationshipTypeDefinition.getUniqueId(), GraphEdgeLabels.MODEL_ELEMENT, NodeTypeEnum.Model, ModelData.class);
581 Either<RelationshipTypeDefinition, JanusGraphOperationStatus> either =
582 relationshipTypeOperation.getRelationshipTypeByUid("tosca.relationships.Container1");
584 assertTrue(either.isLeft()
585 && "tosca.relationships.ContainerChild".equals(either.left().value().getDerivedFrom()));
588 private Map<String, PropertyDefinition> createPropertyData(String value) {
589 PropertyDefinition propertyDefinition = new PropertyDefinition();
590 propertyDefinition.setDefaultValue(value);
591 propertyDefinition.setDescription(PROP + "_" + value);
592 propertyDefinition.setType(ToscaType.INTEGER.name().toLowerCase());
593 List<PropertyConstraint> constraints = new ArrayList<>();
594 InRangeConstraint propertyConstraint = new InRangeConstraint(Arrays.asList("1", "4"));
595 constraints.add(propertyConstraint);
596 propertyDefinition.setConstraints(constraints);
597 Map<String, PropertyDefinition> propertiesMap = new HashMap<>();
598 propertiesMap.put(PROP, propertyDefinition);
599 return propertiesMap;