From 977287b586e27e2f835a5d24950abf1f2adae8be Mon Sep 17 00:00:00 2001 From: Brinda Santh Date: Mon, 5 Aug 2019 09:50:15 -0400 Subject: Add resource definition resolution service. Change-Id: Ife75d290540e3ed0e0dfd0a82785a498607a2d25 Issue-ID: CCSDK-1577 Signed-off-by: Brinda Santh --- .../resolution/ResourceResolutionServiceTest.kt | 142 +++++++++++++++------ .../CapabilityResourceResolutionProcessorTest.kt | 88 ++++++++----- 2 files changed, 155 insertions(+), 75 deletions(-) (limited to 'ms/blueprintsprocessor/functions/resource-resolution/src/test') diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt index f1ad03054..775c501c2 100644 --- a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt +++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt @@ -18,6 +18,8 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution +import io.mockk.every +import io.mockk.mockk import kotlinx.coroutines.runBlocking import org.junit.Assert import org.junit.Before @@ -30,12 +32,18 @@ import org.onap.ccsdk.cds.blueprintsprocessor.core.utils.PayloadUtils import org.onap.ccsdk.cds.blueprintsprocessor.db.BluePrintDBLibConfiguration import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.processor.* import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintError +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive import org.onap.ccsdk.cds.controllerblueprints.core.config.BluePrintLoadConfiguration +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.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.EnableAutoConfiguration +import org.springframework.context.ApplicationContext import org.springframework.context.annotation.ComponentScan import org.springframework.test.context.ContextConfiguration import org.springframework.test.context.TestPropertySource @@ -84,8 +92,8 @@ class ResourceResolutionServiceTest { fun testRegisteredSource() { val sources = resourceResolutionService.registeredResourceSources() assertNotNull(sources, "failed to get registered sources") - assertTrue(sources.containsAll(arrayListOf("source-input", "source-default", "source-processor-db", - "source-rest")), "failed to get registered sources : $sources") + assertTrue(sources.containsAll(arrayListOf("source-input", "source-default", "source-db", + "source-rest", "source-capability")), "failed to get registered sources : $sources") } @Test @@ -96,27 +104,27 @@ class ResourceResolutionServiceTest { Assert.assertNotNull("failed to create ResourceResolutionService", resourceResolutionService) val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime("1234", - "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration") + "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration") val executionServiceInput = - JacksonUtils.readValueFromClassPathFile("payload/requests/sample-resourceresolution-request.json", - ExecutionServiceInput::class.java)!! + JacksonUtils.readValueFromClassPathFile("payload/requests/sample-resourceresolution-request.json", + ExecutionServiceInput::class.java)!! val resourceAssignmentRuntimeService = - ResourceAssignmentUtils.transformToRARuntimeService(bluePrintRuntimeService, - "testResolveResource") + ResourceAssignmentUtils.transformToRARuntimeService(bluePrintRuntimeService, + "testResolveResource") // Prepare Inputs PayloadUtils.prepareInputsFromWorkflowPayload(bluePrintRuntimeService, - executionServiceInput.payload, - "resource-assignment") + executionServiceInput.payload, + "resource-assignment") resourceResolutionService.resolveResources(resourceAssignmentRuntimeService, - "resource-assignment", - "baseconfig", - props) + "resource-assignment", + "baseconfig", + props) } } @@ -128,23 +136,23 @@ class ResourceResolutionServiceTest { Assert.assertNotNull("failed to create ResourceResolutionService", resourceResolutionService) val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime("1234", - "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration") + "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration") val executionServiceInput = - JacksonUtils.readValueFromClassPathFile("payload/requests/sample-resourceresolution-request.json", - ExecutionServiceInput::class.java)!! + JacksonUtils.readValueFromClassPathFile("payload/requests/sample-resourceresolution-request.json", + ExecutionServiceInput::class.java)!! val artefactNames = listOf("baseconfig", "another") // Prepare Inputs PayloadUtils.prepareInputsFromWorkflowPayload(bluePrintRuntimeService, - executionServiceInput.payload, - "resource-assignment") + executionServiceInput.payload, + "resource-assignment") resourceResolutionService.resolveResources(bluePrintRuntimeService, - "resource-assignment", - artefactNames, - props) + "resource-assignment", + artefactNames, + props) } } @@ -156,27 +164,27 @@ class ResourceResolutionServiceTest { Assert.assertNotNull("failed to create ResourceResolutionService", resourceResolutionService) val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime("1234", - "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration") + "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration") val executionServiceInput = - JacksonUtils.readValueFromClassPathFile("payload/requests/sample-resourceresolution-request.json", - ExecutionServiceInput::class.java)!! + JacksonUtils.readValueFromClassPathFile("payload/requests/sample-resourceresolution-request.json", + ExecutionServiceInput::class.java)!! val resourceAssignmentRuntimeService = - ResourceAssignmentUtils.transformToRARuntimeService(bluePrintRuntimeService, - "testResolveResourcesWithMappingAndTemplate") + ResourceAssignmentUtils.transformToRARuntimeService(bluePrintRuntimeService, + "testResolveResourcesWithMappingAndTemplate") val artifactPrefix = "another" // Prepare Inputs PayloadUtils.prepareInputsFromWorkflowPayload(bluePrintRuntimeService, - executionServiceInput.payload, - "resource-assignment") + executionServiceInput.payload, + "resource-assignment") resourceResolutionService.resolveResources(resourceAssignmentRuntimeService, - "resource-assignment", - artifactPrefix, - props) + "resource-assignment", + artifactPrefix, + props) } } @@ -190,27 +198,81 @@ class ResourceResolutionServiceTest { Assert.assertNotNull("failed to create ResourceResolutionService", resourceResolutionService) val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime("1234", - "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration") + "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration") val executionServiceInput = - JacksonUtils.readValueFromClassPathFile("payload/requests/sample-resourceresolution-request.json", - ExecutionServiceInput::class.java)!! + JacksonUtils.readValueFromClassPathFile("payload/requests/sample-resourceresolution-request.json", + ExecutionServiceInput::class.java)!! val resourceAssignmentRuntimeService = - ResourceAssignmentUtils.transformToRARuntimeService(bluePrintRuntimeService, - "testResolveResourcesWithMappingAndTemplate") + ResourceAssignmentUtils.transformToRARuntimeService(bluePrintRuntimeService, + "testResolveResourcesWithMappingAndTemplate") val artifactPrefix = "another" // Prepare Inputs PayloadUtils.prepareInputsFromWorkflowPayload(bluePrintRuntimeService, - executionServiceInput.payload, - "resource-assignment") + executionServiceInput.payload, + "resource-assignment") resourceResolutionService.resolveResources(resourceAssignmentRuntimeService, - "resource-assignment", - artifactPrefix, - props) + "resource-assignment", + artifactPrefix, + props) + } + } + + @Test + fun testResourceResolutionForDefinition() { + val resourceDefinitions = BluePrintTypes.resourceDefinitions { + resourceDefinition(name = "port-speed", description = "Port Speed") { + property(type = "string", required = true) + sources { + sourceCapability(id = "sdno", description = "SDNO Source") { + definedProperties { + type(BluePrintConstants.SCRIPT_KOTLIN) + scriptClassReference(MockCapabilityScriptRA::class.qualifiedName!!) + keyDependencies(arrayListOf("device-id")) + } + } + sourceDb(id = "sdnc", description = "SDNC Controller") { + definedProperties { + endpointSelector("processor-db") + query("SELECT PORT_SPEED FROM XXXX WHERE DEVICE_ID = :device_id") + inputKeyMapping { + map("device_id", "\$device-id") + } + keyDependencies(arrayListOf("device-id")) + } + } + } + } + resourceDefinition(name = "device-id", description = "Device Id") { + property(type = "string", required = true) { + sources { + sourceInput(id = "input", description = "Dependency Source") {} + } + } + } + } + runBlocking { + val raRuntimeService = mockk() + every { raRuntimeService.bluePrintContext() } returns mockk() + every { raRuntimeService.getBluePrintError() } returns BluePrintError() + every { raRuntimeService.setBluePrintError(any())} returns Unit + every { raRuntimeService.getInputValue("device-id") } returns "123456".asJsonPrimitive() + + val applicationContext = mockk() + every { applicationContext.getBean("rr-processor-source-capability") } returns MockCapabilityScriptRA() + every { applicationContext.getBean("rr-processor-source-db") } returns MockCapabilityScriptRA() + every { applicationContext.getBean("rr-processor-source-input") } returns MockCapabilityScriptRA() + + val sources = arrayListOf("sdno", "sdnc") + + val resourceResolutionService = ResourceResolutionServiceImpl(applicationContext, mockk(), mockk(), mockk()) + val resolvedResources = resourceResolutionService.resolveResourceDefinition(raRuntimeService, + resourceDefinitions, "port-speed", sources) + assertNotNull(resolvedResources, "failed to resolve the resources") } } } diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceResolutionProcessorTest.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceResolutionProcessorTest.kt index 4a4bcc026..f020f2952 100644 --- a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceResolutionProcessorTest.kt +++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/processor/CapabilityResourceResolutionProcessorTest.kt @@ -18,25 +18,34 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.processor +import io.mockk.coEvery +import io.mockk.every +import io.mockk.mockk import kotlinx.coroutines.runBlocking -import org.junit.Ignore 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.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.scripts.BluePrintScriptsServiceImpl +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.core.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, @@ -50,44 +59,36 @@ class CapabilityResourceResolutionProcessorTest { @Autowired lateinit var capabilityResourceResolutionProcessor: CapabilityResourceResolutionProcessor - @Ignore @Test fun `test kotlin capability`() { runBlocking { - - 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 = mutableMapOf() - scriptPropertyInstances["mock-service1"] = MockCapabilityService() - scriptPropertyInstances["mock-service2"] = MockCapabilityService() - - val instanceDependencies: List = 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" + val componentFunctionScriptingService = mockk() + coEvery { + componentFunctionScriptingService + .scriptInstance(any(), any(), any()) + } returns MockCapabilityScriptRA() + + val raRuntimeService = mockk() + every { raRuntimeService.bluePrintContext() } returns mockk() + + 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 processorName = resourceAssignmentProcessor.applyNB(resourceAssignment) - assertNotNull(processorName, "couldn't get kotlin script resource assignment processor name") - println(processorName) + val status = capabilityResourceResolutionProcessor.applyNB(resourceAssignment) + assertTrue(status, "failed to execute capability source") + assertEquals("assigned-data".asJsonPrimitive(), resourceAssignment.property!!.value, + "assigned value miss match") } } @@ -127,4 +128,21 @@ class CapabilityResourceResolutionProcessorTest { open class MockCapabilityService { +} + +open class MockCapabilityScriptRA : ResourceAssignmentProcessor() { + val log = logger(MockCapabilityScriptRA::class) + + override fun getName(): String { + return "MockCapabilityScriptRA" + } + + override suspend fun processNB(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. + } } \ No newline at end of file -- cgit 1.2.3-korg