fix sonar potential nullpointer 34/78734/1
authork.kazak <k.kazak@samsung.com>
Tue, 19 Feb 2019 08:06:56 +0000 (09:06 +0100)
committerk.kazak <k.kazak@samsung.com>
Tue, 19 Feb 2019 08:06:56 +0000 (09:06 +0100)
AppcRunTasks: fix potential null pointer if vnf = null
AppcRunTasksTest: add tests for this case and the method itself

Change-Id: I63b37670541ef5ff31b03b0336d990677b753fc5
Issue-ID: SO-1516
Signed-off-by: k.kazak <k.kazak@samsung.com>
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/appc/tasks/AppcRunTasks.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/appc/tasks/AppcRunTasksTest.java

index 798837f..e0cbb82 100644 (file)
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
 package org.onap.so.bpmn.infrastructure.appc.tasks;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Optional;
-
-import org.camunda.bpm.engine.delegate.BpmnError;
+import org.onap.appc.client.lcm.model.Action;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestParameters;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
-import org.onap.so.db.catalog.client.CatalogDbClient;
-import org.onap.so.db.catalog.beans.ControllerSelectionReference;
+import org.onap.so.client.appc.ApplicationControllerAction;
 import org.onap.so.client.exception.BBObjectNotFoundException;
 import org.onap.so.client.exception.ExceptionBuilder;
-import org.onap.appc.client.lcm.model.Action;
-import org.onap.so.bpmn.common.BuildingBlockExecution;
-import org.onap.so.client.appc.ApplicationControllerAction;
+import org.onap.so.db.catalog.beans.ControllerSelectionReference;
+import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.logger.MessageEnum;
 import org.onap.so.logger.MsoLogger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -84,13 +83,20 @@ public class AppcRunTasks {
                        } catch (BBObjectNotFoundException e) {
                                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "No valid VNF exists");
                        }
-                       String vnfId = vnf.getVnfId();
+        String vnfId = null;
+        String vnfName = null;
+        String vnfType = null;
+        String vnfHostIpAddress = null;
+
+        if (vnf != null) {
+            vnfId = vnf.getVnfId();
+            vnfName = vnf.getVnfName();
+            vnfType = vnf.getVnfType();
+            vnfHostIpAddress = vnf.getIpv4OamAddress();
+        }
                        String msoRequestId = gBBInput.getRequestContext().getMsoRequestId();
-                       String vnfName = vnf.getVnfName();
-                       String vnfType = vnf.getVnfType();
-                       
+
                        String aicIdentity = execution.getVariable("aicIdentity");
-                       String vnfHostIpAddress =  vnf.getIpv4OamAddress();
                        String vmIdList = execution.getVariable("vmIdList");
                        String vserverIdList = execution.getVariable("vserverIdList");
                        String identityUrl =  execution.getVariable("identityUrl");
index 114066a..7495cc1 100644 (file)
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
 
 package org.onap.so.bpmn.infrastructure.appc.tasks;
 
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
+import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import org.junit.Test;
+import org.mockito.InjectMocks;
 import org.onap.appc.client.lcm.model.Action;
+import org.onap.so.bpmn.BaseTaskTest;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
+import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
+import org.onap.so.client.exception.BBObjectNotFoundException;
+import org.onap.so.db.catalog.beans.ControllerSelectionReference;
 
