Refactor register deregister a Participant and Supervise Participants 68/132868/2
authorFrancescoFioraEst <francesco.fiora@est.tech>
Wed, 4 Jan 2023 17:04:37 +0000 (17:04 +0000)
committerFrancescoFioraEst <francesco.fiora@est.tech>
Fri, 6 Jan 2023 08:52:36 +0000 (08:52 +0000)
Refactor register deregister a Participant and Supervise
Participants using ON_LINE/OFF_LINE as Participant Status.

Issue-ID: POLICY-4497
Change-Id: If9c5b92131c99132c18340e56334fb9453745526
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
24 files changed:
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantHealthStatus.java [deleted file]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantState.java
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatus.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProvider.java
models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatusTest.java
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProviderTest.java
models/src/test/resources/providers/TestAcElementStatistics.json [deleted file]
models/src/test/resources/providers/TestParticipant.json
models/src/test/resources/providers/TestParticipantStatistics.json [deleted file]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandler.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java [new file with mode: 0644]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantDeregisterListener.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantRegisterListener.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantStatusListener.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandlerTest.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandlerTest.java [new file with mode: 0644]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScannerTest.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/comm/SupervisionMessagesTest.java

index 1a8fbc4..6a523fa 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -39,10 +39,7 @@ public class Participant extends ToscaEntity implements Comparable<Participant>
     private ToscaConceptIdentifier definition = new ToscaConceptIdentifier(PfConceptKey.getNullKey());
 
     @NonNull
-    private ParticipantState participantState = ParticipantState.UNKNOWN;
-
-    @NonNull
-    private ParticipantHealthStatus healthStatus = ParticipantHealthStatus.UNKNOWN;
+    private ParticipantState participantState = ParticipantState.ON_LINE;
 
     @NonNull
     private ToscaConceptIdentifier participantType = new ToscaConceptIdentifier();
@@ -71,7 +68,6 @@ public class Participant extends ToscaEntity implements Comparable<Participant>
         super(otherParticipant);
         this.definition = new ToscaConceptIdentifier(otherParticipant.definition);
         this.participantState = otherParticipant.participantState;
-        this.healthStatus = otherParticipant.healthStatus;
         this.participantType = otherParticipant.participantType;
     }
 }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantHealthStatus.java b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantHealthStatus.java
deleted file mode 100644 (file)
index f8cc0a8..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.models.acm.concepts;
-
-/**
- * Class to hold the possible values for health status of Participant.
- */
-public enum ParticipantHealthStatus {
-
-    /**
-     * Participant is healthy and working fine.
-     */
-    HEALTHY,
-
-    /**
-     * Participant is not healthy.
-     */
-    NOT_HEALTHY,
-
-    /**
-     * Participant is currently under test state and performing tests.
-     */
-    TEST_IN_PROGRESS,
-
-    /**
-     * The health status of the Participant is unknown.
-     */
-    UNKNOWN,
-
-    /**
-     * The health status of the Participant is off line.
-     */
-    OFF_LINE
-}
index 4ab42c6..30dc69a 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,36 +25,12 @@ package org.onap.policy.clamp.models.acm.concepts;
  */
 public enum ParticipantState {
     /**
-     * Participant state is unknown.
+     * Participant state is online.
      */
-    UNKNOWN,
+    ON_LINE,
 
     /**
-     * Participant is passive, automation composition element execution is always rejected.
+     * Participant is offline, automation composition element execution is always rejected.
      */
-    PASSIVE,
-
-    /**
-     * Automation composition element execution execution proceeds, but changes to domain state or context are not
-     * carried out. The participant returns an indication that it is running in SAFE mode together with the action it
-     * would have performed if it was operating in ACTIVE mode.
-     */
-    SAFE,
-
-    /**
-     * Automation composition element execution execution proceeds and changes to domain and state are carried out in a
-     * test environment. The participant returns an indication that it is running in TEST mode together with the action
-     * it has performed on the test environment.
-     */
-    TEST,
-
-    /**
-     * Automation composition element execution is executed in the live environment by the participant.
-     */
-    ACTIVE,
-
-    /**
-     * Automation composition element execution has been terminated.
-     */
-    TERMINATED
+    OFF_LINE
 }
index 1d57c24..31a42c5 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,7 +27,6 @@ import lombok.Setter;
 import lombok.ToString;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.models.base.PfUtils;
 
