70d115e47bd2ae08d6b65e39f9ddb41c46166594
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021 Nordix Foundation.
4  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
23
24 import static org.assertj.core.api.Assertions.assertThatCode;
25
26 import java.time.Instant;
27 import java.util.Collections;
28 import java.util.UUID;
29 import org.junit.jupiter.api.AfterAll;
30 import org.junit.jupiter.api.BeforeAll;
31 import org.junit.jupiter.api.Test;
32 import org.mockito.Mockito;
33 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ClElementStatisticsProvider;
34 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
35 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
36 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantStatisticsProvider;
37 import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
38 import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck;
39 import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck;
40 import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
41 import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup;
42 import org.onap.policy.clamp.controlloop.runtime.monitoring.MonitoringProvider;
43 import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
44 import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData;
45 import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
46 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
47 import org.onap.policy.common.endpoints.event.comm.TopicSink;
48 import org.onap.policy.models.base.PfModelException;
49 import org.onap.policy.models.provider.PolicyModelsProvider;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
51
52 class SupervisionMessagesTest extends CommonRestController {
53
54     private static final Object lockit = new Object();
55     private static final CommInfrastructure INFRA = CommInfrastructure.NOOP;
56     private static final String TOPIC = "my-topic";
57     private static SupervisionHandler supervisionHandler;
58     private static ControlLoopProvider clProvider;
59     private static PolicyModelsProvider modelsProvider;
60
61     /**
62      * setup Db Provider Parameters.
63      *
64      * @throws PfModelException if an error occurs
65      */
66     @BeforeAll
67     public static void setupDbProviderParameters() throws PfModelException {
68         ClRuntimeParameterGroup controlLoopParameters = CommonTestData.geParameterGroup("instantproviderdb");
69
70         modelsProvider = CommonTestData.getPolicyModelsProvider(controlLoopParameters.getDatabaseProviderParameters());
71         clProvider = new ControlLoopProvider(controlLoopParameters.getDatabaseProviderParameters());
72
73         var participantStatisticsProvider =
74                 new ParticipantStatisticsProvider(controlLoopParameters.getDatabaseProviderParameters());
75         var clElementStatisticsProvider =
76                 new ClElementStatisticsProvider(controlLoopParameters.getDatabaseProviderParameters());
77         var monitoringProvider =
78                 new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider);
79         var participantProvider = new ParticipantProvider(controlLoopParameters.getDatabaseProviderParameters());
80         var controlLoopUpdatePublisher = Mockito.mock(ControlLoopUpdatePublisher.class);
81         var controlLoopStateChangePublisher = Mockito.mock(ControlLoopStateChangePublisher.class);
82         var participantRegisterAckPublisher = Mockito.mock(ParticipantRegisterAckPublisher.class);
83         var participantDeregisterAckPublisher = Mockito.mock(ParticipantDeregisterAckPublisher.class);
84         var participantUpdatePublisher = Mockito.mock(ParticipantUpdatePublisher.class);
85         supervisionHandler = new SupervisionHandler(clProvider, participantProvider, monitoringProvider,
86                 controlLoopUpdatePublisher, controlLoopStateChangePublisher, participantRegisterAckPublisher,
87                 participantDeregisterAckPublisher, participantUpdatePublisher);
88     }
89
90     @AfterAll
91     public static void closeDbProvider() throws PfModelException {
92         clProvider.close();
93         modelsProvider.close();
94     }
95
96     @Test
97     void testSendParticipantRegisterAck() throws Exception {
98         final ParticipantRegisterAck participantRegisterAckMsg = new ParticipantRegisterAck();
99         participantRegisterAckMsg.setMessage("ParticipantRegisterAck message");
100         participantRegisterAckMsg.setResponseTo(UUID.randomUUID());
101         participantRegisterAckMsg.setResult(true);
102
103         synchronized (lockit) {
104             ParticipantRegisterAckPublisher clRegisterAckPublisher = new ParticipantRegisterAckPublisher();
105             clRegisterAckPublisher.active(Collections.singletonList(Mockito.mock(TopicSink.class)));
106             assertThatCode(() -> clRegisterAckPublisher.send(participantRegisterAckMsg)).doesNotThrowAnyException();
107         }
108     }
109
110     @Test
111     void testReceiveParticipantDeregister() throws Exception {
112         final ParticipantDeregister participantDeregisterMsg = new ParticipantDeregister();
113         participantDeregisterMsg.setParticipantId(getParticipantId());
114         participantDeregisterMsg.setTimestamp(Instant.now());
115         participantDeregisterMsg.setParticipantType(getParticipantType());
116
117         synchronized (lockit) {
118             ParticipantDeregisterListener participantDeregisterListener =
119                     new ParticipantDeregisterListener(supervisionHandler);
120             assertThatCode(
121                     () -> participantDeregisterListener.onTopicEvent(INFRA, TOPIC, null, participantDeregisterMsg))
122                             .doesNotThrowAnyException();
123         }
124     }
125
126     @Test
127     void testSendParticipantDeregisterAck() throws Exception {
128         final ParticipantDeregisterAck participantDeregisterAckMsg = new ParticipantDeregisterAck();
129         participantDeregisterAckMsg.setMessage("ParticipantDeregisterAck message");
130         participantDeregisterAckMsg.setResponseTo(UUID.randomUUID());
131         participantDeregisterAckMsg.setResult(true);
132
133         synchronized (lockit) {
134             ParticipantDeregisterAckPublisher clDeregisterAckPublisher = new ParticipantDeregisterAckPublisher();
135             clDeregisterAckPublisher.active(Collections.singletonList(Mockito.mock(TopicSink.class)));
136             assertThatCode(() -> clDeregisterAckPublisher.send(participantDeregisterAckMsg)).doesNotThrowAnyException();
137         }
138     }
139
140     @Test
141     void testReceiveParticipantUpdateAckMessage() throws Exception {
142         final ParticipantUpdateAck participantUpdateAckMsg = new ParticipantUpdateAck();
143         participantUpdateAckMsg.setMessage("ParticipantUpdateAck message");
144         participantUpdateAckMsg.setResponseTo(UUID.randomUUID());
145         participantUpdateAckMsg.setResult(true);
146         participantUpdateAckMsg.setParticipantId(getParticipantId());
147         participantUpdateAckMsg.setParticipantType(getParticipantType());
148
149         synchronized (lockit) {
150             ParticipantUpdateAckListener participantUpdateAckListener =
151                     new ParticipantUpdateAckListener(supervisionHandler);
152             assertThatCode(() -> participantUpdateAckListener.onTopicEvent(INFRA, TOPIC, null, participantUpdateAckMsg))
153                     .doesNotThrowAnyException();
154         }
155     }
156
157     private ToscaConceptIdentifier getParticipantId() {
158         return new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
159     }
160
161     private ToscaConceptIdentifier getParticipantType() {
162         return new ToscaConceptIdentifier("org.onap.policy.controlloop.PolicyControlLoopParticipant", "2.3.1");
163     }
164 }