diff options
Diffstat (limited to 'models-interactions/model-actors/actor.vfc')
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) {}; + } } |