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