aboutsummaryrefslogtreecommitdiffstats
path: root/ms/blueprintsprocessor
diff options
context:
space:
mode:
Diffstat (limited to 'ms/blueprintsprocessor')
-rw-r--r--ms/blueprintsprocessor/modules/services/workflow-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImpl.kt14
-rw-r--r--ms/blueprintsprocessor/modules/services/workflow-service/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImplTest.kt50
2 files changed, 62 insertions, 2 deletions
diff --git a/ms/blueprintsprocessor/modules/services/workflow-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImpl.kt b/ms/blueprintsprocessor/modules/services/workflow-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImpl.kt
index 8a699d8d2..240348081 100644
--- a/ms/blueprintsprocessor/modules/services/workflow-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImpl.kt
+++ b/ms/blueprintsprocessor/modules/services/workflow-service/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImpl.kt
@@ -90,12 +90,22 @@ open class BluePrintWorkflowExecutionServiceImpl(
}
executionServiceOutput.commonHeader = executionServiceInput.commonHeader
executionServiceOutput.actionIdentifiers = executionServiceInput.actionIdentifiers
+
// Resolve Workflow Outputs
- val workflowOutputs = bluePrintRuntimeService.resolveWorkflowOutputs(workflowName)
+ var workflowOutputs: MutableMap<String, JsonNode>? = null
+ try {
+ workflowOutputs = bluePrintRuntimeService.resolveWorkflowOutputs(workflowName)
+ } catch (e: RuntimeException) {
+ log.error("Failed to resolve outputs for workflow: $workflowName", e)
+ e.message?.let { bluePrintRuntimeService.getBluePrintError().errors.add(it) }
+ }
// Set the Response Payload
executionServiceOutput.payload = JacksonUtils.objectMapper.createObjectNode()
- executionServiceOutput.payload.set<JsonNode>("$workflowName-response", workflowOutputs.asObjectNode())
+ executionServiceOutput.payload.set<JsonNode>(
+ "$workflowName-response",
+ workflowOutputs?.asObjectNode() ?: JacksonUtils.objectMapper.createObjectNode()
+ )
return executionServiceOutput
}
}
diff --git a/ms/blueprintsprocessor/modules/services/workflow-service/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImplTest.kt b/ms/blueprintsprocessor/modules/services/workflow-service/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImplTest.kt
index 90b7200c9..47fbe1021 100644
--- a/ms/blueprintsprocessor/modules/services/workflow-service/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImplTest.kt
+++ b/ms/blueprintsprocessor/modules/services/workflow-service/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/services/workflow/BluePrintWorkflowExecutionServiceImplTest.kt
@@ -16,7 +16,10 @@
package org.onap.ccsdk.cds.blueprintsprocessor.services.workflow
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.node.ObjectNode
import io.mockk.every
+import io.mockk.mockk
import io.mockk.mockkObject
import io.mockk.unmockkAll
import kotlinx.coroutines.runBlocking
@@ -24,20 +27,29 @@ import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ActionIdentifiers
+import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.CommonHeader
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceOutput
import org.onap.ccsdk.cds.blueprintsprocessor.core.service.BluePrintClusterService
import org.onap.ccsdk.cds.blueprintsprocessor.services.workflow.mock.MockComponentFunction
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintError
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.cds.controllerblueprints.core.asJsonType
+import org.onap.ccsdk.cds.controllerblueprints.core.data.Step
+import org.onap.ccsdk.cds.controllerblueprints.core.data.Workflow
import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BluePrintWorkflowExecutionService
+import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintContext
import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintDependencyService
+import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintRuntimeService
import org.onap.ccsdk.cds.controllerblueprints.core.utils.BluePrintMetadataUtils
import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.mock.mockito.MockBean
import org.springframework.test.context.ContextConfiguration
import org.springframework.test.context.junit4.SpringRunner
+import java.lang.RuntimeException
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertNotNull
@@ -131,4 +143,42 @@ class BluePrintWorkflowExecutionServiceImplTest {
}
}
}
+
+ @Test
+ fun `Should handle errors from resolve workflow output`() {
+ val imperativeWorkflowExecutionService: ImperativeWorkflowExecutionService = mockk()
+ val bluePrintWorkflowExecutionServiceImpl = BluePrintWorkflowExecutionServiceImpl(
+ mockk(), mockk(), imperativeWorkflowExecutionService)
+ val bluePrintRuntimeService: BluePrintRuntimeService<MutableMap<String, JsonNode>> = mockk()
+ val bluePrintContext: BluePrintContext = mockk()
+ val executionServiceInput = ExecutionServiceInput().apply {
+ this.actionIdentifiers = ActionIdentifiers().apply { this.actionName = "config-assign" }
+ this.commonHeader = CommonHeader()
+ this.payload = """{"config-assign-request": {}}""".asJsonType() as ObjectNode
+ }
+ val workflow = Workflow().apply {
+ this.steps = mutableMapOf("one" to Step(), "two" to Step())
+ }
+ val blueprintError = BluePrintError()
+
+ every { bluePrintRuntimeService.bluePrintContext() } returns bluePrintContext
+ every { bluePrintRuntimeService.assignWorkflowInputs(any(), any()) } returns Unit
+ every { bluePrintContext.workflowByName(any()) } returns workflow
+ every {
+ bluePrintRuntimeService.resolveWorkflowOutputs(any())
+ } throws RuntimeException("failed to resolve property...")
+ every {
+ runBlocking {
+ imperativeWorkflowExecutionService.executeBluePrintWorkflow(any(), any(), any())
+ }
+ } returns ExecutionServiceOutput()
+ every { bluePrintRuntimeService.getBluePrintError() } returns blueprintError
+
+ runBlocking {
+ val output = bluePrintWorkflowExecutionServiceImpl.executeBluePrintWorkflow(
+ bluePrintRuntimeService, executionServiceInput, mutableMapOf())
+ assertEquals("failed to resolve property...", blueprintError.errors[0])
+ assertEquals("""{"config-assign-response":{}}""".asJsonType(), output.payload)
+ }
+ }
}