Revert "Renaming Files having BluePrint to have Blueprint"
[ccsdk/cds.git] / ms / blueprintsprocessor / functions / resource-resolution / src / test / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / functions / resource / resolution / processor / CapabilityResourceResolutionProcessorTest.kt
index 8ab47b9..1b0058b 100644 (file)
 
 package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.processor
 
-import org.junit.Ignore
+import com.fasterxml.jackson.databind.node.NullNode
+import io.mockk.coEvery
+import io.mockk.every
+import io.mockk.mockk
+import kotlinx.coroutines.runBlocking
 import org.junit.Test
-import org.junit.runner.RunWith
 import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.ResourceAssignmentRuntimeService
+import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.resourceAssignment
 import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.ComponentFunctionScriptingService
-import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.scripts.BlueprintJythonService
-import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.scripts.PythonExecutorProperty
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes
+import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive
 import org.onap.ccsdk.cds.controllerblueprints.core.data.PropertyDefinition
+import org.onap.ccsdk.cds.controllerblueprints.core.logger
+import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintContext
 import org.onap.ccsdk.cds.controllerblueprints.core.utils.BluePrintMetadataUtils
 import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceAssignment
 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceDefinition
-import org.onap.ccsdk.cds.controllerblueprints.scripts.BluePrintScriptsServiceImpl
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.test.context.ContextConfiguration
-import org.springframework.test.context.TestPropertySource
-import org.springframework.test.context.junit4.SpringRunner
+import kotlin.test.assertEquals
 import kotlin.test.assertNotNull
+import kotlin.test.assertTrue
 
