Merge "Add log message when kserve setup is unavailable and improve coverage"
diff --git a/participant/participant-impl/participant-impl-kserve/src/main/java/org/onap/policy/clamp/acm/participant/kserve/handler/AutomationCompositionElementHandler.java b/participant/participant-impl/participant-impl-kserve/src/main/java/org/onap/policy/clamp/acm/participant/kserve/handler/AutomationCompositionElementHandler.java
index 07fbce8..a6e1c9c 100755
--- a/participant/participant-impl/participant-impl-kserve/src/main/java/org/onap/policy/clamp/acm/participant/kserve/handler/AutomationCompositionElementHandler.java
+++ b/participant/participant-impl/participant-impl-kserve/src/main/java/org/onap/policy/clamp/acm/participant/kserve/handler/AutomationCompositionElementHandler.java
@@ -32,6 +32,7 @@
 import java.util.concurrent.Future;
 import javax.validation.Validation;
 import javax.validation.ValidationException;
+import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
@@ -72,8 +73,8 @@
 
     private final KserveClient kserveClient;
 
-    @Getter
-    private static final Map<UUID, ConfigurationEntity> configRequestMap = new HashMap<>();
+    @Getter(AccessLevel.PACKAGE)
+    private final Map<UUID, ConfigurationEntity> configRequestMap = new HashMap<>();
 
 
     private static class ThreadConfig {
diff --git a/participant/participant-impl/participant-impl-kserve/src/main/java/org/onap/policy/clamp/acm/participant/kserve/k8s/InferenceServiceValidator.java b/participant/participant-impl/participant-impl-kserve/src/main/java/org/onap/policy/clamp/acm/participant/kserve/k8s/InferenceServiceValidator.java
index 5cffa48..bbf00b4 100755
--- a/participant/participant-impl/participant-impl-kserve/src/main/java/org/onap/policy/clamp/acm/participant/kserve/k8s/InferenceServiceValidator.java
+++ b/participant/participant-impl/participant-impl-kserve/src/main/java/org/onap/policy/clamp/acm/participant/kserve/k8s/InferenceServiceValidator.java
@@ -81,11 +81,12 @@
     private void verifyInferenceServiceStatus()
             throws KserveException, IOException, InterruptedException, ApiException {
         var isVerified = false;
+        String isvcStatus = null;
         long endTime = System.currentTimeMillis() + (timeout * 1000L);
 
         while (!isVerified && System.currentTimeMillis() < endTime) {
-            var output = kserveClient.getInferenceServiceStatus(namespace, inferenceServiceName);
-            isVerified = output.equalsIgnoreCase(Boolean.TRUE.toString());
+            isvcStatus = kserveClient.getInferenceServiceStatus(namespace, inferenceServiceName);
+            isVerified = isvcStatus.equalsIgnoreCase(Boolean.TRUE.toString());
             if (!isVerified) {
                 logger.info("Waiting for the inference service {} to be active ", inferenceServiceName);
                 // Recheck status of pods in specific intervals.
@@ -95,7 +96,11 @@
             }
         }
         if (!isVerified) {
-            throw new KserveException("Time out Exception verifying the status of the inference service");
+            if (isvcStatus != null && isvcStatus.isEmpty()) {
+                throw new KserveException("Kserve setup is unavailable for inference service to be deployed");
+            } else {
+                throw new KserveException("Time out Exception verifying the status of the inference service");
+            }
         }
     }
 }
diff --git a/participant/participant-impl/participant-impl-kserve/src/test/java/org/onap/policy/clamp/acm/participant/kserve/handler/AcElementHandlerTest.java b/participant/participant-impl/participant-impl-kserve/src/test/java/org/onap/policy/clamp/acm/participant/kserve/handler/AcElementHandlerTest.java
index d8a896e..63ad3ef 100755
--- a/participant/participant-impl/participant-impl-kserve/src/test/java/org/onap/policy/clamp/acm/participant/kserve/handler/AcElementHandlerTest.java
+++ b/participant/participant-impl/participant-impl-kserve/src/test/java/org/onap/policy/clamp/acm/participant/kserve/handler/AcElementHandlerTest.java
@@ -20,14 +20,18 @@
 
 package org.onap.policy.clamp.acm.participant.kserve.handler;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 
 import io.kubernetes.client.openapi.ApiException;
 import java.io.IOException;
+import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
@@ -77,7 +81,7 @@
     }
 
     @BeforeEach
-    void startMocks() throws KserveException, ExecutionException, InterruptedException, IOException, ApiException {
+    void startMocks() throws ExecutionException, InterruptedException, IOException, ApiException {
         doReturn(true).when(kserveClient).deployInferenceService(any(), any());
         doReturn(true).when(automationCompositionElementHandler)
                 .checkInferenceServiceStatus(any(), any(), anyInt(), anyInt());
@@ -100,13 +104,26 @@
     }
 
     @Test
-    void test_AutomationCompositionElementUpdate() {
+    void test_AutomationCompositionElementUpdate() throws IOException, ApiException {
         var element = commonTestData.getAutomationCompositionElement();
 
         var nodeTemplatesMap = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
         assertDoesNotThrow(
                 () -> automationCompositionElementHandler.deploy(commonTestData.getAutomationCompositionId(), element,
                         nodeTemplatesMap.get(KSERVE_AUTOMATION_COMPOSITION_ELEMENT).getProperties()));
+        assertThat(automationCompositionElementHandler.getConfigRequestMap()).hasSize(1)
+                .containsKey(element.getId());
+
+        doThrow(new ApiException("Error installing the inference service")).when(kserveClient)
+                .deployInferenceService(any(), any());
+
+        var elementId2 = UUID.randomUUID();
+        element.setId(elementId2);
+        assertThrows(KserveException.class,
+                () -> automationCompositionElementHandler.deploy(commonTestData.getAutomationCompositionId(), element,
+                        nodeTemplatesMap.get(KSERVE_AUTOMATION_COMPOSITION_ELEMENT).getProperties()));
+
+        assertThat(automationCompositionElementHandler.getConfigRequestMap().containsKey(elementId2)).isFalse();
     }
 
     @Test
diff --git a/participant/participant-impl/participant-impl-kserve/src/test/java/org/onap/policy/clamp/acm/participant/kserve/k8s/InferenceServiceValidatorTest.java b/participant/participant-impl/participant-impl-kserve/src/test/java/org/onap/policy/clamp/acm/participant/kserve/k8s/InferenceServiceValidatorTest.java
index 3ef89a7..6f1b8c4 100755
--- a/participant/participant-impl/participant-impl-kserve/src/test/java/org/onap/policy/clamp/acm/participant/kserve/k8s/InferenceServiceValidatorTest.java
+++ b/participant/participant-impl/participant-impl-kserve/src/test/java/org/onap/policy/clamp/acm/participant/kserve/k8s/InferenceServiceValidatorTest.java
@@ -62,7 +62,7 @@
                 new InferenceServiceValidator("", namespace, TIMEOUT, STATUS_CHECK_INTERVAL,
                         kserveClient);
         assertThatThrownBy(inferenceServiceValidator::run).isInstanceOf(KserveException.class)
-                .hasMessage("Error verifying the status of the inference service. Exiting");
+                .cause().hasMessage("Kserve setup is unavailable for inference service to be deployed");
     }
 
     @Test