2 * Copyright © 2017-2018 AT&T Intellectual Property.
3 * Modifications Copyright © 2018 IBM.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 package org.onap.ccsdk.cds.controllerblueprints.core.service
21 import com.fasterxml.jackson.databind.ObjectMapper
22 import org.slf4j.LoggerFactory
24 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants
25 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException
26 import org.onap.ccsdk.cds.controllerblueprints.core.data.*
27 import org.onap.ccsdk.cds.controllerblueprints.core.utils.BluePrintMetadataUtils
28 import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
29 import kotlin.test.assertEquals
30 import kotlin.test.assertNotNull
31 import kotlin.test.assertNull
32 import kotlin.test.assertTrue
37 * @author Brinda Santh
39 class BluePrintContextTest {
41 private val log= LoggerFactory.getLogger(this::class.toString())
43 val blueprintBasePath: String = ("./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration")
46 fun testBluePrintContextCreation() {
47 val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(blueprintBasePath)
48 assertNotNull(bluePrintContext, "Failed to populate Blueprint context")
52 fun testChainedProperty() {
53 val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(blueprintBasePath)
54 val nodeType = bluePrintContext.nodeTypeChained("component-resource-resolution")
55 assertNotNull(nodeType, "Failed to get chained node type")
56 log.trace("Properties {}", JacksonUtils.getJson(nodeType, true))
61 val serviceTemplate = ServiceTemplate()
62 serviceTemplate.imports = mutableListOf()
63 val bluePrintContext = BluePrintContext(serviceTemplate)
65 assertTrue(bluePrintContext.imports()!!.isEmpty())
67 serviceTemplate.imports = null
68 assertNull(bluePrintContext.imports())
73 val serviceTemplate = ServiceTemplate()
74 serviceTemplate.dataTypes = mutableMapOf()
75 val bluePrintContext = BluePrintContext(serviceTemplate)
77 assertTrue(bluePrintContext.dataTypes()!!.isEmpty())
79 serviceTemplate.dataTypes = null
80 assertNull(bluePrintContext.dataTypes())
85 val topologyTemplate = TopologyTemplate()
86 topologyTemplate.inputs = mutableMapOf()
87 val serviceTemplate = ServiceTemplate()
88 serviceTemplate.topologyTemplate = topologyTemplate
89 val bluePrintContext = BluePrintContext(serviceTemplate)
91 assertTrue(bluePrintContext.inputs()!!.isEmpty())
93 topologyTemplate.inputs = null
95 assertNull(bluePrintContext.inputs())
99 fun testBluePrintJson() {
100 val serviceTemplate = ServiceTemplate()
101 val bluePrintContext = BluePrintContext(serviceTemplate)
103 assertEquals("{\"tosca_definitions_version\":\"controller_blueprint_1_0_0\"}", bluePrintContext.blueprintJson())
106 @Test(expected = BluePrintException::class)
108 val serviceTemplate = ServiceTemplate()
109 serviceTemplate.metadata = mutableMapOf(BluePrintConstants.METADATA_TEMPLATE_NAME to "hello")
110 val bluePrintContext = BluePrintContext(serviceTemplate)
112 assertEquals("hello", bluePrintContext.name())
114 serviceTemplate.metadata = mutableMapOf()
115 val bluePrintContext2 = BluePrintContext(serviceTemplate)
116 bluePrintContext2.name()
119 @Test(expected = BluePrintException::class)
121 val serviceTemplate = ServiceTemplate()
122 serviceTemplate.metadata = mutableMapOf(BluePrintConstants.METADATA_TEMPLATE_VERSION to "hello")
123 val bluePrintContext = BluePrintContext(serviceTemplate)
125 assertEquals("hello", bluePrintContext.version())
127 serviceTemplate.metadata = mutableMapOf()
128 val bluePrintContext2 = BluePrintContext(serviceTemplate)
129 bluePrintContext2.version()
132 @Test(expected = BluePrintException::class)
134 val serviceTemplate = ServiceTemplate()
135 serviceTemplate.metadata = mutableMapOf(BluePrintConstants.METADATA_TEMPLATE_AUTHOR to "hello")
136 val bluePrintContext = BluePrintContext(serviceTemplate)
138 assertEquals("hello", bluePrintContext.author())
140 serviceTemplate.metadata = mutableMapOf()
141 val bluePrintContext2 = BluePrintContext(serviceTemplate)
142 bluePrintContext2.author()
146 fun testWorkflows() {
147 val topologyTemplate = TopologyTemplate()
148 topologyTemplate.workflows = mutableMapOf()
149 val serviceTemplate = ServiceTemplate()
150 serviceTemplate.topologyTemplate = topologyTemplate
151 val bluePrintContext = BluePrintContext(serviceTemplate)
153 assertTrue(bluePrintContext.workflows()!!.isEmpty())
155 topologyTemplate.workflows = null
156 assertNull(bluePrintContext.workflows())
159 @Test(expected = BluePrintException::class)
160 fun testWorkFlowsByName() {
161 val topologyTemplate = TopologyTemplate()
162 topologyTemplate.workflows = mutableMapOf("workflow" to Workflow())
163 val serviceTemplate = ServiceTemplate()
164 serviceTemplate.topologyTemplate = topologyTemplate
165 val bluePrintContext = BluePrintContext(serviceTemplate)
167 assertNotNull(bluePrintContext.workflowByName("workflow"))
169 bluePrintContext.workflowByName("")
173 fun testWorkflowInput() {
174 val topologyTemplate = TopologyTemplate()
175 val workflow = Workflow()
176 workflow.inputs = mutableMapOf()
177 topologyTemplate.workflows = mutableMapOf("workflow" to workflow)
178 val serviceTemplate = ServiceTemplate()
179 serviceTemplate.topologyTemplate = topologyTemplate
180 val bluePrintContext = BluePrintContext(serviceTemplate)
182 assertTrue(bluePrintContext.workflowInputs("workflow")!!.isEmpty())
184 workflow.inputs = null
186 assertNull(bluePrintContext.workflowInputs("workflow"))
189 @Test(expected = BluePrintException::class)
190 fun testWorkflowStepByName() {
191 val topologyTemplate = TopologyTemplate()
192 val workflow = Workflow()
193 workflow.steps = mutableMapOf("step" to Step())
194 topologyTemplate.workflows = mutableMapOf("workflow" to workflow)
195 val serviceTemplate = ServiceTemplate()
196 serviceTemplate.topologyTemplate = topologyTemplate
197 val bluePrintContext = BluePrintContext(serviceTemplate)
199 assertNotNull(bluePrintContext.workflowStepByName("workflow", "step"))
201 bluePrintContext.workflowStepByName("workflow", "")
204 @Test(expected = BluePrintException::class)
205 fun testWorkflowStepNodeTemplate() {
206 val topologyTemplate = TopologyTemplate()
207 val workflow = Workflow()
209 step.target = "hello"
210 workflow.steps = mutableMapOf("step" to step)
211 topologyTemplate.workflows = mutableMapOf("workflow" to workflow)
212 val serviceTemplate = ServiceTemplate()
213 serviceTemplate.topologyTemplate = topologyTemplate
214 val bluePrintContext = BluePrintContext(serviceTemplate)
216 assertEquals("hello", bluePrintContext.workflowStepNodeTemplate("workflow", "step"))
218 bluePrintContext.workflowStepNodeTemplate("workflow", "")
221 @Test(expected = BluePrintException::class)
222 fun testWorkflowFirstStepNodeTemplate() {
223 val topologyTemplate = TopologyTemplate()
224 val workflow = Workflow()
226 step.target = "hello"
227 workflow.steps = mutableMapOf("step" to step, "step2" to Step())
228 topologyTemplate.workflows = mutableMapOf("workflow" to workflow)
229 val serviceTemplate = ServiceTemplate()
230 serviceTemplate.topologyTemplate = topologyTemplate
231 val bluePrintContext = BluePrintContext(serviceTemplate)
233 assertEquals("hello", bluePrintContext.workflowFirstStepNodeTemplate("workflow"))
235 workflow.steps = null
236 bluePrintContext.workflowFirstStepNodeTemplate("workflow")
239 @Test(expected = BluePrintException::class)
240 fun testWorkflowStepFirstCallOperation() {
241 val topologyTemplate = TopologyTemplate()
242 val workflow = Workflow()
244 val activity = Activity()
245 activity.callOperation = "hello"
246 step.activities = arrayListOf(activity)
247 workflow.steps = mutableMapOf("step" to step)
248 topologyTemplate.workflows = mutableMapOf("workflow" to workflow)
249 val serviceTemplate = ServiceTemplate()
250 serviceTemplate.topologyTemplate = topologyTemplate
251 val bluePrintContext = BluePrintContext(serviceTemplate)
253 assertEquals("hello", bluePrintContext.workflowStepFirstCallOperation("workflow", "step"))
255 bluePrintContext.workflowStepFirstCallOperation("workflow", "")
259 fun testDatatypeByName() {
260 val serviceTemplate = ServiceTemplate()
261 serviceTemplate.dataTypes = mutableMapOf("data" to DataType())
262 val bluePrintContext = BluePrintContext(serviceTemplate)
264 assertNotNull(bluePrintContext.dataTypeByName("data"))
265 assertNull(bluePrintContext.dataTypeByName(""))
269 fun testArtifactTypes() {
270 val serviceTemplate = ServiceTemplate()
271 serviceTemplate.artifactTypes = mutableMapOf()
272 val bluePrintContext = BluePrintContext(serviceTemplate)
274 assertTrue(bluePrintContext.artifactTypes()!!.isEmpty())
276 serviceTemplate.artifactTypes = null
277 assertNull(bluePrintContext.artifactTypes())
281 fun testPolicyTypes() {
282 val serviceTemplate = ServiceTemplate()
283 serviceTemplate.policyTypes = mutableMapOf()
284 val bluePrintContext = BluePrintContext(serviceTemplate)
286 assertTrue(bluePrintContext.policyTypes()!!.isEmpty())
288 serviceTemplate.policyTypes = null
289 assertNull(bluePrintContext.policyTypes())
292 @Test(expected = BluePrintException::class)
293 fun testPolicyTypeByName() {
294 val serviceTemplate = ServiceTemplate()
295 serviceTemplate.policyTypes = mutableMapOf("policy" to PolicyType())
296 val bluePrintContext = BluePrintContext(serviceTemplate)
298 assertNotNull(bluePrintContext.policyTypeByName("policy"))
300 bluePrintContext.policyTypeByName("")
304 fun testPolicyTypesDerivedFrom() {
305 val serviceTemplate = ServiceTemplate()
306 val policyType = PolicyType()
307 policyType.derivedFrom = "hi"
308 val policyType2 = PolicyType()
309 policyType2.derivedFrom = "hello"
310 serviceTemplate.policyTypes = mutableMapOf("policy" to policyType, "policy2" to policyType2)
311 val bluePrintContext = BluePrintContext(serviceTemplate)
313 assertEquals(1, bluePrintContext.policyTypesDerivedFrom("hi")!!.size)
315 serviceTemplate.policyTypes = null
316 assertNull(bluePrintContext.policyTypesDerivedFrom("hi"))
320 fun testPolicyTypesTarget() {
321 val serviceTemplate = ServiceTemplate()
322 val policyType = PolicyType()
323 policyType.targets = mutableListOf("hi")
324 val policyType2 = PolicyType()
325 policyType2.targets = mutableListOf()
326 serviceTemplate.policyTypes = mutableMapOf("policy" to policyType, "policy2" to policyType2)
327 val bluePrintContext = BluePrintContext(serviceTemplate)
329 assertEquals(1, bluePrintContext.policyTypesTarget("hi")!!.size)
331 serviceTemplate.policyTypes = null
332 assertNull(bluePrintContext.policyTypesTarget("hi"))
336 fun testPolicyTypesTargetNDerivedFrom() {
337 val serviceTemplate = ServiceTemplate()
338 val policyType = PolicyType()
339 policyType.targets = mutableListOf("hi")
340 policyType.derivedFrom = "hi"
341 val policyType2 = PolicyType()
342 policyType2.targets = mutableListOf()
343 policyType2.derivedFrom = "hi"
344 serviceTemplate.policyTypes = mutableMapOf("policy" to policyType, "policy2" to policyType2)
345 val bluePrintContext = BluePrintContext(serviceTemplate)
347 assertEquals(1, bluePrintContext.policyTypesTargetNDerivedFrom("hi", "hi")!!.size)
349 serviceTemplate.policyTypes = null
350 assertNull(bluePrintContext.policyTypesTargetNDerivedFrom("hi", "hi"))
354 fun testNodeTypeDerivedFrom() {
355 val serviceTemplate = ServiceTemplate()
356 val nodeType = NodeType()
357 nodeType.derivedFrom = "hi"
358 val nodeType2 = NodeType()
359 nodeType2.derivedFrom = "hiii"
360 serviceTemplate.nodeTypes = mutableMapOf("node" to nodeType, "node2" to nodeType2)
361 val bluePrintContext = BluePrintContext(serviceTemplate)
363 assertEquals(1, bluePrintContext.nodeTypeDerivedFrom("hi")!!.size)
365 serviceTemplate.nodeTypes = null
366 assertNull(bluePrintContext.nodeTypeDerivedFrom("hi"))
369 @Test(expected = BluePrintException::class)
370 fun testInterfaceNameForNodeType() {
371 val serviceTemplate = ServiceTemplate()
372 val nodeType = NodeType()
373 nodeType.interfaces = mutableMapOf("hello" to InterfaceDefinition(), "hi" to InterfaceDefinition())
374 serviceTemplate.nodeTypes = mutableMapOf("node" to nodeType)
375 val bluePrintContext = BluePrintContext(serviceTemplate)
377 assertEquals("hello", bluePrintContext.interfaceNameForNodeType("node"))
379 bluePrintContext.interfaceNameForNodeType("")
383 fun testNodeTemplateForNodeType() {
384 val serviceTemplate = ServiceTemplate()
385 val nodeTemplate = NodeTemplate()
386 nodeTemplate.type = "hello"
387 val nodeTemplate2 = NodeTemplate()
388 nodeTemplate2.type = "hi"
389 serviceTemplate.topologyTemplate = TopologyTemplate()
390 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate, "node2" to nodeTemplate2)
391 val bluePrintContext = BluePrintContext(serviceTemplate)
393 assertEquals(1, bluePrintContext.nodeTemplateForNodeType("hello")!!.size)
395 serviceTemplate.topologyTemplate!!.nodeTemplates = null
396 assertNull(bluePrintContext.nodeTemplateForNodeType("hello"))
400 fun testNodeTemplateProperty() {
401 val serviceTemplate = ServiceTemplate()
402 val nodeTemplate = NodeTemplate()
403 nodeTemplate.properties = mutableMapOf("prop" to ObjectMapper().createObjectNode())
404 serviceTemplate.topologyTemplate = TopologyTemplate()
405 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
406 val bluePrintContext = BluePrintContext(serviceTemplate)
408 assertNotNull(bluePrintContext.nodeTemplateProperty("node", "prop"))
410 assertNull(bluePrintContext.nodeTemplateProperty("node", ""))
412 nodeTemplate.properties = null
413 assertNull(bluePrintContext.nodeTemplateProperty("node", "prop"))
417 fun testNodeTemplateArtifacts() {
418 val serviceTemplate = ServiceTemplate()
419 val nodeTemplate = NodeTemplate()
420 nodeTemplate.artifacts = mutableMapOf()
421 serviceTemplate.topologyTemplate = TopologyTemplate()
422 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
423 val bluePrintContext = BluePrintContext(serviceTemplate)
425 assertTrue(bluePrintContext.nodeTemplateArtifacts("node")!!.isEmpty())
428 @Test(expected = BluePrintException::class)
429 fun testNodeTemplateArtifact() {
430 val serviceTemplate = ServiceTemplate()
431 val nodeTemplate = NodeTemplate()
432 nodeTemplate.artifacts = mutableMapOf("art" to ArtifactDefinition())
433 serviceTemplate.topologyTemplate = TopologyTemplate()
434 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
435 val bluePrintContext = BluePrintContext(serviceTemplate)
437 assertNotNull(bluePrintContext.nodeTemplateArtifact("node", "art"))
439 bluePrintContext.nodeTemplateArtifact("node", "")
442 @Test(expected = BluePrintException::class)
443 fun testNodeTemplateArtifactForArtifactType() {
444 val serviceTemplate = ServiceTemplate()
445 val nodeTemplate = NodeTemplate()
446 val artifactDefinition = ArtifactDefinition()
447 artifactDefinition.type = "type"
448 val artifactDefinition2 = ArtifactDefinition()
449 artifactDefinition2.type = "No type"
450 nodeTemplate.artifacts = mutableMapOf("art" to artifactDefinition, "art2" to artifactDefinition2)
451 serviceTemplate.topologyTemplate = TopologyTemplate()
452 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
453 val bluePrintContext = BluePrintContext(serviceTemplate)
455 assertNotNull(bluePrintContext.nodeTemplateArtifactForArtifactType("node", "type"))
457 bluePrintContext.nodeTemplateArtifactForArtifactType("", "")
460 @Test(expected = BluePrintException::class)
461 fun testNodeTemplateFirstInterface() {
462 val serviceTemplate = ServiceTemplate()
463 val nodeTemplate = NodeTemplate()
464 nodeTemplate.interfaces = mutableMapOf("interface" to InterfaceAssignment(), "interf" to InterfaceAssignment())
465 serviceTemplate.topologyTemplate = TopologyTemplate()
466 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
467 val bluePrintContext = BluePrintContext(serviceTemplate)
469 assertNotNull(bluePrintContext.nodeTemplateFirstInterface("node"))
471 nodeTemplate.interfaces = null
472 bluePrintContext.nodeTemplateFirstInterface("node")
475 @Test(expected = BluePrintException::class)
476 fun testNodeTemplateFirstInterfaceName() {
477 val serviceTemplate = ServiceTemplate()
478 val nodeTemplate = NodeTemplate()
479 nodeTemplate.interfaces = mutableMapOf("interface" to InterfaceAssignment(), "interf" to InterfaceAssignment())
480 serviceTemplate.topologyTemplate = TopologyTemplate()
481 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
482 val bluePrintContext = BluePrintContext(serviceTemplate)
484 assertEquals("interface", bluePrintContext.nodeTemplateFirstInterfaceName("node"))
486 nodeTemplate.interfaces = null
487 bluePrintContext.nodeTemplateFirstInterfaceName("node")
490 @Test(expected = BluePrintException::class)
491 fun testNodeTemplateFirstInterfaceFirstOperationName() {
492 val serviceTemplate = ServiceTemplate()
493 val nodeTemplate = NodeTemplate()
494 val interfaceAssignment = InterfaceAssignment()
495 interfaceAssignment.operations = mutableMapOf("op" to OperationAssignment(), "op2" to OperationAssignment())
496 nodeTemplate.interfaces = mutableMapOf("intf" to interfaceAssignment)
497 serviceTemplate.topologyTemplate = TopologyTemplate()
498 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
499 val bluePrintContext = BluePrintContext(serviceTemplate)
501 assertEquals("op", bluePrintContext.nodeTemplateFirstInterfaceFirstOperationName("node"))
503 interfaceAssignment.operations = null
504 bluePrintContext.nodeTemplateFirstInterfaceFirstOperationName("node")
507 @Test(expected = BluePrintException::class)
508 fun testNodeTemplateCapability() {
509 val serviceTemplate = ServiceTemplate()
510 val nodeTemplate = NodeTemplate()
511 nodeTemplate.capabilities = mutableMapOf("cap" to CapabilityAssignment())
512 serviceTemplate.topologyTemplate = TopologyTemplate()
513 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
514 val bluePrintContext = BluePrintContext(serviceTemplate)
516 assertNotNull(bluePrintContext.nodeTemplateCapability("node", "cap"))
518 bluePrintContext.nodeTemplateCapability("node", "")
521 @Test(expected = BluePrintException::class)
522 fun testNodeTemplateRequirement() {
523 val serviceTemplate = ServiceTemplate()
524 val nodeTemplate = NodeTemplate()
525 nodeTemplate.requirements = mutableMapOf("req" to RequirementAssignment())
526 serviceTemplate.topologyTemplate = TopologyTemplate()
527 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
528 val bluePrintContext = BluePrintContext(serviceTemplate)
530 assertNotNull(bluePrintContext.nodeTemplateRequirement("node", "req"))
532 bluePrintContext.nodeTemplateRequirement("node", "")
535 @Test(expected = BluePrintException::class)
536 fun testNodeTemplateRequirementNode() {
537 val serviceTemplate = ServiceTemplate()
538 val nodeTemplate = NodeTemplate()
539 val requirementAssignment = RequirementAssignment()
540 requirementAssignment.node = "node"
541 nodeTemplate.requirements = mutableMapOf("req" to requirementAssignment)
542 serviceTemplate.topologyTemplate = TopologyTemplate()
543 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
544 val bluePrintContext = BluePrintContext(serviceTemplate)
546 assertNotNull(bluePrintContext.nodeTemplateRequirementNode("node", "req"))
548 bluePrintContext.nodeTemplateRequirementNode("node", "")
552 fun testNodeTemplateCapabilityProperty() {
553 val serviceTemplate = ServiceTemplate()
554 val nodeTemplate = NodeTemplate()
555 val capabilityAssignment = CapabilityAssignment()
556 capabilityAssignment.properties = mutableMapOf("prop" to ObjectMapper().createObjectNode())
557 nodeTemplate.capabilities = mutableMapOf("cap" to capabilityAssignment)
558 serviceTemplate.topologyTemplate = TopologyTemplate()
559 serviceTemplate.topologyTemplate!!.nodeTemplates = mutableMapOf("node" to nodeTemplate)
560 val bluePrintContext = BluePrintContext(serviceTemplate)
562 assertNotNull(bluePrintContext.nodeTemplateCapabilityProperty("node", "cap", "prop"))
564 capabilityAssignment.properties = null
566 assertNull(bluePrintContext.nodeTemplateCapabilityProperty("node", "cap", "prop"))