2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 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 com.google.common.collect.Sets.newHashSet;
24 import static java.util.Arrays.asList;
25 import static java.util.Collections.singletonList;
26 import static org.assertj.core.api.Assertions.assertThat;
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertNotNull;
29 import static org.junit.Assert.assertTrue;
31 import fj.data.Either;
32 import java.util.HashMap;
33 import java.util.Iterator;
34 import java.util.List;
36 import javax.annotation.Resource;
37 import org.apache.commons.lang3.tuple.ImmutablePair;
38 import org.apache.tinkerpop.gremlin.structure.Edge;
39 import org.janusgraph.core.JanusGraph;
40 import org.janusgraph.core.JanusGraphVertex;
41 import org.junit.jupiter.api.AfterEach;
42 import org.junit.jupiter.api.BeforeAll;
43 import org.junit.jupiter.api.Test;
44 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
45 import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphGenericDao;
46 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
47 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
48 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
49 import org.openecomp.sdc.be.datatypes.elements.GroupTypeDataDefinition;
50 import org.openecomp.sdc.be.datatypes.enums.ModelTypeEnum;
51 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
52 import org.openecomp.sdc.be.model.CapabilityDefinition;
53 import org.openecomp.sdc.be.model.CapabilityTypeDefinition;
54 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
55 import org.openecomp.sdc.be.model.GroupTypeDefinition;
56 import org.openecomp.sdc.be.model.Model;
57 import org.openecomp.sdc.be.model.ModelTestBase;
58 import org.openecomp.sdc.be.model.PropertyDefinition;
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.resources.data.CapabilityTypeData;
62 import org.openecomp.sdc.be.resources.data.GroupTypeData;
63 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
65 @SpringJUnitConfig(locations = "classpath:application-context-test.xml")
66 public class GroupTypeOperationTest extends ModelTestBase {
68 private static final String TOSCA_GROUPS_ROOT = "tosca.groups.Root";
69 private static final String NULL_STRING = null;
71 @Resource(name = "janusgraph-generic-dao")
72 private HealingJanusGraphGenericDao janusGraphDao;
74 @Resource(name = "capability-type-operation")
75 private CapabilityTypeOperation capabilityTypeOperation;
77 @Resource(name = "group-type-operation")
78 private GroupTypeOperation groupTypeOperation;
80 @Resource(name = "model-operation")
81 private ModelOperation modelOperation;
84 public static void setupBeforeClass() {
89 public void tearDown() {
90 janusGraphDao.rollback();
95 public void getAllGroupTypes() {
96 GroupTypeDefinition rootGroupDefinition = createRootGroupDefinition();
97 GroupTypeDefinition type1 = createGroupType("type1");
98 GroupTypeDefinition type2 = createGroupType("type2");
99 groupTypeOperation.addGroupType(rootGroupDefinition);
100 groupTypeOperation.addGroupType(type1);
101 groupTypeOperation.addGroupType(type2);
103 List<GroupTypeDefinition> allGroupTypesNoExclusion = groupTypeOperation.getAllGroupTypes(null, null);
104 assertThat(allGroupTypesNoExclusion)
105 .usingElementComparatorOnFields("type", "icon", "name")
106 .containsExactlyInAnyOrder(rootGroupDefinition, type1, type2);
110 public void getAllGroupTypes_whenPassingExclusionList_doNotReturnExcludedTypes() {
111 GroupTypeDefinition rootGroupDefinition = createRootGroupDefinition();
112 GroupTypeDefinition type1 = createGroupType("type1");
113 GroupTypeDefinition type2 = createGroupType("type2");
114 groupTypeOperation.addGroupType(rootGroupDefinition);
115 groupTypeOperation.addGroupType(type1);
116 groupTypeOperation.addGroupType(type2);
118 List<GroupTypeDefinition> allGroupTypes = groupTypeOperation.getAllGroupTypes(newHashSet("type1", "type2"), null);
119 assertThat(allGroupTypes)
120 .usingElementComparatorOnFields("type")
121 .containsExactly(rootGroupDefinition);
125 public void groupTypeWithoutCapabilityCreated() {
126 GroupTypeData rootNode = getOrCreateRootGroupTypeNode();
128 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
129 groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
130 groupTypeDefinition.setDescription("groups l3-networks in network collection");
131 groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
132 groupTypeDefinition.setVersion("1.0");
134 List<PropertyDefinition> properties = asList(
135 buildProperty("network_collection_type", "l3-network", "network collection type, defined with default value"),
136 buildProperty("network_collection_subtype", "sub-interface", "network collection subtype, defined with default value"),
137 buildProperty("network_collection_role", null, "network collection role"),
138 buildProperty("network_collection_description", null, "network collection description, free format text"));
140 groupTypeDefinition.setProperties(properties);
142 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true);
143 assertTrue("check group type added", addGroupTypeResult.isLeft());
144 compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value());
146 addGroupTypeResult = groupTypeOperation.getGroupTypeByTypeAndVersion("org.openecomp.groups.NetworkCollection", "1.0", null);
147 assertTrue("check group type added", addGroupTypeResult.isLeft());
148 compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value());
150 Either<GroupTypeData, JanusGraphOperationStatus> groupTypeResult = janusGraphDao
151 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), groupTypeDefinition.getType(), GroupTypeData.class);
152 GroupTypeData groupTypeNode = extractVal(groupTypeResult);
154 Either<Edge, JanusGraphOperationStatus> edgeResult = janusGraphDao
155 .getEdgeByNodes(groupTypeNode, rootNode, GraphEdgeLabels.DERIVED_FROM);
156 validate(edgeResult);
160 public void groupTypeWithCapabilityAndPropsButCapTypeWithoutProps() {
161 getOrCreateRootGroupTypeNode();
163 CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(null);
164 Either<CapabilityTypeData, JanusGraphOperationStatus> capabilityTypeResult = janusGraphDao
165 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class);
166 extractVal(capabilityTypeResult);
168 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
169 groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
170 groupTypeDefinition.setDescription("groups l3-networks in network collection");
171 groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
173 Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>();
175 ComponentInstanceProperty property = new ComponentInstanceProperty(
176 buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance"));
177 CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(property));
178 mapCapabilities.put("vlan_assignment", capabilityDef);
179 groupTypeDefinition.setCapabilities(mapCapabilities);
181 List<PropertyDefinition> properties = asList(
182 buildProperty("vfc_instance_group_role", null, "role of this VFC group"),
183 buildProperty("vfc_parent_port_role", null, "common role of parent ports of VFCs in this group"),
184 buildProperty("network_collection_role", null, "network collection role assigned to this group"),
185 buildProperty("subinterface_role", null, "common role of subinterfaces of VFCs in this group, criteria the group is created"));
187 groupTypeDefinition.setProperties(properties);
189 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true);
190 assertTrue(addGroupTypeResult.isRight());
191 assertEquals(StorageOperationStatus.MATCH_NOT_FOUND, addGroupTypeResult.right().value());
195 public void groupTypeWithCapabilityTypeAndEdgeCreated() {
196 GroupTypeData rootNode = getOrCreateRootGroupTypeNode();
198 Map<String, PropertyDefinition> capTypeProperties = new HashMap<>();
199 capTypeProperties.put("vfc_instance_group_reference",
200 buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance"));
202 CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties);
203 Either<CapabilityTypeData, JanusGraphOperationStatus> capabilityTypeResult = janusGraphDao
204 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class);
205 extractVal(capabilityTypeResult);
207 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
208 groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
209 groupTypeDefinition.setDescription("groups l3-networks in network collection");
210 groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
212 Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>();
213 ComponentInstanceProperty property = new ComponentInstanceProperty(
214 buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance"));
215 CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(property));
216 mapCapabilities.put("vlan_assignment", capabilityDef);
217 groupTypeDefinition.setCapabilities(mapCapabilities);
219 List<PropertyDefinition> properties = asList(
220 buildProperty("vfc_instance_group_role", null, "role of this VFC group"),
221 buildProperty("vfc_parent_port_role", null, "common role of parent ports of VFCs in this group"),
222 buildProperty("network_collection_role", null, "network collection role assigned to this group"),
223 buildProperty("subinterface_role", null, "common role of subinterfaces of VFCs in this group, criteria the group is created"));
225 groupTypeDefinition.setProperties(properties);
227 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true);
228 assertTrue("check group type added", addGroupTypeResult.isLeft());
229 compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value());
231 Either<GroupTypeData, JanusGraphOperationStatus> groupTypeResult = janusGraphDao
232 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), groupTypeDefinition.getType(), GroupTypeData.class);
233 GroupTypeData groupTypeNode = extractVal(groupTypeResult);
235 Either<GroupTypeDefinition, StorageOperationStatus> groupTypeDefResult = groupTypeOperation.getGroupTypeByUid(groupTypeNode.getUniqueId());
236 assertTrue(groupTypeDefResult.isLeft());
237 GroupTypeDefinition groupTypeDefinitionRetrieved = groupTypeDefResult.left().value();
238 assertNotNull(groupTypeDefinitionRetrieved);
239 Map<String, CapabilityDefinition> capabilityDefs = groupTypeDefinitionRetrieved.getCapabilities();
240 assertNotNull(capabilityDefs);
241 assertEquals(1, capabilityDefs.size());
242 assertTrue(capabilityDefs.containsKey("vlan_assignment"));
243 CapabilityDefinition updatedCapabilityDef = capabilityDefs.get("vlan_assignment");
244 assertEquals(2, updatedCapabilityDef.getProperties().size());
246 Either<Edge, JanusGraphOperationStatus> edgeDerivedFromResult = janusGraphDao
247 .getEdgeByNodes(groupTypeNode, rootNode, GraphEdgeLabels.DERIVED_FROM);
248 validate(edgeDerivedFromResult);
252 public void groupTypeWithCapabilityTypeAndEdgeCreated_OverrideDefaultCapabilityTypeValue() {
253 getOrCreateRootGroupTypeNode();
255 PropertyDefinition property = buildProperty("vfc_instance_group_reference", null,
256 "Ability to recognize capability per vfc instance group on vnf instance");
258 Map<String, PropertyDefinition> capTypeProperties = new HashMap<>();
259 capTypeProperties.put("vfc_instance_group_reference", property);
260 CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties);
261 Either<CapabilityTypeData, JanusGraphOperationStatus> capabilityTypeResult = janusGraphDao
262 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class);
263 extractVal(capabilityTypeResult);
265 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
266 groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
267 groupTypeDefinition.setDescription("groups l3-networks in network collection");
268 groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
270 Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>();
271 property.setValue("new_value");
272 ComponentInstanceProperty capDefProperty = new ComponentInstanceProperty(property);
273 CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(capDefProperty));
274 mapCapabilities.put("vlan_assignment", capabilityDef);
275 groupTypeDefinition.setCapabilities(mapCapabilities);
277 List<PropertyDefinition> properties = asList(
278 buildProperty("vfc_instance_group_role", null, "role of this VFC group"),
279 buildProperty("vfc_parent_port_role", null, "common role of parent ports of VFCs in this group"),
280 buildProperty("network_collection_role", null, "network collection role assigned to this group"),
281 buildProperty("subinterface_role", null, "common role of subinterfaces of VFCs in this group, criteria the group is created"));
283 groupTypeDefinition.setProperties(properties);
285 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true);
286 assertTrue("check group type added", addGroupTypeResult.isLeft());
287 compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value());
289 Either<GroupTypeData, JanusGraphOperationStatus> groupTypeResult = janusGraphDao
290 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), groupTypeDefinition.getType(), GroupTypeData.class);
291 GroupTypeData groupTypeNode = extractVal(groupTypeResult);
293 Either<GroupTypeDefinition, StorageOperationStatus> groupTypeDefResult = groupTypeOperation.getGroupTypeByUid(groupTypeNode.getUniqueId());
294 assertTrue(groupTypeDefResult.isLeft());
295 GroupTypeDefinition groupTypeDefinitionRetrieved = groupTypeDefResult.left().value();
296 assertNotNull(groupTypeDefinitionRetrieved);
297 Map<String, CapabilityDefinition> capabilityDefs = groupTypeDefinitionRetrieved.getCapabilities();
298 assertNotNull(capabilityDefs);
299 assertEquals(1, capabilityDefs.size());
300 assertTrue(capabilityDefs.containsKey("vlan_assignment"));
302 CapabilityDefinition capDefinition = capabilityDefs.get("vlan_assignment");
303 assertEquals("new_value", capDefinition.getProperties().get(0).getValue());
304 assertEquals(2, capDefinition.getProperties().size());
309 public void updateGroupTypeWithCapability_FailedDueToCapabilityDeleteAttempt() {
310 createRootGroupTypeNode();
312 PropertyDefinition property = buildProperty("vfc_instance_group_reference", null,
313 "Ability to recognize capability per vfc instance group on vnf instance");
315 Map<String, PropertyDefinition> capTypeProperties = new HashMap<>();
316 capTypeProperties.put("vfc_instance_group_reference", property);
317 CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties);
318 Either<CapabilityTypeData, JanusGraphOperationStatus> capabilityTypeResult = janusGraphDao
319 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class);
320 extractVal(capabilityTypeResult);
322 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
323 groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
324 groupTypeDefinition.setDescription("groups l3-networks in network collection");
325 groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
327 Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>();
328 property.setValue("new_value");
329 ComponentInstanceProperty capDefProperty = new ComponentInstanceProperty(property);
330 CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(capDefProperty));
331 mapCapabilities.put("vlan_assignment", capabilityDef);
332 groupTypeDefinition.setCapabilities(mapCapabilities);
334 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition);
335 assertTrue(addGroupTypeResult.isLeft());
337 GroupTypeDefinition newGroupTypeDefinition = new GroupTypeDefinition();
338 newGroupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
339 newGroupTypeDefinition.setDescription("groups l3-networks in network collection");
340 newGroupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
341 Either<GroupTypeDefinition, StorageOperationStatus> updateGroupTypeResult = groupTypeOperation.updateGroupType(newGroupTypeDefinition,
342 addGroupTypeResult.left().value());
343 assertTrue(updateGroupTypeResult.isRight());
344 assertEquals(StorageOperationStatus.MATCH_NOT_FOUND, updateGroupTypeResult.right().value());
349 public void updateGroupTypeWithCapability_FailedDueToCapabilityChangeTypeAttempt() {
350 createRootGroupTypeNode();
352 PropertyDefinition property = buildProperty("vfc_instance_group_reference", null,
353 "Ability to recognize capability per vfc instance group on vnf instance");
355 Map<String, PropertyDefinition> capTypeProperties = new HashMap<>();
356 capTypeProperties.put("vfc_instance_group_reference", property);
357 CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties);
358 Either<CapabilityTypeData, JanusGraphOperationStatus> capabilityTypeResult = janusGraphDao
359 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class);
360 extractVal(capabilityTypeResult);
362 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
363 groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
364 groupTypeDefinition.setDescription("groups l3-networks in network collection");
365 groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
367 Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>();
368 property.setValue("new_value");
369 ComponentInstanceProperty capDefProperty = new ComponentInstanceProperty(property);
370 CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(capDefProperty));
371 mapCapabilities.put("vlan_assignment", capabilityDef);
372 groupTypeDefinition.setCapabilities(mapCapabilities);
374 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition);
375 assertTrue(addGroupTypeResult.isLeft());
377 GroupTypeDefinition newGroupTypeDefinition = new GroupTypeDefinition();
378 newGroupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
379 newGroupTypeDefinition.setDescription("groups l3-networks in network collection");
380 newGroupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
382 Map<String, CapabilityDefinition> updatedMapCapabilities = new HashMap<>();
383 property.setValue("new_value");
384 ComponentInstanceProperty newCapDefProperty = new ComponentInstanceProperty(property);
385 CapabilityDefinition updatedCapabilityDef = buildCapabilityDefintion(asList(newCapDefProperty));
386 updatedCapabilityDef.setType("Another type");
387 updatedMapCapabilities.put("vlan_assignment", updatedCapabilityDef);
388 newGroupTypeDefinition.setCapabilities(updatedMapCapabilities);
390 Either<GroupTypeDefinition, StorageOperationStatus> updateGroupTypeResult = groupTypeOperation.updateGroupType(newGroupTypeDefinition,
391 addGroupTypeResult.left().value());
392 assertTrue(updateGroupTypeResult.isRight());
393 assertEquals(StorageOperationStatus.MATCH_NOT_FOUND, updateGroupTypeResult.right().value());
397 public void updateGroupTypeWithCapability_Success() {
398 createRootGroupTypeNode();
400 PropertyDefinition property = buildProperty("vfc_instance_group_reference", null,
401 "Ability to recognize capability per vfc instance group on vnf instance");
403 Map<String, PropertyDefinition> capTypeProperties = new HashMap<>();
404 capTypeProperties.put("vfc_instance_group_reference", property);
405 CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties);
406 Either<CapabilityTypeData, JanusGraphOperationStatus> capabilityTypeResult = janusGraphDao
407 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class);
408 extractVal(capabilityTypeResult);
410 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
411 groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
412 groupTypeDefinition.setDescription("groups l3-networks in network collection");
413 groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
415 Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>();
416 property.setValue("new_value");
417 ComponentInstanceProperty capDefProperty = new ComponentInstanceProperty(property);
418 CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(capDefProperty));
419 mapCapabilities.put("vlan_assignment", capabilityDef);
420 groupTypeDefinition.setCapabilities(mapCapabilities);
422 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition);
423 assertTrue(addGroupTypeResult.isLeft());
425 GroupTypeDefinition newGroupTypeDefinition = new GroupTypeDefinition();
426 newGroupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
427 newGroupTypeDefinition.setDescription("groups l3-networks in network collection");
428 newGroupTypeDefinition.setType("org.openecomp.groups.NetworkCollection");
430 Map<String, CapabilityDefinition> updatedMapCapabilities = new HashMap<>();
431 property.setValue("another_value");
432 ComponentInstanceProperty newCapDefProperty = new ComponentInstanceProperty(property);
433 CapabilityDefinition updatedCapabilityDef = buildCapabilityDefintion(asList(newCapDefProperty));
434 updatedMapCapabilities.put("vlan_assignment", updatedCapabilityDef);
435 newGroupTypeDefinition.setCapabilities(updatedMapCapabilities);
437 Either<GroupTypeDefinition, StorageOperationStatus> updateGroupTypeResult = groupTypeOperation.updateGroupType(newGroupTypeDefinition,
438 addGroupTypeResult.left().value());
439 assertTrue(updateGroupTypeResult.isLeft());
443 public void testUpdateGroupTypeWithDerivedFromEdge() {
444 createRootGroupTypeNode();
446 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
447 groupTypeDefinition.setDescription("groups l2-networks in network collection");
448 groupTypeDefinition.setType("org.openecomp.groups.PrivateCollection");
449 groupTypeDefinition.setVersion("1.0");
451 List<PropertyDefinition> properties = singletonList(
452 buildProperty("network_collection_type", "l2-network", "network collection type, defined with default value"));
454 groupTypeDefinition.setProperties(properties);
456 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true);
457 assertTrue("check group type added", addGroupTypeResult.isLeft());
458 compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value());
460 addGroupTypeResult = groupTypeOperation.getGroupTypeByTypeAndVersion("org.openecomp.groups.PrivateCollection", "1.0", null);
461 assertTrue("check group type added", addGroupTypeResult.isLeft());
462 compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value());
464 Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition,
465 groupTypeDefinition);
466 assertNotNull(upgradeResult);
467 assertTrue(upgradeResult.isLeft());
471 public void testUpdateNonExistingGroupType() {
472 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
473 groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT);
474 groupTypeDefinition.setDescription("groups l2-networks in network collection");
475 groupTypeDefinition.setType("org.openecomp.groups.MyCollection");
476 groupTypeDefinition.setVersion("1.0");
478 Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition,
479 groupTypeDefinition);
480 assertNotNull(upgradeResult);
481 assertTrue(upgradeResult.isRight());
485 public void testUpdateNotDerivedGroupType() {
486 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
487 groupTypeDefinition.setDescription("groups social-networks in school");
488 groupTypeDefinition.setType("org.openecomp.groups.Teachers");
489 groupTypeDefinition.setVersion("1.0");
491 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true);
492 assertTrue("check group type added", addGroupTypeResult.isLeft());
493 compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value());
495 Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition,
496 groupTypeDefinition);
497 assertNotNull(upgradeResult);
498 assertTrue(upgradeResult.isLeft());
499 assertThat(groupTypeDefinition).isEqualToIgnoringGivenFields(upgradeResult.left().value(), "properties", "capabilities");
503 public void testUpdateGroupTypeWithNonExistingParent() {
504 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
505 groupTypeDefinition.setDescription("groups social-networks in work");
506 groupTypeDefinition.setType("org.openecomp.groups.Cowokers");
507 groupTypeDefinition.setVersion("1.0");
509 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true);
510 assertTrue("check group type added", addGroupTypeResult.isLeft());
511 compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value());
513 groupTypeDefinition.setDerivedFrom("Non.existing.parent");
514 Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition,
515 groupTypeDefinition);
516 assertNotNull(upgradeResult);
517 assertTrue(upgradeResult.isRight());
521 public void testUpgradeGroupType() {
522 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
523 groupTypeDefinition.setDescription("groups social-networks in university");
524 groupTypeDefinition.setType("org.openecomp.groups.Students");
525 groupTypeDefinition.setVersion("1.0");
527 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true);
528 assertTrue("check group type added", addGroupTypeResult.isLeft());
529 compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value());
531 GroupTypeDefinition parentGroupTypeDefinition = new GroupTypeDefinition();
532 parentGroupTypeDefinition.setDescription("groups social-networks in university");
533 parentGroupTypeDefinition.setType("org.openecomp.groups.Parents");
534 parentGroupTypeDefinition.setVersion("1.0");
535 parentGroupTypeDefinition.setHighestVersion(true);
537 Either<GroupTypeDefinition, StorageOperationStatus> addParentGroupTypeResult = groupTypeOperation.addGroupType(parentGroupTypeDefinition,
539 assertTrue("check group type added", addParentGroupTypeResult.isLeft());
540 compareBetweenCreatedToSent(parentGroupTypeDefinition, addParentGroupTypeResult.left().value());
542 groupTypeDefinition.setDerivedFrom("org.openecomp.groups.Parents");
543 Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition,
544 addGroupTypeResult.left().value());
545 assertNotNull(upgradeResult);
546 assertTrue(upgradeResult.isLeft());
547 assertThat(groupTypeDefinition).isEqualToIgnoringGivenFields(upgradeResult.left().value(), "properties", "capabilities");
551 public void testAddGroupTypeWithModel() {
552 GroupTypeDefinition groupTypeDefinition = createGroupTypeDef();
553 groupTypeDefinition.setModel("testModel");
554 Model model = new Model("testModel", ModelTypeEnum.NORMATIVE);
555 modelOperation.createModel(model, true);
557 Either<GroupTypeDefinition, StorageOperationStatus> addGroupType = groupTypeOperation.addGroupType(groupTypeDefinition);
558 assertTrue(addGroupType.isLeft());
559 Either<GroupTypeDefinition, StorageOperationStatus> eitherGroupTypeFetched =
560 groupTypeOperation.getLatestGroupTypeByType(groupTypeDefinition.getType(), groupTypeDefinition.getModel());
561 assertTrue(eitherGroupTypeFetched.isLeft());
562 assertEquals(groupTypeDefinition.getModel(), eitherGroupTypeFetched.left().value().getModel());
566 private GroupTypeData getOrCreateRootGroupTypeNode() {
567 Either<GroupTypeData, JanusGraphOperationStatus> groupTypeResult = janusGraphDao
568 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), TOSCA_GROUPS_ROOT, GroupTypeData.class);
569 if (groupTypeResult.isLeft()) {
570 return groupTypeResult.left().value();
573 return createRootGroupTypeNode();
576 private GroupTypeData createRootGroupTypeNode() {
577 GroupTypeDefinition rootGroupDefinition = createRootGroupDefinition();
578 Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(rootGroupDefinition, false);
579 assertTrue("check group type added", addGroupTypeResult.isLeft());
581 Either<GroupTypeData, JanusGraphOperationStatus> groupTypeResult = janusGraphDao
582 .getNode(GraphPropertiesDictionary.TYPE.getProperty(), rootGroupDefinition.getType(), GroupTypeData.class);
583 return extractVal(groupTypeResult);
586 private GroupTypeDefinition createRootGroupDefinition() {
587 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
588 groupTypeDefinition.setDescription("The TOSCA Group Type all other TOSCA Group Types derive from");
589 groupTypeDefinition.setType(TOSCA_GROUPS_ROOT);
590 groupTypeDefinition.setHighestVersion(true);
591 return groupTypeDefinition;
594 private GroupTypeDefinition createGroupType(String type) {
595 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition();
596 groupTypeDefinition.setDescription("description for type " + type);
597 groupTypeDefinition.setType(type);
598 groupTypeDefinition.setName(type + "name");
599 groupTypeDefinition.setIcon(type + "icon");
600 return groupTypeDefinition;
603 private CapabilityTypeDefinition createCapabilityType(Map<String, PropertyDefinition> properties) {
604 CapabilityTypeDefinition rootCapabilityTypeDefinition = new CapabilityTypeDefinition();
605 rootCapabilityTypeDefinition.setType("tosca.capabilities.Root");
606 rootCapabilityTypeDefinition.setDescription("Dummy root type");
607 rootCapabilityTypeDefinition.setVersion("1.0");
608 capabilityTypeOperation.addCapabilityType(rootCapabilityTypeDefinition, true);
610 CapabilityTypeDefinition parentCapabilityTypeDefinition = new CapabilityTypeDefinition();
611 parentCapabilityTypeDefinition.setType("tosca.capabilities.Parent");
612 parentCapabilityTypeDefinition.setDescription("Dummy parent type");
613 parentCapabilityTypeDefinition.setDerivedFrom("tosca.capabilities.Root");
614 parentCapabilityTypeDefinition.setVersion("1.0");
615 PropertyDefinition property = buildProperty("parentProp", "any", "Description");
616 Map<String, PropertyDefinition> capTypeProperties = new HashMap<>();
617 capTypeProperties.put("parent_prop", property);
618 parentCapabilityTypeDefinition.setProperties(capTypeProperties);
619 capabilityTypeOperation.addCapabilityType(parentCapabilityTypeDefinition, true);
621 CapabilityTypeDefinition capabilityTypeDefinition = new CapabilityTypeDefinition();
622 capabilityTypeDefinition.setDescription("ability to expose routing information of the internal network");
623 capabilityTypeDefinition.setType("org.openecomp.capabilities.VLANAssignment");
624 capabilityTypeDefinition.setVersion("1.0");
625 capabilityTypeDefinition.setDerivedFrom("tosca.capabilities.Parent");
627 capabilityTypeDefinition.setProperties(properties);
629 Either<CapabilityTypeDefinition, StorageOperationStatus> addCapabilityTypeResult = capabilityTypeOperation.addCapabilityType(
630 capabilityTypeDefinition, true);
631 assertTrue("check capability type added", addCapabilityTypeResult.isLeft());
633 CapabilityTypeDefinition capabilityTypeAdded = addCapabilityTypeResult.left().value();
634 compareBetweenCreatedToSent(capabilityTypeDefinition, capabilityTypeAdded);
636 return capabilityTypeDefinition;
639 private CapabilityDefinition buildCapabilityDefintion(List<ComponentInstanceProperty> properties) {
640 CapabilityDefinition capabilityDefinition = new CapabilityDefinition();
641 capabilityDefinition.setName("vlan_assignment");
642 capabilityDefinition.setDescription("ability to expose routing information of the internal network");
643 capabilityDefinition.setType("org.openecomp.capabilities.VLANAssignment");
644 capabilityDefinition.setProperties(properties);
645 return capabilityDefinition;
648 private PropertyDefinition buildProperty(String name, String defaultValue, String description) {
649 PropertyDefinition property = new PropertyDefinition();
650 property.setName(name);
651 property.setDefaultValue(defaultValue);
652 property.setRequired(true);
653 property.setDescription(description);
654 property.setType(ToscaType.STRING.name().toLowerCase());
659 private void compareBetweenCreatedToSent(CapabilityTypeDefinition expected, CapabilityTypeDefinition actual) {
660 assertEquals(expected.getDerivedFrom(), actual.getDerivedFrom());
661 assertEquals(expected.getType(), actual.getType());
662 assertEquals(expected.getDescription(), actual.getDescription());
665 private void compareBetweenCreatedToSent(GroupTypeDefinition expected, GroupTypeDefinition actual) {
666 assertEquals(expected.getType(), actual.getType());
667 assertEquals(expected.getDescription(), actual.getDescription());
670 private <T> void validate(Either<T, JanusGraphOperationStatus> result) {
674 private <T> T extractVal(Either<T, JanusGraphOperationStatus> result) {
675 assertTrue(result.isLeft());
676 T t = result.left().value();
682 private void cleanUp() {
683 Either<JanusGraph, JanusGraphOperationStatus> graphResult = janusGraphDao.getGraph();
684 JanusGraph graph = graphResult.left().value();
686 Iterable<JanusGraphVertex> vertices = graph.query().vertices();
687 if (vertices != null) {
688 Iterator<JanusGraphVertex> iterator = vertices.iterator();
689 while (iterator.hasNext()) {
690 JanusGraphVertex vertex = iterator.next();
695 janusGraphDao.commit();
700 public void updateGroupType_returnNotFoundErrorIfTryingToUpdateANonExistingType() {
701 GroupTypeDefinition currType = createGroupTypeDef();
702 GroupTypeDefinition updatedType = createGroupTypeDef();
703 Either<GroupTypeDefinition, StorageOperationStatus> updatedGroupTypeRes = groupTypeOperation.updateGroupType(updatedType, currType);
704 assertThat(updatedGroupTypeRes.right().value()).isEqualTo(StorageOperationStatus.NOT_FOUND);
708 public void updateGroupType_basicFields() {
709 GroupTypeDefinition createdType = createGroupTypeDef("type1", "description1", NULL_STRING);
710 Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(createdType);
712 GroupTypeDefinition updatedType = createGroupTypeDef("type1", "description2", NULL_STRING);
713 updatedType.setName("newName");
714 updatedType.setIcon("icon");
715 groupTypeOperation.updateGroupType(updatedType, currGroupType.left().value());
717 Either<GroupTypeDefinition, StorageOperationStatus> fetchedUpdatedType = groupTypeOperation.getLatestGroupTypeByType(createdType.getType(),
718 createdType.getModel());
719 GroupTypeDefinition fetchedGroupType = fetchedUpdatedType.left().value();
720 assertThat(fetchedGroupType.getProperties()).isEmpty();
721 assertThat(fetchedGroupType)
722 .isEqualToIgnoringGivenFields(updatedType, "properties", "capabilities");
727 public void updateGroupType_updatePropertiesType_FailedDueAttemptToChangePropertyType() {
728 PropertyDefinition prop1 = createSimpleProperty("val1", "prop1", "string");
729 GroupTypeDefinition groupType = createGroupTypeDef(prop1);
730 Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(groupType);
732 PropertyDefinition updatedProp1 = duplicateProperty(prop1, "newVal1", "int");
733 PropertyDefinition prop3 = createSimpleProperty("val3", "prop3", "string");
734 GroupTypeDefinition updatedGroupType = createGroupTypeDef(updatedProp1, prop3);
736 Either<GroupTypeDefinition, StorageOperationStatus> updatedGroupTypeRetrieved = groupTypeOperation.updateGroupType(updatedGroupType,
737 currGroupType.left().value());
738 assertEquals(StorageOperationStatus.MATCH_NOT_FOUND, updatedGroupTypeRetrieved.right().value());
742 public void validateGroupType_FailedDueAttempToCreateGroupTypeWithPropertyWhichTypeIsDifferentFromTypeOfParentPropertyWithTheSameName() {
743 GroupTypeDefinition rootGroupType = createGroupTypeDef();
744 Either<GroupTypeDefinition, StorageOperationStatus> rootGroupTypeRes = groupTypeOperation.addGroupType(rootGroupType);
745 assertTrue(rootGroupTypeRes.isLeft());
747 PropertyDefinition prop = createSimpleProperty("val1", "prop", "string");
748 GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr1", rootGroupType.getType(), prop);
749 Either<GroupTypeDefinition, StorageOperationStatus> groupType1Res = groupTypeOperation.addGroupType(groupType1);
750 assertTrue(groupType1Res.isLeft());
752 PropertyDefinition prop1 = createSimpleProperty("33", "prop", "int");
753 PropertyDefinition prop2 = createSimpleProperty("val2", "prop2", "string");
754 GroupTypeDefinition groupType2 = createGroupTypeDef("type2", "descr", groupType1.getType(), prop1, prop2);
756 Either<GroupTypeDefinition, StorageOperationStatus> updatedGroupTypeRetrieved = groupTypeOperation.validateUpdateProperties(groupType2);
757 assertEquals(StorageOperationStatus.PROPERTY_NAME_ALREADY_EXISTS, updatedGroupTypeRetrieved.right().value());
761 public void updateGroupType_derivedFrom_whenNoPrevDerivedFrom_updateToNewDerivedFrom() {
762 GroupTypeDefinition rootGroupType = createGroupTypeDef();
763 GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr", NULL_STRING);
764 GroupTypeDefinition updatedGroupType = createGroupTypeDef("type1", "descr", rootGroupType.getType());
765 groupTypeOperation.addGroupType(rootGroupType);
766 Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(groupType1);
767 groupTypeOperation.updateGroupType(updatedGroupType, currGroupType.left().value());
769 Either<GroupTypeDefinition, StorageOperationStatus> latestGroupType = groupTypeOperation.getLatestGroupTypeByType(groupType1.getType(),
770 groupType1.getModel());
771 assertThat(latestGroupType.left().value().getDerivedFrom()).isEqualTo(rootGroupType.getType());
772 verifyDerivedFromNodeEqualsToRootGroupType(rootGroupType, latestGroupType.left().value().getUniqueId());
776 public void updateGroupType_derivedFrom_updateToNullDerivedFrom_derivedFromDeleted_Failed() {
777 GroupTypeDefinition rootGroupType = createGroupTypeDef();
778 GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr", rootGroupType.getType());
779 GroupTypeDefinition updatedGroupType = createGroupTypeDef("type1", "descr", null, new PropertyDefinition[]{});
780 groupTypeOperation.addGroupType(rootGroupType);
781 Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(groupType1);
783 Either<GroupTypeDefinition, StorageOperationStatus> updateGroupTypeRes = groupTypeOperation.updateGroupType(updatedGroupType,
784 currGroupType.left().value());
785 assertThat(updateGroupTypeRes.right().value()).isEqualTo(StorageOperationStatus.NOT_FOUND);
787 Either<GroupTypeDefinition, StorageOperationStatus> latestGroupType = groupTypeOperation.getLatestGroupTypeByType(groupType1.getType(),
788 groupType1.getModel());
789 assertThat(latestGroupType.left().value().getDerivedFrom()).isEqualTo(rootGroupType.getType());
793 public void updateGroupType_updateDerivedFrom() {
794 GroupTypeDefinition rootGroupType = createGroupTypeDef();
795 GroupTypeDefinition derivedType1 = createGroupTypeDef("derivedType1", "descr", rootGroupType.getType());
796 GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr", rootGroupType.getType());
797 GroupTypeDefinition updatedGroupType = createGroupTypeDef("type1", "descr", derivedType1.getType());
799 groupTypeOperation.addGroupType(rootGroupType);
800 groupTypeOperation.addGroupType(derivedType1);
801 Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(groupType1);
803 groupTypeOperation.updateGroupType(updatedGroupType, currGroupType.left().value());
805 Either<GroupTypeDefinition, StorageOperationStatus> latestGroupType = groupTypeOperation.getLatestGroupTypeByType(groupType1.getType(),
806 groupType1.getModel());
807 assertThat(latestGroupType.left().value().getDerivedFrom()).isEqualTo(derivedType1.getType());
811 public void updateGroupType_updateDerivedFrom_CauseEndlessRecursion() {
812 GroupTypeDefinition rootGroupType = createGroupTypeDef();
813 GroupTypeDefinition derivedType1 = createGroupTypeDef("derivedType1", "descr", rootGroupType.getType());
814 GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr", derivedType1.getType());
815 GroupTypeDefinition updatedGroupType = createGroupTypeDef("derivedType1", "descr", groupType1.getType());
817 groupTypeOperation.addGroupType(rootGroupType);
818 Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(derivedType1);
819 groupTypeOperation.addGroupType(groupType1);
821 Either<GroupTypeDefinition, StorageOperationStatus> updateResult = groupTypeOperation.updateGroupType(updatedGroupType,
822 currGroupType.left().value());
823 assertThat(updateResult.right().value()).isEqualTo(StorageOperationStatus.GENERAL_ERROR);
825 Either<GroupTypeDefinition, StorageOperationStatus> latestGroupType = groupTypeOperation.getLatestGroupTypeByType(updatedGroupType.getType(),
826 updatedGroupType.getModel());
827 assertThat(latestGroupType.left().value().getDerivedFrom()).isEqualTo(rootGroupType.getType());
830 private PropertyDefinition duplicateProperty(PropertyDefinition prop1, String updatedValue, String updatedType) {
831 PropertyDefinition updatedProp1 = new PropertyDefinition(prop1);
832 updatedProp1.setUniqueId(null);
833 updatedProp1.setDefaultValue(updatedValue);
834 updatedProp1.setType(updatedType);
838 private void verifyDerivedFromNodeEqualsToRootGroupType(GroupTypeDefinition rootGroupType, String parentGroupId) {
839 Either<ImmutablePair<GroupTypeData, GraphEdge>, JanusGraphOperationStatus> derivedFromRelation = janusGraphDao
840 .getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.GroupType), parentGroupId, GraphEdgeLabels.DERIVED_FROM,
841 NodeTypeEnum.GroupType, GroupTypeData.class);
842 assertThat(derivedFromRelation.left().value().getLeft().getGroupTypeDataDefinition())
843 .isEqualToComparingFieldByField(rootGroupType);
846 private void verifyDerivedFromRelationDoesntExist(String parentGroupId) {
847 Either<ImmutablePair<GroupTypeData, GraphEdge>, JanusGraphOperationStatus> derivedFromRelation = janusGraphDao
848 .getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.GroupType), parentGroupId, GraphEdgeLabels.DERIVED_FROM,
849 NodeTypeEnum.GroupType, GroupTypeData.class);
850 assertThat(derivedFromRelation.right().value())
851 .isEqualTo(JanusGraphOperationStatus.NOT_FOUND);
854 private GroupTypeDefinition createGroupTypeDef() {
855 return createGroupTypeDef("tosca.groups.Root", "description: The TOSCA Group Type all other TOSCA Group Types derive from", null,
856 new PropertyDefinition[]{});
859 private GroupTypeDefinition createGroupTypeDef(PropertyDefinition... props) {
860 return createGroupTypeDef("tosca.groups.Root", null, props);
863 private GroupTypeDefinition createGroupTypeDef(String type, String derivedFrom, PropertyDefinition... props) {
864 GroupTypeDefinition groupType = createGroupTypeDef(type, "description: The TOSCA Group Type all other TOSCA Group Types derive from",
866 groupType.setProperties(asList(props));
870 private GroupTypeDefinition createGroupTypeDef(String type, String description, String derivedFrom) {
871 return createGroupTypeDef(type, description, derivedFrom, null);
874 private GroupTypeDefinition createGroupTypeDef(String type, String description, String derivedFrom, PropertyDefinition... props) {
875 GroupTypeDataDefinition groupTypeDataDefinition = new GroupTypeDataDefinition();
876 groupTypeDataDefinition.setDescription(description);
877 groupTypeDataDefinition.setType(type);
878 groupTypeDataDefinition.setName(type + "name");
879 groupTypeDataDefinition.setIcon(type + "icon");
880 groupTypeDataDefinition.setDerivedFrom(derivedFrom);
881 GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(groupTypeDataDefinition);
882 groupTypeDefinition.setHighestVersion(true);
883 groupTypeDefinition.setVersion("1.0");
885 groupTypeDefinition.setProperties(asList(props));
887 return groupTypeDefinition;