nullpointer in vnfadaptervfmoduleobjectmapper 10/90110/1
authorBhatt, Prema <prema.bhatt@att.com>
Tue, 18 Jun 2019 19:13:35 +0000 (15:13 -0400)
committerBenjamin, Max (mb388a) <mb388a@us.att.com>
Tue, 18 Jun 2019 19:13:42 +0000 (15:13 -0400)
Added code block to throw exception when we get a 'Name' wthout a
'Value' tag in the SDNC vf-module-topology. Right now we are seeing
oam0_net_id is missing a value tag. Added Unit test to test this code
change.

Change-Id: I765d5a4eb9d351b7613d4c3561a2a5dbe37e4781
Issue-ID: SO-2031
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/exceptions/MissingValueTagException.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/VnfAdapterVfModuleResources.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapperPayloadTest.java

index a1fcbff..bf8c80d 100644 (file)
@@ -78,6 +78,9 @@ import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 import org.onap.so.entity.MsoRequest;
 import org.onap.so.jsonpath.JsonPathUtil;
 import org.onap.so.openstack.utils.MsoMulticloudUtils;
+import org.onap.so.client.adapter.vnf.mapper.exceptions.MissingValueTagException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import com.fasterxml.jackson.core.JsonParseException;
@@ -92,6 +95,7 @@ import com.google.common.base.Joiner;
 public class VnfAdapterVfModuleObjectMapper {
     @Autowired
     protected VnfAdapterObjectMapperUtils vnfAdapterObjectMapperUtils;
+    private static final Logger logger = LoggerFactory.getLogger(VnfAdapterVfModuleObjectMapper.class);
     private static List<String> sdncResponseParamsToSkip =
             asList("vnf_id", "vf_module_id", "vnf_name", "vf_module_name");
 
@@ -203,8 +207,8 @@ public class VnfAdapterVfModuleObjectMapper {
         return paramsMap;
     }
 
-    private void buildDirectivesParamFromMap(Map<String, Object> paramsMap, String directive,
-            Map<String, Object> srcMap) {
+    protected void buildDirectivesParamFromMap(Map<String, Object> paramsMap, String directive,
+            Map<String, Object> srcMap) throws MissingValueTagException {
         StringBuilder directives = new StringBuilder();
         int no_directives_size = 0;
         if (directive.equals(MsoMulticloudUtils.USER_DIRECTIVES)
@@ -217,6 +221,10 @@ public class VnfAdapterVfModuleObjectMapper {
             for (String attributeName : srcMap.keySet()) {
                 if (!(MsoMulticloudUtils.USER_DIRECTIVES.equals(directive)
                         && attributeName.equals(MsoMulticloudUtils.OOF_DIRECTIVES))) {
+                    if (srcMap.get(attributeName) == null) {
+                        logger.error("No value tag found for attribute: {}", attributeName);
+                        throw new MissingValueTagException("No value tag found for " + attributeName);
+                    }
                     directives.append(new AttributeNameValue(attributeName, srcMap.get(attributeName).toString()));
                     if (i < (srcMap.size() - 1 + no_directives_size))
                         directives.append(", ");
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/exceptions/MissingValueTagException.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/exceptions/MissingValueTagException.java
new file mode 100644 (file)
index 0000000..7271971
--- /dev/null
@@ -0,0 +1,15 @@
+package org.onap.so.client.adapter.vnf.mapper.exceptions;
+
+public class MissingValueTagException extends Exception {
+
+    private static final long serialVersionUID = -1598147488593823724L;
+
+    public MissingValueTagException() {
+        super();
+    }
+
+    public MissingValueTagException(String message) {
+        super(message);
+    }
+
+}
index efe5f34..0a825b8 100644 (file)
@@ -33,6 +33,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 import org.onap.so.client.adapter.vnf.mapper.VnfAdapterVfModuleObjectMapper;
+import org.onap.so.client.adapter.vnf.mapper.exceptions.MissingValueTagException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,7 +48,7 @@ public class VnfAdapterVfModuleResources {
     public CreateVfModuleRequest createVfModuleRequest(RequestContext requestContext, CloudRegion cloudRegion,
             OrchestrationContext orchestrationContext, ServiceInstance serviceInstance, GenericVnf genericVnf,
             VfModule vfModule, VolumeGroup volumeGroup, String sdncVnfQueryResponse, String sdncVfModuleQueryResponse)
-            throws IOException {
+            throws IOException, MissingValueTagException {
         return vnfAdapterVfModuleObjectMapper.createVfModuleRequestMapper(requestContext, cloudRegion,
                 orchestrationContext, serviceInstance, genericVnf, vfModule, volumeGroup, sdncVnfQueryResponse,
                 sdncVfModuleQueryResponse);
index 5a8e571..44a0813 100644 (file)
@@ -29,7 +29,9 @@ import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.Map;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiVmNetworkData;
 import org.onap.so.adapters.vnfrest.CreateVfModuleRequest;
 import org.onap.so.adapters.vnfrest.DeleteVfModuleRequest;
@@ -43,6 +45,8 @@ import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule;
+import org.onap.so.openstack.utils.MsoMulticloudUtils;
+import org.onap.so.client.adapter.vnf.mapper.exceptions.MissingValueTagException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 public class VnfAdapterVfModuleObjectMapperPayloadTest {
@@ -52,6 +56,9 @@ public class VnfAdapterVfModuleObjectMapperPayloadTest {
     private VnfAdapterVfModuleObjectMapper vfModuleObjectMapper = new VnfAdapterVfModuleObjectMapper();
     private ObjectMapper omapper = new ObjectMapper();
 
+    @Rule
+    public ExpectedException expectedException = ExpectedException.none();
+
     @Before
     public void setUp() {
         vfModuleObjectMapper.vnfAdapterObjectMapperUtils = new VnfAdapterObjectMapperUtils();
@@ -361,6 +368,34 @@ public class VnfAdapterVfModuleObjectMapperPayloadTest {
         assertThat(vfModuleVNFAdapterRequest, sameBeanAs(reqMapper1).ignoring("messageId").ignoring("notificationUrl"));
     }
 
+    @Test
+    public void buildDirectivesParamFromMapNoValueTagTest() throws Exception {
+
+        Map<String, Object> paramsMap = new HashMap<>();
+        Map<String, Object> srcMap = new HashMap<>();
+        srcMap.put("key1", "value1");
+        srcMap.put("key2", "value2");
+        srcMap.put("key3", null);
+
+        expectedException.expect(MissingValueTagException.class);
+        vfModuleObjectMapper.buildDirectivesParamFromMap(paramsMap, MsoMulticloudUtils.SDNC_DIRECTIVES, srcMap);
+    }
+
+    @Test
+    public void buildDirectivesParamFromMapSunnyDayTest() throws Exception {
+
+        Map<String, Object> paramsMap = new HashMap<>();
+        Map<String, Object> srcMap = new HashMap<>();
+        srcMap.put("key1", "value1");
+        srcMap.put("key2", "value2");
+        String expectedResult =
+                "[{ \"attributes\": [ {\"attribute_name\": \"key1\", \"attribute_value\": \"value1\"}, {\"attribute_name\": \"key2\", \"attribute_value\": \"value2\"}] }]";
+
+        vfModuleObjectMapper.buildDirectivesParamFromMap(paramsMap, MsoMulticloudUtils.SDNC_DIRECTIVES, srcMap);
+
+        assertEquals(expectedResult, paramsMap.values().toString());
+    }
+
     @Test
     public void createVfModuleWithVolumeGroupRequestMapperTest() throws Exception {