diff options
Diffstat (limited to 'models-interactions')
6 files changed, 143 insertions, 42 deletions
diff --git a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/constants/CdsActorConstants.java b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/constants/CdsActorConstants.java index 8f929c83e..0dc5bfb34 100644 --- a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/constants/CdsActorConstants.java +++ b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/constants/CdsActorConstants.java @@ -32,6 +32,7 @@ public class CdsActorConstants { // CDS blueprint archive parameters public static final String KEY_CBA_NAME = "artifact_name"; public static final String KEY_CBA_VERSION = "artifact_version"; + public static final String KEY_POLICY_PAYLOAD_DATA = "data"; public static final String KEY_RESOLUTION_KEY = "resolution-key"; public static final String CDS_REQUEST_SUFFIX = "-request"; public static final String CDS_REQUEST_PROPERTIES_SUFFIX = "-properties"; diff --git a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequest.java b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequest.java index 4193db59f..e362fe874 100644 --- a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequest.java +++ b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequest.java @@ -57,14 +57,26 @@ public class CdsActionRequest implements Serializable { * @throws CoderException if error occurs when serializing to JSON string */ public String generateCdsPayload() throws CoderException { - // 1. Build the innermost object to include AAI properties and policy payload information - Map<String, String> cdsActionPropsMap = new LinkedHashMap<>(); - cdsActionPropsMap.putAll(aaiProperties); - cdsActionPropsMap.putAll(policyPayload); + // 1a. Build the innermost object to include AAI properties + Map<String, Object> cdsActionPropsMap = new LinkedHashMap<>(aaiProperties); if (additionalEventParams != null) { cdsActionPropsMap.putAll(additionalEventParams); } + // 1b. Build the innermost object to include policy payload. + // If the policy payload data is a valid JSON string convert to an object else retain as a string. + if (policyPayload != null && !policyPayload.isEmpty()) { + String payload = policyPayload.get(CdsActorConstants.KEY_POLICY_PAYLOAD_DATA); + try { + Object payloadObj = CODER.decode(payload, Object.class); + cdsActionPropsMap.put(CdsActorConstants.KEY_POLICY_PAYLOAD_DATA, payloadObj); + } catch (CoderException e) { + cdsActionPropsMap.put(CdsActorConstants.KEY_POLICY_PAYLOAD_DATA, payload); + } + } else { + cdsActionPropsMap.put(CdsActorConstants.KEY_POLICY_PAYLOAD_DATA, ""); + } + // 2. Build the enclosing CDS action request properties object to contain (1) and the resolution-key Map<String, Object> cdsActionRequestMap = new LinkedHashMap<>(); cdsActionRequestMap.put(CdsActorConstants.KEY_RESOLUTION_KEY, resolutionKey); diff --git a/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequestTest.java b/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequestTest.java index e34fa33ab..7266d0311 100644 --- a/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequestTest.java +++ b/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/request/CdsActionRequestTest.java @@ -18,10 +18,13 @@ package org.onap.policy.controlloop.actor.cds.request; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import com.google.common.collect.ImmutableMap; +import java.util.HashMap; import java.util.Map; +import org.junit.Before; import org.junit.Test; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants; @@ -29,23 +32,65 @@ import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants; public class CdsActionRequestTest { private static final String TEST_ACTION_NAME = "vfw-modify-config"; + private CdsActionRequest req = new CdsActionRequest(); - @Test - public void testGenerateCdsPayload() throws CoderException { - // Setup the CdsActionRequest object - CdsActionRequest req = new CdsActionRequest(); + /** + * Setup the CdsActionRequest object. + */ + @Before + public void setUp() { req.setActionName(TEST_ACTION_NAME); req.setResolutionKey("1234567890"); - Map<String, String> payloadProps = ImmutableMap.of("data", "{\"active-streams\":\"5\"}"); - req.setPolicyPayload(payloadProps); Map<String, String> aaiParams = ImmutableMap.of("service-instance.service-instance-id", "1234", "generic-vnf.vnf-id", "5678"); req.setAaiProperties(aaiParams); - Map<String, String> eventParams = - ImmutableMap.of("event-param-1", "1234", "event-param-2", "5678"); + Map<String, String> eventParams = ImmutableMap.of("event-param-1", "1234", "event-param-2", "5678"); req.setAdditionalEventParams(eventParams); + } + + @Test + public void testGenerateCdsPayloadWhenPolicyPayloadIsNotValidJsonString() throws CoderException { + String payloadStr = "active-streams=5"; + Map<String, String> payloadProps = ImmutableMap.of(CdsActorConstants.KEY_POLICY_PAYLOAD_DATA, payloadStr); + req.setPolicyPayload(payloadProps); + + // Act + String result = req.generateCdsPayload(); + + // Assert + assertTrue(result.contains(TEST_ACTION_NAME + CdsActorConstants.CDS_REQUEST_PROPERTIES_SUFFIX)); + assertTrue(result.contains(TEST_ACTION_NAME + CdsActorConstants.CDS_REQUEST_SUFFIX)); + assertTrue(result.contains(CdsActorConstants.KEY_RESOLUTION_KEY)); + assertTrue(result.contains("\"" + CdsActorConstants.KEY_POLICY_PAYLOAD_DATA + "\":\"" + payloadStr + "\"")); + } + + @Test + public void testGenerateCdsPayloadWhenPolicyPayloadIsValidJsonString() throws CoderException { + String payloadStr = "{\"active-streams\":\"5\"}"; + Map<String, String> payloadProps = ImmutableMap.of(CdsActorConstants.KEY_POLICY_PAYLOAD_DATA, payloadStr); + req.setPolicyPayload(payloadProps); + + // Act + String result = req.generateCdsPayload(); + + // Assert + assertTrue(result.contains(TEST_ACTION_NAME + CdsActorConstants.CDS_REQUEST_PROPERTIES_SUFFIX)); + assertTrue(result.contains(TEST_ACTION_NAME + CdsActorConstants.CDS_REQUEST_SUFFIX)); + assertTrue(result.contains(CdsActorConstants.KEY_RESOLUTION_KEY)); + assertTrue(result.contains("\"" + CdsActorConstants.KEY_POLICY_PAYLOAD_DATA + "\":" + payloadStr)); + } + + @Test + public void testGenerateCdsPayloadWhenPolicyPayloadIsNull() throws CoderException { + Map<String, String> payloadProps = new HashMap<String, String>() { + private static final long serialVersionUID = 1L; + { + put(CdsActorConstants.KEY_POLICY_PAYLOAD_DATA, null); + } + }; + req.setPolicyPayload(payloadProps); // Act String result = req.generateCdsPayload(); @@ -54,5 +99,6 @@ public class CdsActionRequestTest { assertTrue(result.contains(TEST_ACTION_NAME + CdsActorConstants.CDS_REQUEST_PROPERTIES_SUFFIX)); assertTrue(result.contains(TEST_ACTION_NAME + CdsActorConstants.CDS_REQUEST_SUFFIX)); assertTrue(result.contains(CdsActorConstants.KEY_RESOLUTION_KEY)); + assertFalse(result.contains(CdsActorConstants.KEY_POLICY_PAYLOAD_DATA)); } } diff --git a/models-interactions/model-impl/aai/src/main/java/org/onap/policy/aai/AaiManager.java b/models-interactions/model-impl/aai/src/main/java/org/onap/policy/aai/AaiManager.java index 5b484243a..923b8d329 100644 --- a/models-interactions/model-impl/aai/src/main/java/org/onap/policy/aai/AaiManager.java +++ b/models-interactions/model-impl/aai/src/main/java/org/onap/policy/aai/AaiManager.java @@ -22,7 +22,6 @@ package org.onap.policy.aai; -import com.google.gson.JsonSyntaxException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -30,9 +29,9 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; + import org.json.JSONArray; import org.json.JSONObject; -import org.onap.policy.aai.util.Serialization; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; import org.onap.policy.common.endpoints.utils.NetLoggerUtil; import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType; @@ -55,14 +54,13 @@ public final class AaiManager { private static final StandardCoder CODER = new StandardCoder(); - /** The rest manager. */ // The REST manager used for processing REST calls for this AAI manager private final RestManager restManager; /** custom query and other AAI resource URLs. */ private static final String CQ_URL = "/aai/v16/query?format=resource"; - private static final String TENANT_URL = - "/aai/v16/search/nodes-query?search-node-type=vserver&filter=vserver-name:EQUALS:"; + private static final String TENANT_URL = "/aai/v16/search/nodes-query?" + + "search-node-type=vserver&filter=vserver-name:EQUALS:"; private static final String PREFIX = "/aai/v16"; private static final String PNF_URL = PREFIX + "/network/pnfs/pnf/"; private static final String AAI_DEPTH_SUFFIX = "?depth=0"; @@ -116,7 +114,7 @@ public final class AaiManager { * @return String */ private String getCustomQueryRequestPayload(String url, String username, String password, UUID requestId, - String vserver) { + String vserver) { String urlGet = url + TENANT_URL; @@ -135,7 +133,7 @@ public final class AaiManager { * @return AaiCqResponse response from Aai for custom query */ public AaiCqResponse getCustomQueryResponse(String url, String username, String password, UUID requestId, - String vserver) { + String vserver) { final Map<String, String> headers = createHeaders(requestId); @@ -145,24 +143,27 @@ public final class AaiManager { url = url + CQ_URL; - Pair<Integer, String> httpDetails = - this.restManager.put(url, username, password, headers, APPLICATION_JSON, requestJson); + Pair<Integer, String> httpDetails = this.restManager.put(url, username, password, headers, APPLICATION_JSON, + requestJson); logger.debug("RestManager.put after"); if (httpDetails == null) { - logger.info("AAI POST Null Response to {}", url); + NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, url, "AAI POST Null Response"); + logger.debug("AAI POST Null Response to {}", url); return null; } int httpResponseCode = httpDetails.first; - logger.info(url); - logger.info("{}", httpResponseCode); - logger.info(httpDetails.second); + NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, url, "Response code: " + httpResponseCode); + NetLoggerUtil.getNetworkLogger().debug(httpDetails.second); + + logger.debug(url); + logger.debug("{}", httpResponseCode); + logger.debug(httpDetails.second); if (httpDetails.second != null) { - String resp = httpDetails.second; - return new AaiCqResponse(resp); + return new AaiCqResponse(httpDetails.second); } return null; } @@ -178,7 +179,7 @@ public final class AaiManager { * @return String returns the string from the get query */ private String getStringQuery(final String url, final String username, final String password, final UUID requestId, - final String key) { + final String key) { Map<String, String> headers = createHeaders(requestId); @@ -190,21 +191,22 @@ public final class AaiManager { NetLoggerUtil.getNetworkLogger().info("[OUT|{}|{}|]", CommInfrastructure.REST, urlGet); Pair<Integer, String> httpDetailsGet = restManager.get(urlGet, username, password, headers); if (httpDetailsGet == null) { - logger.info("AAI GET Null Response to {}", urlGet); + NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, url, "AAI POST Null Response"); + logger.debug("AAI GET Null Response to {}", urlGet); return null; } int httpResponseCode = httpDetailsGet.first; - logger.info(urlGet); - logger.info("{}", httpResponseCode); - logger.info(httpDetailsGet.second); + NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, url, "Response code: " + httpResponseCode); + NetLoggerUtil.getNetworkLogger().debug(httpDetailsGet.second); - if (httpResponseCode == 200) { - String responseGet = httpDetailsGet.second; - if (responseGet != null) { - return responseGet; - } + logger.debug(urlGet); + logger.debug("{}", httpResponseCode); + logger.debug(httpDetailsGet.second); + + if (httpResponseCode == 200 && httpDetailsGet.second != null) { + return httpDetailsGet.second; } try { Thread.sleep(1000); @@ -217,7 +219,6 @@ public final class AaiManager { return null; } - /** * Create the headers for the HTTP request. * @@ -259,12 +260,13 @@ public final class AaiManager { return null; } try { + @SuppressWarnings("unchecked") Map<String, String> pnfParams = CODER.decode(responseGet, HashMap.class); // Map to AAI node.attribute notation return pnfParams.entrySet().stream() - .collect(Collectors.toMap(e -> "pnf." + e.getKey(), Map.Entry::getValue)); + .collect(Collectors.toMap(e -> "pnf." + e.getKey(), Map.Entry::getValue)); } catch (CoderException e) { - logger.error("Failed to fetch PNF from AAI"); + logger.error("Failed to fetch PNF from AAI", e); return null; } } diff --git a/models-interactions/model-impl/aai/src/test/resources/logback-test.xml b/models-interactions/model-impl/aai/src/test/resources/logback-test.xml new file mode 100644 index 000000000..b5a897433 --- /dev/null +++ b/models-interactions/model-impl/aai/src/test/resources/logback-test.xml @@ -0,0 +1,42 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2019 Nordix Foundation. + ================================================================================ + 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. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> + +<configuration scan="true" scanPeriod="30 seconds" debug="false"> + + <contextName>ModelImplAai</contextName> + <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" /> + <property name="LOG_DIR" value="${java.io.tmpdir}/pf_logging/" /> + + <!-- USE FOR STD OUT ONLY --> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern> + </encoder> + </appender> + + <root level="info"> + <appender-ref ref="STDOUT" /> + </root> + + <logger name="org.onap.policy.aai" level="debug" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + +</configuration> diff --git a/models-interactions/model-impl/cds/pom.xml b/models-interactions/model-impl/cds/pom.xml index 1dd691aca..8183cc7e4 100644 --- a/models-interactions/model-impl/cds/pom.xml +++ b/models-interactions/model-impl/cds/pom.xml @@ -35,7 +35,6 @@ <grpc.version>1.17.1</grpc.version> <protobuf.version>3.6.1</protobuf.version> <grpc.netty.version>4.1.39.Final</grpc.netty.version> - <ccsdk.version>0.4.4</ccsdk.version> </properties> <dependencies> @@ -43,7 +42,6 @@ <dependency> <groupId>org.onap.ccsdk.cds.components</groupId> <artifactId>proto-definition</artifactId> - <version>${ccsdk.version}</version> </dependency> <!-- protobuf dependencies --> |