/** * Set a capabiltiy on the node template (and initialize the capability maps if null). * * @param nodeTemplate The node template in which to add the capability. * @param name The name of the capability to add. * @param capability The capability. */ public static void setCapability(NodeTemplate nodeTemplate, String name, Capability capability) { if (nodeTemplate.getCapabilities() == null) { nodeTemplate.setCapabilities(Maps.newHashMap()); } nodeTemplate.getCapabilities().put(name, capability); }
@Before public void setUp() throws Exception { service = new CapabilityMatcherService(); service.setToscaContextFinder(toscaContextFinder); nodeTemplate = new NodeTemplate(); nodeTemplate.setCapabilities(Maps.newHashMap()); capabilityTypeByTypeName = Maps.newHashMap(); addCapabilityToNodeTemplateAndToscaContext("db_endpoint","alien.capability.test.MongoEndpoint", "alien.capability.test.Database", "alien.capability.test.Endpoint"); addCapabilityToNodeTemplateAndToscaContext("useless","alien.capability.test.Alone"); Mockito.when(toscaContextFinder.find(Mockito.any(), Mockito.anyString())) .then(invocationOnMock -> capabilityTypeByTypeName.get(invocationOnMock.getArguments()[1])); }
serviceResource.getNodeInstance().getNodeTemplate().setCapabilities(Maps.newLinkedHashMap());
instance.setCapabilities(tempObject.getCapabilities()); instance.setProperties(tempObject.getProperties()); instance.setRequirements(tempObject.getRequirements());
@ToscaContextual public void update(NodeType nodeType, NodeInstance nodeInstance, Map<String, AbstractPropertyValue> nodeProperties, Map<String, Capability> nodeCapabilities, Map<String, String> nodeAttributeValues) { nodeInstance.getNodeTemplate().setProperties(nodeProperties); nodeInstance.getNodeTemplate().setCapabilities(nodeCapabilities); // performs property values validations and ensure the node template match the required type nodeInstance.setNodeTemplate(TemplateBuilder.buildNodeTemplate(nodeType, nodeInstance.getNodeTemplate())); nodeInstance.setAttributeValues(nodeAttributeValues); }
@Test(expected = NotFoundException.class) public void getMissingCapabilityByTypeOrFailTest() { NodeTemplate nodeTemplate = new NodeTemplate(); Capability nodeCapability = new Capability("org.alien4cloud.capabilities.SampleCapability", null); nodeTemplate.setCapabilities(Maps.newHashMap("test", nodeCapability)); // if the capability derives from parent type then a TOSCA context and query is required to fetch the type. CapabilityType capabilityType = new CapabilityType(); capabilityType.setElementId("org.alien4cloud.capabilities.SampleCapability"); capabilityType.setDerivedFrom(Lists.newArrayList("org.alien4cloud.capabilities.TestCapability")); Mockito.reset(csarRepositorySearchService); Mockito.when(csarRepositorySearchService.getElementInDependencies(Mockito.eq(CapabilityType.class), Mockito.eq("org.alien4cloud.capabilities.SampleCapability"), Mockito.any(Set.class))).thenReturn(capabilityType); Capability capability = toscaContextualAspect.execInToscaContext(() -> getCapabilityByTypeOrFail(nodeTemplate, "org.alien4cloud.capabilities.Unknown"), false, Sets.newHashSet(new CSARDependency("org.alien4cloud.testArchive", "1.0.0-SNAPSHOT"))); assertNull(capability); } }
@Test public void getMissingCapabilityByTypeTest() { NodeTemplate nodeTemplate = new NodeTemplate(); Capability nodeCapability = new Capability("org.alien4cloud.capabilities.SampleCapability", null); nodeTemplate.setCapabilities(Maps.newHashMap("test", nodeCapability)); // if the capability derives from parent type then a TOSCA context and query is required to fetch the type. CapabilityType capabilityType = new CapabilityType(); capabilityType.setElementId("org.alien4cloud.capabilities.SampleCapability"); capabilityType.setDerivedFrom(Lists.newArrayList("org.alien4cloud.capabilities.TestCapability")); Mockito.reset(csarRepositorySearchService); Mockito.when(csarRepositorySearchService.getElementInDependencies(Mockito.eq(CapabilityType.class), Mockito.eq("org.alien4cloud.capabilities.SampleCapability"), Mockito.any(Set.class))).thenReturn(capabilityType); Capability capability = toscaContextualAspect.execInToscaContext(() -> getCapabilityByType(nodeTemplate, "org.alien4cloud.capabilities.Unknown"), false, Sets.newHashSet(new CSARDependency("org.alien4cloud.testArchive", "1.0.0-SNAPSHOT"))); assertNull(capability); }
@Test public void getCapabilityByTypeTest() { NodeTemplate nodeTemplate = new NodeTemplate(); Capability nodeCapability = new Capability("org.alien4cloud.capabilities.SampleCapability", null); nodeTemplate.setCapabilities(Maps.newHashMap("test", nodeCapability)); // if the capability type exactly equals then no tosca context and request is required Capability capability = getCapabilityByType(nodeTemplate, "org.alien4cloud.capabilities.SampleCapability"); assertSame(nodeCapability, capability); // if the capability derives from parent type then a TOSCA context and query is required to fetch the type. CapabilityType capabilityType = new CapabilityType(); capabilityType.setElementId("org.alien4cloud.capabilities.SampleCapability"); capabilityType.setDerivedFrom(Lists.newArrayList("org.alien4cloud.capabilities.TestCapability")); Mockito.reset(csarRepositorySearchService); Mockito.when(csarRepositorySearchService.getElementInDependencies(Mockito.eq(CapabilityType.class), Mockito.eq("org.alien4cloud.capabilities.SampleCapability"), Mockito.any(Set.class))).thenReturn(capabilityType); capability = toscaContextualAspect.execInToscaContext(() -> getCapabilityByType(nodeTemplate, "org.alien4cloud.capabilities.TestCapability"), false, Sets.newHashSet(new CSARDependency("org.alien4cloud.testArchive", "1.0.0-SNAPSHOT"))); assertSame(nodeCapability, capability); }
@Test public void getCapabilityByTypeOrFailTest() { NodeTemplate nodeTemplate = new NodeTemplate(); Capability nodeCapability = new Capability("org.alien4cloud.capabilities.SampleCapability", null); nodeTemplate.setCapabilities(Maps.newHashMap("test", nodeCapability)); // if the capability type exactly equals then no tosca context and request is required Capability capability = getCapabilityByTypeOrFail(nodeTemplate, "org.alien4cloud.capabilities.SampleCapability"); assertSame(nodeCapability, capability); // if the capability derives from parent type then a TOSCA context and query is required to fetch the type. CapabilityType capabilityType = new CapabilityType(); capabilityType.setElementId("org.alien4cloud.capabilities.SampleCapability"); capabilityType.setDerivedFrom(Lists.newArrayList("org.alien4cloud.capabilities.TestCapability")); Mockito.reset(csarRepositorySearchService); Mockito.when(csarRepositorySearchService.getElementInDependencies(Mockito.eq(CapabilityType.class), Mockito.eq("org.alien4cloud.capabilities.SampleCapability"), Mockito.any(Set.class))).thenReturn(capabilityType); capability = toscaContextualAspect.execInToscaContext(() -> getCapabilityByTypeOrFail(nodeTemplate, "org.alien4cloud.capabilities.TestCapability"), false, Sets.newHashSet(new CSARDependency("org.alien4cloud.testArchive", "1.0.0-SNAPSHOT"))); assertSame(nodeCapability, capability); }
/** * Build a node template. Note that a Tosca Context is required. * * @param nodeType the type of the node * @param templateToMerge the template that can be used to merge into the new node template * @param adaptToType This flag allow to know if we should adapt the templateToMerge node to the type. * @return new constructed node template. */ public static NodeTemplate buildNodeTemplate(NodeType nodeType, NodeTemplate templateToMerge, boolean adaptToType) { // clone the type of the node to avoid impacts, this should be improved in the future nodeType = CloneUtil.clone(nodeType); NodeTemplate nodeTemplate = new NodeTemplate(); fillAbstractInstantiableTemplate(nodeTemplate, nodeType, templateToMerge, !adaptToType); nodeTemplate.setCapabilities(Maps.newLinkedHashMap()); nodeTemplate.setRequirements(Maps.newLinkedHashMap()); fillCapabilitiesMap(nodeTemplate.getCapabilities(), nodeType.getCapabilities(), templateToMerge != null ? templateToMerge.getCapabilities() : null, adaptToType); fillRequirementsMap(nodeTemplate.getRequirements(), nodeType.getRequirements(), templateToMerge != null ? templateToMerge.getRequirements() : null, adaptToType); if (templateToMerge != null && templateToMerge.getRelationships() != null) { nodeTemplate.setRelationships(templateToMerge.getRelationships()); } if (templateToMerge != null && templateToMerge.getTags() != null) { nodeTemplate.setTags(templateToMerge.getTags()); } return nodeTemplate; }