Changes in model to integrate cds actor 56/96356/8
authorBruno Sakoto <bruno.sakoto@bell.ca>
Fri, 27 Sep 2019 19:51:11 +0000 (15:51 -0400)
committerBruno Sakoto <bruno.sakoto@bell.ca>
Mon, 7 Oct 2019 12:23:13 +0000 (08:23 -0400)
* Create class for CDS response

Issue-ID: POLICY-2088
Change-Id: I813a310f7d5123fac4bb1c3880d108391096250f
Signed-off-by: Bruno Sakoto <bruno.sakoto@bell.ca>
models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProvider.java
models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/CdsActorServiceProviderTest.java
models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/CdsResponse.java [new file with mode: 0644]
models-interactions/model-impl/cds/src/main/java/org/onap/policy/cds/properties/CdsServerProperties.java

index 1ad184e..272b4e1 100644 (file)
@@ -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<String> cdsResponse = new AtomicReference<>();
+        private final AtomicReference<String> 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();
         }
     }
 }
index 0152521..28a1676 100644 (file)
@@ -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 (file)
index 0000000..fca1aa2
--- /dev/null
@@ -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();
+    }
+
+}
index 2e91981..8505318 100644 (file)
@@ -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;