-@RunWith(SpringRunner::class)
-@ContextConfiguration(classes = [CapabilityResourceResolutionProcessor::class, ComponentFunctionScriptingService::class,
-    BluePrintScriptsServiceImpl::class,
-    BlueprintJythonService::class, PythonExecutorProperty::class, MockCapabilityService::class])
-@TestPropertySource(properties =
-["blueprints.processor.functions.python.executor.modulePaths=./../../../../components/scripts/python/ccsdk_blueprints",
-    "blueprints.processor.functions.python.executor.executionPath=./../../../../components/scripts/python/ccsdk_blueprints"])
 class CapabilityResourceResolutionProcessorTest {
 
-    @Autowired
-    lateinit var capabilityResourceResolutionProcessor: CapabilityResourceResolutionProcessor
-
-    @Ignore
     @Test
     fun `test kotlin capability`() {
-
-        val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(
-                "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration")
-
-        val resourceAssignmentRuntimeService = ResourceAssignmentRuntimeService("1234", bluePrintContext)
-
-        capabilityResourceResolutionProcessor.raRuntimeService = resourceAssignmentRuntimeService
-        capabilityResourceResolutionProcessor.resourceDictionaries = hashMapOf()
-
-
-        val scriptPropertyInstances: MutableMap<String, Any> = mutableMapOf()
-        scriptPropertyInstances["mock-service1"] = MockCapabilityService()
-        scriptPropertyInstances["mock-service2"] = MockCapabilityService()
-
-        val instanceDependencies: List<String> = listOf()
-
-        val resourceAssignmentProcessor = capabilityResourceResolutionProcessor
-                .scriptInstance("kotlin",
-                        "ResourceAssignmentProcessor_cba\$ScriptResourceAssignmentProcessor", instanceDependencies)
-
-        assertNotNull(resourceAssignmentProcessor, "couldn't get kotlin script resource assignment processor")
-
-        val resourceAssignment = ResourceAssignment().apply {
-            name = "ra-name"
-            dictionaryName = "ra-dict-name"
-            dictionarySource = "capability"
-            property = PropertyDefinition().apply {
-                type = "string"
+        runBlocking {
+            val componentFunctionScriptingService = mockk<ComponentFunctionScriptingService>()
+            coEvery {
+                componentFunctionScriptingService
+                    .scriptInstance<ResourceAssignmentProcessor>(any(), any(), any())
+            } returns MockCapabilityScriptRA()
+
+            val raRuntimeService = mockk<ResourceAssignmentRuntimeService>()
+            every { raRuntimeService.bluePrintContext() } returns mockk<BluePrintContext>()
+            every { raRuntimeService.getInputValue("test-property") } returns NullNode.getInstance()
+
+            val capabilityResourceResolutionProcessor =
+                CapabilityResourceResolutionProcessor(componentFunctionScriptingService)
+            capabilityResourceResolutionProcessor.raRuntimeService = raRuntimeService
+
+            val resourceAssignment = BluePrintTypes.resourceAssignment(
+                name = "test-property", dictionaryName = "ra-dict-name",
+                dictionarySource = "capability"
+            ) {
+                property("string", true, "")
+                sourceCapability {
+                    definedProperties {
+                        type("internal")
+                        scriptClassReference(MockCapabilityScriptRA::class.qualifiedName!!)
+                        keyDependencies(arrayListOf("dep-property"))
+                    }
+                }
             }
+            val status = capabilityResourceResolutionProcessor.applyNB(resourceAssignment)
+            assertTrue(status, "failed to execute capability source")
+            assertEquals(
+                "assigned-data".asJsonPrimitive(), resourceAssignment.property!!.value,
+                "assigned value miss match"
+            )
         }
-
-        val processorName = resourceAssignmentProcessor.apply(resourceAssignment)
-        assertNotNull(processorName, "couldn't get kotlin script resource assignment processor name")
-        println(processorName)
     }
 
     @Test
     fun `test jython capability`() {
+        runBlocking {
+
+            val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(
+                "./../../../../components/model-catalog/blueprint-model/test-blueprint/capability_python"
+            )
+
+            val componentFunctionScriptingService = mockk<ComponentFunctionScriptingService>()
+            coEvery {
+                componentFunctionScriptingService
+                    .scriptInstance<ResourceAssignmentProcessor>(any(), BluePrintConstants.SCRIPT_JYTHON, any())
+            } returns MockCapabilityScriptRA()
+
+            val resourceAssignmentRuntimeService = ResourceAssignmentRuntimeService("1234", bluePrintContext)
+
+            val capabilityResourceResolutionProcessor =
+                CapabilityResourceResolutionProcessor(componentFunctionScriptingService)
+
+            capabilityResourceResolutionProcessor.raRuntimeService = resourceAssignmentRuntimeService
+
+            val resourceDefinition = JacksonUtils
+                .readValueFromClassPathFile(
+                    "mapping/capability/jython-resource-definitions.json",
+                    ResourceDefinition::class.java
+                )!!
+            val resourceDefinitions: MutableMap<String, ResourceDefinition> = mutableMapOf()
+            resourceDefinitions[resourceDefinition.name] = resourceDefinition
+            capabilityResourceResolutionProcessor.resourceDictionaries = resourceDefinitions
+
+            val resourceAssignment = ResourceAssignment().apply {
+                name = "service-instance-id"
+                dictionaryName = "service-instance-id"
+                dictionarySource = "capability"
+                property = PropertyDefinition().apply {
+                    type = "string"
+                }
+            }
 
-        val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(
-                "./../../../../components/model-catalog/blueprint-model/test-blueprint/capability_python")
+            val processorName = capabilityResourceResolutionProcessor.processNB(resourceAssignment)
+            assertNotNull(processorName, "couldn't get Jython script resource assignment processor name")
+            println(processorName)
+        }
+    }
+}
 
-        val resourceAssignmentRuntimeService = ResourceAssignmentRuntimeService("1234", bluePrintContext)
+open class MockCapabilityService
 
-        capabilityResourceResolutionProcessor.raRuntimeService = resourceAssignmentRuntimeService
+open class MockCapabilityScriptRA : ResourceAssignmentProcessor() {
 
-        val resourceDefinition = JacksonUtils
-                .readValueFromClassPathFile("mapping/capability/jython-resource-definitions.json",
-                        ResourceDefinition::class.java)!!
-        val resourceDefinitions: MutableMap<String, ResourceDefinition> = mutableMapOf()
-        resourceDefinitions[resourceDefinition.name] = resourceDefinition
-        capabilityResourceResolutionProcessor.resourceDictionaries = resourceDefinitions
+    val log = logger(MockCapabilityScriptRA::class)
 
-        val resourceAssignment = ResourceAssignment().apply {
-            name = "service-instance-id"
-            dictionaryName = "service-instance-id"
-            dictionarySource = "capability"
-            property = PropertyDefinition().apply {
-                type = "string"
-            }
-        }
+    override fun getName(): String {
+        return "MockCapabilityScriptRA"
+    }
 
-        val processorName = capabilityResourceResolutionProcessor.apply(resourceAssignment)
-        assertNotNull(processorName, "couldn't get Jython script resource assignment processor name")
+    override suspend fun processNB(executionRequest: ResourceAssignment) {
+        log.info("executing RA mock capability : ${executionRequest.name}")
+        executionRequest.property!!.value = "assigned-data".asJsonPrimitive()
+    }
 
+    override fun process(executionRequest: ResourceAssignment) {
+        log.info("executing RA mock capability : ${executionRequest.name}")
+        executionRequest.property!!.value = "assigned-data".asJsonPrimitive()
     }
 
+    override suspend fun recoverNB(runtimeException: RuntimeException, executionRequest: ResourceAssignment) {
+        TODO("not implemented") // To change body of created functions use File | Settings | File Templates.
+    }
 }
-
-open class MockCapabilityService {
-
-}
\ No newline at end of file