dc9e3d307ac795659a89c08dba3d9ece80059cf0
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021-2022 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.assertj.core.api.Assertions.assertThat;
24 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertNotNull;
27 import static org.junit.jupiter.api.Assertions.assertNull;
28 import static org.mockito.Mockito.mock;
29
30 import java.util.List;
31 import java.util.UUID;
32 import org.junit.jupiter.api.Test;
33 import org.junit.jupiter.api.extension.ExtendWith;
34 import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
35 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
36 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
37 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
38 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
39 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
40 import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates;
41 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
42 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
45 import org.springframework.test.context.junit.jupiter.SpringExtension;
46
47 @ExtendWith(SpringExtension.class)
48 class AutomationCompositionHandlerTest {
49
50     private final CommonTestData commonTestData = new CommonTestData();
51
52     @Test
53     void automationCompositionHandlerTest() {
54         var ach = commonTestData.getMockAutomationCompositionHandler();
55         assertNotNull(ach.getAutomationCompositionMap());
56         assertNotNull(ach.getElementsOnThisParticipant());
57
58         var elementId1 = UUID.randomUUID();
59         var element = new AutomationCompositionElement();
60         element.setId(elementId1);
61         element.setDefinition(
62                 new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "1.0.1"));
63
64         element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
65
66         AutomationCompositionElementListener listener = mock(AutomationCompositionElementListener.class);
67         ach.registerAutomationCompositionElementListener(listener);
68         assertThat(ach.getListeners()).contains(listener);
69     }
70
71     @Test
72     void updateNullAutomationCompositionHandlerTest() {
73         var id = UUID.randomUUID();
74
75         var ach = commonTestData.getMockAutomationCompositionHandler();
76         assertNull(ach.updateAutomationCompositionElementState(null, null,
77                 AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE));
78
79         assertNull(ach.updateAutomationCompositionElementState(null, id,
80                 AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE));
81     }
82
83     @Test
84     void updateAutomationCompositionHandlerTest() {
85         var uuid = UUID.randomUUID();
86         var partecipantId = CommonTestData.getParticipantId();
87         var definition = CommonTestData.getDefinition();
88
89         var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
90         var key = ach.getElementsOnThisParticipant().keySet().iterator().next();
91         var value = ach.getElementsOnThisParticipant().get(key);
92         assertEquals(AutomationCompositionState.UNINITIALISED, value.getState());
93         ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, uuid,
94                 AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE);
95         assertEquals(AutomationCompositionState.PASSIVE, value.getState());
96
97         ach.getAutomationCompositionMap().values().iterator().next().getElements().putIfAbsent(key, value);
98         ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, key,
99                 AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.RUNNING);
100         assertEquals(AutomationCompositionState.RUNNING, value.getState());
101
102         ach.getElementsOnThisParticipant().remove(key, value);
103         ach.getAutomationCompositionMap().values().iterator().next().getElements().clear();
104         assertNull(ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, key,
105                 AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.RUNNING));
106
107     }
108
109     @Test
110     void handleAutomationCompositionUpdateExceptionTest() {
111         var uuid = UUID.randomUUID();
112         var partecipantId = CommonTestData.getParticipantId();
113         var definition = CommonTestData.getDefinition();
114         var stateChange = commonTestData.getStateChange(partecipantId, uuid, AutomationCompositionOrderedState.RUNNING);
115         var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
116         assertDoesNotThrow(() -> ach
117                 .handleAutomationCompositionStateChange(mock(AutomationCompositionStateChange.class), List.of()));
118
119         ach.handleAutomationCompositionStateChange(stateChange, List.of());
120         var newPartecipantId = CommonTestData.getRndParticipantId();
121         stateChange.setAutomationCompositionId(UUID.randomUUID());
122         stateChange.setParticipantId(newPartecipantId);
123         assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChange, List.of()));
124
125         var acd = new AutomationCompositionElementDefinition();
126         acd.setAcElementDefinitionId(definition);
127         var updateMsg = new AutomationCompositionUpdate();
128         updateMsg.setAutomationCompositionId(UUID.randomUUID());
129         updateMsg.setMessageId(uuid);
130         updateMsg.setParticipantId(partecipantId);
131         updateMsg.setStartPhase(0);
132         var acElementDefinitions = List.of(acd);
133         assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
134         updateMsg.setStartPhase(1);
135         assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
136
137         ach.getAutomationCompositionMap().clear();
138         updateMsg.setStartPhase(0);
139         assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
140
141         updateMsg.setAutomationCompositionId(UUID.randomUUID());
142         updateMsg.setParticipantUpdatesList(List.of(mock(ParticipantUpdates.class)));
143         assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
144
145         updateMsg.setStartPhase(1);
146         var participantUpdate = new ParticipantUpdates();
147         participantUpdate.setParticipantId(partecipantId);
148         var element = new AutomationCompositionElement();
149         element.setParticipantType(definition);
150         element.setDefinition(definition);
151         participantUpdate.setAutomationCompositionElementList(List.of(element));
152         updateMsg.setParticipantUpdatesList(List.of(participantUpdate));
153
154         var acd2 = new AutomationCompositionElementDefinition();
155         acd2.setAcElementDefinitionId(definition);
156         acd2.setAutomationCompositionElementToscaNodeTemplate(mock(ToscaNodeTemplate.class));
157         assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, List.of(acd2)));
158
159     }
160
161     @Test
162     void automationCompositionStateChangeUninitialisedTest() {
163         var uuid = UUID.randomUUID();
164         var partecipantId = CommonTestData.getParticipantId();
165         var definition = CommonTestData.getDefinition();
166
167         var stateChangeUninitialised =
168                 commonTestData.getStateChange(partecipantId, uuid, AutomationCompositionOrderedState.UNINITIALISED);
169
170         var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
171         ach.handleAutomationCompositionStateChange(stateChangeUninitialised, List.of());
172         stateChangeUninitialised.setAutomationCompositionId(UUID.randomUUID());
173         stateChangeUninitialised.setParticipantId(CommonTestData.getRndParticipantId());
174         assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangeUninitialised, List.of()));
175     }
176
177     @Test
178     void automationCompositionStateChangePassiveTest() {
179         var uuid = UUID.randomUUID();
180         var partecipantId = CommonTestData.getParticipantId();
181         var definition = CommonTestData.getDefinition();
182
183         var stateChangePassive =
184                 commonTestData.getStateChange(partecipantId, uuid, AutomationCompositionOrderedState.PASSIVE);
185
186         var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
187         ach.handleAutomationCompositionStateChange(stateChangePassive, List.of());
188         stateChangePassive.setAutomationCompositionId(UUID.randomUUID());
189         stateChangePassive.setParticipantId(CommonTestData.getRndParticipantId());
190         assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangePassive, List.of()));
191     }
192
193 }