2cfe7eb3cf5a5d9285c9c2ccdff022590a3c1d8d
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021-2022 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.acm.runtime.supervision.comm;
23
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.mockito.ArgumentMatchers.anyString;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.times;
28 import static org.mockito.Mockito.verify;
29
30 import java.util.Collections;
31 import java.util.List;
32 import java.util.UUID;
33 import org.junit.jupiter.api.Test;
34 import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
35 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
36 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
37 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
38 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
39 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregisterAck;
40 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
41 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
42 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegisterAck;
43 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
44 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
45 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
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.tosca.authorative.concepts.ToscaConceptIdentifier;
49
50 class SupervisionMessagesTest {
51
52     private static final String NOT_ACTIVE = "Not Active!";
53     private static final CommInfrastructure INFRA = CommInfrastructure.NOOP;
54     private static final String TOPIC = "my-topic";
55
56     @Test
57     void testSendParticipantRegisterAck() {
58         var acRegisterAckPublisher = new ParticipantRegisterAckPublisher();
59         var topicSink = mock(TopicSink.class);
60         acRegisterAckPublisher.active(List.of(topicSink));
61         acRegisterAckPublisher.send(new ParticipantRegisterAck());
62         verify(topicSink).send(anyString());
63         acRegisterAckPublisher.stop();
64     }
65
66     @Test
67     void testSendParticipantRegisterAckNoActive() {
68         var acRegisterAckPublisher = new ParticipantRegisterAckPublisher();
69         assertThatThrownBy(() -> acRegisterAckPublisher.send(new ParticipantRegisterAck()))
70                 .hasMessageMatching(NOT_ACTIVE);
71     }
72
73     @Test
74     void testReceiveParticipantDeregister() {
75         final var participantDeregisterMsg = new ParticipantDeregister();
76         var supervisionHandler = mock(SupervisionHandler.class);
77         var participantDeregisterListener = new ParticipantDeregisterListener(supervisionHandler);
78         participantDeregisterListener.onTopicEvent(INFRA, TOPIC, null, participantDeregisterMsg);
79         verify(supervisionHandler).handleParticipantMessage(participantDeregisterMsg);
80     }
81
82     @Test
83     void testSendParticipantDeregisterAck() {
84         var acDeregisterAckPublisher = new ParticipantDeregisterAckPublisher();
85         var topicSink = mock(TopicSink.class);
86         acDeregisterAckPublisher.active(Collections.singletonList(topicSink));
87         acDeregisterAckPublisher.send(new ParticipantDeregisterAck());
88         verify(topicSink).send(anyString());
89         acDeregisterAckPublisher.stop();
90     }
91
92     void testSendParticipantDeregisterAckNoActive() {
93         var acDeregisterAckPublisher = new ParticipantDeregisterAckPublisher();
94         assertThatThrownBy(() -> acDeregisterAckPublisher.send(new ParticipantDeregisterAck()))
95                 .hasMessageMatching(NOT_ACTIVE);
96     }
97
98     @Test
99     void testReceiveParticipantUpdateAckMessage() {
100         final var participantUpdateAckMsg = new ParticipantUpdateAck();
101         var supervisionHandler = mock(SupervisionHandler.class);
102         var participantUpdateAckListener = new ParticipantUpdateAckListener(supervisionHandler);
103         participantUpdateAckListener.onTopicEvent(INFRA, TOPIC, null, participantUpdateAckMsg);
104         verify(supervisionHandler).handleParticipantMessage(participantUpdateAckMsg);
105     }
106
107     @Test
108     void testSendAutomationCompositionStateChangePublisherNotActive() {
109         var publisher = new AutomationCompositionStateChangePublisher();
110         assertThatThrownBy(() -> publisher.send(getAutomationComposition(), 0)).hasMessage(NOT_ACTIVE);
111     }
112
113     private AutomationComposition getAutomationComposition() {
114         var automationComposition = new AutomationComposition();
115         automationComposition.setName("NAME");
116         automationComposition.setVersion("0.0.1");
117         automationComposition.setState(AutomationCompositionState.UNINITIALISED);
118         return automationComposition;
119     }
120
121     @Test
122     void testSendAutomationCompositionStateChangePublisher() {
123         var publisher = new AutomationCompositionStateChangePublisher();
124         var topicSink = mock(TopicSink.class);
125         publisher.active(List.of(topicSink));
126         publisher.send(getAutomationComposition(), 0);
127         verify(topicSink).send(anyString());
128         publisher.stop();
129     }
130
131     @Test
132     void testParticipantUpdatePublisherDecomisioning() {
133         var publisher = new ParticipantUpdatePublisher(mock(AcDefinitionProvider.class));
134         var topicSink = mock(TopicSink.class);
135         publisher.active(List.of(topicSink));
136         publisher.sendDecomisioning();
137         verify(topicSink).send(anyString());
138     }
139
140     @Test
141     void testParticipantUpdatePublisherComissioning() {
142         var publisher = new ParticipantUpdatePublisher(mock(AcDefinitionProvider.class));
143         var topicSink = mock(TopicSink.class);
144         publisher.active(List.of(topicSink));
145         publisher.sendComissioningBroadcast("NAME", "1.0.0");
146         verify(topicSink, times(0)).send(anyString());
147     }
148
149     @Test
150     void testParticipantStatusReqPublisher() {
151         var publisher = new ParticipantStatusReqPublisher();
152         var topicSink = mock(TopicSink.class);
153         publisher.active(List.of(topicSink));
154         publisher.send(getParticipantId());
155         verify(topicSink).send(anyString());
156     }
157
158     @Test
159     void testParticipantRegisterAckPublisher() {
160         var publisher = new ParticipantRegisterAckPublisher();
161         var topicSink = mock(TopicSink.class);
162         publisher.active(List.of(topicSink));
163         publisher.send(UUID.randomUUID(), getParticipantId(), getParticipantType());
164         verify(topicSink).send(anyString());
165     }
166
167     private ToscaConceptIdentifier getParticipantId() {
168         return new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
169     }
170
171     private ToscaConceptIdentifier getParticipantType() {
172         return new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1");
173     }
174
175     @Test
176     void testParticipantDeregisterAckPublisher() {
177         var publisher = new ParticipantDeregisterAckPublisher();
178         var topicSink = mock(TopicSink.class);
179         publisher.active(List.of(topicSink));
180         publisher.send(UUID.randomUUID());
181         verify(topicSink).send(anyString());
182     }
183
184     @Test
185     void testParticipantRegisterListener() {
186         final var participantRegister = new ParticipantRegister();
187         var supervisionHandler = mock(SupervisionHandler.class);
188         var participantRegisterListener = new ParticipantRegisterListener(supervisionHandler);
189         participantRegisterListener.onTopicEvent(INFRA, TOPIC, null, participantRegister);
190         verify(supervisionHandler).handleParticipantMessage(participantRegister);
191     }
192
193     @Test
194     void testParticipantStatusListener() {
195         final var participantStatus = new ParticipantStatus();
196         var supervisionHandler = mock(SupervisionHandler.class);
197         var participantStatusListener = new ParticipantStatusListener(supervisionHandler);
198         participantStatusListener.onTopicEvent(INFRA, TOPIC, null, participantStatus);
199         verify(supervisionHandler).handleParticipantMessage(participantStatus);
200     }
201
202     @Test
203     void testAutomationCompositionUpdateAckListener() {
204         final var automationCompositionAck =
205                 new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE);
206         var supervisionHandler = mock(SupervisionHandler.class);
207         var acUpdateAckListener = new AutomationCompositionUpdateAckListener(supervisionHandler);
208         acUpdateAckListener.onTopicEvent(INFRA, TOPIC, null, automationCompositionAck);
209         verify(supervisionHandler).handleAutomationCompositionUpdateAckMessage(automationCompositionAck);
210     }
211
212     @Test
213     void testAutomationCompositionStateChangeAckListener() {
214         final var automationCompositionAck =
215                 new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
216         var supervisionHandler = mock(SupervisionHandler.class);
217         var acStateChangeAckListener = new AutomationCompositionStateChangeAckListener(supervisionHandler);
218         acStateChangeAckListener.onTopicEvent(INFRA, TOPIC, null, automationCompositionAck);
219         verify(supervisionHandler).handleAutomationCompositionStateChangeAckMessage(automationCompositionAck);
220     }
221
222 }