@@ -41,7 +40,6 @@ public class ParticipantStatus extends ParticipantMessage {
 
     // State and health status of the participant
     private ParticipantState state;
-    private ParticipantHealthStatus healthStatus;
 
     // A list of ParticipantDefinition updates, returned in response to ParticipantStatusReq only
     private List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>();
@@ -66,7 +64,6 @@ public class ParticipantStatus extends ParticipantMessage {
         super(source);
 
         this.state = source.state;
-        this.healthStatus = source.healthStatus;
         this.participantDefinitionUpdates =
             PfUtils.mapList(source.participantDefinitionUpdates, ParticipantDefinition::new);
         this.automationCompositionInfoList =
index 143499c..aec2d32 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -34,7 +34,6 @@ import lombok.EqualsAndHashCode;
 import lombok.NonNull;
 import org.apache.commons.lang3.ObjectUtils;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.common.parameters.annotations.NotNull;
 import org.onap.policy.models.base.PfAuthorative;
@@ -79,10 +78,6 @@ public class JpaParticipant extends PfConcept implements PfAuthorative<Participa
     @NotNull
     private ParticipantState participantState;
 
-    @Column
-    @NotNull
-    private ParticipantHealthStatus healthStatus;
-
     @Column
     private String description;
 
@@ -99,7 +94,7 @@ public class JpaParticipant extends PfConcept implements PfAuthorative<Participa
      * @param key the key
      */
     public JpaParticipant(@NonNull final PfConceptKey key) {
-        this(key, new PfConceptKey(), ParticipantState.PASSIVE, ParticipantHealthStatus.UNKNOWN);
+        this(key, new PfConceptKey(), ParticipantState.ON_LINE);
     }
 
     /**
@@ -108,14 +103,12 @@ public class JpaParticipant extends PfConcept implements PfAuthorative<Participa
      * @param key the key
      * @param definition the TOSCA definition of the participant
      * @param participantState the state of the participant
-     * @param healthStatus the health state of the participant
      */
     public JpaParticipant(@NonNull final PfConceptKey key, @NonNull final PfConceptKey definition,
-            @NonNull final ParticipantState participantState, @NonNull ParticipantHealthStatus healthStatus) {
+            @NonNull final ParticipantState participantState) {
         this.key = key;
         this.definition = definition;
         this.participantState = participantState;
-        this.healthStatus = healthStatus;
     }
 
     /**
@@ -128,7 +121,6 @@ public class JpaParticipant extends PfConcept implements PfAuthorative<Participa
         this.key = new PfConceptKey(copyConcept.key);
         this.definition = new PfConceptKey(copyConcept.definition);
         this.participantState = copyConcept.participantState;
-        this.healthStatus = copyConcept.healthStatus;
         this.description = copyConcept.description;
         this.participantType = copyConcept.participantType;
     }
@@ -150,7 +142,6 @@ public class JpaParticipant extends PfConcept implements PfAuthorative<Participa
         participant.setVersion(key.getVersion());
         participant.setDefinition(new ToscaConceptIdentifier(definition));
         participant.setParticipantState(participantState);
-        participant.setHealthStatus(healthStatus);
         participant.setDescription(description);
         participant.setParticipantType(new ToscaConceptIdentifier(participantType));
 
@@ -165,7 +156,6 @@ public class JpaParticipant extends PfConcept implements PfAuthorative<Participa
 
         this.definition = participant.getDefinition().asConceptKey();
         this.setParticipantState(participant.getParticipantState());
-        this.setHealthStatus(participant.getHealthStatus());
         this.setDescription(participant.getDescription());
         this.participantType = participant.getParticipantType().asConceptKey();
     }
@@ -216,11 +206,6 @@ public class JpaParticipant extends PfConcept implements PfAuthorative<Participa
             return result;
         }
 
-        result = ObjectUtils.compare(healthStatus, other.healthStatus);
-        if (result != 0) {
-            return result;
-        }
-
         result = ObjectUtils.compare(participantType, other.participantType);
         if (result != 0) {
             return result;
index 6e3b56d..3f7e297 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,15 +23,13 @@ package org.onap.policy.clamp.models.acm.persistence.provider;
 import java.util.List;
 import java.util.Optional;
 import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipant;
 import org.onap.policy.clamp.models.acm.persistence.repository.ParticipantRepository;
-import org.onap.policy.models.base.PfConceptKey;
-import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfModelRuntimeException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -40,10 +38,10 @@ import org.springframework.transaction.annotation.Transactional;
  */
 @Service
 @Transactional
-@AllArgsConstructor
+@RequiredArgsConstructor
 public class ParticipantProvider {
 
-    private ParticipantRepository participantRepository;
+    private final ParticipantRepository participantRepository;
 
     /**
      * Get participants.
@@ -71,32 +69,12 @@ public class ParticipantProvider {
     /**
      * Get participant.
      *
-     * @param name the name of the participant to get
-     * @param version the version of the participant to get
+     * @param participantId the Id of the participant to get
      * @return the participant found
-     * @throws PfModelException on errors getting participant
      */
     @Transactional(readOnly = true)
-    public Optional<Participant> findParticipant(@NonNull final String name, @NonNull final String version)
-            throws PfModelException {
-        try {
-            return participantRepository.findById(new PfConceptKey(name, version)).map(JpaParticipant::toAuthorative);
-        } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Error in find Participant", e);
-        }
-    }
-
-    /**
-     * Get filtered participants.
-     *
-     * @param filter the filter for the participants to get
-     * @return the participants found
-     */
-    @Transactional(readOnly = true)
-    public List<Participant> getFilteredParticipants(@NonNull final ToscaTypedEntityFilter<Participant> filter) {
-
-        return filter.filter(ProviderUtils.asEntityList(
-                participantRepository.getFiltered(JpaParticipant.class, filter.getName(), filter.getVersion())));
+    public Optional<Participant> findParticipant(@NonNull final ToscaConceptIdentifier participantId) {
+        return participantRepository.findById(participantId.asConceptKey()).map(JpaParticipant::toAuthorative);
     }
 
     /**
@@ -104,45 +82,31 @@ public class ParticipantProvider {
      *
      * @param participant participant to save
      * @return the participant created
-     * @throws PfModelException on errors creating participants
      */
-    public Participant saveParticipant(@NonNull final Participant participant) throws PfModelException {
-        try {
-            var result = participantRepository
-                    .save(ProviderUtils.getJpaAndValidate(participant, JpaParticipant::new, "participant"));
+    public Participant saveParticipant(@NonNull final Participant participant) {
+        var result = participantRepository
+                .save(ProviderUtils.getJpaAndValidate(participant, JpaParticipant::new, "participant"));
 
-            // Return the saved participant
-            return result.toAuthorative();
-        } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Error in save Participant", e);
-        }
+        // Return the saved participant
+        return result.toAuthorative();
     }
 
     /**
      * Delete a participant.
      *
-     * @param name the name of the participant to delete
-     * @param version the version of the participant to get
+     * @param participantId the Id of the participant to delete
      * @return the participant deleted
-     * @throws PfModelRuntimeException on errors deleting participants
      */
-    public Participant deleteParticipant(@NonNull final String name, @NonNull final String version)
-            throws PfModelException {
-        try {
-            var participantKey = new PfConceptKey(name, version);
+    public Participant deleteParticipant(@NonNull final ToscaConceptIdentifier participantId) {
+        var jpaDeleteParticipantOpt = participantRepository.findById(participantId.asConceptKey());
 
-            var jpaDeleteParticipantOpt = participantRepository.findById(participantKey);
-
-            if (jpaDeleteParticipantOpt.isEmpty()) {
-                String errorMessage =
-                        "delete of participant \"" + participantKey.getId() + "\" failed, participant does not exist";
-                throw new PfModelRuntimeException(Status.BAD_REQUEST, errorMessage);
-            }
-            participantRepository.delete(jpaDeleteParticipantOpt.get());
-
-            return jpaDeleteParticipantOpt.get().toAuthorative();
-        } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Error in delete Participant", e);
+        if (jpaDeleteParticipantOpt.isEmpty()) {
+            String errorMessage =
+                    "delete of participant \"" + participantId + "\" failed, participant does not exist";
+            throw new PfModelRuntimeException(Status.BAD_REQUEST, errorMessage);
         }
+        participantRepository.delete(jpaDeleteParticipantOpt.get());
+
+        return jpaDeleteParticipantOpt.get().toAuthorative();
     }
 }
index f50bf36..f6eb3e0 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -59,9 +59,8 @@ class ParticipantTest {
 
         p1.setDefinition(new ToscaConceptIdentifier("defName", "0.0.1"));
         p1.setDescription("Description");
-        p1.setHealthStatus(ParticipantHealthStatus.HEALTHY);
         p1.setName("Name");
-        p1.setParticipantState(ParticipantState.ACTIVE);
+        p1.setParticipantState(ParticipantState.ON_LINE);
         p1.setVersion("0.0.1");
 
         assertThat(p1.toString()).contains("Participant(");
@@ -75,7 +74,6 @@ class ParticipantTest {
 
         // @formatter:off
         assertThatThrownBy(() -> p2.setDefinition(null)).      isInstanceOf(NullPointerException.class);
-        assertThatThrownBy(() -> p2.setHealthStatus(null)).    isInstanceOf(NullPointerException.class);
         assertThatThrownBy(() -> p2.setParticipantState(null)).isInstanceOf(NullPointerException.class);
         // @formatter:on
 
index 7bf439e..51331b4 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,7 +33,6 @@ import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDef
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
@@ -59,8 +58,7 @@ class ParticipantStatusTest {
         ToscaConceptIdentifier type = new ToscaConceptIdentifier("type", "2.3.4");
         orig.setParticipantType(type);
         orig.setMessageId(UUID.randomUUID());
-        orig.setState(ParticipantState.ACTIVE);
-        orig.setHealthStatus(ParticipantHealthStatus.HEALTHY);
+        orig.setState(ParticipantState.ON_LINE);
         orig.setTimestamp(Instant.ofEpochMilli(3000));
 
         var acInfo = getAutomationCompositionInfo(automationCompositionId);
index 3ff6149..9d1d7ff 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,7 +29,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.Test;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
@@ -48,58 +47,52 @@ class JpaParticipantTest {
 
         assertThatThrownBy(() -> new JpaParticipant((PfConceptKey) null)).hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, null, null, null)).hasMessageMatching(NULL_KEY_ERROR);
+        assertThatThrownBy(() -> new JpaParticipant(null, null, null)).hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, null, null, ParticipantHealthStatus.HEALTHY))
+        assertThatThrownBy(() -> new JpaParticipant(null, null, null))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, null, ParticipantState.ACTIVE, null))
+        assertThatThrownBy(() -> new JpaParticipant(null, null, ParticipantState.ON_LINE))
             .hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(
-            () -> new JpaParticipant(null, null, ParticipantState.ACTIVE, ParticipantHealthStatus.HEALTHY))
+            () -> new JpaParticipant(null, null, ParticipantState.ON_LINE))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), null, null))
+        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), null))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), null, ParticipantHealthStatus.HEALTHY))
+        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), null))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), ParticipantState.ACTIVE, null))
+        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), ParticipantState.ON_LINE))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), ParticipantState.ACTIVE,
-            ParticipantHealthStatus.HEALTHY))
+        assertThatThrownBy(() -> new JpaParticipant(null, new PfConceptKey(), ParticipantState.ON_LINE))
             .hasMessageMatching(NULL_KEY_ERROR);
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, null, null))
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, null))
             .hasMessageMatching("definition is marked .*ull but is null");
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, null, ParticipantHealthStatus.HEALTHY))
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, null))
             .hasMessageMatching("definition is marked .*ull but is null");
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, ParticipantState.ACTIVE, null))
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, ParticipantState.ON_LINE))
             .hasMessageMatching("definition is marked .*ull but is null");
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, ParticipantState.ACTIVE,
-            ParticipantHealthStatus.HEALTHY)).hasMessageMatching("definition is marked .*ull but is null");
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), null, ParticipantState.ON_LINE
+            )).hasMessageMatching("definition is marked .*ull but is null");
 
