new sonar issues in drools-applications 23/68423/3
authorJim Hahn <jrh3@att.com>
Fri, 21 Sep 2018 13:31:25 +0000 (09:31 -0400)
committerJim Hahn <jrh3@att.com>
Fri, 21 Sep 2018 14:12:52 +0000 (10:12 -0400)
Don't return null lists from AAI.
Transient TargetLock.
Extract aai.url, et. al., constants.
Don't allocate extra unneeded variable.
Re-order fields in xacml attributes.
Extract "vserver" constant from simulator.
Replace thread sleep with join.

Change-Id: Iee1bd182862632af1f131cca5db5b526f5865b9f
Issue-ID: POLICY-1129
Signed-off-by: Jim Hahn <jrh3@att.com>
controlloop/common/actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/SOActorServiceProvider.java
controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java
controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java
controlloop/common/model-impl/aai/src/main/java/org/onap/policy/aai/AaiNqResponseWrapper.java
controlloop/common/model-impl/aai/src/test/java/org/onap/policy/aai/AaiNqResponseWrapperTest.java
controlloop/common/model-impl/vfc/src/test/java/org/onap/policy/vfc/TestVfcManager.java
controlloop/common/simulators/src/main/java/org/onap/policy/simulators/AaiSimulatorJaxRs.java

