From d85e766c5538de762820132ac723d928f5a9bf89 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Fri, 21 Sep 2018 09:31:25 -0400 Subject: new sonar issues in drools-applications 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 --- .../actor/so/SOActorServiceProvider.java | 2 +- .../eventmanager/ControlLoopEventManager.java | 23 ++++++++------ .../guard/PolicyGuardXacmlRequestAttributes.java | 36 +++++++++++----------- .../org/onap/policy/aai/AaiNqResponseWrapper.java | 23 +++++--------- .../onap/policy/aai/AaiNqResponseWrapperTest.java | 13 +++----- .../java/org/onap/policy/vfc/TestVfcManager.java | 20 +++--------- .../onap/policy/simulators/AaiSimulatorJaxRs.java | 8 +++-- 7 files changed, 54 insertions(+), 71 deletions(-) (limited to 'controlloop') diff --git a/controlloop/common/actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/SOActorServiceProvider.java b/controlloop/common/actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/SOActorServiceProvider.java index 9904bac37..8775e68a6 100644 --- a/controlloop/common/actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/SOActorServiceProvider.java +++ b/controlloop/common/actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/SOActorServiceProvider.java @@ -393,7 +393,7 @@ public class SOActorServiceProvider implements Actor { */ private AaiNqInventoryResponseItem findVfModule(AaiNqResponseWrapper aaiResponseWrapper, boolean baseFlag) { List lst = aaiResponseWrapper.getVfModuleItems(baseFlag); - return (lst == null || lst.isEmpty() ? null : lst.get(lst.size() - 1)); + return (lst.isEmpty() ? null : lst.get(lst.size() - 1)); } /** diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java index bd1904904..93535efc1 100644 --- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java +++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java @@ -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 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 diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java index 6b17af804..d7e608cb8 100644 --- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java +++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java @@ -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; } diff --git a/controlloop/common/model-impl/aai/src/main/java/org/onap/policy/aai/AaiNqResponseWrapper.java b/controlloop/common/model-impl/aai/src/main/java/org/onap/policy/aai/AaiNqResponseWrapper.java index be84fdfa8..eb4271b5c 100644 --- a/controlloop/common/model-impl/aai/src/main/java/org/onap/policy/aai/AaiNqResponseWrapper.java +++ b/controlloop/common/model-impl/aai/src/main/java/org/onap/policy/aai/AaiNqResponseWrapper.java @@ -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 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 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 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 vfModuleItems = null; + List 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); diff --git a/controlloop/common/model-impl/aai/src/test/java/org/onap/policy/aai/AaiNqResponseWrapperTest.java b/controlloop/common/model-impl/aai/src/test/java/org/onap/policy/aai/AaiNqResponseWrapperTest.java index 9acaa117c..d1e8e964e 100644 --- a/controlloop/common/model-impl/aai/src/test/java/org/onap/policy/aai/AaiNqResponseWrapperTest.java +++ b/controlloop/common/model-impl/aai/src/test/java/org/onap/policy/aai/AaiNqResponseWrapperTest.java @@ -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 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; diff --git a/controlloop/common/model-impl/vfc/src/test/java/org/onap/policy/vfc/TestVfcManager.java b/controlloop/common/model-impl/vfc/src/test/java/org/onap/policy/vfc/TestVfcManager.java index 9913d39b8..7e4bda81d 100644 --- a/controlloop/common/model-impl/vfc/src/test/java/org/onap/policy/vfc/TestVfcManager.java +++ b/controlloop/common/model-impl/vfc/src/test/java/org/onap/policy/vfc/TestVfcManager.java @@ -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"); diff --git a/controlloop/common/simulators/src/main/java/org/onap/policy/simulators/AaiSimulatorJaxRs.java b/controlloop/common/simulators/src/main/java/org/onap/policy/simulators/AaiSimulatorJaxRs.java index f5a4f6e53..3dd8347f2 100644 --- a/controlloop/common/simulators/src/main/java/org/onap/policy/simulators/AaiSimulatorJaxRs.java +++ b/controlloop/common/simulators/src/main/java/org/onap/policy/simulators/AaiSimulatorJaxRs.java @@ -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 params = new TreeMap<>(); - params.put("type", "vserver"); + params.put("type", VSERVER); return load("aai/AaiNqResponse-Error.json", params); } else { // vll format - new -- cgit 1.2.3-korg