-        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), null, null))
+        assertThatThrownBy(() -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), null))
             .hasMessageMatching("participantState is marked .*ull but is null");
 
         assertThatThrownBy(
-            () -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), null, ParticipantHealthStatus.HEALTHY))
+            () -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), null))
             .hasMessageMatching("participantState is marked .*ull but is null");
 
-        assertThatThrownBy(
-            () -> new JpaParticipant(new PfConceptKey(), new PfConceptKey(), ParticipantState.ACTIVE, null))
-            .hasMessageMatching("healthStatus is marked .*ull but is null");
-
         assertNotNull(new JpaParticipant());
         assertNotNull(new JpaParticipant((new PfConceptKey())));
-        assertNotNull(new JpaParticipant(new PfConceptKey(), new PfConceptKey(), ParticipantState.ACTIVE,
-            ParticipantHealthStatus.HEALTHY));
+        assertNotNull(new JpaParticipant(new PfConceptKey(), new PfConceptKey(), ParticipantState.ON_LINE));
     }
 
     @Test
@@ -171,16 +164,10 @@ class JpaParticipantTest {
         testJpaParticipant.setDefinition(new PfConceptKey("participantDefinitionName", "0.0.1"));
         assertEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
 
-        testJpaParticipant.setParticipantState(ParticipantState.PASSIVE);
-        assertNotEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
-        testJpaParticipant.setParticipantState(ParticipantState.UNKNOWN);
-        assertEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
-
-        testJpaParticipant.setHealthStatus(ParticipantHealthStatus.NOT_HEALTHY);
+        testJpaParticipant.setParticipantState(ParticipantState.OFF_LINE);
         assertNotEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
-        testJpaParticipant.setHealthStatus(ParticipantHealthStatus.UNKNOWN);
+        testJpaParticipant.setParticipantState(ParticipantState.ON_LINE);
         assertEquals(0, testJpaParticipant.compareTo(otherJpaParticipant));
-
         assertEquals(testJpaParticipant, new JpaParticipant(testJpaParticipant));
     }
 
@@ -199,9 +186,8 @@ class JpaParticipantTest {
 
         p1.setDefinition(new PfConceptKey("defName", "0.0.1"));
         p1.setDescription("Description");
-        p1.setHealthStatus(ParticipantHealthStatus.HEALTHY);
         p1.setKey(new PfConceptKey("participant", "0.0.1"));
-        p1.setParticipantState(ParticipantState.ACTIVE);
+        p1.setParticipantState(ParticipantState.ON_LINE);
 
         assertThat(p1.toString()).contains("Participant(");
         assertNotEquals(0, p1.hashCode());
index c7355f0..e115419 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,13 +40,14 @@ import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
 import org.onap.policy.models.base.PfConceptKey;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 class ParticipantProviderTest {
 
     private static final Coder CODER = new StandardCoder();
     private static final String PARTICIPANT_JSON = "src/test/resources/providers/TestParticipant.json";
     private static final String LIST_IS_NULL = ".*. is marked .*ull but is null";
+    private static final ToscaConceptIdentifier INVALID_ID = new ToscaConceptIdentifier("invalid_name", "1.0.1");
 
     private final List<Participant> inputParticipants = new ArrayList<>();
     private List<JpaParticipant> jpaParticipantList;
@@ -67,18 +68,12 @@ class ParticipantProviderTest {
         }
         var participantProvider = new ParticipantProvider(participantRepository);
 
-        assertThatThrownBy(() -> participantProvider.saveParticipant(null))
-            .hasMessageMatching(LIST_IS_NULL);
+        assertThatThrownBy(() -> participantProvider.saveParticipant(null)).hasMessageMatching(LIST_IS_NULL);
 
         when(participantRepository.save(any())).thenReturn(jpaParticipantList.get(0));
 
         Participant savedParticipant = participantProvider.saveParticipant(inputParticipants.get(0));
         assertEquals(savedParticipant, inputParticipants.get(0));
-
-        when(participantRepository.save(any())).thenThrow(IllegalArgumentException.class);
-
-        assertThatThrownBy(() -> participantProvider.saveParticipant(inputParticipants.get(0)))
-            .hasMessageMatching("Error in save Participant");
     }
 
     @Test
@@ -98,26 +93,10 @@ class ParticipantProviderTest {
 
         assertThat(participantProvider.getParticipants("invalid_name", "1.0.1")).isEmpty();
 
-        assertThat(participantProvider.findParticipant("invalid_name", "1.0.1")).isEmpty();
+        assertThat(participantProvider.findParticipant(INVALID_ID)).isEmpty();
 
         when(participantRepository.findAll()).thenReturn(jpaParticipantList);
         assertThat(participantProvider.getParticipants()).hasSize(inputParticipants.size());
-
-        when(participantRepository.findById(any())).thenThrow(IllegalArgumentException.class);
-
-        assertThatThrownBy(() -> participantProvider.findParticipant("notValid", "notValid"))
-            .hasMessageMatching("Error in find Participant");
-
-        assertThatThrownBy(() -> participantProvider.getFilteredParticipants(null))
-            .hasMessageMatching("filter is marked .*ull but is null");
-
-        when(participantRepository.getFiltered((JpaParticipant.class), (null), (null)))
-                .thenReturn(jpaParticipantList);
-
-        final ToscaTypedEntityFilter<Participant> filter = ToscaTypedEntityFilter.<Participant>builder()
-                .type("org.onap.domain.pmsh.PMSHAutomationCompositionDefinition").build();
-        assertEquals(1, participantProvider.getFilteredParticipants(filter).size());
-
     }
 
     @Test
@@ -125,19 +104,13 @@ class ParticipantProviderTest {
         var participantRepository = mock(ParticipantRepository.class);
         var participantProvider = new ParticipantProvider(participantRepository);
 
-        assertThatThrownBy(() -> participantProvider.deleteParticipant("Invalid_name", "1.0.1"))
-            .hasMessageMatching(".*.failed, participant does not exist");
-
-        String name = inputParticipants.get(0).getName();
-        String version = inputParticipants.get(0).getVersion();
+        assertThatThrownBy(() -> participantProvider.deleteParticipant(INVALID_ID))
+                .hasMessageMatching(".*.failed, participant does not exist");
 
         when(participantRepository.findById(any())).thenReturn(Optional.of(jpaParticipantList.get(0)));
 
-        Participant deletedParticipant = participantProvider.deleteParticipant(name, version);
+        Participant deletedParticipant =
+                participantProvider.deleteParticipant(inputParticipants.get(0).getDefinition());
         assertEquals(inputParticipants.get(0), deletedParticipant);
-
-        when(participantRepository.findById(any())).thenThrow(IllegalArgumentException.class);
-        assertThatThrownBy(() -> participantProvider.deleteParticipant(name, version))
-            .hasMessageMatching("Error in delete Participant");
     }
 }
diff --git a/models/src/test/resources/providers/TestAcElementStatistics.json b/models/src/test/resources/providers/TestAcElementStatistics.json
deleted file mode 100644 (file)
index cceb91d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "acElementStatistics":[
-    {
-      "participantId":{
-        "name":"name1",
-        "version":"1.001"
-      },
-      "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
-      "timeStamp": "2021-01-10T13:45:00.000Z",
-      "state": "UNINITIALISED",
-      "acElementUptime":250
-    },
-    {
-      "participantId":{
-        "name":"name2",
-        "version":"1.001"
-      },
-      "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
-      "timeStamp": "2021-01-10T14:25:00.000Z",
-      "state": "UNINITIALISED",
-      "acElementUptime":330
-    }
-  ]
-}
index 7e4f954..5d8a7ea 100644 (file)
@@ -5,8 +5,7 @@
     "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
     "version": "1.0.0"
   },
