diff options
Diffstat (limited to 'appc-dispatcher/appc-command-executor/appc-command-executor-core/src')
13 files changed, 536 insertions, 1097 deletions
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandExecutorImpl.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandExecutorImpl.java index d23a3fdd6..3ee89f11c 100644 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandExecutorImpl.java +++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandExecutorImpl.java @@ -22,128 +22,87 @@ * ============LICENSE_END========================================================= */ -/** - * - */ package org.onap.appc.executor.impl; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import org.apache.commons.lang.ObjectUtils; -import org.onap.appc.domainmodel.lcm.RuntimeContext; import org.onap.appc.exceptions.APPCException; import org.onap.appc.executionqueue.ExecutionQueueService; import org.onap.appc.executor.CommandExecutor; +import org.onap.appc.executor.impl.objects.CommandRequest; +import org.onap.appc.executor.objects.CommandExecutorInput; +import org.onap.appc.requesthandler.RequestHandler; +import org.onap.appc.workflow.WorkFlowManager; -import java.time.Instant; -import java.time.temporal.ChronoUnit; +import java.util.Date; import java.util.concurrent.TimeUnit; public class CommandExecutorImpl implements CommandExecutor { - private CommandTaskFactory executionTaskFactory; - private static final EELFLogger logger = EELFManager.getInstance().getLogger(CommandExecutorImpl.class); + private final EELFLogger logger = EELFManager.getInstance().getLogger(CommandExecutorImpl.class); private ExecutionQueueService executionQueueService; - private ExpiredMessageHandler expiredMessageHandler; - - public CommandExecutorImpl() { - - } + private RequestHandler requestHandler; + private WorkFlowManager workflowManager; /** - * Injected by blueprint - * - * @param executionQueueService + * Initialization. + * <p>Used through blueprint. */ + public void initialize() { + logger.info("initialization started of CommandExecutorImpl"); + } + public void setExecutionQueueService(ExecutionQueueService executionQueueService) { this.executionQueueService = executionQueueService; } - /** - * Injected by blueprint - * @param expiredMessageHandler - */ - public void setExpiredMessageHandler(ExpiredMessageHandler expiredMessageHandler) { - this.expiredMessageHandler = expiredMessageHandler; + public void setWorkflowManager(WorkFlowManager workflowManager) { + this.workflowManager = workflowManager; } - public void initialize() { - logger.info("initialization started of CommandExecutorImpl"); - executionQueueService.registerMessageExpirationListener(expiredMessageHandler); + public void setRequestHandler(RequestHandler requestHandler) { + this.requestHandler = requestHandler; } - public void setExecutionTaskFactory(CommandTaskFactory executionTaskFactory) { - this.executionTaskFactory = executionTaskFactory; - } /** * Execute given command * Create command request and enqueue it for execution. - * * @param commandExecutorInput Contains CommandHeader, command , target Id , payload and conf ID (optional) * @throws APPCException in case of error. */ @Override - public void executeCommand(RuntimeContext commandExecutorInput) throws APPCException { - if (logger.isTraceEnabled()) { - logger.trace("Entering to executeCommand with CommandExecutorInput = " + ObjectUtils.toString(commandExecutorInput)); - } - enqueRequest(commandExecutorInput); - if (logger.isTraceEnabled()) { - logger.trace("Exiting from executeCommand"); - } - } - - private RuntimeContext getCommandRequest(RuntimeContext commandExecutorInput) { - if (logger.isTraceEnabled()) { - logger.trace("Entering to getCommandRequest with CommandExecutorInput = " + ObjectUtils.toString(commandExecutorInput)); - } - RuntimeContext commandRequest; - commandRequest = commandExecutorInput; - if (logger.isTraceEnabled()) { - logger.trace("Exiting from getCommandRequest with (CommandRequest = " + ObjectUtils.toString(commandRequest) + ")"); - } - return commandRequest; - } - - @SuppressWarnings("unchecked") - private void enqueRequest(RuntimeContext request) throws APPCException { + public void executeCommand (CommandExecutorInput commandExecutorInput) throws APPCException{ if (logger.isTraceEnabled()) { - logger.trace("Entering to enqueRequest with CommandRequest = " + ObjectUtils.toString(request)); + logger.trace("Entering to executeCommand with CommandExecutorInput = "+ ObjectUtils.toString(commandExecutorInput)); } + CommandTask commandTask; try { - CommandTask commandTask = executionTaskFactory.getExecutionTask(request); - - long remainingTTL = getRemainingTTL(request); - - executionQueueService.putMessage(commandTask, remainingTTL, TimeUnit.MILLISECONDS); + commandTask= new CommandTask(requestHandler,workflowManager); + commandTask.setCommandRequest(new CommandRequest(commandExecutorInput)); + long remainingTTL = getRemainingTTL(commandTask.getCommandRequest()); + if (logger.isTraceEnabled()) { + logger.trace("Queuing request with CommandRequest = "+ ObjectUtils.toString(commandTask.getCommandRequest())); + } + executionQueueService.putMessage(commandTask,remainingTTL, TimeUnit.MILLISECONDS); } catch (Exception e) { - logger.error("Exception: " + e.getMessage()); + logger.error("Exception: "+e.getMessage()); throw new APPCException(e); } if (logger.isTraceEnabled()) { - logger.trace("Exiting from enqueRequest"); + logger.trace("Exiting from executeCommand"); } } - private long getRemainingTTL(RuntimeContext request) { - Instant requestTimestamp = request.getRequestContext().getCommonHeader().getTimeStamp(); - int ttl = request.getRequestContext().getCommonHeader().getFlags().getTtl(); - return ChronoUnit.MILLIS.between(Instant.now(), requestTimestamp.plusSeconds(ttl)); + private long getRemainingTTL(CommandRequest request) { + Date requestTimestamp = request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getCommonHeader().getTimeStamp(); + int ttl = request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getCommonHeader().getFlags().getTtl(); + return ttl*1000 + requestTimestamp.getTime() - System.currentTimeMillis(); } - private CommandTask getMessageExecutor(RuntimeContext request) { - if (logger.isTraceEnabled()) { - logger.trace("Entering to getMessageExecutor with command = " + request); - } - CommandTask executionTask = executionTaskFactory.getExecutionTask(request); - if (logger.isTraceEnabled()) { - logger.trace("Exiting from getMessageExecutor"); - } - return executionTask; - } } diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java index ca866575a..4a82ca6a8 100644 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java +++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTask.java @@ -24,59 +24,174 @@ package org.onap.appc.executor.impl; -import org.onap.appc.executor.objects.CommandResponse; +import org.onap.appc.domainmodel.lcm.Status; +import org.onap.appc.domainmodel.lcm.VNFOperation; +import org.onap.appc.executor.impl.objects.CommandRequest; +import org.onap.appc.logging.LoggingConstants; import org.onap.appc.requesthandler.RequestHandler; import org.onap.appc.domainmodel.lcm.RuntimeContext; import org.onap.appc.workflow.WorkFlowManager; import org.onap.appc.workflow.objects.WorkflowRequest; -import org.onap.appc.workflow.objects.WorkflowResponse; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicResource; +import org.onap.ccsdk.sli.adaptors.aai.AAIService; +import org.onap.ccsdk.sli.adaptors.aai.AAIServiceException; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; +import org.slf4j.MDC; + +import java.net.InetAddress; + +import static com.att.eelf.configuration.Configuration.*; +import static com.att.eelf.configuration.Configuration.MDC_SERVICE_INSTANCE_ID; +import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME; /** * This abstract class is base class for all Command tasks. All command task must inherit this class. */ -public abstract class CommandTask implements Runnable { +public class CommandTask implements Runnable { - protected final RequestHandler requestHandler; - protected final WorkFlowManager workflowManager; - protected final RuntimeContext commandRequest; + private RequestHandler requestHandler; + private WorkFlowManager workflowManager; + private CommandRequest commandRequest; + private AAIService aaiService; - protected CommandTask(RuntimeContext commandRequest, RequestHandler requestHandler, - WorkFlowManager workflowManager) { - super(); + + public CommandRequest getCommandRequest() { + return commandRequest; + } + + public void setCommandRequest(CommandRequest commandRequest) { this.commandRequest = commandRequest; - this.requestHandler = requestHandler; - this.workflowManager = workflowManager; } - private static final EELFLogger logger = EELFManager.getInstance().getLogger(CommandTask.class); + private final EELFLogger logger = EELFManager.getInstance().getLogger(CommandTask.class); - public void onRequestCompletion(CommandResponse response, boolean isAAIUpdated) { - logger.debug("Entry: onRequestCompletion()"); - requestHandler.onRequestExecutionEnd(commandRequest, isAAIUpdated); + public void setWorkflowManager(WorkFlowManager workflowManager) { + this.workflowManager = workflowManager; } - public abstract void onRequestCompletion(CommandResponse response); + public void setRequestHandler(RequestHandler requestHandler) { + this.requestHandler = requestHandler; + } - protected CommandResponse buildCommandResponse(WorkflowResponse response) { + public CommandTask(RequestHandler requestHandler, + WorkFlowManager workflowManager){ + this.requestHandler = requestHandler; + this.workflowManager = workflowManager; + getAAIservice(); + } - return new CommandResponse(commandRequest); + private void getAAIservice() { + BundleContext bctx = FrameworkUtil.getBundle(AAIService.class).getBundleContext(); + // Get AAIadapter reference + ServiceReference sref = bctx.getServiceReference(AAIService.class.getName()); + if (sref != null) { + logger.info("AAIService from bundlecontext"); + aaiService = (AAIService) bctx.getService(sref); + } else { + logger.info("AAIService error from bundlecontext"); + logger.warn("Cannot find service reference for org.onap.ccsdk.sli.adaptors.aai.AAIService"); + + } } - public void execute() { - final RuntimeContext runtimeContext = commandRequest; + @Override + public void run() { + logger.debug("Starting execution of command :"+ commandRequest); + setInitialLogProperties(commandRequest); + final RuntimeContext runtimeContext = commandRequest.getCommandExecutorInput().getRuntimeContext(); + + WorkflowRequest workflowRequest = new WorkflowRequest(); workflowRequest.setRequestContext(runtimeContext.getRequestContext()); workflowRequest.setResponseContext(runtimeContext.getResponseContext()); workflowRequest.setVnfContext(runtimeContext.getVnfContext()); + logger.debug("Executing workflow :"+ workflowRequest); + workflowManager.executeWorkflow(workflowRequest); + logger.debug("Completed execution workflow with response:"+ commandRequest.getCommandExecutorInput().getRuntimeContext().getResponseContext()); + try { + if (VNFOperation.Terminate == commandRequest.getCommandExecutorInput().getRuntimeContext().getRequestContext().getAction()) + updateAAIForTerminate(commandRequest); + } catch (AAIServiceException e) { + logger.error("Exception = " + e); + // In case of any errors we are updating the response status code and message + Status updatedStatus = new Status(); + updatedStatus.setCode(401); + updatedStatus.setMessage("Failed to update VNF status in A&AI"); + commandRequest.getCommandExecutorInput().getRuntimeContext().getResponseContext().setStatus(updatedStatus); + throw new RuntimeException(e); + }finally { + requestHandler.onRequestExecutionEnd(commandRequest.getCommandExecutorInput().getRuntimeContext()); + clearRequestLogProperties(); + } + } + + private void updateAAIForTerminate(CommandRequest commandRequest) throws AAIServiceException { + final int statusCode = commandRequest.getCommandExecutorInput().getRuntimeContext().getResponseContext().getStatus().getCode(); + + if (logger.isDebugEnabled()) { + logger.debug("Workflow Execution Status = "+ statusCode); + } + if (statusCode == 100 || statusCode == 400) { + SvcLogicContext ctx = new SvcLogicContext(); + ctx = getVnfdata(commandRequest.getCommandExecutorInput().getRuntimeContext().getVnfContext().getId(), "vnf", ctx); + aaiService.deleteGenericVnfData(commandRequest.getCommandExecutorInput().getRuntimeContext().getVnfContext().getId(), ctx.getAttribute("vnf.resource-version")); - WorkflowResponse response = workflowManager.executeWorkflow(workflowRequest); + } + } - CommandResponse commandResponse = buildCommandResponse(response); - this.onRequestCompletion(commandResponse); + private SvcLogicContext getVnfdata(String vnf_id, String prefix,SvcLogicContext ctx) { + String key="generic-vnf.vnf-id = '"+ vnf_id+"'"+" AND http-header.Real-Time = 'true'"; + logger.debug("inside getVnfdata=== "+key); + try { + SvcLogicResource.QueryStatus response = aaiService.query("generic-vnf", false, null, key,prefix, null, ctx); + if(SvcLogicResource.QueryStatus.NOT_FOUND.equals(response)){ + logger.warn("VNF " + vnf_id + " not found while updating A&AI"); + throw new RuntimeException("VNF not found for vnf_id = "+ vnf_id); + } + else if(SvcLogicResource.QueryStatus.FAILURE.equals(response)){ + throw new RuntimeException("Error Querying AAI with vnfID = " +vnf_id); + } + logger.info("AAIResponse: " + response.toString()); + } catch (SvcLogicException e) { + logger.error("Error in getVnfdata "+ e); + throw new RuntimeException(e); + } + return ctx; } + + private void setInitialLogProperties(CommandRequest request) { + MDC.put(MDC_KEY_REQUEST_ID, request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getCommonHeader().getRequestId()); + if (request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getActionIdentifiers().getServiceInstanceId() != null) + MDC.put(MDC_SERVICE_INSTANCE_ID, request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getActionIdentifiers().getServiceInstanceId()); + MDC.put(LoggingConstants.MDCKeys.PARTNER_NAME, request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getCommonHeader().getOriginatorId()); + MDC.put(MDC_SERVICE_NAME, request.getCommandExecutorInput().getRuntimeContext().getRequestContext().getAction().name()); + try { + MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName()); + MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress()); + } catch (Exception e) { + logger.error(e.getMessage(),e); + } + MDC.put(MDC_INSTANCE_UUID, ""); // make instanse_UUID generation once during APPC-instanse deploying + } + + private void clearRequestLogProperties() + { + try { + MDC.remove(MDC_KEY_REQUEST_ID); + MDC.remove(MDC_SERVICE_INSTANCE_ID); + MDC.remove(MDC_SERVICE_NAME); + MDC.remove(LoggingConstants.MDCKeys.PARTNER_NAME); + } catch (Exception e) { + logger.error(e.getMessage(),e); + } + } } diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTaskFactory.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTaskFactory.java deleted file mode 100644 index ac75e627e..000000000 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommandTaskFactory.java +++ /dev/null @@ -1,89 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP : APPC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Copyright (C) 2017 Amdocs - * ============================================================================= - * 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. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * ============LICENSE_END========================================================= - */ - -package org.onap.appc.executor.impl; - - -import org.onap.appc.domainmodel.lcm.ActionLevel; -import org.onap.appc.domainmodel.lcm.RuntimeContext; -import org.onap.appc.lifecyclemanager.LifecycleManager; -import org.onap.appc.requesthandler.RequestHandler; -import org.onap.appc.workflow.WorkFlowManager; - - - - -public class CommandTaskFactory { - -// private LCMCommandTask lcmCommandTask; -// private LCMReadonlyCommandTask LCMReadonlyCommandTask; - - private RequestHandler vnfRequestHandler; - private RequestHandler vmRequestHandler; - private WorkFlowManager workflowManager; - private LifecycleManager lifecyclemanager; - - - public void setWorkflowManager(WorkFlowManager workflowManager) { - this.workflowManager = workflowManager; - } - - public void setVnfRequestHandler(RequestHandler vnfRequestHandler) { - this.vnfRequestHandler = vnfRequestHandler; - } - - public void setVmRequestHandler(RequestHandler vmRequestHandler) { - this.vmRequestHandler = vmRequestHandler; - } - - public void setLifecyclemanager(LifecycleManager lifecyclemanager) { - this.lifecyclemanager = lifecyclemanager; - } - - - public synchronized CommandTask getExecutionTask(RuntimeContext runtimeContext){ - String action = runtimeContext.getRequestContext().getAction().name(); - ActionLevel actionLevel = runtimeContext.getRequestContext().getActionLevel(); - RequestHandler requestHandler = readRequestHandler(actionLevel); - if(ActionLevel.VM.equals(actionLevel)){ - return new LCMReadonlyCommandTask(runtimeContext,requestHandler,workflowManager); - } - switch (runtimeContext.getRequestContext().getAction().getOperationType()){ - case ReadOnly: - case OperationStatusUpdate: - return new LCMReadonlyCommandTask(runtimeContext,requestHandler,workflowManager); - default: - return new LCMCommandTask(runtimeContext,requestHandler,workflowManager, - lifecyclemanager); - } - } - - private RequestHandler readRequestHandler(ActionLevel actionLevel) { - if (ActionLevel.VM.equals(actionLevel)) { - return vmRequestHandler; - } - return vnfRequestHandler; - } - -} diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommonMethods.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommonMethods.java deleted file mode 100644 index a032f3737..000000000 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/CommonMethods.java +++ /dev/null @@ -1,75 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP : APPC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Copyright (C) 2017 Amdocs - * ============================================================================= - * 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. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * ============LICENSE_END========================================================= - */ - -package org.onap.appc.executor.impl; - -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.util.HashMap; - - -class CommonMethods { - - private static final HashMap m = new HashMap(); - - static { - m.put(34, """); // < - less-than - m.put(60, "<"); // < - less-than - m.put(62, ">"); // > - greater-than - m.put(38, "&"); // & - Ampersand - } - - static String escapeHtml(String source) { - try { - StringWriter writer = new StringWriter((int) (source.length() * 1.5)); - escape(writer, source); - return writer.toString(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return null; - } - } - - private static void escape(Writer writer, String str) throws IOException { - int len = str.length(); - for (int i = 0; i < len; i++) { - char c = str.charAt(i); - int ascii = (int) c; - String entityName = (String) m.get(ascii); - if (entityName == null) { - if (c > 0x7F) { - writer.write("&#"); - writer.write(Integer.toString(c, 10)); - writer.write(';'); - } else { - writer.write(c); - } - } else { - writer.write(entityName); - } - } - } - -} diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/LCMCommandTask.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/LCMCommandTask.java deleted file mode 100644 index 13642ba36..000000000 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/LCMCommandTask.java +++ /dev/null @@ -1,294 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP : APPC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Copyright (C) 2017 Amdocs - * ============================================================================= - * 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. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * ============LICENSE_END========================================================= - */ - -package org.onap.appc.executor.impl; - - -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.onap.appc.domainmodel.lcm.CommonHeader; -import org.onap.appc.domainmodel.lcm.RuntimeContext; -import org.onap.appc.domainmodel.lcm.Status; -import org.onap.appc.domainmodel.lcm.VNFOperation; -import org.onap.appc.executor.UnstableVNFException; -import org.onap.appc.executor.objects.CommandResponse; -import org.onap.appc.executor.objects.LCMCommandStatus; -import org.onap.appc.executor.objects.Params; -import org.onap.appc.executor.objects.UniqueRequestIdentifier; -import org.onap.appc.lifecyclemanager.LifecycleManager; -import org.onap.appc.lifecyclemanager.objects.LifecycleException; -import org.onap.appc.lifecyclemanager.objects.NoTransitionDefinedException; -import org.onap.appc.lifecyclemanager.objects.VNFOperationOutcome; -import org.onap.appc.logging.LoggingConstants; -import org.onap.appc.requesthandler.RequestHandler; -import org.onap.appc.workflow.WorkFlowManager; -import org.onap.appc.workflow.objects.WorkflowResponse; -import org.onap.ccsdk.sli.core.sli.SvcLogicContext; -import org.onap.ccsdk.sli.core.sli.SvcLogicException; -import org.onap.ccsdk.sli.core.sli.SvcLogicResource; -import org.onap.ccsdk.sli.adaptors.aai.AAIService; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.ServiceReference; -import org.slf4j.MDC; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - -import java.net.InetAddress; -import static com.att.eelf.configuration.Configuration.*; -import static com.att.eelf.configuration.Configuration.MDC_SERVICE_INSTANCE_ID; -import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME; - - -public class LCMCommandTask extends CommandTask { - - private final AAIService aaiService; - private final LifecycleManager lifecyclemanager; - - private static final EELFLogger logger = EELFManager.getInstance().getLogger(LCMCommandTask.class); - - public LCMCommandTask(RuntimeContext commandRequest, RequestHandler requestHandler, WorkFlowManager workflowManager, - LifecycleManager lifecyclemanager) { - super(commandRequest, requestHandler, workflowManager); - this.lifecyclemanager = lifecyclemanager; - - BundleContext bctx = FrameworkUtil.getBundle(AAIService.class).getBundleContext(); - // Get AAIadapter reference - ServiceReference sref = bctx.getServiceReference(AAIService.class.getName()); - if (sref != null) { - logger.info("AAIService from bundlecontext"); - aaiService = (AAIService) bctx.getService(sref); - - } else { - logger.info("AAIService error from bundlecontext"); - logger.warn("Cannot find service reference for org.onap.ccsdk.sli.adaptors.aai.AAIService"); - aaiService = null; - } - } - - - @Override - public void onRequestCompletion(CommandResponse response) { - final RuntimeContext request = commandRequest; - boolean isAAIUpdated = false; - try { - - final int statusCode = request.getResponseContext().getStatus().getCode(); - - if (logger.isDebugEnabled()) { - logger.debug("Workflow Execution Status = "+ statusCode); - } - - boolean isSuccess = statusCode == 100 || statusCode == 400; - - if (isSuccess && VNFOperation.Terminate == request.getRequestContext().getAction()) { - SvcLogicContext ctx = new SvcLogicContext(); - ctx = getVnfdata(request.getVnfContext().getId(), "vnf", ctx); - isAAIUpdated = aaiService.deleteGenericVnfData(request.getVnfContext().getId(), ctx.getAttribute("vnf.resource-version")); - } - else{ - isAAIUpdated = updateAAI(request.getVnfContext().getId() , false, isSuccess); - } - logger.debug("isAAIUpdated = " + isAAIUpdated); - if(!isAAIUpdated){ - throw new Exception(); - } - } - catch(Exception e1) { - logger.error("Exception = " + e1); - // In case of any errors we are updating the response status code and message - Status updatedStatus = new Status(401, "Fail to update VNF status in A&AI"); - request.getResponseContext().setStatus(updatedStatus); - throw new RuntimeException(e1); - } - finally { - super.onRequestCompletion(response, isAAIUpdated); - } - } - - @Override - public void run() { - final RuntimeContext request = commandRequest; - setInitialLogProperties(request); - boolean isAAIUpdated = false; - final String vnfId = request.getVnfContext().getId(); - final String vnfType = request.getVnfContext().getType(); - try { - final CommonHeader commonHeader = request.getRequestContext().getCommonHeader(); - final boolean forceFlag = commonHeader.getFlags().isForce(); - UniqueRequestIdentifier requestIdentifier = new UniqueRequestIdentifier(commonHeader.getOriginatorId(), - commonHeader.getRequestId(), commonHeader.getSubRequestId()); - String requestIdentifierString = requestIdentifier.toIdentifierString(); - requestHandler.onRequestExecutionStart(vnfId,false, requestIdentifierString, forceFlag); - - final String currentStatus = request.getVnfContext().getStatus(); - final VNFOperation action = request.getRequestContext().getAction(); - - final String nextState = lifecyclemanager.getNextState(vnfType, currentStatus, action.name()); - - SvcLogicContext ctx = new SvcLogicContext(); - ctx=getVnfdata(vnfId, "onRequestExecutionStart", ctx); - isAAIUpdated= postVnfdata(vnfId, nextState,"onRequestExecutionStart",ctx); - } catch (NoTransitionDefinedException e) { - logger.error("Error getting Next State for AAI Update: " + e.getMessage(), e); - Params params = new Params().addParam("actionName",e.event).addParam("currentState",e.currentState); - request.getResponseContext().setStatus(LCMCommandStatus.NO_TRANSITION_DEFINE_FAILURE.toStatus(params)); - isAAIUpdated = false; - } catch (UnstableVNFException e) { - logger.error(e.getMessage(), e); - Params params = new Params().addParam("vnfId",vnfId); - request.getResponseContext().setStatus(LCMCommandStatus.UNSTABLE_VNF_FAILURE.toStatus(params)); - isAAIUpdated = false; - }catch (Exception e) { - logger.error("Error before Request Execution starts.", e); - String errorMsg = StringUtils.isEmpty(e.getMessage()) ? e.toString() : e.getMessage(); - Params params = new Params().addParam("errorMsg",errorMsg); - request.getResponseContext().setStatus(LCMCommandStatus.UNEXPECTED_FAILURE.toStatus(params)); - isAAIUpdated = false; - } - - if (isAAIUpdated){ - super.execute(); - }else{ - String errorMsg = "Error updating A& AI before Workflow execution"; - logger.error(errorMsg); - WorkflowResponse response = new WorkflowResponse(); - response.setResponseContext(request.getResponseContext()); - CommandResponse commandResponse = super.buildCommandResponse(response); - this.onRequestCompletion(commandResponse); - } - - clearRequestLogProperties(); - } - - - private boolean updateAAI(String vnf_id, boolean isTTLEnd, boolean executionStatus) - { - String orchestrationStatus = null; - String nextState; - boolean callbackResponse; - VNFOperationOutcome outcome; - SvcLogicContext ctx = new SvcLogicContext(); - try { - ctx=getVnfdata(vnf_id, "onRequestExecutionEnd",ctx); - orchestrationStatus=ctx.getAttribute("onRequestExecutionEnd.orchestration-status"); - - if(isTTLEnd){ - outcome = VNFOperationOutcome.FAILURE; - } - else if(executionStatus){ - outcome = VNFOperationOutcome.SUCCESS; - } - else{ - outcome = VNFOperationOutcome.FAILURE; - } - nextState = lifecyclemanager.getNextState(null,orchestrationStatus, outcome.toString()) ; - callbackResponse= postVnfdata(vnf_id, nextState,"onRequestExecutionEnd",ctx); - logger.debug("AAI posting status: " + callbackResponse); - - } catch (NoTransitionDefinedException e) { - logger.debug("Transition not defined for State = " + orchestrationStatus); - callbackResponse =false; - } catch (LifecycleException e) { - logger.debug("State or command not registered with State Machine. State = " + orchestrationStatus); - callbackResponse =false; - } - return callbackResponse; - } - - - private SvcLogicContext getVnfdata(String vnf_id, String prefix,SvcLogicContext ctx) { - String key="generic-vnf.vnf-id = '"+ vnf_id+"'"+" AND http-header.Real-Time = 'true'"; - logger.debug("inside getVnfdata=== "+key); - try { - SvcLogicResource.QueryStatus response = aaiService.query("generic-vnf", false, null, key,prefix, null, ctx); - if(SvcLogicResource.QueryStatus.NOT_FOUND.equals(response)){ - logger.warn("VNF " + vnf_id + " not found while updating A&AI"); - throw new RuntimeException("VNF not found for vnf_id = "+ vnf_id); - } - else if(SvcLogicResource.QueryStatus.FAILURE.equals(response)){ - throw new RuntimeException("Error Querying AAI with vnfID = " +vnf_id); - } - logger.info("AAIResponse: " + response.toString()); - } catch (SvcLogicException e) { - logger.error("Error in getVnfdata "+ e); - throw new RuntimeException(e); - } - return ctx; - } - - private boolean postVnfdata(String vnf_id, String status,String prefix,SvcLogicContext ctx) { - String key="vnf-id = '"+ vnf_id+"'"; - logger.debug("inside postVnfdata=== "+key); - Map<String, String> data = new HashMap<>(); - data.put("orchestration-status", status); - try { - SvcLogicResource.QueryStatus response = aaiService.update("generic-vnf", key, data, prefix, ctx); - if(SvcLogicResource.QueryStatus.NOT_FOUND.equals(response)){ - logger.warn("VNF " + vnf_id + " not found while updating A&AI"); - return false; - } - logger.info("AAIResponse: " + response.toString()); - if(response.toString().equals("SUCCESS")) - { - return true; - } - } catch (SvcLogicException e) { - logger.error("Error in postVnfdata "+ e); - throw new RuntimeException(e); - } - return false; - } - - protected void setInitialLogProperties(RuntimeContext request) - { - MDC.put(MDC_KEY_REQUEST_ID, request.getRequestContext().getCommonHeader().getRequestId()); - if (request.getRequestContext().getActionIdentifiers().getServiceInstanceId() != null) - MDC.put(MDC_SERVICE_INSTANCE_ID, request.getRequestContext().getActionIdentifiers().getServiceInstanceId()); - MDC.put(LoggingConstants.MDCKeys.PARTNER_NAME, request.getRequestContext().getCommonHeader().getOriginatorId()); - MDC.put(MDC_SERVICE_NAME, request.getRequestContext().getAction().name()); - try { - MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName()); - MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress()); - } catch (Exception e) { - logger.debug(e.getMessage()); - } - MDC.put(MDC_INSTANCE_UUID, ""); //TODO make instanse_UUID generation once during APPC-instanse deploying - } - - protected void clearRequestLogProperties() - { - try { - MDC.remove(MDC_KEY_REQUEST_ID); - MDC.remove(MDC_SERVICE_INSTANCE_ID); - MDC.remove(MDC_SERVICE_NAME); - MDC.remove(LoggingConstants.MDCKeys.PARTNER_NAME); - } catch (Exception e) { - - } - } -} diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/LCMReadonlyCommandTask.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/LCMReadonlyCommandTask.java deleted file mode 100644 index 0eeefe540..000000000 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/LCMReadonlyCommandTask.java +++ /dev/null @@ -1,78 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP : APPC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Copyright (C) 2017 Amdocs - * ============================================================================= - * 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. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * ============LICENSE_END========================================================= - */ - -package org.onap.appc.executor.impl; - - -import org.apache.commons.lang3.StringUtils; -import org.onap.appc.domainmodel.lcm.CommonHeader; -import org.onap.appc.domainmodel.lcm.RuntimeContext; -import org.onap.appc.executor.UnstableVNFException; -import org.onap.appc.executor.objects.CommandResponse; -import org.onap.appc.executor.objects.LCMCommandStatus; -import org.onap.appc.executor.objects.Params; -import org.onap.appc.executor.objects.UniqueRequestIdentifier; -import org.onap.appc.requesthandler.RequestHandler; -import org.onap.appc.workflow.WorkFlowManager; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - -public class LCMReadonlyCommandTask extends CommandTask { - - private static final EELFLogger logger = EELFManager.getInstance().getLogger(LCMReadonlyCommandTask.class); - - public LCMReadonlyCommandTask(RuntimeContext commandRequest, RequestHandler requestHandler, - WorkFlowManager workflowManager) { - super(commandRequest, requestHandler, workflowManager); - } - - @Override - public void onRequestCompletion(CommandResponse response) { - super.onRequestCompletion(response, true); - } - - @Override - public void run() { - RuntimeContext request = commandRequest; - final CommonHeader commonHeader = request.getRequestContext().getCommonHeader(); - final boolean forceFlag = commonHeader.getFlags().isForce(); - UniqueRequestIdentifier requestIdentifier = new UniqueRequestIdentifier(commonHeader.getOriginatorId(), commonHeader.getRequestId(), commonHeader.getSubRequestId()); - String requestIdentifierString = requestIdentifier.toIdentifierString(); - final String vnfId = request.getVnfContext().getId(); - try { - requestHandler.onRequestExecutionStart(vnfId,true, requestIdentifierString, forceFlag); - super.execute(); - } catch (UnstableVNFException e) { - logger.error(e.getMessage(), e); - Params params = new Params().addParam("vnfId",vnfId); - request.getResponseContext().setStatus(LCMCommandStatus.UNSTABLE_VNF_FAILURE.toStatus(params)); - }catch (Exception e) { - logger.error("Error during runing LCMReadonlyCommandTask.", e); - String errorMsg = StringUtils.isEmpty(e.getMessage()) ? e.toString() : e.getMessage(); - Params params = new Params().addParam("errorMsg",errorMsg); - request.getResponseContext().setStatus(LCMCommandStatus.UNEXPECTED_FAILURE.toStatus(params)); - } - } -} diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/ExpiredMessageHandler.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/objects/CommandRequest.java index bd5773216..90b5be924 100644 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/ExpiredMessageHandler.java +++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/onap/appc/executor/impl/objects/CommandRequest.java @@ -22,42 +22,44 @@ * ============LICENSE_END========================================================= */ -package org.onap.appc.executor.impl; +package org.onap.appc.executor.impl.objects; -import org.onap.appc.domainmodel.lcm.RuntimeContext; -import org.onap.appc.domainmodel.lcm.ActionLevel; -import org.onap.appc.executionqueue.MessageExpirationListener; -import org.onap.appc.requesthandler.RequestHandler; +import java.util.Date; +import org.onap.appc.executor.objects.CommandExecutorInput; -public class ExpiredMessageHandler<M> implements MessageExpirationListener<M>{ - private RequestHandler vnfRequestHandler; +public class CommandRequest { - private RequestHandler vmRequestHandler; - public ExpiredMessageHandler(){ + private CommandExecutorInput commandExecutorInput; + private Date commandInTimeStamp; + public CommandRequest(CommandExecutorInput commandExecutorInput) { + this.commandExecutorInput = commandExecutorInput; } - public void setVnfRequestHandler(RequestHandler vnfRequestHandler) { - this.vnfRequestHandler = vnfRequestHandler; + + public CommandExecutorInput getCommandExecutorInput() { + return commandExecutorInput; } - public void setVmRequestHandler(RequestHandler vmRequestHandler) { - this.vmRequestHandler = vmRequestHandler; + public void setCommandExecutorInput(CommandExecutorInput commandExecutorInput) { + this.commandExecutorInput = commandExecutorInput; } - @Override - public void onMessageExpiration(M message) { - RuntimeContext commandRequest = (RuntimeContext)message; - RequestHandler requestHandler = readRequestHandler(commandRequest); - requestHandler.onRequestTTLEnd(commandRequest, true); + public Date getCommandInTimeStamp() { + return commandInTimeStamp; } - private RequestHandler readRequestHandler(RuntimeContext runtimeContext) { - if(ActionLevel.VM.equals(runtimeContext.getRequestContext().getActionLevel())){ - return vmRequestHandler; - } - return vnfRequestHandler; + public void setCommandInTimeStamp(Date commandInTimeStamp) { + this.commandInTimeStamp = commandInTimeStamp; + } + + @Override + public String toString() { + return "CommandRequest{" + + "commandExecutorInput=" + commandExecutorInput + + ", commandInTimeStamp=" + commandInTimeStamp + + '}'; } } diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml index d0ee8cd05..aa4e129fc 100644 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -32,35 +32,14 @@ <bean id="commandExecutorBean" class="org.onap.appc.executor.impl.CommandExecutorImpl" scope="singleton" init-method="initialize"> <property name="executionQueueService" ref="ExecutionQueueServiceRef"/> - <property name="executionTaskFactory" ref="CommandExecutionTaskFactory"/> - <property name="expiredMessageHandler" ref="expiredMessageHandlerBean"/> + <property name="workflowManager" ref="WorkFlowManagerRef" /> + <property name="requestHandler" ref="RequestHandlerService" /> </bean> - <bean id="CommandExecutionTaskFactory" class="org.onap.appc.executor.impl.CommandTaskFactory" - scope="singleton"> - <property name="vnfRequestHandler" ref="vnfRequestHandlerService"/> - <property name="vmRequestHandler" ref="vmRequestHandlerService"/> - <property name="workflowManager" ref="WorkFlowManagerRef"/> - <property name="lifecyclemanager" ref="LifecyclemanagerRef"/> - </bean> - - <bean id="expiredMessageHandlerBean" class="org.onap.appc.executor.impl.ExpiredMessageHandler" - scope="singleton"> - <property name="vnfRequestHandler" ref="vnfRequestHandlerService"/> - <property name="vmRequestHandler" ref="vmRequestHandlerService"/> - </bean> - <reference id="WorkFlowManagerRef" availability="mandatory" activation="eager" - interface="org.onap.appc.workflow.WorkFlowManager"/> - <reference id="vnfRequestHandlerService" availability="optional" activation="eager" - interface="org.onap.appc.requesthandler.RequestHandler" filter="(level=VNF)"/> - <reference id="vmRequestHandlerService" availability="optional" activation="eager" - interface="org.onap.appc.requesthandler.RequestHandler" filter="(level=VM)"/> - <reference id="LifecyclemanagerRef" availability="mandatory" activation="eager" - interface="org.onap.appc.lifecyclemanager.LifecycleManager"/> - <reference id="ExecutionQueueServiceRef" availability="mandatory" activation="eager" - interface="org.onap.appc.executionqueue.ExecutionQueueService"/> + <reference id="WorkFlowManagerRef" availability="mandatory" activation="eager" interface="org.onap.appc.workflow.WorkFlowManager" /> + <reference id="RequestHandlerService" availability="optional" activation="eager" interface="org.onap.appc.requesthandler.RequestHandler" filter="(level=VNF)" /> + <reference id="ExecutionQueueServiceRef" availability="mandatory" activation="eager" interface="org.onap.appc.executionqueue.ExecutionQueueService" /> - <service id="commandExecutorService" interface="org.onap.appc.executor.CommandExecutor" - ref="commandExecutorBean"/> + <service id="commandExecutorService" interface="org.onap.appc.executor.CommandExecutor" ref="commandExecutorBean"/> </blueprint> diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/org/onap/appc/default.properties b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/org/onap/appc/default.properties index f24ee14ee..5899c6a8c 100644 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/org/onap/appc/default.properties +++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/org/onap/appc/default.properties @@ -33,6 +33,6 @@ appc.LCM.poolMembers=<DMAAP_IP>:3904 appc.LCM.service=dmaap appc.LCM.topic.write=APPC-TEST2 appc.LCM.client.name=APPC-TEST-CLIENT-CMD-EXECUTOR-MAIN -appc.LCM.provider.user=test -appc.LCM.provider.pass=test +appc.LCM.provider.user=admin +appc.LCM.provider.pass=admin diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/CommandExecutionTaskTest.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/CommandExecutionTaskTest.java deleted file mode 100644 index af62a06f6..000000000 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/CommandExecutionTaskTest.java +++ /dev/null @@ -1,295 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP : APPC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Copyright (C) 2017 Amdocs - * ============================================================================= - * 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. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * ============LICENSE_END========================================================= - */ - -package org.onap.appc.executor; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.onap.appc.domainmodel.lcm.ActionIdentifiers; -import org.onap.appc.domainmodel.lcm.CommonHeader; -import org.onap.appc.domainmodel.lcm.Flags; -import org.onap.appc.domainmodel.lcm.RequestContext; -import org.onap.appc.domainmodel.lcm.ResponseContext; -import org.onap.appc.domainmodel.lcm.RuntimeContext; -import org.onap.appc.domainmodel.lcm.Status; -import org.onap.appc.domainmodel.lcm.VNFContext; -import org.onap.appc.domainmodel.lcm.VNFOperation; -import org.onap.appc.executor.impl.CommandTask; -import org.onap.appc.executor.impl.CommandTaskFactory; -import org.onap.appc.executor.impl.LCMCommandTask; -import org.onap.appc.executor.impl.LCMReadonlyCommandTask; -import org.onap.appc.executor.objects.CommandResponse; -import org.onap.appc.lifecyclemanager.LifecycleManager; -import org.onap.appc.requesthandler.RequestHandler; -import org.onap.appc.workflow.WorkFlowManager; -import org.onap.appc.workflow.objects.WorkflowResponse; -import org.onap.ccsdk.sli.core.sli.SvcLogicContext; -import org.onap.ccsdk.sli.core.sli.SvcLogicException; -import org.onap.ccsdk.sli.core.sli.SvcLogicResource; -import org.onap.ccsdk.sli.adaptors.aai.AAIService; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.ServiceReference; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.time.Instant; - -import static junit.framework.Assert.assertEquals; -import static org.mockito.Matchers.*; - -@SuppressWarnings("unchecked") -@RunWith(PowerMockRunner.class) -@PrepareForTest( {FrameworkUtil.class, CommandTask.class, LCMCommandTask.class}) -public class CommandExecutionTaskTest { - - private final String TTL_FLAG= "TTL"; - private final String API_VERSION= "2.0.0"; - private final String ORIGINATOR_ID= "1"; - private CommandTaskFactory factory ; - - private RequestHandler requestHandler; - private WorkFlowManager workflowManager; - private AAIService aaiService; - private LifecycleManager lifecyclemanager; - - private final BundleContext bundleContext=Mockito.mock(BundleContext.class); - private final Bundle bundleService=Mockito.mock(Bundle.class); - private final ServiceReference sref=Mockito.mock(ServiceReference.class); - - @Before - public void init() throws SvcLogicException { - - // *** - AAIService aaiService = Mockito.mock(AAIService.class); - PowerMockito.mockStatic(FrameworkUtil.class); - PowerMockito.when(FrameworkUtil.getBundle(AAIService.class)).thenReturn(bundleService); - PowerMockito.when(bundleService.getBundleContext()).thenReturn(bundleContext); - PowerMockito.when(bundleContext.getServiceReference(AAIService.class.getName())).thenReturn(sref); - PowerMockito.when(bundleContext.<AAIService>getService(sref)).thenReturn(aaiService); - PowerMockito.when(aaiService.query(anyString(),anyBoolean(),anyString(),anyString(),anyString(), - anyString(), anyObject())).thenAnswer(invocation -> { - Object[] args = invocation.getArguments(); - SvcLogicContext ctx =(SvcLogicContext)args[6]; - String prefix = (String)args[4]; - String key = (String)args[3]; - if(key.contains("'28'")){ - return SvcLogicResource.QueryStatus.FAILURE ; - }else if ( key.contains("'8'")) { - return SvcLogicResource.QueryStatus.NOT_FOUND ; - }else { - ctx.setAttribute(prefix + ".vnf-type", "FIREWALL"); - ctx.setAttribute(prefix + ".orchestration-status", "INSTANTIATED"); - } - return SvcLogicResource.QueryStatus.SUCCESS ; - }); - PowerMockito.when(aaiService.update(anyString(), anyString(), anyObject(), anyString(), - anyObject())).thenReturn(SvcLogicResource.QueryStatus.SUCCESS); - - requestHandler = Mockito.mock(RequestHandler.class); - workflowManager = Mockito.mock(WorkFlowManager.class); - lifecyclemanager = Mockito.mock(LifecycleManager.class ); - - factory = new CommandTaskFactory(); - factory.setLifecyclemanager(lifecyclemanager); - factory.setWorkflowManager(workflowManager); - factory.setVnfRequestHandler(requestHandler); - Mockito.when(workflowManager.executeWorkflow(anyObject())).thenReturn(getWorkflowResponse ()); - } - - - @Test - public void testFactory(){ - CommandTask task; - Instant timeStamp = Instant.now(); - String requestId = "1"; - RuntimeContext commandExecutorInputConfigure = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", - timeStamp, API_VERSION, requestId, ORIGINATOR_ID, "2", VNFOperation.Configure,"15","") ; - task = factory.getExecutionTask(commandExecutorInputConfigure); - assertEquals(LCMCommandTask.class,task.getClass() ); - RuntimeContext commandExecutorInputSync = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", - timeStamp, API_VERSION, requestId, ORIGINATOR_ID, "2", VNFOperation.Sync,"15","") ; - task = factory.getExecutionTask(commandExecutorInputSync); - assertEquals(LCMReadonlyCommandTask.class,task.getClass() ); - - } - - - - @Test - public void testOnRequestCompletion(){ - Mockito.doNothing().when(requestHandler).onRequestTTLEnd(anyObject(),anyBoolean()); - RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", - Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Configure, - "1", ""); - CommandResponse response = getCommandResponse(VNFOperation.Configure, true, "11", - "","1"); - LCMCommandTask executionTask = new LCMCommandTask(request, requestHandler,workflowManager,lifecyclemanager); - executionTask.onRequestCompletion(response); - } - - @Test - public void testRunGetConfig(){ - RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", - Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Sync, - "1", ""); - LCMReadonlyCommandTask readonlyCommandTask = new LCMReadonlyCommandTask( - request, requestHandler,workflowManager); - readonlyCommandTask.run(); - } - - @Test - public void testRun(){ - RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", - Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Sync, - "1", ""); - LCMCommandTask executionTask = new LCMCommandTask(request, requestHandler,workflowManager,lifecyclemanager); - executionTask.run(); - } - - @Test - public void testRunNegative(){ - RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", - Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Sync, - "1", ""); - LCMCommandTask executionTask = new LCMCommandTask(request, requestHandler,workflowManager,lifecyclemanager); - executionTask.run(); - } - - - private CommandResponse getCommandResponse(VNFOperation action, - boolean success, - String responseId, - String payload, - String vnfId){ - RuntimeContext runtimeContext = new RuntimeContext(); - ResponseContext responseContext = new ResponseContext(); - runtimeContext.setResponseContext(responseContext); - RequestContext requestContext = new RequestContext(); - runtimeContext.setRequestContext(requestContext); - CommonHeader commonHeader = new CommonHeader(); - requestContext.setCommonHeader(commonHeader); - responseContext.setCommonHeader(commonHeader); - commonHeader.setFlags(new Flags(null, false, 0)); - ActionIdentifiers actionIdentifiers = new ActionIdentifiers(); - requestContext.setActionIdentifiers(actionIdentifiers); - VNFContext vnfContext = new VNFContext(); - runtimeContext.setVnfContext(vnfContext); - requestContext.setAction(action); - runtimeContext.setRpcName(action.name().toLowerCase()); - commonHeader.setApiVer(API_VERSION); - responseContext.setStatus(new Status(100, null)); - commonHeader.setRequestId(responseId); - responseContext.setPayload(payload); - commonHeader.setTimestamp(Instant.now()); - vnfContext.setId(vnfId); - return new CommandResponse(runtimeContext); - } - - - - @Test - public void testPositiveFlow_configure() { - - String requestId = "1"; - - pouplateCommandExecutorInput("FIREWALL",30, - "1.0", Instant.now(), API_VERSION, requestId, ORIGINATOR_ID, "", - VNFOperation.Configure, "33", ""); - } - - public WorkflowResponse getWorkflowResponse (){ - WorkflowResponse wfResponse = new WorkflowResponse(); - ResponseContext responseContext = createResponseContextWithSuObjects(); - wfResponse.setResponseContext(responseContext); - responseContext.setPayload(""); - wfResponse.getResponseContext().setStatus(new Status(100, null)); - return wfResponse; - } - - private RuntimeContext pouplateCommandExecutorInput(String vnfType, - int ttl, - String vnfVersion, - Instant timeStamp, - String apiVersion, - String requestId, - String originatorID, - String subRequestID, - VNFOperation action, - String vnfId, - String payload){ - RuntimeContext commandExecutorInput = createCommandExecutorInputWithSubObjects(); - RequestContext requestContext = commandExecutorInput.getRequestContext(); - ResponseContext responseContext = createResponseContextWithSuObjects(); - commandExecutorInput.setResponseContext(responseContext); - - requestContext.getCommonHeader().setFlags(new Flags(null, false, ttl)); - requestContext.getCommonHeader().setApiVer(apiVersion); - requestContext.getCommonHeader().setTimestamp(timeStamp); - requestContext.getCommonHeader().setRequestId(requestId); - requestContext.getCommonHeader().setSubRequestId(subRequestID); - requestContext.getCommonHeader().setOriginatorId(originatorID); - requestContext.setAction(action); - requestContext.setPayload(payload); - requestContext.getActionIdentifiers().setVnfId(vnfId); - VNFContext vnfContext = commandExecutorInput.getVnfContext(); - vnfContext.setType(vnfType); - vnfContext.setId(vnfId); - vnfContext.setVersion(vnfVersion); - return commandExecutorInput; - } - - private RuntimeContext createCommandExecutorInputWithSubObjects() { - return createRuntimeContextWithSubObjects(); - } - - private RuntimeContext createRuntimeContextWithSubObjects() { - RuntimeContext runtimeContext = new RuntimeContext(); - RequestContext requestContext = new RequestContext(); - runtimeContext.setRequestContext(requestContext); - CommonHeader commonHeader = new CommonHeader(); - requestContext.setCommonHeader(commonHeader); - commonHeader.setFlags(new Flags(null, false, 0)); - ActionIdentifiers actionIdentifiers = new ActionIdentifiers(); - requestContext.setActionIdentifiers(actionIdentifiers); - VNFContext vnfContext = new VNFContext(); - runtimeContext.setVnfContext(vnfContext); - return runtimeContext; - - } - - private ResponseContext createResponseContextWithSuObjects(){ - ResponseContext responseContext = new ResponseContext(); - CommonHeader commonHeader = new CommonHeader(); - responseContext.setCommonHeader(commonHeader); - responseContext.setStatus(new Status(0, null)); - commonHeader.setFlags(new Flags(null, false, 0)); - return responseContext; - } - -} diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/TestCommandExecutor.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/TestCommandExecutor.java index cd02c260d..fcf45d59d 100644 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/TestCommandExecutor.java +++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/TestCommandExecutor.java @@ -24,30 +24,29 @@ package org.onap.appc.executor; /** - * + * */ -import java.time.Instant; - import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; import org.mockito.Mockito; -import org.onap.appc.domainmodel.lcm.ActionIdentifiers; -import org.onap.appc.domainmodel.lcm.CommonHeader; -import org.onap.appc.domainmodel.lcm.Flags; -import org.onap.appc.domainmodel.lcm.RequestContext; -import org.onap.appc.domainmodel.lcm.RuntimeContext; -import org.onap.appc.domainmodel.lcm.VNFContext; -import org.onap.appc.domainmodel.lcm.VNFOperation; +import org.onap.appc.domainmodel.lcm.*; import org.onap.appc.exceptions.APPCException; import org.onap.appc.executionqueue.ExecutionQueueService; import org.onap.appc.executor.impl.*; +import org.onap.appc.executor.impl.objects.CommandRequest; +import org.onap.appc.executor.objects.CommandExecutorInput; import org.onap.appc.lifecyclemanager.LifecycleManager; import org.onap.appc.requesthandler.RequestHandler; import org.onap.appc.workflow.WorkFlowManager; import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import java.util.Date; import java.util.concurrent.TimeUnit; @@ -55,113 +54,99 @@ import java.util.concurrent.TimeUnit; import static junit.framework.Assert.assertTrue; import static org.powermock.api.support.membermodification.MemberMatcher.method; - -@SuppressWarnings("deprecation") +@RunWith(PowerMockRunner.class) +@PrepareForTest({CommandTask.class,CommandExecutorImpl.class}) public class TestCommandExecutor { - private static final String TTL_FLAG= "TTL"; - private static final String API_VERSION= "2.0.0"; - private static final String ORIGINATOR_ID= "1"; - - private CommandExecutorImpl commandExecutor; - - private CommandTaskFactory executionTaskFactory; - - private RequestHandler requestHandler; - private WorkFlowManager workflowManager; - private LifecycleManager lifecyclemanager; - - private ExecutionQueueService executionQueueService; - private Instant timeStamp = Instant.now(); - private String requestId = "1"; - private RuntimeContext commandExecutorInputConfigure = pouplateCommandExecutorInput("FIREWALL", 30000, "1.0", - timeStamp, API_VERSION, requestId, ORIGINATOR_ID, "2", VNFOperation.Configure,"15","") ; - private RuntimeContext commandExecutorInputSync = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", - timeStamp, API_VERSION, requestId, ORIGINATOR_ID, "2", VNFOperation.Sync,"15","") ; - - @Before - public void init()throws Exception { - requestHandler= Mockito.mock(RequestHandler.class); - lifecyclemanager= Mockito.mock(LifecycleManager.class); - workflowManager= Mockito.mock(WorkFlowManager.class); - - executionQueueService = Mockito.mock(ExecutionQueueService.class); - - commandExecutor = new CommandExecutorImpl(); - executionTaskFactory = Mockito.mock(CommandTaskFactory.class); - commandExecutor.setExecutionTaskFactory(executionTaskFactory); - commandExecutor.setExecutionQueueService(executionQueueService); - LCMCommandTask lcmCommandTask = Mockito.mock(LCMCommandTask.class); - LCMReadonlyCommandTask lCMReadonlyCommandTask = Mockito.mock(LCMReadonlyCommandTask.class); - - Mockito.when(executionTaskFactory.getExecutionTask(commandExecutorInputConfigure)).thenReturn(lcmCommandTask); - Mockito.when(executionTaskFactory.getExecutionTask(commandExecutorInputSync)).thenReturn(lCMReadonlyCommandTask); - -// Mockito.when(executionQueueService.putMessage((Runnable) Mockito.anyObject(),Mockito.anyLong(),(TimeUnit)Mockito.anyObject())).thenReturn(true); - - } - - - @Test - public void testPositiveFlow_LCM() throws Exception { - //Map <String,Object> flags = setTTLInFlags("30"); - String requestId = "1"; - RuntimeContext commandExecutorInput = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", Instant.now(), API_VERSION, requestId, ORIGINATOR_ID, "2", VNFOperation.Configure, "15", "") ; - try { - commandExecutor.executeCommand(commandExecutorInput); - } catch (APPCException e) { - Assert.fail(e.toString()); - } - - } - - @Test - public void testPositiveFlow_GetConfig(){ - String requestId = "1"; - - RuntimeContext commandExecutorInput = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", Instant.now(), API_VERSION, requestId, ORIGINATOR_ID, "2", VNFOperation.Sync,"15","") ; - try { - commandExecutor.executeCommand(commandExecutorInput); - } catch (APPCException e) { - Assert.fail(e.toString()); - } - - } - - - private RuntimeContext pouplateCommandExecutorInput(String vnfType, int ttl, String vnfVersion, Instant timeStamp, String apiVersion, String requestId, String originatorID, String subRequestID, VNFOperation action, String vnfId , String payload){ - RuntimeContext commandExecutorInput = createCommandExecutorInputWithSubObjects(); - RequestContext requestContext = commandExecutorInput.getRequestContext(); - requestContext.getCommonHeader().setFlags(new Flags(null, false, ttl)); - requestContext.getCommonHeader().setApiVer(apiVersion); - requestContext.getCommonHeader().setTimestamp(timeStamp); - requestContext.getCommonHeader().setRequestId(requestId); - requestContext.getCommonHeader().setSubRequestId(subRequestID); - requestContext.getCommonHeader().setOriginatorId(originatorID); - requestContext.setAction(action); - requestContext.setPayload(payload); - requestContext.getActionIdentifiers().setVnfId(vnfId); - VNFContext vnfContext = commandExecutorInput.getVnfContext(); - vnfContext.setType(vnfType); - vnfContext.setId(vnfId); - vnfContext.setVersion(vnfVersion); - return commandExecutorInput; - } - - private RuntimeContext createCommandExecutorInputWithSubObjects() { - RuntimeContext runtimeContext = new RuntimeContext(); + private static final String TTL_FLAG= "TTL"; + private static final String API_VERSION= "2.0.0"; + private static final String ORIGINATOR_ID= "1"; + + private CommandExecutorImpl commandExecutor; + + private RequestHandler requestHandler; + private WorkFlowManager workflowManager; + private ExecutionQueueService executionQueueService; + + private Date timeStamp = new Date(); + private String requestId = "1"; + private CommandExecutorInput commandExecutorInputConfigure = pouplateCommandExecutorInput("FIREWALL", 30000, "1.0", + timeStamp, API_VERSION, requestId, ORIGINATOR_ID, "2", VNFOperation.Configure,"15","") ; + private CommandExecutorInput commandExecutorInputSync = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", + timeStamp, API_VERSION, requestId, ORIGINATOR_ID, "2", VNFOperation.Sync,"15","") ; + + @Before + public void init()throws Exception { + requestHandler= Mockito.mock(RequestHandler.class); + workflowManager= Mockito.mock(WorkFlowManager.class); + + executionQueueService = Mockito.mock(ExecutionQueueService.class); + + commandExecutor = new CommandExecutorImpl(); + commandExecutor.setExecutionQueueService(executionQueueService); + commandExecutor.setRequestHandler(requestHandler); + commandExecutor.setWorkflowManager(workflowManager); + commandExecutor.initialize(); + CommandTask commandTask = Mockito.mock(CommandTask.class); + Mockito.when(commandTask.getCommandRequest()).thenReturn(new CommandRequest(commandExecutorInputConfigure)); + PowerMockito.whenNew(CommandTask.class).withParameterTypes(RequestHandler.class,WorkFlowManager.class).withArguments(requestHandler,workflowManager).thenReturn(commandTask); + } + + + @Test + public void testPositiveFlow_LCM() throws Exception { + //Map <String,Object> flags = setTTLInFlags("30"); + try { + commandExecutor.executeCommand(commandExecutorInputConfigure); + } catch (APPCException e) { + Assert.fail(e.toString()); + } + + } + + @Test(expected = APPCException.class) + public void testNegativeFlow_LCM() throws APPCException{ + Mockito.doThrow(new APPCException("Failed to enqueue request")).when(executionQueueService).putMessage((Runnable) Mockito.anyObject(),Mockito.anyLong(),(TimeUnit) Mockito.anyObject()); + commandExecutor.executeCommand(commandExecutorInputSync); + } + + + private CommandExecutorInput pouplateCommandExecutorInput(String vnfType, int ttl, String vnfVersion, Date timeStamp, String apiVersion, String requestId, String originatorID, String subRequestID, VNFOperation action, String vnfId , String payload){ + CommandExecutorInput commandExecutorInput = createCommandExecutorInputWithSubObjects(); + RuntimeContext runtimeContext = commandExecutorInput.getRuntimeContext(); + RequestContext requestContext = runtimeContext.getRequestContext(); + requestContext.getCommonHeader().getFlags().setTtl(ttl); + requestContext.getCommonHeader().setApiVer(apiVersion); + requestContext.getCommonHeader().setTimestamp(timeStamp); + requestContext.getCommonHeader().setRequestId(requestId); + requestContext.getCommonHeader().setSubRequestId(subRequestID); + requestContext.getCommonHeader().setOriginatorId(originatorID); + requestContext.setAction(action); + requestContext.setPayload(payload); + requestContext.getActionIdentifiers().setVnfId(vnfId); + VNFContext vnfContext = runtimeContext.getVnfContext(); + vnfContext.setType(vnfType); + vnfContext.setId(vnfId); + vnfContext.setVersion(vnfVersion); + return commandExecutorInput; + } + + private CommandExecutorInput createCommandExecutorInputWithSubObjects() { + CommandExecutorInput commandExecutorInput = new CommandExecutorInput(); + RuntimeContext runtimeContext = new RuntimeContext(); + commandExecutorInput.setRuntimeContext(runtimeContext); RequestContext requestContext = new RequestContext(); - runtimeContext.setRequestContext(requestContext); - CommonHeader commonHeader = new CommonHeader(); - requestContext.setCommonHeader(commonHeader); - commonHeader.setFlags(new Flags(null, false, 0)); - ActionIdentifiers actionIdentifiers = new ActionIdentifiers(); - requestContext.setActionIdentifiers(actionIdentifiers); - VNFContext vnfContext = new VNFContext(); - runtimeContext.setVnfContext(vnfContext); - return runtimeContext; - } - - + runtimeContext.setRequestContext(requestContext); + CommonHeader commonHeader = new CommonHeader(); + requestContext.setCommonHeader(commonHeader); + Flags flags = new Flags(); + commonHeader.setFlags(flags); + ActionIdentifiers actionIdentifiers = new ActionIdentifiers(); + requestContext.setActionIdentifiers(actionIdentifiers); + VNFContext vnfContext = new VNFContext(); + runtimeContext.setVnfContext(vnfContext); + return commandExecutorInput; + } } + diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/TestCommandTask.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/TestCommandTask.java new file mode 100644 index 000000000..d21e788f3 --- /dev/null +++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/onap/appc/executor/TestCommandTask.java @@ -0,0 +1,231 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.onap.appc.executor; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.onap.appc.domainmodel.lcm.*; +import org.onap.appc.executor.impl.CommandExecutorImpl; +import org.onap.appc.executor.impl.CommandTask; +import org.onap.appc.executor.impl.objects.CommandRequest; +import org.onap.appc.executor.objects.CommandExecutorInput; +import org.onap.appc.requesthandler.RequestHandler; +import org.onap.appc.workflow.WorkFlowManager; +import org.onap.appc.workflow.objects.WorkflowRequest; +import org.onap.appc.workflow.objects.WorkflowResponse; +import org.onap.ccsdk.sli.adaptors.aai.AAIService; +import org.osgi.framework.*; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyObject; + +/** + * @author sushilma + * @since September 04, 2017 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({FrameworkUtil.class,AAIService.class,BundleContext.class,ServiceReference.class, + BundleReference.class,Bundle.class,Filter.class,BundleListener.class,InvalidSyntaxException.class, + BundleException.class,FrameworkListener.class,ServiceRegistration.class,ServiceListener.class, + Version.class}) +public class TestCommandTask { + CommandTask task ; + private RequestHandler requestHandler; + private WorkFlowManager workflowManager; + private CommandRequest commandRequest; + private AAIService aaiService; + + private BundleContext bundleContext = Mockito.mock(BundleContext.class); + private Bundle bundleService = Mockito.mock(Bundle.class); + private ServiceReference sref = Mockito.mock(ServiceReference.class); + + private static final String TTL_FLAG= "TTL"; + private static final String API_VERSION= "2.0.0"; + private static final String ORIGINATOR_ID= "1"; + @Before + public void init(){ + aaiService = Mockito.mock(AAIService.class); +/* PowerMockito.mockStatic(FrameworkUtil.class); + Mockito.when(bundleContext.getServiceReference(AAIService.class.getName())).thenReturn(sref); + Mockito.when(bundleContext.getService(any())).thenReturn(aaiService); + Mockito.when(FrameworkUtil.getBundle(AAIService.class).getBundleContext()).thenReturn(bundleContext);*/ + + PowerMockito.mockStatic(FrameworkUtil.class); + PowerMockito.when(FrameworkUtil.getBundle(AAIService.class)).thenReturn(bundleService); + PowerMockito.when(bundleService.getBundleContext()).thenReturn(bundleContext); + PowerMockito.when(bundleContext.getServiceReference(AAIService.class.getName())).thenReturn(sref); + PowerMockito.when(bundleContext.getService(sref)).thenReturn(aaiService); + + + requestHandler = Mockito.mock(RequestHandler.class); + workflowManager = Mockito.mock(WorkFlowManager.class); + task = new CommandTask(requestHandler ,workflowManager ); + } + + @Test + public void testRunPositive(){ + Mockito.when(workflowManager.executeWorkflow(anyObject())).thenReturn(getWorkflowResponse()); + task.setWorkflowManager(workflowManager); + task.setRequestHandler(requestHandler); + task.setCommandRequest(getCommandRequest("FIREWALL",30,new Date(), "11" ,setTTLInFlags("30"),VNFOperation.Sync, "1", "1.0")); + task.run(); + Assert.assertNotNull(task.getCommandRequest().getCommandExecutorInput().getRuntimeContext().getResponseContext()); + } + + @Test + public void testRunPositiveTerminateFailed(){ + Mockito.when(workflowManager.executeWorkflow(anyObject())).thenReturn(getWorkflowResponse()); + task.setWorkflowManager(workflowManager); + task.setRequestHandler(requestHandler); + task.setCommandRequest(getCommandRequest("FIREWALL",30,new Date(), "12" ,setTTLInFlags("30"),VNFOperation.Terminate, "2", "1.0")); + setResponseContext(300,task.getCommandRequest().getCommandExecutorInput().getRuntimeContext()); + task.run(); + Assert.assertNotNull(task.getCommandRequest().getCommandExecutorInput().getRuntimeContext().getResponseContext()); + } + + + @Ignore + public void testRunPositiveTerminateSuccess(){ + Mockito.when(workflowManager.executeWorkflow(anyObject())).thenReturn(getWorkflowResponse()); + task.setWorkflowManager(workflowManager); + task.setRequestHandler(requestHandler); + task.setCommandRequest(getCommandRequest("FIREWALL",30,new Date(), "12" ,setTTLInFlags("30"),VNFOperation.Terminate, "2", "1.0")); + setResponseContext(100,task.getCommandRequest().getCommandExecutorInput().getRuntimeContext()); + task.run(); + Assert.assertNotNull(task.getCommandRequest().getCommandExecutorInput().getRuntimeContext().getResponseContext()); + } + + private WorkflowResponse getWorkflowResponse (){ + WorkflowResponse wfResponse = new WorkflowResponse(); + ResponseContext responseContext = createResponseContextWithObjects(); + wfResponse.setResponseContext(responseContext); + responseContext.setPayload(""); + wfResponse.getResponseContext().getStatus().setCode(100); + return wfResponse; + } + + private ResponseContext createResponseContextWithObjects(){ + ResponseContext responseContext = new ResponseContext(); + CommonHeader commonHeader = new CommonHeader(); + Flags flags = new Flags(); + Status status = new Status(); + responseContext.setCommonHeader(commonHeader); + responseContext.setStatus(status); + commonHeader.setFlags(flags); + return responseContext; + } + + private void setResponseContext(int statusCode ,RuntimeContext runtimeContext ){ + ResponseContext responseContext = createResponseContextWithObjects(); + responseContext.getStatus().setCode(statusCode); + runtimeContext.setResponseContext(responseContext); + } + + private CommandRequest getCommandRequest(String vnfType , Integer ttl , Date timeStamp, String requestId, + Map<String,Object> flags, VNFOperation command , String vnfId, String vnfVersion ){ + + CommandExecutorInput commandExecutorInput = pouplateCommandExecutorInput(vnfType, ttl, vnfVersion, timeStamp, API_VERSION, requestId, ORIGINATOR_ID, "", command, vnfId, ""); + CommandRequest request = new CommandRequest(commandExecutorInput); + request.setCommandExecutorInput(commandExecutorInput); + request.setCommandInTimeStamp(new Date()); + return request; + } + + private CommandExecutorInput pouplateCommandExecutorInput(String vnfType, int ttl, String vnfVersion, Date timeStamp, String apiVersion, String requestId, String originatorID, String subRequestID, VNFOperation action, String vnfId , String payload){ + CommandExecutorInput commandExecutorInput = createCommandExecutorInputWithSubObjects(); + RuntimeContext runtimeContext = commandExecutorInput.getRuntimeContext(); + RequestContext requestContext = runtimeContext.getRequestContext(); + ResponseContext responseContext = createResponseContextWithSuObjects(); + runtimeContext.setResponseContext(responseContext); + + requestContext.getCommonHeader().getFlags().setTtl(ttl); + requestContext.getCommonHeader().setApiVer(apiVersion); + requestContext.getCommonHeader().setTimestamp(timeStamp); + requestContext.getCommonHeader().setRequestId(requestId); + requestContext.getCommonHeader().setSubRequestId(subRequestID); + requestContext.getCommonHeader().setOriginatorId(originatorID); + requestContext.setAction(action); + requestContext.setPayload(payload); + requestContext.getActionIdentifiers().setVnfId(vnfId); + requestContext.getActionIdentifiers().setServiceInstanceId("test"); + VNFContext vnfContext = runtimeContext.getVnfContext(); + vnfContext.setType(vnfType); + vnfContext.setId(vnfId); + vnfContext.setVersion(vnfVersion); + return commandExecutorInput; + } + + private CommandExecutorInput createCommandExecutorInputWithSubObjects() { + CommandExecutorInput commandExecutorInput = new CommandExecutorInput(); + RuntimeContext runtimeContext = createRuntimeContextWithSubObjects(); + commandExecutorInput.setRuntimeContext(runtimeContext); + return commandExecutorInput; + } + + private ResponseContext createResponseContextWithSuObjects(){ + ResponseContext responseContext = new ResponseContext(); + CommonHeader commonHeader = new CommonHeader(); + Flags flags = new Flags(); + Status status = new Status(); + responseContext.setCommonHeader(commonHeader); + responseContext.setStatus(status); + commonHeader.setFlags(flags); + return responseContext; + } + + private RuntimeContext createRuntimeContextWithSubObjects() { + RuntimeContext runtimeContext = new RuntimeContext(); + RequestContext requestContext = new RequestContext(); + runtimeContext.setRequestContext(requestContext); + CommonHeader commonHeader = new CommonHeader(); + requestContext.setCommonHeader(commonHeader); + Flags flags = new Flags(); + commonHeader.setFlags(flags); + ActionIdentifiers actionIdentifiers = new ActionIdentifiers(); + requestContext.setActionIdentifiers(actionIdentifiers); + VNFContext vnfContext = new VNFContext(); + runtimeContext.setVnfContext(vnfContext); + return runtimeContext; + } + + private Map<String,Object> setTTLInFlags( String value){ + Map<String,Object> flags = new HashMap<String,Object>(); + if( value != null || !("".equalsIgnoreCase(value))){ + flags.put(TTL_FLAG, value); + } + return flags; + } +} diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/resources/org/onap/appc/default.properties b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/resources/org/onap/appc/default.properties index 671d8b0b2..28b45df11 100644 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/resources/org/onap/appc/default.properties +++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/resources/org/onap/appc/default.properties @@ -88,4 +88,3 @@ appc.LCM.client.name=APPC-TEST-CLIENT-CMD-EXECUTOR-TEST appc.LCM.provider.user=test appc.LCM.provider.pass=test - |