diff options
author | andre.schmid <andre.schmid@est.tech> | 2020-02-14 15:37:17 +0000 |
---|---|---|
committer | Ofir Sonsino <ofir.sonsino@intl.att.com> | 2020-03-12 09:32:34 +0000 |
commit | ebda3c95e2ff975b34033de0640f0a137b8a1fa9 (patch) | |
tree | 809a65b13d3019e9a54fe2bcf02a6577d78011ab /catalog-ui/src/app/ng2/pages/composition/graph/utils | |
parent | 2a1d018b1b1f364362ff2a764ee16f3320388daa (diff) |
Support Tosca DependsOn root node relationship​
tosca.nodes.Root supports the use of a DependsOn relationship
to indicate a general dependency relationship between two
nodes. SDC currently disallows this relationship to be created
in the VF/Service composition view.
Change-Id: Ie5f1f5d2e5173b59f878986ee625b27aaa81e4f6
Issue-ID: SDC-2768
Signed-off-by: andre.schmid <andre.schmid@est.tech>
Diffstat (limited to 'catalog-ui/src/app/ng2/pages/composition/graph/utils')
-rw-r--r-- | catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-general-utils.ts | 2 | ||||
-rw-r--r-- | catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-links-utils.ts | 2 | ||||
-rw-r--r-- | catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-palette-utils.ts | 2 | ||||
-rw-r--r-- | catalog-ui/src/app/ng2/pages/composition/graph/utils/index.ts | 2 | ||||
-rw-r--r-- | catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requirement-utils.spec.ts (renamed from catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requierment-utils.spec.ts) | 93 | ||||
-rw-r--r-- | catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requirement-utils.ts (renamed from catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requierment-utils.ts) | 5 |
6 files changed, 54 insertions, 52 deletions
diff --git a/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-general-utils.ts b/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-general-utils.ts index bc8bd691c9..8b4a29414b 100644 --- a/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-general-utils.ts +++ b/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-general-utils.ts @@ -21,7 +21,7 @@ import * as _ from "lodash"; import {ComponentInstance, Match, CompositionCiLinkBase, CompositionCiNodeUcpeCp} from "app/models"; import {Dictionary, GraphUIObjects} from "app/utils"; -import {MatchCapabilitiesRequirementsUtils} from "./match-capability-requierment-utils"; +import {MatchCapabilitiesRequirementsUtils} from "./match-capability-requirement-utils"; import {CommonGraphUtils} from "../common/common-graph-utils"; import {Injectable} from "@angular/core"; import {QueueServiceUtils} from "app/ng2/utils/queue-service-utils"; diff --git a/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-links-utils.ts b/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-links-utils.ts index 6035d05b7f..ba35a98332 100644 --- a/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-links-utils.ts +++ b/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-links-utils.ts @@ -40,7 +40,7 @@ import { } from "app/models"; import {CommonGraphUtils} from "../common/common-graph-utils"; import {CompositionGraphGeneralUtils} from "./composition-graph-general-utils"; -import {MatchCapabilitiesRequirementsUtils} from "./match-capability-requierment-utils"; +import {MatchCapabilitiesRequirementsUtils} from "./match-capability-requirement-utils"; import {CompositionCiServicePathLink} from "app/models/graph/graph-links/composition-graph-links/composition-ci-service-path-link"; import {Injectable} from "@angular/core"; import {QueueServiceUtils} from "app/ng2/utils/queue-service-utils"; diff --git a/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-palette-utils.ts b/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-palette-utils.ts index 1776c2f9b9..922f19cb7f 100644 --- a/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-palette-utils.ts +++ b/catalog-ui/src/app/ng2/pages/composition/graph/utils/composition-graph-palette-utils.ts @@ -34,7 +34,7 @@ import {CompositionService} from "../../composition.service"; import {WorkspaceService} from "app/ng2/pages/workspace/workspace.service"; import { QueueServiceUtils } from "app/ng2/utils/queue-service-utils"; import {ComponentGenericResponse} from "../../../../services/responses/component-generic-response"; -import {MatchCapabilitiesRequirementsUtils} from "./match-capability-requierment-utils"; +import {MatchCapabilitiesRequirementsUtils} from "./match-capability-requirement-utils"; import {CompositionGraphNodesUtils} from "./index"; @Injectable() diff --git a/catalog-ui/src/app/ng2/pages/composition/graph/utils/index.ts b/catalog-ui/src/app/ng2/pages/composition/graph/utils/index.ts index e7f11af248..e1621d1a4c 100644 --- a/catalog-ui/src/app/ng2/pages/composition/graph/utils/index.ts +++ b/catalog-ui/src/app/ng2/pages/composition/graph/utils/index.ts @@ -11,7 +11,7 @@ import {CompositionGraphGeneralUtils} from './composition-graph-general-utils'; import {CompositionGraphNodesUtils} from './composition-graph-nodes-utils'; -import {MatchCapabilitiesRequirementsUtils} from './match-capability-requierment-utils' +import {MatchCapabilitiesRequirementsUtils} from './match-capability-requirement-utils' import {CompositionGraphPaletteUtils} from './composition-graph-palette-utils'; import {CompositionGraphZoneUtils} from './composition-graph-zone-utils'; import {ServicePathGraphUtils} from './composition-graph-service-path-utils'; diff --git a/catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requierment-utils.spec.ts b/catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requirement-utils.spec.ts index dbfc3e7219..10b26fc939 100644 --- a/catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requierment-utils.spec.ts +++ b/catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requirement-utils.spec.ts @@ -1,12 +1,17 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { Mock } from 'ts-mockery'; import { CapabilitiesGroup, - Capability, ComponentInstance, CompositionCiLinkBase, CompositionCiNodeBase, CompositionCiNodeCp, - CompositionCiNodeVf, CompositionCiNodeVl, - Requirement, RequirementsGroup + Capability, + ComponentInstance, + CompositionCiLinkBase, + CompositionCiNodeCp, + CompositionCiNodeVf, + CompositionCiNodeVl, + Requirement, + RequirementsGroup } from '../../../../../models'; -import { MatchCapabilitiesRequirementsUtils } from './match-capability-requierment-utils'; +import { MatchCapabilitiesRequirementsUtils } from './match-capability-requirement-utils'; describe('match capability requirements utils service ', () => { @@ -38,47 +43,25 @@ describe('match capability requirements utils service ', () => { ownerName : 's' }); - const vlAttachmentReq = Mock.of<Requirement>({ - capability: 'tosca.capabilities.Attachment', - name: 'local_storage', - relationship: 'tosca.relationships.AttachesTo', - uniqueId: 'eef99154-8039-4227-ba68-62a32e6b0d98.local_storage', - node: 'tosca.nodes.BlockStorage', - ownerId : '', - ownerName : 's' - }); - - const extVirtualLinkReq = Mock.of<Requirement>({ - capability: 'tosca.capabilities.network.Linkable', - name: 'external_virtualLink', - relationship: 'tosca.relationships.network.LinksTo', - uniqueId: 'eef99154-8039-4227-ba68-62a32e6b0d98.external_virtualLink' - }); - const dependencyReq = Mock.of<Requirement>({ capability: 'tosca.capabilities.Node', name: 'dependency', + node: 'tosca.nodes.Root', relationship: 'tosca.relationships.DependsOn', - uniqueId: 'eef99154-8039-4227-ba68-62a32e6b0d98.dependency' + uniqueId: 'eef99154-8039-4227-ba68-62a32e6b0d98.dependency', + minOccurrences: 0, + maxOccurrences: 'UNBOUNDED' }); const featureCap = Mock.of<Capability>({ type: 'tosca.capabilities.Node', name: 'feature', + capabilitySources: ['tosca.nodes.Root'], uniqueId: 'capability.ddf1301e-866b-4fa3-bc4f-edbd81e532cd.feature', maxOccurrences: 'UNBOUNDED', minOccurrences: '1' }); - const internalConnPointCap = Mock.of<Capability>({ - type: 'tosca.capabilities.Node', - name: 'internal_connectionPoint', - capabilitySources : ['org.openecomp.resource.cp.extCP'], - uniqueId: 'capability.ddf1301e-866b-4fa3-bc4f-edbd81e532cd.internal_connectionPoint', - maxOccurrences: 'UNBOUNDED', - minOccurrences: '1' - }); - const blockStoreAttachmentCap = Mock.of<Capability>({ type: 'tosca.capabilities.Attachment', name: 'attachment', @@ -111,12 +94,10 @@ describe('match capability requirements utils service ', () => { componentName: 'Compute', uniqueId : 'compute0', requirements: Mock.of<RequirementsGroup>({ - 'tosca.capabilities.Node' : [ dependencyReq ], 'tosca.capabilities.Attachment' : [ storeAttachmentReq ] }), capabilities: Mock.of<CapabilitiesGroup>({ 'tosca.capabilities.network.Bindable' : [ bindingCap ], - 'tosca.capabilities.Node' : [ featureCap ] }) }) }); @@ -126,12 +107,8 @@ describe('match capability requirements utils service ', () => { componentInstance: Mock.of<ComponentInstance>({ componentName: 'BlockStorage', uniqueId : 'blockstorage0', - requirements: Mock.of<RequirementsGroup>({ - 'tosca.capabilities.Node' : [ dependencyReq ] - }), capabilities: Mock.of<CapabilitiesGroup>({ 'tosca.capabilities.Attachment' : [ blockStoreAttachmentCap ], - 'tosca.capabilities.Node' : [ featureCap ] }) }) }); @@ -141,12 +118,8 @@ describe('match capability requirements utils service ', () => { componentInstance: Mock.of<ComponentInstance>({ componentName: 'BlockStorage', uniqueId : 'extvl0', - requirements: Mock.of<RequirementsGroup>({ - 'tosca.capabilities.Node' : [ dependencyReq ] - }), capabilities: Mock.of<CapabilitiesGroup>({ 'tosca.capabilities.network.Linkable' : [ linkableCap ], - 'tosca.capabilities.Node' : [ featureCap ] }) }) }); @@ -160,9 +133,6 @@ describe('match capability requirements utils service ', () => { 'tosca.capabilities.network.Linkable' : [ virtualLinkReq ], 'tosca.capabilities.network.Bindable' : [ bindableReq ] }), - capabilities: Mock.of<CapabilitiesGroup>({ - 'tosca.capabilities.Node' : [ featureCap ] - }) }) }); @@ -274,6 +244,39 @@ describe('match capability requirements utils service ', () => { jest.spyOn(service, 'isMatch').mockReturnValue(true); expect(service.getMatches({}, capabilities, [], fromId, toId, true)).toHaveLength(4); }); + + it('node have 3 unfulfilled requirements: DependsOn tosca.nodes.Root, BindsTo and LinksTo;' + + ' and DependsOn and BindsTo matching capabilities, ' + + 'should return 2 matches', () => { + const dependencyList = [dependencyReq, bindableReq, virtualLinkReq]; + jest.spyOn(service, 'getUnfulfilledRequirements').mockReturnValue(dependencyList); + const capabilities = { + cap1Match: featureCap, cap2NotMatch: Mock.of<Capability>(), cap3Match: bindingCap + }; + const expectedMatchDependsOn = { + requirement: dependencyReq, + capability: featureCap, + isFromTo: true, + fromNode: fromId, + toNode: toId + }; + const expectedMatchBindsTo = { + requirement: bindableReq, + capability: bindingCap, + isFromTo: true, + fromNode: fromId, + toNode: toId + }; + const matches = service.getMatches({}, capabilities, [], fromId, toId, true); + expect(matches).toHaveLength(2); + expect(matches).toEqual( + expect.arrayContaining([ + expect.objectContaining(expectedMatchDependsOn), + expect.objectContaining(expectedMatchBindsTo) + ]) + ); + + }); }); describe('Find matching nodes ===>', () => { diff --git a/catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requierment-utils.ts b/catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requirement-utils.ts index c3a1286a97..ec7f8d1ab6 100644 --- a/catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requierment-utils.ts +++ b/catalog-ui/src/app/ng2/pages/composition/graph/utils/match-capability-requirement-utils.ts @@ -113,13 +113,12 @@ export class MatchCapabilitiesRequirementsUtils { public getUnfulfilledRequirements = (fromNodeId: string, requirements: RequirementsGroup, links: CompositionCiLinkBase[]): Requirement[] => { const requirementArray: Requirement[] = []; _.forEach(_.flatten(_.values(requirements)), (requirement: Requirement) => { - const reqFulfilled = this.isRequirementFulfilled(fromNodeId, requirement, links); - if (requirement.name !== 'dependency' && requirement.parentName !== 'dependency' && !reqFulfilled) { + if (!this.isRequirementFulfilled(fromNodeId, requirement, links)) { requirementArray.push(requirement); } }); return requirementArray; - } + }; /** * Returns true if there is a match between the capabilities and requirements that are passed in |