49aa0309619d5f41056b5025044863af1eb523eb
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2023 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.clamp.acm.runtime.supervision;
22
23 import static org.mockito.ArgumentMatchers.any;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.when;
27
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Optional;
31 import java.util.Set;
32 import java.util.UUID;
33 import org.junit.jupiter.api.Test;
34 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
35 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
36 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
37 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRestartPublisher;
38 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
39 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
40 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
41 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
42 import org.onap.policy.clamp.models.acm.concepts.NodeTemplateState;
43 import org.onap.policy.clamp.models.acm.concepts.Participant;
44 import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
45 import org.onap.policy.clamp.models.acm.concepts.ParticipantSupportedElementType;
46 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
47 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
48 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
49 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
50 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
51 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
52
53 class SupervisionParticipantHandlerTest {
54
55     private static final String AC_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/acm/AutomationComposition.json";
56
57     @Test
58     void testHandleParticipantDeregister() {
59         var participant = CommonTestData.createParticipant(CommonTestData.getParticipantId());
60
61         var participantProvider = mock(ParticipantProvider.class);
62         when(participantProvider.findParticipant(CommonTestData.getParticipantId()))
63                 .thenReturn(Optional.of(participant));
64
65         var participantDeregisterMessage = new ParticipantDeregister();
66         participantDeregisterMessage.setMessageId(UUID.randomUUID());
67         participantDeregisterMessage.setParticipantId(CommonTestData.getParticipantId());
68         var participantDeregisterAckPublisher = mock(ParticipantDeregisterAckPublisher.class);
69         var handler =
70                 new SupervisionParticipantHandler(participantProvider, mock(ParticipantRegisterAckPublisher.class),
71                         participantDeregisterAckPublisher, mock(AutomationCompositionProvider.class),
72                         mock(AcDefinitionProvider.class), mock(ParticipantRestartPublisher.class));
73
74         handler.handleParticipantMessage(participantDeregisterMessage);
75
76         verify(participantProvider).updateParticipant(any());
77         verify(participantDeregisterAckPublisher).send(participantDeregisterMessage.getMessageId());
78     }
79
80     @Test
81     void testHandleParticipantRegister() {
82         var participantRegisterMessage = new ParticipantRegister();
83         participantRegisterMessage.setMessageId(UUID.randomUUID());
84         participantRegisterMessage.setParticipantId(CommonTestData.getParticipantId());
85         var supportedElementType = CommonTestData.createParticipantSupportedElementType();
86         participantRegisterMessage.setParticipantSupportedElementType(List.of(supportedElementType));
87
88         var participantProvider = mock(ParticipantProvider.class);
89         var participantRegisterAckPublisher = mock(ParticipantRegisterAckPublisher.class);
90         var handler = new SupervisionParticipantHandler(participantProvider, participantRegisterAckPublisher,
91                 mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionProvider.class),
92                 mock(AcDefinitionProvider.class), mock(ParticipantRestartPublisher.class));
93         handler.handleParticipantMessage(participantRegisterMessage);
94
95         verify(participantProvider).saveParticipant(any());
96         verify(participantRegisterAckPublisher).send(participantRegisterMessage.getMessageId(),
97                 CommonTestData.getParticipantId());
98     }
99
100     @Test
101     void testHandleParticipantRestart() {
102         var participantRegisterMessage = new ParticipantRegister();
103         participantRegisterMessage.setMessageId(UUID.randomUUID());
104         var participantId = CommonTestData.getParticipantId();
105         participantRegisterMessage.setParticipantId(participantId);
106         var supportedElementType = CommonTestData.createParticipantSupportedElementType();
107         participantRegisterMessage.setParticipantSupportedElementType(List.of(supportedElementType));
108
109         var participant = new Participant();
110         participant.setParticipantId(participantId);
111         var participantProvider = mock(ParticipantProvider.class);
112         when(participantProvider.findParticipant(participantId)).thenReturn(Optional.of(participant));
113         var compositionId = UUID.randomUUID();
114         var composition2Id = UUID.randomUUID();
115         when(participantProvider.getCompositionIds(participantId)).thenReturn(Set.of(compositionId, composition2Id));
116
117         var acDefinitionProvider = mock(AcDefinitionProvider.class);
118         var acDefinition = new AutomationCompositionDefinition();
119         acDefinition.setState(AcTypeState.COMMISSIONED);
120         acDefinition.setCompositionId(composition2Id);
121         when(acDefinitionProvider.getAcDefinition(composition2Id)).thenReturn(acDefinition);
122
123         acDefinition = new AutomationCompositionDefinition();
124         acDefinition.setCompositionId(compositionId);
125         acDefinition.setState(AcTypeState.PRIMED);
126         var nodeTemplateState = new NodeTemplateState();
127         nodeTemplateState.setParticipantId(participantId);
128         acDefinition.setElementStateMap(Map.of("code", nodeTemplateState));
129         when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acDefinition);
130
131         var automationComposition =
132                 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
133         automationComposition.getElements().values().iterator().next().setParticipantId(participantId);
134         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
135         when(automationCompositionProvider.getAcInstancesByCompositionId(compositionId))
136                 .thenReturn(List.of(automationComposition));
137
138         var participantRegisterAckPublisher = mock(ParticipantRegisterAckPublisher.class);
139         var participantRestartPublisher = mock(ParticipantRestartPublisher.class);
140         var handler = new SupervisionParticipantHandler(participantProvider, participantRegisterAckPublisher,
141                 mock(ParticipantDeregisterAckPublisher.class), automationCompositionProvider, acDefinitionProvider,
142                 participantRestartPublisher);
143         handler.handleParticipantMessage(participantRegisterMessage);
144
145         verify(participantRegisterAckPublisher).send(participantRegisterMessage.getMessageId(), participantId);
146         verify(acDefinitionProvider).updateAcDefinition(any(AutomationCompositionDefinition.class));
147         verify(participantRestartPublisher).send(any(), any(AutomationCompositionDefinition.class), any());
148     }
149
150     @Test
151     void testHandleParticipantStatus() {
152         var participantStatusMessage = new ParticipantStatus();
153         participantStatusMessage.setParticipantId(CommonTestData.getParticipantId());
154         participantStatusMessage.setState(ParticipantState.ON_LINE);
155         var supportedElementType = CommonTestData.createParticipantSupportedElementType();
156         participantStatusMessage.setParticipantSupportedElementType(List.of(supportedElementType));
157         participantStatusMessage.setAutomationCompositionInfoList(List.of(new AutomationCompositionInfo()));
158
159         var participantProvider = mock(ParticipantProvider.class);
160         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
161         var handler =
162                 new SupervisionParticipantHandler(participantProvider, mock(ParticipantRegisterAckPublisher.class),
163                         mock(ParticipantDeregisterAckPublisher.class), automationCompositionProvider,
164                         mock(AcDefinitionProvider.class), mock(ParticipantRestartPublisher.class));
165         var participant = CommonTestData.createParticipant(CommonTestData.getParticipantId());
166         when(participantProvider.findParticipant(CommonTestData.getParticipantId()))
167                 .thenReturn(Optional.of(participant));
168         handler.handleParticipantMessage(participantStatusMessage);
169
170         verify(automationCompositionProvider).upgradeStates(any());
171     }
172
173     @Test
174     void testHandleParticipantStatusNotRegisterd() {
175         var participantStatusMessage = new ParticipantStatus();
176         participantStatusMessage.setParticipantId(CommonTestData.getParticipantId());
177         participantStatusMessage.setState(ParticipantState.ON_LINE);
178         var supportedElementType = CommonTestData.createParticipantSupportedElementType();
179         participantStatusMessage.setParticipantSupportedElementType(List.of(supportedElementType));
180         participantStatusMessage.setAutomationCompositionInfoList(List.of(new AutomationCompositionInfo()));
181
182         var participantProvider = mock(ParticipantProvider.class);
183         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
184         var handler =
185                 new SupervisionParticipantHandler(participantProvider, mock(ParticipantRegisterAckPublisher.class),
186                         mock(ParticipantDeregisterAckPublisher.class), automationCompositionProvider,
187                         mock(AcDefinitionProvider.class), mock(ParticipantRestartPublisher.class));
188         handler.handleParticipantMessage(participantStatusMessage);
189
190         verify(participantProvider).saveParticipant(any());
191         verify(automationCompositionProvider).upgradeStates(any());
192     }
193
194     @Test
195     void testHandleParticipantStatusCheckOnline() {
196         var participantStatusMessage = new ParticipantStatus();
197         participantStatusMessage.setParticipantId(CommonTestData.getParticipantId());
198         participantStatusMessage.setState(ParticipantState.ON_LINE);
199         var supportedElementType = CommonTestData.createParticipantSupportedElementType();
200         participantStatusMessage.setParticipantSupportedElementType(List.of(supportedElementType));
201         participantStatusMessage.setAutomationCompositionInfoList(List.of(new AutomationCompositionInfo()));
202
203         var participantProvider = mock(ParticipantProvider.class);
204         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
205         var handler =
206                 new SupervisionParticipantHandler(participantProvider, mock(ParticipantRegisterAckPublisher.class),
207                         mock(ParticipantDeregisterAckPublisher.class), automationCompositionProvider,
208                         mock(AcDefinitionProvider.class), mock(ParticipantRestartPublisher.class));
209         var participant = CommonTestData.createParticipant(CommonTestData.getParticipantId());
210         participant.setParticipantState(ParticipantState.OFF_LINE);
211         when(participantProvider.findParticipant(CommonTestData.getParticipantId()))
212                 .thenReturn(Optional.of(participant));
213         handler.handleParticipantMessage(participantStatusMessage);
214
215         verify(participantProvider).saveParticipant(any());
216         verify(automationCompositionProvider).upgradeStates(any());
217     }
218 }