summaryrefslogtreecommitdiffstats
path: root/models-interactions/model-actors/actor.vfc
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2020-08-04 16:27:18 -0400
committerJim Hahn <jrh3@att.com>2020-08-06 19:19:46 -0400
commitdeed677c3dc8751209d50e7d35132c929fe6800d (patch)
tree01f3149d4a03206e134d889d50834ae8d141a0ce /models-interactions/model-actors/actor.vfc
parent364ef26929f06637bca03dd7bfb5e8ac69b611f8 (diff)
Modify Actors to use properties when provided
Modified the Actors to use properties when the application provides them instead of going to the event context for the data. This sometimes entailed moving code out of the Operation subclass constructor that used or validated the context data. Combined some property names and renamed others. Changed VF Count from AtomicInteger to Integer. Issue-ID: POLICY-2746 Change-Id: Ib8730538309bb77d2f4f6161e9a20a49362d8972 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'models-interactions/model-actors/actor.vfc')
-rw-r--r--models-interactions/model-actors/actor.vfc/src/main/java/org/onap/policy/controlloop/actor/vfc/VfcOperation.java38
-rw-r--r--models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/RestartTest.java41
-rw-r--r--models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/VfcOperationTest.java34
3 files changed, 99 insertions, 14 deletions
diff --git a/models-interactions/model-actors/actor.vfc/src/main/java/org/onap/policy/controlloop/actor/vfc/VfcOperation.java b/models-interactions/model-actors/actor.vfc/src/main/java/org/onap/policy/controlloop/actor/vfc/VfcOperation.java
index 8bd4630d6..bb23fdcc5 100644
--- a/models-interactions/model-actors/actor.vfc/src/main/java/org/onap/policy/controlloop/actor/vfc/VfcOperation.java
+++ b/models-interactions/model-actors/actor.vfc/src/main/java/org/onap/policy/controlloop/actor/vfc/VfcOperation.java
@@ -26,7 +26,6 @@ import javax.ws.rs.core.Response;
import org.apache.commons.lang3.StringUtils;
import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
import org.onap.policy.controlloop.actorserviceprovider.impl.HttpOperation;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
@@ -48,7 +47,7 @@ public abstract class VfcOperation extends HttpOperation<VfcResponse> {
// @formatter:off
private static final List<String> PROPERTY_NAMES = List.of(
- OperationProperties.ENRICHMENT_SERVICE_INSTANCE_ID,
+ OperationProperties.ENRICHMENT_SERVICE_ID,
OperationProperties.ENRICHMENT_VSERVER_ID,
OperationProperties.ENRICHMENT_VSERVER_NAME,
OperationProperties.ENRICHMENT_GENERIC_VNF_ID);
@@ -133,7 +132,7 @@ public abstract class VfcOperation extends HttpOperation<VfcResponse> {
*/
protected String getRequestState(VfcResponse response) {
if (response == null || response.getResponseDescriptor() == null
- || StringUtils.isBlank(response.getResponseDescriptor().getStatus())) {
+ || StringUtils.isBlank(response.getResponseDescriptor().getStatus())) {
return null;
}
return response.getResponseDescriptor().getStatus();
@@ -153,7 +152,7 @@ public abstract class VfcOperation extends HttpOperation<VfcResponse> {
*/
@Override
public OperationOutcome setOutcome(OperationOutcome outcome, PolicyResult result, Response rawResponse,
- VfcResponse response) {
+ VfcResponse response) {
// set default result and message
setOutcome(outcome, result);
@@ -171,14 +170,16 @@ public abstract class VfcOperation extends HttpOperation<VfcResponse> {
* @return request
*/
protected VfcRequest constructVfcRequest() {
- ControlLoopEventContext context = params.getContext();
- String serviceInstance = context.getEnrichment().get("service-instance.service-instance-id");
- String vmId = context.getEnrichment().get("vserver.vserver-id");
- String vmName = context.getEnrichment().get("vserver.vserver-name");
+ final String serviceInstance = getOptProperty(OperationProperties.ENRICHMENT_SERVICE_ID,
+ "service-instance.service-instance-id");
+ final String vmId = getOptProperty(OperationProperties.ENRICHMENT_VSERVER_ID, "vserver.vserver-id");
+ final String vmName = getOptProperty(OperationProperties.ENRICHMENT_VSERVER_NAME, "vserver.vserver-name");
+ final String vnfId = getOptProperty(OperationProperties.ENRICHMENT_GENERIC_VNF_ID, GENERIC_VNF_ID);
if (StringUtils.isBlank(serviceInstance) || StringUtils.isBlank(vmId) || StringUtils.isBlank(vmName)) {
+ // original code did not check the VNF id, so we won't check it either
throw new IllegalArgumentException(
- "Cannot extract enrichment data for service instance, server id, or server name.");
+ "Cannot extract enrichment data for service instance, server id, or server name.");
}
VfcHealActionVmInfo vmActionInfo = new VfcHealActionVmInfo();
@@ -190,7 +191,7 @@ public abstract class VfcOperation extends HttpOperation<VfcResponse> {
additionalParams.setActionInfo(vmActionInfo);
VfcHealRequest healRequest = new VfcHealRequest();
- healRequest.setVnfInstanceId(params.getContext().getEnrichment().get(GENERIC_VNF_ID));
+ healRequest.setVnfInstanceId(vnfId);
healRequest.setCause(getName());
healRequest.setAdditionalParams(additionalParams);
@@ -201,4 +202,21 @@ public abstract class VfcOperation extends HttpOperation<VfcResponse> {
return request;
}
+
+ /**
+ * Gets an optional property, first checking the properties, then checking the
+ * enrichment data.
+ *
+ * @param propName property name
+ * @param enrichmentName property name within the enrichment data
+ * @return the property's value, or {@code null} if it is not found
+ */
+ protected String getOptProperty(String propName, String enrichmentName) {
+ if (containsProperty(propName)) {
+ // return the value, even if it's null
+ return getProperty(propName);
+ }
+
+ return params.getContext().getEnrichment().get(enrichmentName);
+ }
}
diff --git a/models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/RestartTest.java b/models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/RestartTest.java
index 46666456a..068ffdaab 100644
--- a/models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/RestartTest.java
+++ b/models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/RestartTest.java
@@ -32,6 +32,7 @@ import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.onap.policy.aai.AaiCqResponse;
import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
@@ -42,8 +43,14 @@ import org.onap.policy.vfc.VfcRequest;
import org.onap.policy.vfc.VfcResponse;
public class RestartTest extends BasicVfcOperation {
+ private static final String TEST_SERVICE_INSTANCE_ID = "test-service-instance-id";
+ private static final String TEST_VSERVER_ID = "test-vserver-id";
+ private static final String TEST_VSERVER_NAME = "test-vserver-name";
+ private static final String TEST_GENERIC_VNF_ID = "test-generic-vnf-id";
+
private Restart restartOper;
+
@BeforeClass
public static void setUpBeforeClass() throws Exception {
initBeforeClass();
@@ -60,9 +67,9 @@ public class RestartTest extends BasicVfcOperation {
@Before
public void setup() throws Exception {
super.setUp();
- params.getContext().getEnrichment().put("service-instance.service-instance-id", "test-service-instance-id");
- params.getContext().getEnrichment().put("vserver.vserver-id", "test-vserver-id");
- params.getContext().getEnrichment().put("vserver.vserver-name", "test-vserver-name");
+ params.getContext().getEnrichment().put("service-instance.service-instance-id", TEST_SERVICE_INSTANCE_ID);
+ params.getContext().getEnrichment().put("vserver.vserver-id", TEST_VSERVER_ID);
+ params.getContext().getEnrichment().put("vserver.vserver-name", TEST_VSERVER_NAME);
restartOper = new Restart(params, config);
}
@@ -84,6 +91,32 @@ public class RestartTest extends BasicVfcOperation {
assertTrue(outcome.getResponse() instanceof VfcResponse);
}
+ /**
+ * Tests "success" case with simulator, using properties instead of custom query data.
+ */
+ @Test
+ public void testSuccessViaProperties() throws Exception {
+ HttpPollingParams opParams = HttpPollingParams.builder().clientName(MY_CLIENT).path("ns").pollPath("jobs")
+ .maxPolls(1).build();
+ config = new HttpPollingConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
+
+ params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).preprocessed(true).build();
+ params.getContext().removeProperty(AaiCqResponse.CONTEXT_KEY);
+
+ restartOper = new Restart(params, config);
+
+ // set the properties
+ restartOper.setProperty(OperationProperties.ENRICHMENT_SERVICE_ID, TEST_SERVICE_INSTANCE_ID);
+ restartOper.setProperty(OperationProperties.ENRICHMENT_VSERVER_ID, TEST_VSERVER_ID);
+ restartOper.setProperty(OperationProperties.ENRICHMENT_VSERVER_NAME, TEST_VSERVER_NAME);
+ restartOper.setProperty(OperationProperties.ENRICHMENT_GENERIC_VNF_ID, TEST_GENERIC_VNF_ID);
+
+ // run the operation
+ outcome = restartOper.start().get();
+ assertEquals(PolicyResult.SUCCESS, outcome.getResult());
+ assertTrue(outcome.getResponse() instanceof VfcResponse);
+ }
+
@Test
public void testConstructor() {
CompletableFuture<OperationOutcome> futureRes = restartOper.startOperationAsync(1, outcome);
@@ -96,7 +129,7 @@ public class RestartTest extends BasicVfcOperation {
// @formatter:off
assertThat(restartOper.getPropertyNames()).isEqualTo(
List.of(
- OperationProperties.ENRICHMENT_SERVICE_INSTANCE_ID,
+ OperationProperties.ENRICHMENT_SERVICE_ID,
OperationProperties.ENRICHMENT_VSERVER_ID,
OperationProperties.ENRICHMENT_VSERVER_NAME,
OperationProperties.ENRICHMENT_GENERIC_VNF_ID));
diff --git a/models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/VfcOperationTest.java b/models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/VfcOperationTest.java
index 425ff91b1..6f8956f6f 100644
--- a/models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/VfcOperationTest.java
+++ b/models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/VfcOperationTest.java
@@ -26,9 +26,11 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
+import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
import org.onap.policy.vfc.VfcResponse;
import org.onap.policy.vfc.VfcResponseDescriptor;
@@ -87,4 +89,36 @@ public class VfcOperationTest extends BasicVfcOperation {
assertTrue(oper.isSuccess(rawResponse, response));
}
+ @Test
+ public void testGetOptProperty() {
+ // in neither property nor enrichment
+ assertNull(oper.getOptProperty("propA", "propA2"));
+
+ // both - should choose the property
+ remakeOper(Map.of("propB2", "valueB2"));
+ oper.setProperty("propB", "valueB");
+ assertEquals("valueB", oper.getOptProperty("propB", "propB2"));
+
+ // both - should choose the property, even if it's null
+ remakeOper(Map.of("propC2", "valueC2"));
+ oper.setProperty("propC", null);
+ assertNull(oper.getOptProperty("propC", "propC2"));
+
+ // only in enrichment data
+ remakeOper(Map.of("propD2", "valueD2"));
+ assertEquals("valueD2", oper.getOptProperty("propD", "propD2"));
+ }
+
+ /**
+ * Remakes the operation, with the specified A&AI enrichment data.
+ *
+ * @param aai A&AI enrichment data
+ */
+ private void remakeOper(Map<String, String> aai) {
+ event.setAai(aai);
+ context = new ControlLoopEventContext(event);
+ params = params.toBuilder().context(context).build();
+
+ oper = new VfcOperation(params, config) {};
+ }
}