-  "participantState": "PASSIVE",
-  "healthStatus": "HEALTHY",
+  "participantState": "ON_LINE",
   "description": "A dummy PMSH participant1",
   "participantType":{
     "name": "org.onap.domain.pmsh.PolicyAutomationCompositionDefinition",
diff --git a/models/src/test/resources/providers/TestParticipantStatistics.json b/models/src/test/resources/providers/TestParticipantStatistics.json
deleted file mode 100644 (file)
index 5cf6268..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "statisticsList":[
-    {
-      "participantId":{
-        "name":"name1",
-        "version":"1.001"
-      },
-      "timeStamp": "2021-01-10T13:45:00.000Z",
-      "state": "PASSIVE",
-      "healthStatus": "HEALTHY",
-      "eventCount":250,
-      "lastExecutionTime":100,
-      "averageExecutionTime":90,
-      "upTime":1000,
-      "lastStart":3000
-    },
-    {
-      "participantId":{
-        "name":"name2",
-        "version":"1.001"
-      },
-      "timeStamp": "2021-01-27T14:25:00.000Z",
-      "state": "PASSIVE",
-      "healthStatus": "HEALTHY",
-      "eventCount":245,
-      "lastExecutionTime":1020,
-      "averageExecutionTime":85,
-      "upTime":1050,
-      "lastStart":3100
-    }
-  ]
-}
index b442b99..6edf1ff 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
@@ -29,13 +29,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import lombok.Getter;
-import lombok.Setter;
 import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
 import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
