a6fd10386d7277fc45aa6eaa833e9159b5d13d24
[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 handleCompositionPrimeTest() {
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         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
107         var listener = mock(ThreadHandler.class);
108         var ach = new AcDefinitionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
109         ach.handleParticipantSync(participantSyncMsg);
110         verify(cacheProvider).initializeAutomationComposition(any(UUID.class), any());
111         verify(cacheProvider).addElementDefinition(any(), any());
112     }
113
114     @Test
115     void syncCompositionDefinitionTimeout() {
116         var participantSyncMsg = new ParticipantSync();
117         participantSyncMsg.setState(AcTypeState.PRIMED);
118         participantSyncMsg.setStateChangeResult(StateChangeResult.TIMEOUT);
119         participantSyncMsg.setCompositionId(UUID.randomUUID());
120         participantSyncMsg.getParticipantDefinitionUpdates().add(createParticipantDefinition());
121         var participantRestartAc = CommonTestData.createParticipantRestartAc();
122         participantRestartAc.setStateChangeResult(StateChangeResult.TIMEOUT);
123         participantSyncMsg.setAutomationcompositionList(List.of(participantRestartAc));
124
125         var cacheProvider = mock(CacheProvider.class);
126         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
127         var listener = mock(ThreadHandler.class);
128         var ach = new AcDefinitionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
129         ach.handleParticipantSync(participantSyncMsg);
130         verify(cacheProvider).initializeAutomationComposition(any(UUID.class), any());
131         verify(cacheProvider).addElementDefinition(any(), any());
132         verify(listener).cleanExecution(participantSyncMsg.getCompositionId(), participantSyncMsg.getMessageId());
133         var elementId = participantRestartAc.getAcElementList().get(0).getId();
134         verify(listener).cleanExecution(elementId, participantSyncMsg.getMessageId());
135     }
136
137     @Test
138     void syncDeleteTest() {
139         var participantSyncMsg = new ParticipantSync();
140         participantSyncMsg.setState(AcTypeState.COMMISSIONED);
141         participantSyncMsg.setDelete(true);
142         participantSyncMsg.setCompositionId(UUID.randomUUID());
143         participantSyncMsg.getParticipantDefinitionUpdates().add(createParticipantDefinition());
144         var restartAc = CommonTestData.createParticipantRestartAc();
145         participantSyncMsg.setAutomationcompositionList(List.of(restartAc));
146
147         var cacheProvider = mock(CacheProvider.class);
148         var listener = mock(ThreadHandler.class);
149         var ach = new AcDefinitionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
150         ach.handleParticipantSync(participantSyncMsg);
151         verify(cacheProvider).removeElementDefinition(participantSyncMsg.getCompositionId());
152         verify(cacheProvider).removeAutomationComposition(restartAc.getAutomationCompositionId());
153     }
154 }