-public class AppcRunTasksTest {
+public class AppcRunTasksTest extends BaseTaskTest {
 
-       
+       @InjectMocks
        private AppcRunTasks appcRunTasks = new AppcRunTasks();
+
        @Test
        public void mapRollbackVariablesTest() {
                
@@ -53,4 +68,101 @@ public class AppcRunTasksTest {
                appcRunTasks.mapRollbackVariables(mock, Action.ResumeTraffic, "0");
                verify(mock, times(1)).setVariable("rollbackQuiesceTraffic", false);
        }
+
+    @Test
+    public void runAppcCommandVnfNull() throws BBObjectNotFoundException {
+        execution.getLookupMap().put(ResourceKey.GENERIC_VNF_ID, "NULL-TEST");
+        fillRequiredAppcExecutionFields();
+        when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.GENERIC_VNF_ID), eq("NULL-TEST")))
+            .thenReturn(null);
+        when(catalogDbClient.getControllerSelectionReferenceByVnfTypeAndActionCategory(
+            isNull(), eq(Action.Lock.toString()))).
+            thenThrow(new IllegalArgumentException("name or values is null"));
+
+        appcRunTasks.runAppcCommand(execution, Action.Lock);
+
+        // if vnf = null -> vnfType = null ->
+        // IllegalArgumentException will be thrown in catalogDbClient.getControllerSelectionReferenceByVnfTypeAndActionCategory
+        verify(exceptionUtil, times(1)).
+            buildAndThrowWorkflowException(
+                any(BuildingBlockExecution.class), eq(1002), eq("name or values is null"));
+    }
+
+    @Test
+    public void runAppcCommandBBObjectNotFoundException() throws BBObjectNotFoundException {
+        execution.getLookupMap().put(ResourceKey.GENERIC_VNF_ID, "EXCEPTION-TEST");
+        fillRequiredAppcExecutionFields();
+        when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.GENERIC_VNF_ID), eq("EXCEPTION-TEST")))
+            .thenThrow(new BBObjectNotFoundException());
+
+        appcRunTasks.runAppcCommand(execution, Action.Lock);
+
+        verify(exceptionUtil, times(1)).
+            buildAndThrowWorkflowException(
+                any(BuildingBlockExecution.class), eq(7000), eq("No valid VNF exists"));
+    }
+
+    @Test
+    public void runAppcCommandVfModuleNull() throws BBObjectNotFoundException {
+        execution.getLookupMap().put(ResourceKey.GENERIC_VNF_ID, "SUCCESS-TEST");
+        fillRequiredAppcExecutionFields();
+        GenericVnf genericVnf = getTestGenericVnf();
+        when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.GENERIC_VNF_ID), eq("SUCCESS-TEST")))
+            .thenReturn(genericVnf);
+        mockReferenceResponse();
+        execution.getLookupMap().put(ResourceKey.VF_MODULE_ID, "VF-MODULE-ID-TEST");
+        when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.VF_MODULE_ID), eq("VF-MODULE-ID-TEST")))
+            .thenReturn(null);
+        when(appCClient.getErrorCode()).thenReturn("0");
+
+        appcRunTasks.runAppcCommand(execution, Action.Lock);
+
+        assertEquals(true, execution.getVariable("rollbackVnfLock"));
+    }
+
+    @Test
+    public void runAppcCommand() throws BBObjectNotFoundException {
+        execution.getLookupMap().put(ResourceKey.GENERIC_VNF_ID, "SUCCESS-TEST");
+        fillRequiredAppcExecutionFields();
+        GenericVnf genericVnf = getTestGenericVnf();
+        when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.GENERIC_VNF_ID), eq("SUCCESS-TEST")))
+            .thenReturn(genericVnf);
+        mockReferenceResponse();
+        execution.getLookupMap().put(ResourceKey.VF_MODULE_ID, "VF-MODULE-ID-TEST");
+        VfModule vfModule = new VfModule();
+        vfModule.setVfModuleId("VF-MODULE-ID");
+        when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.VF_MODULE_ID), eq("VF-MODULE-ID-TEST")))
+            .thenReturn(vfModule);
+        when(appCClient.getErrorCode()).thenReturn("0");
+
+        appcRunTasks.runAppcCommand(execution, Action.Lock);
+
+        assertEquals(true, execution.getVariable("rollbackVnfLock"));
+    }
+
+    private void mockReferenceResponse() {
+        ControllerSelectionReference reference = new ControllerSelectionReference();
+        reference.setControllerName("TEST-CONTROLLER-NAME");
+        when(catalogDbClient.getControllerSelectionReferenceByVnfTypeAndActionCategory(
+            eq("TEST-VNF-TYPE"), eq(Action.Lock.toString()))).thenReturn(reference);
+    }
+
+    private void fillRequiredAppcExecutionFields() {
+        RequestContext context = new RequestContext();
+        context.setMsoRequestId("TEST-MSO-ID");
+        execution.setVariable("aicIdentity", "AIC-TEST");
+        execution.setVariable("vmIdList", "VM-ID-LIST-TEST");
+        execution.setVariable("vserverIdList", "VSERVER-ID-LIST");
+        execution.setVariable("identityUrl", "IDENTITY-URL-TEST");
+        execution.getGeneralBuildingBlock().setRequestContext(context);
+    }
+
+    private GenericVnf getTestGenericVnf() {
+        GenericVnf genericVnf = new GenericVnf();
+        genericVnf.setVnfId("TEST-VNF-ID");
+        genericVnf.setVnfType("TEST-VNF-TYPE");
+        genericVnf.setVnfName("TEST-VNF-NAME");
+        genericVnf.setIpv4OamAddress("129.0.0.1");
+        return genericVnf;
+    }
 }