@@ -70,12 +68,6 @@ public class ParticipantHandler {
     private final AutomationCompositionHandler automationCompositionHandler;
     private final ParticipantMessagePublisher publisher;
 
-    @Setter
-    private ParticipantState state = ParticipantState.UNKNOWN;
-
-    @Setter
-    private ParticipantHealthStatus healthStatus = ParticipantHealthStatus.UNKNOWN;
-
     private final Map<UUID, List<AutomationCompositionElementDefinition>> acElementDefsMap = new HashMap<>();
 
     /**
@@ -169,21 +161,9 @@ public class ParticipantHandler {
     public void handleParticipantRegisterAck(ParticipantRegisterAck participantRegisterAckMsg) {
         LOGGER.debug("ParticipantRegisterAck message received as responseTo {}",
                 participantRegisterAckMsg.getResponseTo());
-        statusToPassive();
         publisher.sendParticipantStatus(makeHeartbeat(false));
     }
 
-    private void statusToPassive() {
-        if (ParticipantHealthStatus.UNKNOWN.equals(this.healthStatus)) {
-            this.healthStatus = ParticipantHealthStatus.HEALTHY;
-        }
-
-        if (ParticipantState.UNKNOWN.equals(this.state) || ParticipantState.TERMINATED.equals(this.state)) {
-            this.state = ParticipantState.PASSIVE;
-        }
-
-    }
-
     /**
      * Method to send ParticipantDeregister message to automation composition runtime.
      */
@@ -218,7 +198,6 @@ public class ParticipantHandler {
 
         acElementDefsMap.putIfAbsent(participantUpdateMsg.getCompositionId(), new ArrayList<>());
         if (!participantUpdateMsg.getParticipantDefinitionUpdates().isEmpty()) {
-            statusToPassive();
             // This message is to commission the automation composition
             for (var participantDefinition : participantUpdateMsg.getParticipantDefinitionUpdates()) {
                 if (participantDefinition.getParticipantType().equals(participantType)) {
@@ -230,7 +209,6 @@ public class ParticipantHandler {
         } else {
             // This message is to decommission the automation composition
             acElementDefsMap.get(participantUpdateMsg.getCompositionId()).clear();
-            this.state = ParticipantState.TERMINATED;
         }
         sendParticipantUpdateAck(participantUpdateMsg.getMessageId());
     }
@@ -245,7 +223,7 @@ public class ParticipantHandler {
         participantUpdateAck.setResult(true);
         participantUpdateAck.setParticipantId(participantId);
         participantUpdateAck.setParticipantType(participantType);
-        participantUpdateAck.setState(state);
+        participantUpdateAck.setState(ParticipantState.ON_LINE);
         publisher.sendParticipantUpdateAck(participantUpdateAck);
     }
 
@@ -263,8 +241,7 @@ public class ParticipantHandler {
         var heartbeat = new ParticipantStatus();
         heartbeat.setParticipantId(participantId);
         heartbeat.setParticipantType(participantType);
-        heartbeat.setHealthStatus(healthStatus);
-        heartbeat.setState(state);
+        heartbeat.setState(ParticipantState.ON_LINE);
         heartbeat.setAutomationCompositionInfoList(getAutomationCompositionInfoList());
 
         if (responseToParticipantStatusReq) {
index 9a80508..c274474 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021,2022 Nordix Foundation.
+ *  Copyright (C) 2021,2023 Nordix Foundation.
  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -29,28 +29,17 @@ import javax.ws.rs.core.Response;
 import lombok.AllArgsConstructor;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
 import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementAck;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessage;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
-import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
-import org.onap.policy.models.base.PfModelException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -75,109 +64,13 @@ public class SupervisionHandler {
     private static final String AND_TRANSITIONING_TO_STATE = " and transitioning to state ";
 
     private final AutomationCompositionProvider automationCompositionProvider;
-    private final ParticipantProvider participantProvider;
     private final AcDefinitionProvider acDefinitionProvider;
 
     // Publishers for participant communication
     private final AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher;
     private final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher;
-    private final ParticipantRegisterAckPublisher participantRegisterAckPublisher;
-    private final ParticipantDeregisterAckPublisher participantDeregisterAckPublisher;
     private final ParticipantUpdatePublisher participantUpdatePublisher;
 
-    /**
-     * Handle a ParticipantStatus message from a participant.
-     *
-     * @param participantStatusMessage the ParticipantStatus message received from a participant
-     */
-    @MessageIntercept
-    @Timed(value = "listener.participant_status", description = "PARTICIPANT_STATUS messages received")
-    public void handleParticipantMessage(ParticipantStatus participantStatusMessage) {
-        LOGGER.debug("Participant Status received {}", participantStatusMessage);
-        try {
-            superviseParticipant(participantStatusMessage);
-        } catch (PfModelException | AutomationCompositionException svExc) {
-            LOGGER.warn("error supervising participant {}", participantStatusMessage.getParticipantId(), svExc);
-        }
-    }
-
-    /**
-     * Handle a ParticipantRegister message from a participant.
-     *
-     * @param participantRegisterMessage the ParticipantRegister message received from a participant
-     */
-    @MessageIntercept
-    @Timed(value = "listener.participant_register", description = "PARTICIPANT_REGISTER messages received")
-    public void handleParticipantMessage(ParticipantRegister participantRegisterMessage) {
-        LOGGER.debug("Participant Register received {}", participantRegisterMessage);
-        try {
-            checkParticipant(participantRegisterMessage, ParticipantState.UNKNOWN, ParticipantHealthStatus.UNKNOWN);
-        } catch (PfModelException | AutomationCompositionException svExc) {
-            LOGGER.warn("error saving participant {}", participantRegisterMessage.getParticipantId(), svExc);
-        }
-
-        participantUpdatePublisher.sendCommissioning(participantRegisterMessage.getParticipantId(),
-                participantRegisterMessage.getParticipantType());
-
-        participantRegisterAckPublisher.send(participantRegisterMessage.getMessageId(),
-                participantRegisterMessage.getParticipantId(), participantRegisterMessage.getParticipantType());
-    }
-
-    /**
-     * Handle a ParticipantDeregister message from a participant.
-     *
-     * @param participantDeregisterMessage the ParticipantDeregister message received from a participant
-     */
-    @MessageIntercept
-    @Timed(value = "listener.participant_deregister", description = "PARTICIPANT_DEREGISTER messages received")
-    public void handleParticipantMessage(ParticipantDeregister participantDeregisterMessage) {
-        LOGGER.debug("Participant Deregister received {}", participantDeregisterMessage);
-        try {
-            var participantOpt =
-                    participantProvider.findParticipant(participantDeregisterMessage.getParticipantId().getName(),
-                            participantDeregisterMessage.getParticipantId().getVersion());
-
-            if (participantOpt.isPresent()) {
-                var participant = participantOpt.get();
-                participant.setParticipantState(ParticipantState.TERMINATED);
-                participant.setHealthStatus(ParticipantHealthStatus.OFF_LINE);
-                participantProvider.saveParticipant(participant);
-            }
-        } catch (PfModelException pfme) {
-            LOGGER.warn("Model exception occured with participant id {}",
-                    participantDeregisterMessage.getParticipantId());
-        }
-
-        participantDeregisterAckPublisher.send(participantDeregisterMessage.getMessageId());
-    }
-
-    /**
-     * Handle a ParticipantUpdateAck message from a participant.
-     *
-     * @param participantUpdateAckMessage the ParticipantUpdateAck message received from a participant
-     */
-    @MessageIntercept
-    @Timed(value = "listener.participant_update_ack", description = "PARTICIPANT_UPDATE_ACK messages received")
-    public void handleParticipantMessage(ParticipantUpdateAck participantUpdateAckMessage) {
-        LOGGER.debug("Participant Update Ack received {}", participantUpdateAckMessage);
-        try {
-            var participantOpt =
-                    participantProvider.findParticipant(participantUpdateAckMessage.getParticipantId().getName(),
-                            participantUpdateAckMessage.getParticipantId().getVersion());
-
-            if (participantOpt.isPresent()) {
-                var participant = participantOpt.get();
-                participant.setParticipantState(participantUpdateAckMessage.getState());
-                participantProvider.saveParticipant(participant);
-            } else {
-                LOGGER.warn("Participant not found in database {}", participantUpdateAckMessage.getParticipantId());
-            }
-        } catch (PfModelException pfme) {
-            LOGGER.warn("Model exception occured with participant id {}",
-                    participantUpdateAckMessage.getParticipantId());
-        }
-    }
-
     /**
      * Send commissioning update message to dmaap.
      *
@@ -212,6 +105,17 @@ public class SupervisionHandler {
         setAcElementStateInDb(automationCompositionAckMessage);
     }
 
+    /**
+     * Handle a ParticipantUpdateAck message from a participant.
+     *
+     * @param participantUpdateAckMessage the ParticipantUpdateAck message received from a participant
+     */
+    @MessageIntercept
+    @Timed(value = "listener.participant_update_ack", description = "PARTICIPANT_UPDATE_ACK messages received")
+    public void handleParticipantMessage(ParticipantUpdateAck participantUpdateAckMessage) {
+        LOGGER.debug("Participant Update Ack message received {}", participantUpdateAckMessage);
+    }
+
     /**
      * Handle a AutomationComposition statechange acknowledge message from a participant.
      *
@@ -405,40 +309,6 @@ public class SupervisionHandler {
         return ParticipantUtils.getFirstStartPhase(automationComposition, toscaServiceTemplate);
     }
 
-    private void checkParticipant(ParticipantMessage participantMessage, ParticipantState participantState,
-            ParticipantHealthStatus healthStatus) throws AutomationCompositionException, PfModelException {
-        if (participantMessage.getParticipantId() == null) {
-            exceptionOccured(Response.Status.NOT_FOUND, "Participant ID on PARTICIPANT_STATUS message is null");
-        }
-        var participantOpt = participantProvider.findParticipant(participantMessage.getParticipantId().getName(),
-                participantMessage.getParticipantId().getVersion());
-
-        if (participantOpt.isEmpty()) {
-            var participant = new Participant();
-            participant.setName(participantMessage.getParticipantId().getName());
-            participant.setVersion(participantMessage.getParticipantId().getVersion());
-            participant.setDefinition(participantMessage.getParticipantId());
-            participant.setParticipantType(participantMessage.getParticipantType());
-            participant.setParticipantState(participantState);
-            participant.setHealthStatus(healthStatus);
-
-            participantProvider.saveParticipant(participant);
-        } else {
-            var participant = participantOpt.get();
-            participant.setParticipantState(participantState);
-            participant.setHealthStatus(healthStatus);
-
-            participantProvider.saveParticipant(participant);
-        }
-    }
-
-    private void superviseParticipant(ParticipantStatus participantStatusMessage)
-            throws PfModelException, AutomationCompositionException {
-
-        checkParticipant(participantStatusMessage, participantStatusMessage.getState(),
-                participantStatusMessage.getHealthStatus());
-    }
-
     private void exceptionOccured(Response.Status status, String reason) throws AutomationCompositionException {
         throw new AutomationCompositionException(status, reason);
     }
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandler.java
new file mode 100644 (file)
index 0000000..da9187d
--- /dev/null
@@ -0,0 +1,116 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2023 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.supervision;
+
+import io.micrometer.core.annotation.Timed;
+import lombok.AllArgsConstructor;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessage;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * This class handles supervision of participant status.
+ */
+@Component
+@AllArgsConstructor
+public class SupervisionParticipantHandler {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SupervisionParticipantHandler.class);
+
+    private final ParticipantProvider participantProvider;
+    private final ParticipantRegisterAckPublisher participantRegisterAckPublisher;
+    private final ParticipantDeregisterAckPublisher participantDeregisterAckPublisher;
+
+    /**
+     * Handle a ParticipantRegister message from a participant.
+     *
+     * @param participantRegisterMsg the ParticipantRegister message received from a participant
+     */
+    @MessageIntercept
+    @Timed(value = "listener.participant_register", description = "PARTICIPANT_REGISTER messages received")
+    public void handleParticipantMessage(ParticipantRegister participantRegisterMsg) {
+        LOGGER.debug("Participant Register received {}", participantRegisterMsg);
+        saveParticipantStatus(participantRegisterMsg);
+
+        participantRegisterAckPublisher.send(participantRegisterMsg.getMessageId(),
+                participantRegisterMsg.getParticipantId(), participantRegisterMsg.getParticipantType());
+    }
+
+    /**
+     * Handle a ParticipantDeregister message from a participant.
+     *
+     * @param participantDeregisterMsg the ParticipantDeregister message received from a participant
+     */
+    @MessageIntercept
+    @Timed(value = "listener.participant_deregister", description = "PARTICIPANT_DEREGISTER messages received")
+    public void handleParticipantMessage(ParticipantDeregister participantDeregisterMsg) {
+        LOGGER.debug("Participant Deregister received {}", participantDeregisterMsg);
+        var participantOpt = participantProvider.findParticipant(participantDeregisterMsg.getParticipantId());
+
+        if (participantOpt.isPresent()) {
+            var participant = participantOpt.get();
+            participant.setParticipantState(ParticipantState.OFF_LINE);
+            participantProvider.saveParticipant(participant);
+        }
+
+        participantDeregisterAckPublisher.send(participantDeregisterMsg.getMessageId());
+    }
+
+    /**
+     * Handle a ParticipantStatus message from a participant.
+     *
+     * @param participantStatusMsg the ParticipantStatus message received from a participant
+     */
+    @MessageIntercept
+    @Timed(value = "listener.participant_status", description = "PARTICIPANT_STATUS messages received")
+    public void handleParticipantMessage(ParticipantStatus participantStatusMsg) {
+        LOGGER.debug("Participant Status received {}", participantStatusMsg);
+        saveParticipantStatus(participantStatusMsg);
+    }
+
+    private void saveParticipantStatus(ParticipantMessage participantMessage) {
+        var participantOpt = participantProvider.findParticipant(participantMessage.getParticipantId());
+
+        if (participantOpt.isEmpty()) {
+            var participant = new Participant();
+            participant.setName(participantMessage.getParticipantId().getName());
+            participant.setVersion(participantMessage.getParticipantId().getVersion());
+            participant.setDefinition(participantMessage.getParticipantId());
+            participant.setParticipantType(participantMessage.getParticipantType());
+            participant.setParticipantState(ParticipantState.ON_LINE);
+
+            participantProvider.saveParticipant(participant);
+        } else {
+            var participant = participantOpt.get();
+            participant.setParticipantState(ParticipantState.ON_LINE);
+
+            participantProvider.saveParticipant(participant);
+        }
+    }
+}
index a71f49c..e595f3b 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2022 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
@@ -28,16 +28,14 @@ import java.util.UUID;
 import org.onap.policy.clamp.acm.runtime.main.parameters.AcRuntimeParameterGroup;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantStatusReqPublisher;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
-import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.slf4j.Logger;
@@ -61,7 +59,6 @@ public class SupervisionScanner {
     private final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher;
     private final AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher;
     private final ParticipantProvider participantProvider;
-    private final ParticipantStatusReqPublisher participantStatusReqPublisher;
 
     /**
      * Constructor for instantiating SupervisionScanner.
@@ -71,21 +68,18 @@ public class SupervisionScanner {
      * @param automationCompositionStateChangePublisher the AutomationComposition StateChange Publisher
      * @param automationCompositionUpdatePublisher the AutomationCompositionUpdate Publisher
      * @param participantProvider the Participant Provider
-     * @param participantStatusReqPublisher the Participant StatusReq Publisher
      * @param acRuntimeParameterGroup the parameters for the automation composition runtime
      */
     public SupervisionScanner(final AutomationCompositionProvider automationCompositionProvider,
             AcDefinitionProvider acDefinitionProvider,
             final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher,
             AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher,
-            ParticipantProvider participantProvider, ParticipantStatusReqPublisher participantStatusReqPublisher,
-            final AcRuntimeParameterGroup acRuntimeParameterGroup) {
+            ParticipantProvider participantProvider, final AcRuntimeParameterGroup acRuntimeParameterGroup) {
         this.automationCompositionProvider = automationCompositionProvider;
         this.acDefinitionProvider = acDefinitionProvider;
         this.automationCompositionStateChangePublisher = automationCompositionStateChangePublisher;
         this.automationCompositionUpdatePublisher = automationCompositionUpdatePublisher;
         this.participantProvider = participantProvider;
-        this.participantStatusReqPublisher = participantStatusReqPublisher;
 
         automationCompositionCounter.setMaxRetryCount(
                 acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
@@ -106,13 +100,8 @@ public class SupervisionScanner {
         LOGGER.debug("Scanning automation compositions in the database . . .");
 
         if (counterCheck) {
-            try {
-                for (var participant : participantProvider.getParticipants()) {
-                    scanParticipantStatus(participant);
-                }
-            } catch (PfModelException pfme) {
-                LOGGER.warn("error reading participant from database", pfme);
-                return;
+            for (var participant : participantProvider.getParticipants()) {
+                scanParticipantStatus(participant);
             }
         }
 
@@ -127,22 +116,17 @@ public class SupervisionScanner {
         LOGGER.debug("Automation composition scan complete . . .");
     }
 
-    private void scanParticipantStatus(Participant participant) throws PfModelException {
-        ToscaConceptIdentifier id = participant.getKey().asIdentifier();
+    private void scanParticipantStatus(Participant participant) {
+        var id = participant.getKey().asIdentifier();
         if (participantStatusCounter.isFault(id)) {
             LOGGER.debug("report Participant fault");
             return;
         }
-        if (participantStatusCounter.getDuration(id) > participantStatusCounter.getMaxWaitMs()) {
-            if (participantStatusCounter.count(id)) {
-                LOGGER.debug("retry message ParticipantStatusReq");
-                participantStatusReqPublisher.send(id);
-                participant.setHealthStatus(ParticipantHealthStatus.NOT_HEALTHY);
-            } else {
-                LOGGER.debug("report Participant fault");
-                participantStatusCounter.setFault(id);
-                participant.setHealthStatus(ParticipantHealthStatus.OFF_LINE);
-            }
+        if (participantStatusCounter.getDuration(id) > participantStatusCounter.getMaxWaitMs()
+                && !participantStatusCounter.count(id)) {
+            LOGGER.debug("report Participant fault");
+            participantStatusCounter.setFault(id);
+            participant.setParticipantState(ParticipantState.OFF_LINE);
             participantProvider.saveParticipant(participant);
         }
     }
@@ -209,8 +193,7 @@ public class SupervisionScanner {
                                     ? defaultMin
                                     : defaultMax;
 
-            if (nextSpNotCompleted != phaseMap.getOrDefault(automationComposition.getInstanceId(),
-                    firstStartPhase)) {
+            if (nextSpNotCompleted != phaseMap.getOrDefault(automationComposition.getInstanceId(), firstStartPhase)) {
                 phaseMap.put(automationComposition.getInstanceId(), nextSpNotCompleted);
                 sendAutomationCompositionMsg(automationComposition, nextSpNotCompleted);
             } else if (counterCheck) {
index eec2123..62280a1 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,7 +22,7 @@
 package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionParticipantHandler;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
@@ -40,12 +40,12 @@ public class ParticipantDeregisterListener extends ScoListener<ParticipantDeregi
                 implements Listener<ParticipantDeregister> {
     private static final Logger LOGGER = LoggerFactory.getLogger(ParticipantDeregisterListener.class);
 
-    private final SupervisionHandler supervisionHandler;
+    private final SupervisionParticipantHandler supervisionHandler;
 
     /**
      * Constructs the object.
      */
-    public ParticipantDeregisterListener(SupervisionHandler supervisionHandler) {
+    public ParticipantDeregisterListener(SupervisionParticipantHandler supervisionHandler) {
         super(ParticipantDeregister.class);
         this.supervisionHandler = supervisionHandler;
     }
index 8523400..b082e6f 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,7 +22,7 @@
 package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionParticipantHandler;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
@@ -40,12 +40,12 @@ public class ParticipantRegisterListener extends ScoListener<ParticipantRegister
                 implements Listener<ParticipantRegister> {
     private static final Logger LOGGER = LoggerFactory.getLogger(ParticipantRegisterListener.class);
 
-    private final SupervisionHandler supervisionHandler;
+    private final SupervisionParticipantHandler supervisionHandler;
 
     /**
      * Constructs the object.
      */
-    public ParticipantRegisterListener(SupervisionHandler supervisionHandler) {
+    public ParticipantRegisterListener(SupervisionParticipantHandler supervisionHandler) {
         super(ParticipantRegister.class);
         this.supervisionHandler = supervisionHandler;
     }
index 4ae1a1a..2118fe5 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2023 Nordix Foundation.
  * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,7 +22,7 @@
 package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionParticipantHandler;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
@@ -39,12 +39,12 @@ import org.springframework.stereotype.Component;
 public class ParticipantStatusListener extends ScoListener<ParticipantStatus> implements Listener<ParticipantStatus> {
     private static final Logger LOGGER = LoggerFactory.getLogger(ParticipantStatusListener.class);
 
-    private final SupervisionHandler supervisionHandler;
+    private final SupervisionParticipantHandler supervisionHandler;
 
     /**
      * Constructs the object.
      */
-    public ParticipantStatusListener(SupervisionHandler supervisionHandler) {
+    public ParticipantStatusListener(SupervisionParticipantHandler supervisionHandler) {
         super(ParticipantStatus.class);
         this.supervisionHandler = supervisionHandler;
     }
index 2da8690..fd6c9a0 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,8 +38,6 @@ import org.mockito.Mockito;
 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
 import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
@@ -47,17 +45,12 @@ import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
-import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
@@ -109,10 +102,9 @@ class SupervisionHandlerTest {
 
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
 
-        var handler = new SupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
-                acDefinitionProvider, mock(AutomationCompositionUpdatePublisher.class),
-                automationCompositionStateChangePublisher, mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ParticipantUpdatePublisher.class));
+        var handler = new SupervisionHandler(automationCompositionProvider, acDefinitionProvider,
+                mock(AutomationCompositionUpdatePublisher.class), automationCompositionStateChangePublisher,
+                mock(ParticipantUpdatePublisher.class));
 
         handler.triggerAutomationCompositionSupervision(automationComposition);
 
@@ -160,10 +152,9 @@ class SupervisionHandlerTest {
     void testAcRunningToPassive() throws AutomationCompositionException {
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
-                mock(ParticipantProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
-                automationCompositionStateChangePublisher, mock(ParticipantUpdatePublisher.class),
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), automationCompositionStateChangePublisher,
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
 
         var automationComposition =
                 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
@@ -206,10 +197,9 @@ class SupervisionHandlerTest {
     void testAcPassiveToRunning() throws AutomationCompositionException {
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
-                mock(ParticipantProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
-                automationCompositionStateChangePublisher, mock(ParticipantUpdatePublisher.class),
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), automationCompositionStateChangePublisher,
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
 
         var automationComposition =
                 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
@@ -224,8 +214,7 @@ class SupervisionHandlerTest {
     @Test
     void testHandleAutomationCompositionStateChangeAckMessage() {
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
-        var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
-                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
+        var handler = createSupervisionHandler(automationCompositionProvider,
                 mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
                 mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
                 AutomationCompositionState.UNINITIALISED);
@@ -248,8 +237,7 @@ class SupervisionHandlerTest {
         automationCompositionAckMessage.setAutomationCompositionResultMap(Map.of());
         automationCompositionAckMessage.setAutomationCompositionId(identifier);
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
-        var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
-                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
+        var handler = createSupervisionHandler(automationCompositionProvider,
                 mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
                 mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
                 AutomationCompositionState.UNINITIALISED);
@@ -259,60 +247,6 @@ class SupervisionHandlerTest {
         verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
     }
 
-    @Test
-    void testHandleParticipantDeregister() throws PfModelException {
-        var participant = new Participant();
-        participant.setName(participantId.getName());
-        participant.setVersion(participantId.getVersion());
-        participant.setParticipantType(participantType);
-
-        var participantProvider = mock(ParticipantProvider.class);
-        when(participantProvider.findParticipant(participantId.getName(), participantId.getVersion()))
-                .thenReturn(Optional.of(participant));
-
-        var participantDeregisterMessage = new ParticipantDeregister();
-        participantDeregisterMessage.setMessageId(UUID.randomUUID());
-        participantDeregisterMessage.setParticipantId(participantId);
-        participantDeregisterMessage.setParticipantType(participantType);
-        var participantDeregisterAckPublisher = mock(ParticipantDeregisterAckPublisher.class);
-        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
-                mock(ParticipantRegisterAckPublisher.class), participantDeregisterAckPublisher,
-                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
-                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
-                AutomationCompositionState.UNINITIALISED);
-
-        handler.handleParticipantMessage(participantDeregisterMessage);
-
-        verify(participantProvider).saveParticipant(any());
-        verify(participantDeregisterAckPublisher).send(participantDeregisterMessage.getMessageId());
-    }
-
-    @Test
-    void testHandleParticipantRegister() throws PfModelException {
-        var participant = new Participant();
-        participant.setName(participantId.getName());
-        participant.setVersion(participantId.getVersion());
-        participant.setParticipantType(participantType);
-
-        var participantRegisterMessage = new ParticipantRegister();
-        participantRegisterMessage.setMessageId(UUID.randomUUID());
-        participantRegisterMessage.setParticipantId(participantId);
-        participantRegisterMessage.setParticipantType(participantType);
-        var participantProvider = mock(ParticipantProvider.class);
-        var participantRegisterAckPublisher = mock(ParticipantRegisterAckPublisher.class);
-        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
-                participantRegisterAckPublisher, mock(ParticipantDeregisterAckPublisher.class),
-                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
-                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
-                AutomationCompositionState.UNINITIALISED);
-
-        handler.handleParticipantMessage(participantRegisterMessage);
-
-        verify(participantProvider).saveParticipant(any());
-        verify(participantRegisterAckPublisher).send(participantRegisterMessage.getMessageId(), participantId,
-                participantType);
-    }
-
     @Test
     void testParticipantUpdateAck() throws PfModelException {
         var participant = new Participant();
@@ -320,52 +254,25 @@ class SupervisionHandlerTest {
         participant.setVersion(participantId.getVersion());
         participant.setParticipantType(participantType);
 
-        var participantProvider = mock(ParticipantProvider.class);
-        when(participantProvider.findParticipant(participantId.getName(), participantId.getVersion()))
-                .thenReturn(Optional.of(participant));
-
         var participantUpdateAckMessage = new ParticipantUpdateAck();
         participantUpdateAckMessage.setParticipantId(participantId);
         participantUpdateAckMessage.setParticipantType(participantType);
-        participantUpdateAckMessage.setState(ParticipantState.PASSIVE);
-        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
-                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
+        participantUpdateAckMessage.setState(ParticipantState.ON_LINE);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
                 mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
                 mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
                 AutomationCompositionState.UNINITIALISED);
 
         handler.handleParticipantMessage(participantUpdateAckMessage);
-
-        verify(participantProvider).saveParticipant(any());
-    }
-
-    @Test
-    void testHandleParticipantStatus() throws PfModelException {
-        var participantStatusMessage = new ParticipantStatus();
-        participantStatusMessage.setParticipantId(participantId);
-        participantStatusMessage.setParticipantType(participantType);
-        participantStatusMessage.setState(ParticipantState.PASSIVE);
-        participantStatusMessage.setHealthStatus(ParticipantHealthStatus.HEALTHY);
-
-        var participantProvider = mock(ParticipantProvider.class);
-        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
-                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
-                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
-                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE,
-                AutomationCompositionState.UNINITIALISED);
-        handler.handleParticipantMessage(participantStatusMessage);
-
-        verify(participantProvider).saveParticipant(any());
     }
 
     @Test
     void testHandleSendCommissionMessage() throws PfModelException {
         var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
         var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
-                mock(ParticipantProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
-                mock(AutomationCompositionStateChangePublisher.class), participantUpdatePublisher,
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                participantUpdatePublisher, AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
         var acmDefinition = new AutomationCompositionDefinition();
         handler.handleSendCommissionMessage(acmDefinition);
 
@@ -376,18 +283,15 @@ class SupervisionHandlerTest {
     void testHandleSendDeCommissionMessage() throws PfModelException {
         var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
         var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class),
-                mock(ParticipantProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
-                mock(AutomationCompositionStateChangePublisher.class), participantUpdatePublisher,
-                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.UNINITIALISED);
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                participantUpdatePublisher, AutomationCompositionOrderedState.PASSIVE,
+                AutomationCompositionState.UNINITIALISED);
         handler.handleSendDeCommissionMessage(identifier);
 
         verify(participantUpdatePublisher).sendDecomisioning(identifier);
     }
 
     private SupervisionHandler createSupervisionHandler(AutomationCompositionProvider automationCompositionProvider,
-            ParticipantProvider participantProvider, ParticipantRegisterAckPublisher participantRegisterAckPublisher,
-            ParticipantDeregisterAckPublisher participantDeregisterAckPublisher,
             AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher,
             AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher,
             ParticipantUpdatePublisher participantUpdatePublisher, AutomationCompositionOrderedState orderedState,
@@ -406,24 +310,22 @@ class SupervisionHandlerTest {
         when(acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId()))
                 .thenReturn(InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML));
 
-        return new SupervisionHandler(automationCompositionProvider, participantProvider, acDefinitionProvider,
+        return new SupervisionHandler(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionUpdatePublisher, automationCompositionStateChangePublisher,
-                participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher);
+                participantUpdatePublisher);
     }
 
     private SupervisionHandler createSupervisionHandlerForTrigger() {
-        return new SupervisionHandler(mock(AutomationCompositionProvider.class), mock(ParticipantProvider.class),
-                mock(AcDefinitionProvider.class), mock(AutomationCompositionUpdatePublisher.class),
-                mock(AutomationCompositionStateChangePublisher.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ParticipantUpdatePublisher.class));
+        return new SupervisionHandler(mock(AutomationCompositionProvider.class), mock(AcDefinitionProvider.class),
+                mock(AutomationCompositionUpdatePublisher.class), mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class));
     }
 
     private SupervisionHandler createSupervisionHandlerForTrigger(
             AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher) {
 
-        return new SupervisionHandler(mock(AutomationCompositionProvider.class), mock(ParticipantProvider.class),
-                mock(AcDefinitionProvider.class), automationCompositionUpdatePublisher,
-                mock(AutomationCompositionStateChangePublisher.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ParticipantUpdatePublisher.class));
+        return new SupervisionHandler(mock(AutomationCompositionProvider.class), mock(AcDefinitionProvider.class),
+                automationCompositionUpdatePublisher, mock(AutomationCompositionStateChangePublisher.class),
+                mock(ParticipantUpdatePublisher.class));
     }
 }
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandlerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionParticipantHandlerTest.java
new file mode 100644 (file)
index 0000000..9e35f2c
--- /dev/null
@@ -0,0 +1,107 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2023 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.supervision;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Optional;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+class SupervisionParticipantHandlerTest {
+    private static final ToscaConceptIdentifier PARTICIPANT_ID = new ToscaConceptIdentifier("ParticipantId", "1.0.0");
+    private static final ToscaConceptIdentifier PARTICIPANT_TYPE =
+            new ToscaConceptIdentifier("ParticipantType", "1.0.0");
+
+    @Test
+    void testHandleParticipantDeregister() {
+        var participant = new Participant();
+        participant.setName(PARTICIPANT_ID.getName());
+        participant.setVersion(PARTICIPANT_ID.getVersion());
+        participant.setParticipantType(PARTICIPANT_TYPE);
+
+        var participantProvider = mock(ParticipantProvider.class);
+        when(participantProvider.findParticipant(PARTICIPANT_ID)).thenReturn(Optional.of(participant));
+
+        var participantDeregisterMessage = new ParticipantDeregister();
+        participantDeregisterMessage.setMessageId(UUID.randomUUID());
+        participantDeregisterMessage.setParticipantId(PARTICIPANT_ID);
+        participantDeregisterMessage.setParticipantType(PARTICIPANT_TYPE);
+        var participantDeregisterAckPublisher = mock(ParticipantDeregisterAckPublisher.class);
+        var handler = new SupervisionParticipantHandler(participantProvider,
+                mock(ParticipantRegisterAckPublisher.class), participantDeregisterAckPublisher);
+
+        handler.handleParticipantMessage(participantDeregisterMessage);
+
+        verify(participantProvider).saveParticipant(any());
+        verify(participantDeregisterAckPublisher).send(participantDeregisterMessage.getMessageId());
+    }
+
+    @Test
+    void testHandleParticipantRegister() {
+        var participant = new Participant();
+        participant.setName(PARTICIPANT_ID.getName());
+        participant.setVersion(PARTICIPANT_ID.getVersion());
+        participant.setParticipantType(PARTICIPANT_TYPE);
+
+        var participantRegisterMessage = new ParticipantRegister();
+        participantRegisterMessage.setMessageId(UUID.randomUUID());
+        participantRegisterMessage.setParticipantId(PARTICIPANT_ID);
+        participantRegisterMessage.setParticipantType(PARTICIPANT_TYPE);
+        var participantProvider = mock(ParticipantProvider.class);
+        var participantRegisterAckPublisher = mock(ParticipantRegisterAckPublisher.class);
+        var handler = new SupervisionParticipantHandler(participantProvider, participantRegisterAckPublisher,
+                mock(ParticipantDeregisterAckPublisher.class));
+
+        handler.handleParticipantMessage(participantRegisterMessage);
+
+        verify(participantProvider).saveParticipant(any());
+        verify(participantRegisterAckPublisher).send(participantRegisterMessage.getMessageId(), PARTICIPANT_ID,
+                PARTICIPANT_TYPE);
+    }
+
+    @Test
+    void testHandleParticipantStatus() {
+        var participantStatusMessage = new ParticipantStatus();
+        participantStatusMessage.setParticipantId(PARTICIPANT_ID);
+        participantStatusMessage.setParticipantType(PARTICIPANT_TYPE);
+        participantStatusMessage.setState(ParticipantState.ON_LINE);
+
+        var participantProvider = mock(ParticipantProvider.class);
+        var handler = new SupervisionParticipantHandler(participantProvider,
+                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class));
+        handler.handleParticipantMessage(participantStatusMessage);
+
+        verify(participantProvider).saveParticipant(any());
+    }
+}
index a6d4d3b..0142f29 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,14 +36,12 @@ import org.junit.jupiter.api.Test;
 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
-import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantStatusReqPublisher;
 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
@@ -81,7 +79,6 @@ class SupervisionScannerTest {
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
         var participantProvider = mock(ParticipantProvider.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var automationComposition = InstantiationUtils.getAutomationCompositionFromResource(AC_JSON, "Crud");
@@ -90,7 +87,7 @@ class SupervisionScannerTest {
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
         supervisionScanner.run(false);
 
         verify(automationCompositionProvider, times(0)).updateAutomationComposition(any(AutomationComposition.class));
@@ -108,12 +105,11 @@ class SupervisionScannerTest {
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var participantProvider = mock(ParticipantProvider.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
         supervisionScanner.run(false);
 
         verify(automationCompositionProvider, times(1)).updateAutomationComposition(any(AutomationComposition.class));
@@ -133,18 +129,16 @@ class SupervisionScannerTest {
         when(participantProvider.getParticipants(null, null)).thenReturn(List.of(participant));
 
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
 
         supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
         supervisionScanner.run(true);
         verify(automationCompositionProvider, times(0)).updateAutomationComposition(any(AutomationComposition.class));
-        verify(participantStatusReqPublisher, times(0)).send(any(ToscaConceptIdentifier.class));
     }
 
     @Test
@@ -169,13 +163,12 @@ class SupervisionScannerTest {
 
         var participantProvider = mock(ParticipantProvider.class);
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
 
         supervisionScanner.run(false);
 
@@ -196,27 +189,24 @@ class SupervisionScannerTest {
         var participant = new Participant();
         participant.setName(PARTICIPANT_NAME);
         participant.setVersion(PARTICIPANT_VERSION);
-        participant.setHealthStatus(ParticipantHealthStatus.HEALTHY);
-        participant.setParticipantState(ParticipantState.ACTIVE);
+        participant.setParticipantState(ParticipantState.OFF_LINE);
         participant.setDefinition(new ToscaConceptIdentifier("unknown", "0.0.0"));
         participant.setParticipantType(PARTICIPANT_TYPE);
         var participantProvider = mock(ParticipantProvider.class);
         when(participantProvider.getParticipants()).thenReturn(List.of(participant));
 
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
                 automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, acRuntimeParameterGroup);
+                acRuntimeParameterGroup);
 
         supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
         supervisionScanner.run(true);
-        verify(participantStatusReqPublisher).send(any(ToscaConceptIdentifier.class));
-        verify(participantProvider).saveParticipant(any());
+        verify(participantProvider, times(0)).saveParticipant(any());
 
         supervisionScanner.run(true);
-        verify(participantProvider, times(2)).saveParticipant(any());
+        verify(participantProvider, times(1)).saveParticipant(any());
     }
 }
index b545fd9..b7d2d93 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -33,6 +33,7 @@ import java.util.UUID;
 import org.junit.jupiter.api.Test;
 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
 import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionParticipantHandler;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
@@ -75,7 +76,7 @@ class SupervisionMessagesTest {
     @Test
     void testReceiveParticipantDeregister() {
         final var participantDeregisterMsg = new ParticipantDeregister();
-        var supervisionHandler = mock(SupervisionHandler.class);
+        var supervisionHandler = mock(SupervisionParticipantHandler.class);
         var participantDeregisterListener = new ParticipantDeregisterListener(supervisionHandler);
         participantDeregisterListener.onTopicEvent(INFRA, TOPIC, null, participantDeregisterMsg);
         verify(supervisionHandler).handleParticipantMessage(participantDeregisterMsg);
@@ -192,7 +193,7 @@ class SupervisionMessagesTest {
     @Test
     void testParticipantRegisterListener() {
         final var participantRegister = new ParticipantRegister();
-        var supervisionHandler = mock(SupervisionHandler.class);
+        var supervisionHandler = mock(SupervisionParticipantHandler.class);
         var participantRegisterListener = new ParticipantRegisterListener(supervisionHandler);
         participantRegisterListener.onTopicEvent(INFRA, TOPIC, null, participantRegister);
         verify(supervisionHandler).handleParticipantMessage(participantRegister);
@@ -201,7 +202,7 @@ class SupervisionMessagesTest {
     @Test
     void testParticipantStatusListener() {
         final var participantStatus = new ParticipantStatus();
-        var supervisionHandler = mock(SupervisionHandler.class);
+        var supervisionHandler = mock(SupervisionParticipantHandler.class);
         var participantStatusListener = new ParticipantStatusListener(supervisionHandler);
         participantStatusListener.onTopicEvent(INFRA, TOPIC, null, participantStatus);
         verify(supervisionHandler).handleParticipantMessage(participantStatus);