From 1d0d9ebabda67d6c770b4854a8154763aa6e75d6 Mon Sep 17 00:00:00 2001 From: Bruno Sakoto Date: Fri, 27 Sep 2019 15:51:11 -0400 Subject: Changes in model to integrate cds actor * Create class for CDS response Issue-ID: POLICY-2088 Change-Id: I813a310f7d5123fac4bb1c3880d108391096250f Signed-off-by: Bruno Sakoto --- .../actor/cds/CdsActorServiceProvider.java | 41 ++++++++++++-------- .../actor/cds/CdsActorServiceProviderTest.java | 18 +++++---- .../main/java/org/onap/policy/cds/CdsResponse.java | 45 ++++++++++++++++++++++ .../policy/cds/properties/CdsServerProperties.java | 2 + 4 files changed, 82 insertions(+), 24 deletions(-) create mode 100644 models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/CdsResponse.java diff --git a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java index 1ad184e49..272b4e1c3 100644 --- a/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java +++ b/models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java @@ -38,6 +38,7 @@ import org.onap.ccsdk.cds.controllerblueprints.common.api.CommonHeader; import org.onap.ccsdk.cds.controllerblueprints.common.api.EventType; import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput; import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceOutput; +import org.onap.policy.cds.CdsResponse; import org.onap.policy.cds.api.CdsProcessorListener; import org.onap.policy.cds.client.CdsProcessorGrpcClient; import org.onap.policy.cds.properties.CdsServerProperties; @@ -171,9 +172,9 @@ public class CdsActorServiceProvider implements Actor { .isNullOrEmpty(cbaActionName); } - class CdsActorServiceManager implements CdsProcessorListener { + public class CdsActorServiceManager implements CdsProcessorListener { - private final AtomicReference cdsResponse = new AtomicReference<>(); + private final AtomicReference cdsStatus = new AtomicReference<>(); /** * {@inheritDoc}. @@ -184,16 +185,16 @@ public class CdsActorServiceProvider implements Actor { EventType eventType = message.getStatus().getEventType(); switch (eventType) { case EVENT_COMPONENT_FAILURE: - cdsResponse.compareAndSet(null, CdsActorConstants.FAILED); + cdsStatus.compareAndSet(null, CdsActorConstants.FAILED); break; case EVENT_COMPONENT_PROCESSING: - cdsResponse.compareAndSet(null, CdsActorConstants.PROCESSING); + cdsStatus.compareAndSet(null, CdsActorConstants.PROCESSING); break; case EVENT_COMPONENT_EXECUTED: - cdsResponse.compareAndSet(null, CdsActorConstants.SUCCESS); + cdsStatus.compareAndSet(null, CdsActorConstants.SUCCESS); break; default: - cdsResponse.compareAndSet(null, CdsActorConstants.FAILED); + cdsStatus.compareAndSet(null, CdsActorConstants.FAILED); break; } } @@ -204,7 +205,7 @@ public class CdsActorServiceProvider implements Actor { @Override public void onError(final Throwable throwable) { Status status = Status.fromThrowable(throwable); - cdsResponse.compareAndSet(null, CdsActorConstants.ERROR); + cdsStatus.compareAndSet(null, CdsActorConstants.ERROR); LOGGER.error("Failed processing blueprint {} {}", status, throwable); } @@ -214,30 +215,36 @@ public class CdsActorServiceProvider implements Actor { * @param cdsClient CDS grpc client object. * @param cdsProps CDS properties. * @param executionServiceInput a valid CDS grpc request object. - * @return Status of the CDS request, null if timeout happens or onError is invoked for any reason. + * @return the cds response. */ - public String sendRequestToCds(CdsProcessorGrpcClient cdsClient, CdsServerProperties cdsProps, - ExecutionServiceInput executionServiceInput) { + public CdsResponse sendRequestToCds(CdsProcessorGrpcClient cdsClient, CdsServerProperties cdsProps, + ExecutionServiceInput executionServiceInput) { try { LOGGER.trace("Start CdsActorServiceProvider.executeCdsBlueprintProcessor {}.", executionServiceInput); // TO-DO: Handle requests asynchronously once the callback support is added to actors. CountDownLatch countDownLatch = cdsClient.sendRequest(executionServiceInput); boolean status = countDownLatch.await(cdsProps.getTimeout(), TimeUnit.SECONDS); if (!status) { - cdsResponse.compareAndSet(null, CdsActorConstants.TIMED_OUT); + cdsStatus.compareAndSet(null, CdsActorConstants.TIMED_OUT); } - LOGGER.info("CDS response {}", getCdsResponse()); + LOGGER.info("CDS status response {}", getCdsStatus()); } catch (InterruptedException ex) { LOGGER.error("Caught exception in executeCdsBlueprintProcessor in CdsActorServiceProvider: ", ex); - cdsResponse.compareAndSet(null, CdsActorConstants.INTERRUPTED); + cdsStatus.compareAndSet(null, CdsActorConstants.INTERRUPTED); Thread.currentThread().interrupt(); } - LOGGER.info("Status of the CDS gRPC request is: {}", getCdsResponse()); - return getCdsResponse(); + LOGGER.info("Status of the CDS gRPC request is: {}", getCdsStatus()); + + CdsResponse response = new CdsResponse(); + response.setRequestId( + executionServiceInput != null && executionServiceInput.getCommonHeader() != null + ? executionServiceInput.getCommonHeader().getRequestId() : null); + response.setStatus(this.getCdsStatus()); + return response; } - String getCdsResponse() { - return cdsResponse.get(); + String getCdsStatus() { + return cdsStatus.get(); } } } diff --git a/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProviderTest.java b/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProviderTest.java index 0152521af..28a1676ed 100644 --- a/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProviderTest.java +++ b/models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProviderTest.java @@ -20,6 +20,7 @@ package org.onap.policy.controlloop.actor.cds; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyLong; @@ -49,6 +50,7 @@ import org.onap.ccsdk.cds.controllerblueprints.common.api.EventType; import org.onap.ccsdk.cds.controllerblueprints.common.api.Status; import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput; import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceOutput; +import org.onap.policy.cds.CdsResponse; import org.onap.policy.cds.client.CdsProcessorGrpcClient; import org.onap.policy.cds.properties.CdsServerProperties; import org.onap.policy.controlloop.ControlLoopOperation; @@ -188,18 +190,20 @@ public class CdsActorServiceProviderTest { when(cdsClient.sendRequest(any(ExecutionServiceInput.class))).thenReturn(countDownLatch); CdsActorServiceProvider.CdsActorServiceManager cdsActorSvcMgr = cdsActor.new CdsActorServiceManager(); - String response = cdsActorSvcMgr + CdsResponse response = cdsActorSvcMgr .sendRequestToCds(cdsClient, cdsProps, ExecutionServiceInput.newBuilder().build()); assertTrue(Thread.interrupted()); - assertEquals(response, CdsActorConstants.INTERRUPTED); + assertNotNull(response); + assertEquals(CdsActorConstants.INTERRUPTED, response.getStatus()); } @Test public void testSendRequestToCdsLatchTimedOut() { CdsActorServiceProvider.CdsActorServiceManager cdsActorSvcMgr = cdsActor.new CdsActorServiceManager(); - String response = cdsActorSvcMgr + CdsResponse response = cdsActorSvcMgr .sendRequestToCds(cdsClient, cdsProps, ExecutionServiceInput.newBuilder().build()); - assertEquals(response, CdsActorConstants.TIMED_OUT); + assertNotNull(response); + assertEquals(CdsActorConstants.TIMED_OUT, response.getStatus()); } @Test @@ -216,21 +220,21 @@ public class CdsActorServiceProviderTest { // #1: Failure test cdsActorSvcMgr.onMessage(message); - assertEquals(cdsActorSvcMgr.getCdsResponse(), CdsActorConstants.FAILED); + assertEquals(CdsActorConstants.FAILED, cdsActorSvcMgr.getCdsStatus()); // #2: Success test cdsActorSvcMgr = sendRequestToCds(); message = ExecutionServiceOutput.newBuilder() .setStatus(Status.newBuilder().setEventType(EventType.EVENT_COMPONENT_EXECUTED).build()).build(); cdsActorSvcMgr.onMessage(message); - assertEquals(cdsActorSvcMgr.getCdsResponse(), CdsActorConstants.SUCCESS); + assertEquals(CdsActorConstants.SUCCESS, cdsActorSvcMgr.getCdsStatus()); // #3: Processing test cdsActorSvcMgr = sendRequestToCds(); message = ExecutionServiceOutput.newBuilder() .setStatus(Status.newBuilder().setEventType(EventType.EVENT_COMPONENT_PROCESSING).build()).build(); cdsActorSvcMgr.onMessage(message); - assertEquals(cdsActorSvcMgr.getCdsResponse(), CdsActorConstants.PROCESSING); + assertEquals(CdsActorConstants.PROCESSING, cdsActorSvcMgr.getCdsStatus()); } private CdsActorServiceManager sendRequestToCds() { diff --git a/models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/CdsResponse.java b/models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/CdsResponse.java new file mode 100644 index 000000000..fca1aa2e9 --- /dev/null +++ b/models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/CdsResponse.java @@ -0,0 +1,45 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Bell Canada. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.cds; + +import java.io.Serializable; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * Class representing a CDS response. + */ +@Getter +@Setter +@ToString +public class CdsResponse implements Serializable { + + private String requestId; + private String status; + + /** + * Default empty constructor. + */ + public CdsResponse() { + super(); + } + +} diff --git a/models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/properties/CdsServerProperties.java b/models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/properties/CdsServerProperties.java index 2e919814b..850531848 100644 --- a/models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/properties/CdsServerProperties.java +++ b/models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/properties/CdsServerProperties.java @@ -42,6 +42,8 @@ public class CdsServerProperties implements ParameterGroup { private static final String SERVER_PROPERTIES_TYPE = "CDS gRPC Server Properties"; // CDS carrier properties + + // Request timeout in seconds @Min(value = 1) private int timeout; -- cgit 1.2.3-korg