index 9904bac..8775e68 100644 (file)
@@ -393,7 +393,7 @@ public class SOActorServiceProvider implements Actor {
      */
     private AaiNqInventoryResponseItem findVfModule(AaiNqResponseWrapper aaiResponseWrapper, boolean baseFlag) {
         List<AaiNqInventoryResponseItem> lst = aaiResponseWrapper.getVfModuleItems(baseFlag);
-        return (lst == null || lst.isEmpty() ? null : lst.get(lst.size() - 1));
+        return (lst.isEmpty() ? null : lst.get(lst.size() - 1));
     }
 
     /**
index bd19049..93535ef 100644 (file)
@@ -75,6 +75,10 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
     public static final String GENERIC_VNF_PROV_STATUS = "generic-vnf.prov-status";
     public static final String VSERVER_PROV_STATUS = "vserver.prov-status";
 
+    private static final String AAI_URL = "aai.url";
+    private static final String AAI_USERNAME = "aai.username";
+    private static final String AAI_PASSWD = "aai.password";
+
     private static final String QUERY_AAI_ERROR_MSG = "Exception from queryAai: ";
 
     /**
@@ -101,7 +105,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
     private LinkedList<ControlLoopOperation> controlLoopHistory = new LinkedList<>();
     private ControlLoopOperationManager currentOperation = null;
     private ControlLoopOperationManager lastOperationManager = null;
-    private TargetLock targetLock = null;
+    private transient TargetLock targetLock = null;
     private AaiGetVnfResponse vnfResponse = null;
     private AaiGetVserverResponse vserverResponse = null;
     private boolean useTargetLock = true;
@@ -876,9 +880,9 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
 
         try {
             if (vserverName != null) {
-                String aaiHostUrl = PolicyEngine.manager.getEnvironmentProperty("aai.url");
-                String aaiUser = PolicyEngine.manager.getEnvironmentProperty("aai.username");
-                String aaiPassword = PolicyEngine.manager.getEnvironmentProperty("aai.password");
+                String aaiHostUrl = PolicyEngine.manager.getEnvironmentProperty(AAI_URL);
+                String aaiUser = PolicyEngine.manager.getEnvironmentProperty(AAI_USERNAME);
+                String aaiPassword = PolicyEngine.manager.getEnvironmentProperty(AAI_PASSWD);
                 String aaiGetQueryByVserver = "/aai/v11/nodes/vservers?vserver-name=";
                 String url = aaiHostUrl + aaiGetQueryByVserver;
                 logger.info("AAI Host URL by VServer: {}", url);
@@ -906,9 +910,9 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
         String vnfName = event.getAai().get(GENERIC_VNF_VNF_NAME);
         String vnfId = event.getAai().get(GENERIC_VNF_VNF_ID);
 
-        String aaiHostUrl = PolicyEngine.manager.getEnvironmentProperty("aai.url");
-        String aaiUser = PolicyEngine.manager.getEnvironmentProperty("aai.username");
-        String aaiPassword = PolicyEngine.manager.getEnvironmentProperty("aai.password");
+        String aaiHostUrl = PolicyEngine.manager.getEnvironmentProperty(AAI_URL);
+        String aaiUser = PolicyEngine.manager.getEnvironmentProperty(AAI_USERNAME);
+        String aaiPassword = PolicyEngine.manager.getEnvironmentProperty(AAI_PASSWD);
 
         try {
             if (vnfName != null) {
@@ -955,7 +959,6 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
         final AaiNqInstanceFilters aaiNqInstanceFilter = new AaiNqInstanceFilters();
 
         // queryParameters
-        // TODO: UUID.fromString($params.getAaiNamedQueryUUID()) AaiNamedQueryUUID
         aaiNqNamedQuery.setNamedQueryUuid(UUID.fromString("4ff56a54-9e3f-46b7-a337-07a1d3c6b469"));
         aaiNqQueryParam.setNamedQuery(aaiNqNamedQuery);
         aaiNqRequest.setQueryParameters(aaiNqQueryParam);
@@ -973,8 +976,8 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
             logger.debug("AAI Request sent: {}", Serialization.gsonPretty.toJson(aaiNqRequest));
         }
 
-        AaiNqResponse aaiNqResponse = new AaiManager(new RESTManager()).postQuery(getPeManagerEnvProperty("aai.url"),
-                getPeManagerEnvProperty("aai.username"), getPeManagerEnvProperty("aai.password"), aaiNqRequest,
+        AaiNqResponse aaiNqResponse = new AaiManager(new RESTManager()).postQuery(getPeManagerEnvProperty(AAI_URL),
+                getPeManagerEnvProperty(AAI_USERNAME), getPeManagerEnvProperty(AAI_PASSWD), aaiNqRequest,
                 onset.getRequestId());
 
         // Check AAI response
index 6b17af8..d7e608c 100644 (file)
@@ -28,6 +28,24 @@ import com.att.research.xacml.std.annotations.XACMLSubject;
 @XACMLRequest(ReturnPolicyIdList = true, CombinedDecision = true)
 public class PolicyGuardXacmlRequestAttributes {
 
+    @XACMLSubject(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:clname:clname-id")
+    String clnameID;
+
+    @XACMLSubject(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:actor:actor-id")
+    String actorID;
+
+    @XACMLAction(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:operation:operation-id")
+    String operationID;
+
+    @XACMLResource(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:target:target-id")
+    String targetID;
+
+    @XACMLResource(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:request:request-id")
+    String requestID;
+
+    @XACMLResource(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:request:vf-count")
+    Integer vfCount;
+
     /**
      * Construct an instance.
      * 
@@ -55,24 +73,6 @@ public class PolicyGuardXacmlRequestAttributes {
                 + targetID + ", requestID=" + requestID + "]";
     }
 
-    @XACMLSubject(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:clname:clname-id")
-    String clnameID;
-
-    @XACMLSubject(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:actor:actor-id")
-    String actorID;
-
-    @XACMLAction(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:operation:operation-id")
-    String operationID;
-
-    @XACMLResource(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:target:target-id")
-    String targetID;
-
-    @XACMLResource(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:request:request-id")
-    String requestID;
-
-    @XACMLResource(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:request:vf-count")
-    Integer vfCount;
-
     public String getActorID() {
         return actorID;
     }
index be84fdf..eb4271b 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.policy.aai;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
 import java.util.regex.Matcher;
@@ -68,8 +69,7 @@ public class AaiNqResponseWrapper implements Serializable {
      * @return the number of VF modules, or {@code 0} if there are none
      */
     public int countVfModules() {
-        List<AaiNqInventoryResponseItem> lst = getVfModuleItems(false);
-        return (lst == null ? 0 : lst.size());
+        return getVfModuleItems(false).size();
     }
 
     /**
@@ -80,11 +80,6 @@ public class AaiNqResponseWrapper implements Serializable {
      *         which to model it)
      */
     public String genVfModuleName() {
-        List<AaiNqInventoryResponseItem> lst = getVfModuleItems(false);
-        if (lst == null) {
-            return null;
-        }
-
         /*
          * Loop through the VF modules, extracting the name prefix and the largest number
          * suffix
@@ -92,7 +87,7 @@ public class AaiNqResponseWrapper implements Serializable {
         String prefix = null;
         int maxSuffix = -1;
 
-        for (AaiNqInventoryResponseItem item : lst) {
+        for (AaiNqInventoryResponseItem item : getVfModuleItems(false)) {
             String name = item.getVfModule().getVfModuleName();
             Matcher matcher = VF_MODULE_NAME_PAT.matcher(name);
             if (matcher.matches()) {
@@ -116,7 +111,7 @@ public class AaiNqResponseWrapper implements Serializable {
      *
      * @param wantBaseModule {@code true} if the the base VF module(s) is desired,
      *        {@code false} otherwise
-     * @return the list of VF module items, or {@code null} if there are no VF modules
+     * @return the list of VF module items
      */
     public List<AaiNqInventoryResponseItem> getVfModuleItems(boolean wantBaseModule) {
         // get the list of items
@@ -127,18 +122,18 @@ public class AaiNqResponseWrapper implements Serializable {
 
         } catch (NullPointerException | IndexOutOfBoundsException e) {
             logger.debug("no VF modules in AAI response", e);
-            return null;
+            return Collections.emptyList();
         }
 
         if (itemList == null) {
-            return null;
+            return Collections.emptyList();
         }
 
         /*
          * Walk the items looking for VF modules, allocating the list only when an item is
          * found.
          */
-        List<AaiNqInventoryResponseItem> vfModuleItems = null;
+        List<AaiNqInventoryResponseItem> vfModuleItems = new ArrayList<>(itemList.size());;
 
         for (AaiNqInventoryResponseItem inventoryResponseItem : itemList) {
             AaiNqVfModule vfmod = inventoryResponseItem.getVfModule();
@@ -146,10 +141,6 @@ public class AaiNqResponseWrapper implements Serializable {
                 continue;
             }
 
-            if (vfModuleItems == null) {
-                vfModuleItems = new ArrayList<>(itemList.size());
-            }
-
             if (vfmod.getIsBaseVfModule() == wantBaseModule
                             && (wantBaseModule || VF_MODULE_NAME_PAT.matcher(vfmod.getVfModuleName()).matches())) {
                 vfModuleItems.add(inventoryResponseItem);
index 9acaa11..d1e8e96 100644 (file)
@@ -22,7 +22,7 @@ package org.onap.policy.aai;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
@@ -207,41 +207,38 @@ public class AaiNqResponseWrapperTest {
 
         // null item
         resp = new AaiNqResponseWrapper();
-        assertNull(resp.getVfModuleItems(true));
+        assertTrue(resp.getVfModuleItems(true).isEmpty());
 
         // missing item
         resp = new AaiNqResponseWrapper();
         resp.setAaiNqResponse(new AaiNqResponse());
-        assertNull(resp.getVfModuleItems(false));
+        assertTrue(resp.getVfModuleItems(false).isEmpty());
 
         // null item list
         resp.setAaiNqResponse(load("AaiNqResponseWrapper-NoItems.json"));
         resp.getAaiNqResponse().getInventoryResponseItems().get(0).getItems().getInventoryResponseItems().get(0)
                         .getItems().setInventoryResponseItems(null);
-        assertNull(resp.getVfModuleItems(false));
+        assertTrue(resp.getVfModuleItems(false).isEmpty());
         
         // no modules
         resp.setAaiNqResponse(load("AaiNqResponseWrapper-NoModules.json"));
-        assertNull(resp.getVfModuleItems(false));
+        assertTrue(resp.getVfModuleItems(false).isEmpty());
         
         // no names
         resp.setAaiNqResponse(load("AaiNqResponseWrapper-NoNames.json"));
         List<AaiNqInventoryResponseItem> lst;
         lst = resp.getVfModuleItems(false);
-        assertNotNull(lst);
         assertEquals(0, lst.size());
 
         // base VF modules
         resp.setAaiNqResponse(load("AaiNqResponseWrapper-Vserver.json"));
         lst = resp.getVfModuleItems(true);
-        assertNotNull(lst);
         assertEquals(1, lst.size());
         assertEquals("Vfmodule_vLBMS-0809-1", lst.get(0).getVfModule().getVfModuleName());
         
         // non base VF modules
         resp.setAaiNqResponse(load("AaiNqResponseWrapper-Vserver.json"));
         lst = resp.getVfModuleItems(false);
-        assertNotNull(lst);
         assertEquals(3, lst.size());
         int index;
         index = 0;
index 9913d39..7e4bda8 100644 (file)
@@ -189,9 +189,7 @@ public class TestVfcManager {
             anyString()))
             .thenThrow(new RuntimeException("OzException"));
 
-        while (managerThread.isAlive()) {
-            Thread.sleep(100);
-        }
+        managerThread.join();
 
         PolicyEngine.manager.getEnvironment().remove("vfc.password");
         PolicyEngine.manager.getEnvironment().remove("vfc.username");
@@ -214,9 +212,7 @@ public class TestVfcManager {
                 eq("Dorothy"), eq("Null"), anyMap(), anyString(), anyString()))
                 .thenReturn(null);
 
-        while (managerThread.isAlive()) {
-            Thread.sleep(100);
-        }
+        managerThread.join();
 
         PolicyEngine.manager.getEnvironment().remove("vfc.password");
         PolicyEngine.manager.getEnvironment().remove("vfc.username");
@@ -239,9 +235,7 @@ public class TestVfcManager {
                 eq("Dorothy"), eq("Error0"), anyMap(), anyString(), anyString()))
                 .thenReturn(httpResponseErr);
 
-        while (managerThread.isAlive()) {
-            Thread.sleep(100);
-        }
+        managerThread.join();
 
         PolicyEngine.manager.getEnvironment().remove("vfc.password");
         PolicyEngine.manager.getEnvironment().remove("vfc.username");
@@ -264,9 +258,7 @@ public class TestVfcManager {
                 eq("Dorothy"), eq("OK"), anyMap(), anyString(), anyString()))
                 .thenReturn(httpResponseBadResponse);
 
-        while (managerThread.isAlive()) {
-            Thread.sleep(100);
-        }
+        managerThread.join();
 
         PolicyEngine.manager.getEnvironment().remove("vfc.password");
         PolicyEngine.manager.getEnvironment().remove("vfc.username");
@@ -292,9 +284,7 @@ public class TestVfcManager {
         when(mockedRestManager.get(endsWith("1234"), eq("Dorothy"), eq("OK"), anyMap()))
             .thenReturn(httpResponseGetOk);
 
-        while (managerThread.isAlive()) {
-            Thread.sleep(100);
-        }
+        managerThread.join();
 
         PolicyEngine.manager.getEnvironment().remove("vfc.password");
         PolicyEngine.manager.getEnvironment().remove("vfc.username");
index f5a4f6e..3dd8347 100644 (file)
@@ -42,6 +42,8 @@ import org.onap.policy.aai.util.Serialization;
 @Path("/aai")
 public class AaiSimulatorJaxRs {
 
+    private static final String VSERVER = "vserver";
+
     /**
      * A&AI get query.
      * 
@@ -72,12 +74,12 @@ public class AaiSimulatorJaxRs {
     public String aaiPostQuery(final String req) throws IOException {
         final AaiNqRequest request = Serialization.gsonPretty.fromJson(req, AaiNqRequest.class);
 
-        if (request.getInstanceFilters().getInstanceFilter().get(0).containsKey("vserver")) {
+        if (request.getInstanceFilters().getInstanceFilter().get(0).containsKey(VSERVER)) {
             final String vserverName =
-                    request.getInstanceFilters().getInstanceFilter().get(0).get("vserver").get("vserver-name");
+                    request.getInstanceFilters().getInstanceFilter().get(0).get(VSERVER).get("vserver-name");
             if ("error".equals(vserverName)) {
                 Map<String,String> params = new TreeMap<>();
-                params.put("type", "vserver");
+                params.put("type", VSERVER);
                 return load("aai/AaiNqResponse-Error.json", params);
             } else {
                 // vll format - new