diff options
author | Jozsef Csongvai <jozsef.csongvai@bell.ca> | 2020-12-09 19:49:48 -0500 |
---|---|---|
committer | Jozsef Csongvai <jozsef.csongvai@bell.ca> | 2021-03-17 22:31:31 -0400 |
commit | b96b44d6d7ca11dbbc3ad4bd2194df31fba5efb6 (patch) | |
tree | c10077ebb496410271ca3d07ca8896048c817bd9 /ms/blueprintsprocessor/modules/blueprints | |
parent | ae588292c67e20c5cae8cb3c899957aac79a676d (diff) |
Refactoring to enable on_failure for imperative workflow
BlueprintError needs to associate errors with the steps in which they occurred
in order for imperative workflow to handle on_failure properly.
Made stepName more accessible and corrected places where stepName was assigned to nodeTemplateName.
Issue-ID: CCSDK-3219
Change-Id: I7e5805745c63558cff6be533e1b99c32ad06c3db
Signed-off-by: Jozsef Csongvai <jozsef.csongvai@bell.ca>
Diffstat (limited to 'ms/blueprintsprocessor/modules/blueprints')
7 files changed, 37 insertions, 22 deletions
diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BlueprintError.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BlueprintError.kt index b4d95ca3b..2ecdce770 100644 --- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BlueprintError.kt +++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BlueprintError.kt @@ -18,13 +18,21 @@ package org.onap.ccsdk.cds.controllerblueprints.core class BlueprintError { - var errors: MutableList<String> = arrayListOf() + private val errors: MutableMap<String, MutableList<String>> = mutableMapOf() - fun addError(type: String, name: String, error: String) { - this.errors.add("$type : $name : $error") + fun addError(type: String, name: String, error: String, stepName: String) { + addError("$type : $name : $error", stepName) } - fun addError(error: String) { - this.errors.add(error) + fun addError(error: String, stepName: String) { + errors.getOrPut(stepName, { mutableListOf() }).add(error) } + + fun addErrors(stepName: String, errorList: List<String>) { + errors.getOrPut(stepName, { mutableListOf() }).addAll(errorList) + } + + fun allErrors(): List<String> = errors.values.flatten() + + fun stepErrors(stepName: String): MutableList<String>? = errors[stepName] } diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BlueprintContext.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BlueprintContext.kt index b79b86747..62026be88 100644 --- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BlueprintContext.kt +++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/service/BlueprintContext.kt @@ -103,8 +103,11 @@ class BlueprintContext(val serviceTemplate: ServiceTemplate) { fun workflowInputs(workFlowName: String) = workflowByName(workFlowName).inputs + fun workflowSteps(workFlowName: String) = + workflowByName(workFlowName).steps ?: throw BlueprintException("could't get steps for workflow($workFlowName)") + fun workflowStepByName(workFlowName: String, stepName: String): Step { - return workflowByName(workFlowName).steps?.get(stepName) + return workflowSteps(workFlowName)[stepName] ?: throw BlueprintException("could't get step($stepName) for workflow($workFlowName)") } @@ -114,8 +117,9 @@ class BlueprintContext(val serviceTemplate: ServiceTemplate) { } fun workflowFirstStepNodeTemplate(workFlowName: String): String { - val firstStepName = workflowByName(workFlowName).steps?.keys?.first() - ?: throw BlueprintException("could't get first step for workflow($workFlowName)") + val firstStepName = workflowSteps(workFlowName).keys.ifEmpty { + throw BlueprintException("could't get first step for workflow($workFlowName)") + }.first() return workflowStepNodeTemplate(workFlowName, firstStepName) } diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BlueprintErrorTest.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BlueprintErrorTest.kt index 482d21abd..94ba98603 100644 --- a/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BlueprintErrorTest.kt +++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-core/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BlueprintErrorTest.kt @@ -10,24 +10,24 @@ class BlueprintErrorTest { fun testBlueprintErrorIsCreatedWithemptyList() { val bluePrintError = BlueprintError() - assertTrue(bluePrintError.errors.isEmpty()) + assertTrue(bluePrintError.allErrors().isEmpty()) } @Test fun testAddErrorWith3Params() { val bluePrintError = BlueprintError() - bluePrintError.addError("type", "name", "error") + bluePrintError.addError("type", "name", "error", "step") - assertEquals("type : name : error", bluePrintError.errors[0]) + assertEquals("type : name : error", bluePrintError.stepErrors("step")!![0]) } @Test - fun testAddErrorWith1Params() { + fun testAddErrorWith2Params() { val bluePrintError = BlueprintError() - bluePrintError.addError("error") + bluePrintError.addError("error", "step") - assertEquals("error", bluePrintError.errors[0]) + assertEquals("error", bluePrintError.stepErrors("step")!![0]) } } diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintDesignTimeValidatorService.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintDesignTimeValidatorService.kt index fe3aeb1ed..aac1c2e97 100644 --- a/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintDesignTimeValidatorService.kt +++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintDesignTimeValidatorService.kt @@ -17,6 +17,7 @@ package org.onap.ccsdk.cds.controllerblueprints.validation +import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import org.onap.ccsdk.cds.controllerblueprints.core.BlueprintConstants import org.onap.ccsdk.cds.controllerblueprints.core.BlueprintException import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BlueprintTypeValidatorService @@ -57,9 +58,10 @@ open class BlueprintDesignTimeValidatorService( // Validate Resource Definitions validateResourceDefinitions(bluePrintRuntimeService) - if (bluePrintRuntimeService.getBlueprintError().errors.size > 0) { - throw BlueprintException("failed in blueprint validation : ${bluePrintRuntimeService.getBlueprintError().errors.joinToString("\n")}") + bluePrintRuntimeService.getBlueprintError().allErrors().ifNotEmpty { + throw BlueprintException("failed in blueprint validation : ${this.joinToString("\n")}") } + return true } diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintServiceTemplateValidatorImpl.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintServiceTemplateValidatorImpl.kt index b9450e66d..137e6e6b9 100644 --- a/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintServiceTemplateValidatorImpl.kt +++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintServiceTemplateValidatorImpl.kt @@ -58,7 +58,7 @@ open class BlueprintServiceTemplateValidatorImpl(private val bluePrintTypeValida serviceTemplate.topologyTemplate?.let { validateTopologyTemplate(serviceTemplate.topologyTemplate!!) } } catch (e: Exception) { log.error("failed in blueprint service template validation", e) - error.addError(BlueprintConstants.PATH_SERVICE_TEMPLATE, paths.joinToString(BlueprintConstants.PATH_DIVIDER), e.message!!) + error.addError(BlueprintConstants.PATH_SERVICE_TEMPLATE, paths.joinToString(BlueprintConstants.PATH_DIVIDER), e.message!!, "BlueprintServiceTemplateValidator") } } diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintWorkflowValidatorImpl.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintWorkflowValidatorImpl.kt index 8f9cb01c5..bff09fc83 100644 --- a/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintWorkflowValidatorImpl.kt +++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintWorkflowValidatorImpl.kt @@ -76,7 +76,8 @@ open class BlueprintWorkflowValidatorImpl(private val bluePrintTypeValidatorServ .addError( "Failed to validate Workflow($workflowName)'s step($stepName)'s " + "definition", - paths.joinToString(BlueprintConstants.PATH_DIVIDER), e.message!! + paths.joinToString(BlueprintConstants.PATH_DIVIDER), e.message!!, + "BlueprintWorkflowValidatorImpl" ) } } diff --git a/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintDesignTimeValidatorServiceTest.kt b/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintDesignTimeValidatorServiceTest.kt index 49c12b95f..dd82ec5da 100644 --- a/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintDesignTimeValidatorServiceTest.kt +++ b/ms/blueprintsprocessor/modules/blueprints/blueprint-validation/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/validation/BlueprintDesignTimeValidatorServiceTest.kt @@ -63,10 +63,10 @@ class BlueprintDesignTimeValidatorServiceTest { workflow.steps = mutableMapOf("test" to step) workflowValidator.validate(bluePrintRuntime, workflowName, workflow) - assertEquals(1, bluePrintRuntime.getBlueprintError().errors.size) + assertEquals(1, bluePrintRuntime.getBlueprintError().allErrors().size) assertEquals( "Failed to validate Workflow(resource-assignment)'s step(test)'s definition : resource-assignment/steps/test : could't get node template for the name(TestCaseFailNoNodeTemplate)", - bluePrintRuntime.getBlueprintError().errors[0] + bluePrintRuntime.getBlueprintError().allErrors()[0] ) } @@ -96,12 +96,12 @@ class BlueprintDesignTimeValidatorServiceTest { workflow.steps = mutableMapOf("test" to step) workflowValidator.validate(bluePrintRuntime, workflowName, workflow) - assertEquals(1, bluePrintRuntime.getBlueprintError().errors.size) + assertEquals(1, bluePrintRuntime.getBlueprintError().allErrors().size) assertEquals( "Failed to validate Workflow(resource-assignment)'s step(test)'s definition : " + "resource-assignment/steps/test : NodeType(TestNodeType) derived from is 'tosca.nodes.TEST', " + "Expected 'tosca.nodes.Workflow' or 'tosca.nodes.Component'", - bluePrintRuntime.getBlueprintError().errors[0] + bluePrintRuntime.getBlueprintError().allErrors()[0] ) } |