diff options
3 files changed, 166 insertions, 116 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModule.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModule.groovy index 48268464d8..370600755b 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModule.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModule.groovy @@ -19,6 +19,8 @@ */ package org.onap.so.bpmn.common.scripts + +import org.apache.commons.lang.StringUtils import org.camunda.bpm.engine.delegate.DelegateExecution import org.onap.aai.domain.yang.GenericVnf import org.onap.so.bpmn.core.RollbackData @@ -94,55 +96,25 @@ public class CreateAAIVfModule extends AbstractServiceTaskProcessor{ execution.setVariable("CAAIVfMod_vnfName", vnfName) String vnfType = execution.getVariable("vnfType") - if (vnfType != null && !vnfType.isEmpty()) { - execution.setVariable("CAAIVfMod_vnfType", vnfType) - } else { - execution.setVariable("CAAIVfMod_vnfType","") - } + execution.setVariable("CAAIVfMod_vnfType", StringUtils.defaultString(vnfType)) execution.setVariable("CAAIVfMod_serviceId", execution.getVariable("serviceId")) String personaModelId = execution.getVariable("personaModelId") + execution.setVariable("CAAIVfMod_personaId",StringUtils.defaultString(personaModelId)) - if (personaModelId != null && !personaModelId.isEmpty()) { - execution.setVariable("CAAIVfMod_personaId",personaModelId) - } else { - execution.setVariable("CAAIVfMod_personaId","") - } - String personaModelVersion = execution.getVariable("personaModelVersion") + execution.setVariable("CAAIVfMod_personaVer", StringUtils.defaultString(personaModelVersion)) - if (personaModelVersion != null && !personaModelVersion.isEmpty()) { - execution.setVariable("CAAIVfMod_personaVer", personaModelVersion) - } else { - execution.setVariable("CAAIVfMod_personaVer","") - } - - String modelCustomizationId = execution.getVariable("modelCustomizationId") + execution.setVariable("CAAIVfMod_modelCustomizationId",StringUtils.defaultString(modelCustomizationId)) - if (modelCustomizationId != null && !modelCustomizationId.isEmpty()) { - execution.setVariable("CAAIVfMod_modelCustomizationId",modelCustomizationId) - } else { - execution.setVariable("CAAIVfMod_modelCustomizationId","") - } - String vnfPersonaModelId = execution.getVariable("vnfPersonaModelId") - - if (vnfPersonaModelId != null && !vnfPersonaModelId.isEmpty()) { - execution.setVariable("CAAIVfMod_vnfPersonaId",vnfPersonaModelId) - } else { - execution.setVariable("CAAIVfMod_vnfPersonaId","") - } - + execution.setVariable("CAAIVfMod_vnfPersonaId", StringUtils.defaultString(vnfPersonaModelId)) + String vnfPersonaModelVersion = execution.getVariable("vnfPersonaModelVersion") + execution.setVariable("CAAIVfMod_vnfPersonaVer", StringUtils.defaultString(vnfPersonaModelVersion)) - if (vnfPersonaModelVersion != null && !vnfPersonaModelVersion.isEmpty()) { - execution.setVariable("CAAIVfMod_vnfPersonaVer",vnfPersonaModelVersion) - } else { - execution.setVariable("CAAIVfMod_vnfPersonaVer","") - } - //isBaseVfModule Boolean isBaseVfModule = false String isBaseVfModuleString = execution.getVariable("isBaseVfModule") @@ -150,7 +122,7 @@ public class CreateAAIVfModule extends AbstractServiceTaskProcessor{ isBaseVfModule = true } execution.setVariable("CAAIVfMod_isBaseVfModule", isBaseVfModule) - + String isVidRequest = execution.getVariable("isVidRequest") if (isVidRequest != null && "true".equals(isVidRequest)) { msoLogger.debug("VID Request received") @@ -166,7 +138,7 @@ public class CreateAAIVfModule extends AbstractServiceTaskProcessor{ execution.setVariable("CAAIVfMod_aaiNamespace",aaiNamespace) } - + // send a GET request to AA&I to retrieve the Generic VNF/VF Module information based on a Vnf Name // expect a 200 response with the information in the response body or a 404 if the Generic VNF does not exist public void queryAAIForGenericVnf(DelegateExecution execution) { @@ -424,8 +396,9 @@ public class CreateAAIVfModule extends AbstractServiceTaskProcessor{ } } } + if (qryModuleList != null && !qryModuleList.getVfModule().isEmpty() && !execution.getVariable("CAAIVfMod_baseModuleConflict")) { - def qryModules = qryModuleList.getVfModule() + def qryModules = qryModuleList.getVfModule() for (org.onap.aai.domain.yang.VfModule qryModule : qryModules) { if (qryModule.isBaseVfModule) { // a base module already exists in this VNF - failure @@ -501,73 +474,4 @@ public class CreateAAIVfModule extends AbstractServiceTaskProcessor{ exceptionUtil.buildAndThrowWorkflowException(execution, errorCode, errorResponse) msoLogger.debug("Workflow exception occurred in CreateAAIVfModule: " + errorResponse) } - - /** - * Performs a rollback. - * TBD: This method requires additional testing once integrated with the - * main CreateVfModule flow. - * @param execution the execution - */ - public void rollback(DelegateExecution execution) { - def method = getClass().getSimpleName() + ".rollback(" + - "execution=" + execution.getId() + - ")" - msoLogger.debug("Entered " + method) - - try { - RollbackData rollbackData = (RollbackData) execution.getVariable("RollbackData") - msoLogger.debug("RollbackData:" + rollbackData) - - AaiUtil aaiUriUtil = new AaiUtil(this) - - if (rollbackData != null) { - if (rollbackData.hasType("VFMODULE")) { - // use the DeleteAAIVfModule groovy methods for the rollback - def vnfId = rollbackData.get("VFMODULE", "vnfId") - def vfModuleId = rollbackData.get("VFMODULE", "vfModuleId") - def isBaseModule = rollbackData.get("VFMODULE", "isBaseModule") - execution.setVariable("DAAIVfMod_vnfId", vnfId) - execution.setVariable("DAAIVfMod_vfModuleId", vfModuleId) - - DeleteAAIVfModule dvm = new DeleteAAIVfModule() - // query A&AI to get the needed information for the delete(s) - dvm.queryAAIForGenericVnf(execution) - dvm.parseForVfModule(execution) - - // roll back the base or add-on module - dvm.deleteVfModule(execution) - def responseCode = execution.getVariable("DAAIVfMod_deleteVfModuleResponseCode") - def response = execution.getVariable("DAAIVfMod_deleteVfModuleResponseCode") - - if (isOneOf(responseCode, 200, 204)) { - msoLogger.debug("Received " + responseCode + " to VF Module rollback request") - } else { - msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, "Received " + responseCode + " to VF Module rollback request", "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, rollbackData + System.lineSeparator() + "Response: " + response); - } - - // a new Generic VNF was created that needs to be rolled back - if (isBaseModule.equals("true")) { - dvm.queryAAIForGenericVnf(execution) - dvm.parseForResourceVersion(execution) - dvm.deleteGenericVnf(execution) - responseCode = execution.getVariable("DAAIVfMod_deleteGenericVnfResponseCode") - response = execution.getVariable("DAAIVfMod_deleteGenericVnfResponse") - - if (isOneOf(responseCode, 200, 204)) { - msoLogger.debug("Received " + responseCode + " to Generic VNF rollback request") - execution.setVariable("RollbackResult", "SUCCESS") - } else { - msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, "Received " + responseCode + " to Generic VNF rollback request", "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, rollbackData + System.lineSeparator() + "Response: " + response); - } - } else { - execution.setVariable("RollbackResult", "SUCCESS") - } - } - } - - msoLogger.debug("Exited " + method) - } catch (Exception e) { - msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, "Caught exception in " + method, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + e); - } - } } diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModuleTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModuleTest.groovy index 886e92bd45..1fa10a56c5 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModuleTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModuleTest.groovy @@ -10,9 +10,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,6 +23,8 @@ package org.onap.so.bpmn.common.scripts +import org.camunda.bpm.engine.delegate.DelegateExecution + import static org.assertj.core.api.Assertions.assertThat import static org.mockito.ArgumentMatchers.any import static org.mockito.ArgumentMatchers.anyObject @@ -57,12 +59,12 @@ class CreateAAIVfModuleTest extends MsoGroovyTest{ private static final String VF_MODULE_MODEL_NAME = "modModelNameTest" private static final String DEFAULT_AAI_VERSION = "9" private static final String DEFAULT_AAI_NAMESPACE = "defaultTestNamespace" - + @Spy CreateAAIVfModule createAAIVfModule ; private DelegateExecutionFake executionFake; - + @Before public void init() throws IOException { super.init("CreateAAIVfModule") @@ -236,7 +238,7 @@ class CreateAAIVfModuleTest extends MsoGroovyTest{ @Test void parseForAddOnModule_moduleNameFound() { - + GenericVnf vnf = new GenericVnf(); VfModule module = new VfModule(); VfModules modules = new VfModules(); @@ -302,7 +304,7 @@ class CreateAAIVfModuleTest extends MsoGroovyTest{ modules.getVfModule().add(module) module.setVfModuleName(VF_MODULE_NAME) module.setIsBaseVfModule(true) - + executionFake.setVariable("CAAIVfMod_queryGenericVnfResponse", vnf) executionFake.setVariable("CAAIVfMod_baseModuleConflict", false) @@ -331,6 +333,103 @@ class CreateAAIVfModuleTest extends MsoGroovyTest{ .isEqualTo("VF Module " + VF_MODULE_NAME + " does not exist for Generic VNF " + VNF_NAME) } + @Test + void handleFailure_errorCode5000() { + executionFake.setVariable("CAAIVfMod_createGenericVnfResponseCode", "123") + executionFake.setVariable("CAAIVfMod_createGenericVnfResponse", "responseTest") + + ExceptionUtilForTesting exceptionUtilForTesting = new ExceptionUtilForTesting() + createAAIVfModule.setExceptionUtil(exceptionUtilForTesting) + + createAAIVfModule.handleCreateVfModuleFailure(executionFake) + + assertThat(exceptionUtilForTesting.getErrorCode()).isEqualTo(5000) + assertThat(exceptionUtilForTesting.getErrorMessage()).isEqualTo("responseTest") + } + + @Test + void handleFailure_errorCode1002() { + executionFake.setVariable("CAAIVfMod_queryGenericVnfResponse", "responseTest") + executionFake.setVariable("CAAIVfMod_newGenericVnf", true) + + ExceptionUtilForTesting exceptionUtilForTesting = new ExceptionUtilForTesting() + createAAIVfModule.setExceptionUtil(exceptionUtilForTesting) + + createAAIVfModule.handleCreateVfModuleFailure(executionFake) + + assertThat(exceptionUtilForTesting.getErrorCode()).isEqualTo(1002) + assertThat(exceptionUtilForTesting.getErrorMessage()).isEqualTo("responseTest") + } + + @Test + void handleFailure_errorCode1002_queryGenericVnfResponse() { + executionFake.setVariable("CAAIVfMod_queryGenericVnfResponse", "responseTest") + executionFake.setVariable("CAAIVfMod_queryGenericVnfResponseCode", 404) + executionFake.setVariable("CAAIVfMod_newGenericVnf", false) + + ExceptionUtilForTesting exceptionUtilForTesting = new ExceptionUtilForTesting() + createAAIVfModule.setExceptionUtil(exceptionUtilForTesting) + + createAAIVfModule.handleCreateVfModuleFailure(executionFake) + + assertThat(exceptionUtilForTesting.getErrorCode()).isEqualTo(1002) + assertThat(exceptionUtilForTesting.getErrorMessage()).isEqualTo("responseTest") + } + + @Test + void handleFailure_errorCode5000_createVfModuleResponseCode() { + executionFake.setVariable("CAAIVfMod_createVfModuleResponseCode", "123") + executionFake.setVariable("CAAIVfMod_createVfModuleResponse", "responseTest") + + ExceptionUtilForTesting exceptionUtilForTesting = new ExceptionUtilForTesting() + createAAIVfModule.setExceptionUtil(exceptionUtilForTesting) + + createAAIVfModule.handleCreateVfModuleFailure(executionFake) + + assertThat(exceptionUtilForTesting.getErrorCode()).isEqualTo(5000) + assertThat(exceptionUtilForTesting.getErrorMessage()).isEqualTo("responseTest") + } + + @Test + void handleFailure_errorCode1002_moduleExists() { + executionFake.setVariable("CAAIVfMod_moduleExists", true) + executionFake.setVariable("CAAIVfMod_parseModuleResponse", "responseTest") + + ExceptionUtilForTesting exceptionUtilForTesting = new ExceptionUtilForTesting() + createAAIVfModule.setExceptionUtil(exceptionUtilForTesting) + + createAAIVfModule.handleCreateVfModuleFailure(executionFake) + + assertThat(exceptionUtilForTesting.getErrorCode()).isEqualTo(1002) + assertThat(exceptionUtilForTesting.getErrorMessage()).isEqualTo("responseTest") + } + + @Test + void handleFailure_errorCode1002_baseModuleConflict() { + executionFake.setVariable("CAAIVfMod_baseModuleConflict", true) + executionFake.setVariable("CAAIVfMod_parseModuleResponse", "responseTest") + + ExceptionUtilForTesting exceptionUtilForTesting = new ExceptionUtilForTesting() + createAAIVfModule.setExceptionUtil(exceptionUtilForTesting) + + createAAIVfModule.handleCreateVfModuleFailure(executionFake) + + assertThat(exceptionUtilForTesting.getErrorCode()).isEqualTo(1002) + assertThat(exceptionUtilForTesting.getErrorMessage()).isEqualTo("responseTest") + } + + @Test + void handleFailure_errorCode2000() { + ExceptionUtilForTesting exceptionUtilForTesting = new ExceptionUtilForTesting() + createAAIVfModule.setExceptionUtil(exceptionUtilForTesting) + + createAAIVfModule.handleCreateVfModuleFailure(executionFake) + + assertThat(exceptionUtilForTesting.getErrorCode()).isEqualTo(2000) + assertThat(exceptionUtilForTesting.getErrorMessage()). + isEqualTo("Unknown error occurred during CreateAAIVfModule flow") + } + private void prepareUrnPropertiesReader() { Environment mockEnvironment = mock(Environment.class) when(mockEnvironment.getProperty("mso.workflow.global.default.aai.version")).thenReturn(DEFAULT_AAI_VERSION) @@ -338,4 +437,25 @@ class CreateAAIVfModuleTest extends MsoGroovyTest{ UrnPropertiesReader urnPropertiesReader = new UrnPropertiesReader() urnPropertiesReader.setEnvironment(mockEnvironment) } + + class ExceptionUtilForTesting extends ExceptionUtil { + private int errorCode + private String errorMessage + + int getErrorCode() { + return errorCode + } + + String getErrorMessage() { + return errorMessage + } + + @Override + void buildAndThrowWorkflowException(DelegateExecution execution, int errorCode, + String errorMessage) { + this.errorCode = errorCode + this.errorMessage = errorMessage + } + } + } diff --git a/cloudify-client/src/test/java/org/onap/so/cloudify/connector/http/HttpClientRedirectStrategyTest.java b/cloudify-client/src/test/java/org/onap/so/cloudify/connector/http/HttpClientRedirectStrategyTest.java index b631dab999..87b51e9357 100644 --- a/cloudify-client/src/test/java/org/onap/so/cloudify/connector/http/HttpClientRedirectStrategyTest.java +++ b/cloudify-client/src/test/java/org/onap/so/cloudify/connector/http/HttpClientRedirectStrategyTest.java @@ -105,6 +105,33 @@ public class HttpClientRedirectStrategyTest { assertThat(httpUriRequest.getURI()).isEqualTo(expectedUri); } + @Test + public void getRedirect_shouldCopyHttpRequestAndSetNewUri_forMovedTemporarilyStatus() throws URISyntaxException, ProtocolException { + assertHttpRequestIsCopied(HttpStatus.SC_MOVED_TEMPORARILY); + } + + @Test + public void getRedirect_shouldCopyHttpRequestAndSetNewUri_forTemporaryRedirectStatus() throws URISyntaxException, ProtocolException { + assertHttpRequestIsCopied(HttpStatus.SC_TEMPORARY_REDIRECT); + } + + private void assertHttpRequestIsCopied(int expectedHttpStatus) throws URISyntaxException, ProtocolException { + // GIVEN + HttpRequest request = mock(HttpRequest.class, RETURNS_DEEP_STUBS); + given(request.getRequestLine().getMethod()).willReturn(HttpGet.METHOD_NAME); + given(request.getRequestLine().getUri()).willReturn("http://hostname"); + HttpResponse response = mock(HttpResponse.class, RETURNS_DEEP_STUBS); + given(response.getStatusLine().getStatusCode()).willReturn(expectedHttpStatus); + URI expectedUri = new URI("http://localhost/host"); + HttpContext context = null; + // WHEN + HttpUriRequest httpUriRequest = new TestableHttpClientRedirectStrategy(expectedUri) + .getRedirect(request, response, context); + // THEN + assertThat(httpUriRequest).isInstanceOf(HttpGet.class); + assertThat(httpUriRequest.getURI()).isEqualTo(expectedUri); + } + private static class TestableHttpClientRedirectStrategy extends HttpClientRedirectStrategy { private final URI expectedUri; @@ -112,7 +139,6 @@ public class HttpClientRedirectStrategyTest { public TestableHttpClientRedirectStrategy(URI expectedUri) { this.expectedUri = expectedUri; } - @Override public URI getLocationURI(HttpRequest request, HttpResponse response, HttpContext context) { return expectedUri; |