d72f5deeafc8b56db14b3aba42d6e22d4aff7b2f
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2024 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.mockito.ArgumentMatchers.any;
24 import static org.mockito.ArgumentMatchers.anyList;
25 import static org.mockito.Mockito.mock;
26 import static org.mockito.Mockito.verify;
27 import static org.mockito.Mockito.when;
28
29 import java.util.List;
30 import java.util.Map;
31 import java.util.UUID;
32 import org.junit.jupiter.api.Test;
33 import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionDto;
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.AcTypeState;
37 import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
38 import org.onap.policy.clamp.models.acm.concepts.StateChangeResult;
39 import org.onap.policy.clamp.models.acm.messages.kafka.participant.ParticipantPrime;
40 import org.onap.policy.clamp.models.acm.messages.kafka.participant.ParticipantPrimeAck;
41 import org.onap.policy.clamp.models.acm.messages.kafka.participant.ParticipantSync;
42 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
43
44 class AcDefinitionHandlerTest {
45
46     @Test
47     void handleComposiotPrimeTest() {
48         var listener = mock(ThreadHandler.class);
49         var cacheProvider = mock(CacheProvider.class);
50         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
51         var ach = new AcDefinitionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
52         var participantPrimeMsg = new ParticipantPrime();
53         participantPrimeMsg.setCompositionId(UUID.randomUUID());
54         participantPrimeMsg.setParticipantDefinitionUpdates(List.of(createParticipantDefinition()));
55         ach.handlePrime(participantPrimeMsg);
56         verify(cacheProvider).addElementDefinition(any(UUID.class), anyList());
57         verify(listener).prime(any(UUID.class), any(CompositionDto.class));
58     }
59
60     private ParticipantDefinition createParticipantDefinition() {
61         var def = new ParticipantDefinition();
62         def.setParticipantId(CommonTestData.getParticipantId());
63         def.setAutomationCompositionElementDefinitionList(
64                 List.of(CommonTestData.createAutomationCompositionElementDefinition(
65                         new ToscaConceptIdentifier("key", "1.0.0"))));
66         return def;
67     }
68
69     @Test
70     void handleCompositionDeprimeTest() {
71         var acElementDefinition = CommonTestData.createAutomationCompositionElementDefinition(
72                 new ToscaConceptIdentifier("key", "1.0.0"));
73         var compositionId = UUID.randomUUID();
74         var listener = mock(ThreadHandler.class);
75         var cacheProvider = mock(CacheProvider.class);
76         var ach = new AcDefinitionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
77         when(cacheProvider.getAcElementsDefinitions())
78                 .thenReturn(Map.of(compositionId, Map.of(new ToscaConceptIdentifier(), acElementDefinition)));
79         var participantPrimeMsg = new ParticipantPrime();
80         participantPrimeMsg.setCompositionId(compositionId);
81         ach.handlePrime(participantPrimeMsg);
82         verify(listener).deprime(any(UUID.class), any(CompositionDto.class));
83     }
84
85     @Test
86     void handleCompositionAlreadyDeprimedTest() {
87         var compositionId = UUID.randomUUID();
88         var participantMessagePublisher =  mock(ParticipantMessagePublisher.class);
89         var ach = new AcDefinitionHandler(mock(CacheProvider.class), participantMessagePublisher,
90                 mock(ThreadHandler.class));
91         var participantPrimeMsg = new ParticipantPrime();
92         participantPrimeMsg.setCompositionId(compositionId);
93         ach.handlePrime(participantPrimeMsg);
94         verify(participantMessagePublisher).sendParticipantPrimeAck(any(ParticipantPrimeAck.class));
95     }
96
97     @Test
98     void syncTest() {
99         var participantSyncMsg = new ParticipantSync();
100         participantSyncMsg.setState(AcTypeState.PRIMED);
101         participantSyncMsg.setCompositionId(UUID.randomUUID());
102         participantSyncMsg.getParticipantDefinitionUpdates().add(createParticipantDefinition());
103         participantSyncMsg.setAutomationcompositionList(List.of(CommonTestData.createParticipantRestartAc()));
104
105         var cacheProvider = mock(CacheProvider.class);
106         var listener = mock(ThreadHandler.class);
107         var ach = new AcDefinitionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
108         ach.handleParticipantSync(participantSyncMsg);
109         verify(cacheProvider).initializeAutomationComposition(any(UUID.class), any());
110         verify(cacheProvider).addElementDefinition(any(), any());
111     }
112
113     @Test
114     void syncCompositionDefinitionTimeout() {
115         var participantSyncMsg = new ParticipantSync();
116         participantSyncMsg.setState(AcTypeState.PRIMED);
117         participantSyncMsg.setStateChangeResult(StateChangeResult.TIMEOUT);
118         participantSyncMsg.setCompositionId(UUID.randomUUID());
119         participantSyncMsg.getParticipantDefinitionUpdates().add(createParticipantDefinition());
120         var participantRestartAc = CommonTestData.createParticipantRestartAc();
121         participantRestartAc.setStateChangeResult(StateChangeResult.TIMEOUT);
122         participantSyncMsg.setAutomationcompositionList(List.of(participantRestartAc));
123
124         var cacheProvider = mock(CacheProvider.class);
125         var listener = mock(ThreadHandler.class);
126         var ach = new AcDefinitionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
127         ach.handleParticipantSync(participantSyncMsg);
128         verify(cacheProvider).initializeAutomationComposition(any(UUID.class), any());
129         verify(cacheProvider).addElementDefinition(any(), any());
130         verify(listener).cleanExecution(participantSyncMsg.getCompositionId(), participantSyncMsg.getMessageId());
131         var elementId = participantRestartAc.getAcElementList().get(0).getId();
132         verify(listener).cleanExecution(elementId, participantSyncMsg.getMessageId());
133     }
134
135     @Test
136     void syncDeleteTest() {
137         var participantSyncMsg = new ParticipantSync();
138         participantSyncMsg.setState(AcTypeState.COMMISSIONED);
139         participantSyncMsg.setDelete(true);
140         participantSyncMsg.setCompositionId(UUID.randomUUID());
141         participantSyncMsg.getParticipantDefinitionUpdates().add(createParticipantDefinition());
142         var restartAc = CommonTestData.createParticipantRestartAc();
143         participantSyncMsg.setAutomationcompositionList(List.of(restartAc));
144
145         var cacheProvider = mock(CacheProvider.class);
146         var listener = mock(ThreadHandler.class);
147         var ach = new AcDefinitionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
148         ach.handleParticipantSync(participantSyncMsg);
149         verify(cacheProvider).removeElementDefinition(participantSyncMsg.getCompositionId());
150         verify(cacheProvider).removeAutomationComposition(restartAc.getAutomationCompositionId());
151     }
152 }