895d4ed596a071500344756420cdf18bcb50ed78
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021-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.participant.intermediary.handler;
22
23 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
24 import static org.junit.jupiter.api.Assertions.assertFalse;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
26 import static org.mockito.ArgumentMatchers.any;
27 import static org.mockito.Mockito.mock;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.when;
30
31 import java.util.List;
32 import java.util.UUID;
33 import org.junit.jupiter.api.Test;
34 import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
35 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
36 import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
37 import org.onap.policy.clamp.models.acm.concepts.ParticipantSupportedElementType;
38 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionDeploy;
39 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
40 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantAckMessage;
41 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
42 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregisterAck;
43 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessage;
44 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
45 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantPrime;
46 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
47 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegisterAck;
48 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
49 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatusReq;
50 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.PropertiesUpdate;
51
52 class ParticipantHandlerTest {
53
54     @Test
55     void handleParticipantStatusReqTest() {
56         var publisher = mock(ParticipantMessagePublisher.class);
57         var cacheProvider = mock(CacheProvider.class);
58         var participantHandler = new ParticipantHandler(mock(AutomationCompositionHandler.class),
59                 mock(AutomationCompositionOutHandler.class), publisher, cacheProvider);
60         participantHandler.handleParticipantStatusReq(new ParticipantStatusReq());
61         verify(publisher).sendParticipantStatus(any(ParticipantStatus.class));
62     }
63
64     @Test
65     void handleAutomationCompositionDeployTest() {
66         var acHandler = mock(AutomationCompositionHandler.class);
67         var participantHandler = new ParticipantHandler(acHandler, mock(AutomationCompositionOutHandler.class),
68                 mock(ParticipantMessagePublisher.class), mock(CacheProvider.class));
69         var automationCompositionDeploy = new AutomationCompositionDeploy();
70         participantHandler.handleAutomationCompositionDeploy(automationCompositionDeploy);
71         verify(acHandler).handleAutomationCompositionDeploy(automationCompositionDeploy);
72     }
73
74     @Test
75     void handleAutomationCompositionStateChangeTest() {
76         var acHandler = mock(AutomationCompositionHandler.class);
77         var participantHandler = new ParticipantHandler(acHandler, mock(AutomationCompositionOutHandler.class),
78                 mock(ParticipantMessagePublisher.class), mock(CacheProvider.class));
79         var acStateChange = new AutomationCompositionStateChange();
80         participantHandler.handleAutomationCompositionStateChange(acStateChange);
81         verify(acHandler).handleAutomationCompositionStateChange(acStateChange);
82     }
83
84     @Test
85     void handleAcPropertyUpdateTest() {
86         var acHandler = mock(AutomationCompositionHandler.class);
87         var participantHandler = new ParticipantHandler(acHandler, mock(AutomationCompositionOutHandler.class),
88                 mock(ParticipantMessagePublisher.class), mock(CacheProvider.class));
89         var propertyUpdateMsg = new PropertiesUpdate();
90         participantHandler.handleAcPropertyUpdate(propertyUpdateMsg);
91         verify(acHandler).handleAcPropertyUpdate(propertyUpdateMsg);
92     }
93
94     @Test
95     void appliesToTest() {
96         var cacheProvider = mock(CacheProvider.class);
97         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
98         var participantHandler = new ParticipantHandler(mock(AutomationCompositionHandler.class),
99                 mock(AutomationCompositionOutHandler.class), mock(ParticipantMessagePublisher.class), cacheProvider);
100
101         var participantAckMsg = new ParticipantAckMessage(ParticipantMessageType.AUTOMATION_COMPOSITION_DEPLOY);
102         assertTrue(participantHandler.appliesTo(participantAckMsg));
103
104         var participantMsg = new ParticipantMessage(ParticipantMessageType.PARTICIPANT_STATUS);
105         assertTrue(participantHandler.appliesTo(participantMsg));
106
107         participantMsg.setParticipantId(UUID.randomUUID());
108         assertFalse(participantHandler.appliesTo(participantMsg));
109     }
110
111     @Test
112     void sendParticipantRegister() {
113         var publisher = mock(ParticipantMessagePublisher.class);
114         var cacheProvider = mock(CacheProvider.class);
115         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
116         when(cacheProvider.getSupportedAcElementTypes()).thenReturn(List.of(new ParticipantSupportedElementType()));
117         var participantHandler = new ParticipantHandler(mock(AutomationCompositionHandler.class),
118                 mock(AutomationCompositionOutHandler.class), publisher, cacheProvider);
119
120         participantHandler.sendParticipantRegister();
121         verify(publisher).sendParticipantRegister(any(ParticipantRegister.class));
122     }
123
124     @Test
125     void handleParticipantRegisterAckTest() {
126         var publisher = mock(ParticipantMessagePublisher.class);
127         var cacheProvider = mock(CacheProvider.class);
128         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
129         var participantHandler = new ParticipantHandler(mock(AutomationCompositionHandler.class),
130                 mock(AutomationCompositionOutHandler.class), publisher, cacheProvider);
131
132         participantHandler.handleParticipantRegisterAck(new ParticipantRegisterAck());
133         verify(publisher).sendParticipantStatus(any(ParticipantStatus.class));
134     }
135
136     @Test
137     void sendParticipantDeregisterTest() {
138         var publisher = mock(ParticipantMessagePublisher.class);
139         var cacheProvider = mock(CacheProvider.class);
140         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
141         var participantHandler = new ParticipantHandler(mock(AutomationCompositionHandler.class),
142                 mock(AutomationCompositionOutHandler.class), publisher, cacheProvider);
143
144         participantHandler.sendParticipantDeregister();
145         verify(publisher).sendParticipantDeregister(any(ParticipantDeregister.class));
146     }
147
148     @Test
149     void handleParticipantDeregisterAckTest() {
150         var participantHandler = new ParticipantHandler(mock(AutomationCompositionHandler.class),
151                 mock(AutomationCompositionOutHandler.class), mock(ParticipantMessagePublisher.class),
152                 mock(CacheProvider.class));
153         var participantDeregisterAck = new ParticipantDeregisterAck();
154         assertDoesNotThrow(() -> participantHandler.handleParticipantDeregisterAck(participantDeregisterAck));
155     }
156
157     @Test
158     void handleParticipantPrimeTest() {
159         var cacheProvider = mock(CacheProvider.class);
160         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
161         var publisher = mock(ParticipantMessagePublisher.class);
162         var acHandler = mock(AutomationCompositionHandler.class);
163         var participantHandler = new ParticipantHandler(acHandler, mock(AutomationCompositionOutHandler.class),
164                 publisher, cacheProvider);
165
166         var participantPrime = new ParticipantPrime();
167         participantPrime.setCompositionId(UUID.randomUUID());
168         participantPrime.setParticipantDefinitionUpdates(List.of(createParticipantDefinition()));
169         participantHandler.handleParticipantPrime(participantPrime);
170         verify(cacheProvider).addElementDefinition(any(), any());
171         verify(acHandler).prime(any(), any());
172     }
173
174     @Test
175     void handleParticipantDeprimeTest() {
176         var cacheProvider = mock(CacheProvider.class);
177         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
178         var publisher = mock(ParticipantMessagePublisher.class);
179         var acHandler = mock(AutomationCompositionHandler.class);
180         var participantHandler = new ParticipantHandler(acHandler, mock(AutomationCompositionOutHandler.class),
181                 publisher, cacheProvider);
182         var participantPrime = new ParticipantPrime();
183         var compositionId = UUID.randomUUID();
184         participantPrime.setCompositionId(compositionId);
185         participantHandler.handleParticipantPrime(participantPrime);
186         verify(cacheProvider).removeElementDefinition(compositionId);
187         verify(acHandler).deprime(compositionId);
188     }
189
190     @Test
191     void sendHeartbeatTest() {
192         var cacheProvider = mock(CacheProvider.class);
193         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
194         when(cacheProvider.getAutomationCompositions()).thenReturn(CommonTestData.getTestAutomationCompositionMap());
195         var publisher = mock(ParticipantMessagePublisher.class);
196         var participantHandler = new ParticipantHandler(mock(AutomationCompositionHandler.class),
197                 mock(AutomationCompositionOutHandler.class), publisher, cacheProvider);
198         participantHandler.sendHeartbeat();
199         verify(publisher).sendHeartbeat(any(ParticipantStatus.class));
200     }
201
202     private ParticipantDefinition createParticipantDefinition() {
203         var def = new ParticipantDefinition();
204         def.setParticipantId(CommonTestData.getParticipantId());
205         return def;
206     }
207 }