8fad1d22b8392542c9a84899f1c886343cd9f858
[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.junit.jupiter.api.Assertions.assertDoesNotThrow;
24 import static org.mockito.ArgumentMatchers.any;
25 import static org.mockito.Mockito.mock;
26 import static org.mockito.Mockito.times;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
29
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33 import java.util.UUID;
34 import org.junit.jupiter.api.Test;
35 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
36 import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
37 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
38 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
39 import org.onap.policy.clamp.models.acm.concepts.ParticipantDeploy;
40 import org.onap.policy.clamp.models.acm.messages.kafka.participant.AutomationCompositionMigration;
41 import org.onap.policy.clamp.models.acm.messages.kafka.participant.AutomationCompositionPrepare;
42 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
43
44 class AcSubStateHandlerTest {
45
46     @Test
47     void handleAcStateChangeNullTest() {
48         var cacheProvider = mock(CacheProvider.class);
49         var ach = new AcSubStateHandler(cacheProvider, mock(ThreadHandler.class));
50
51         var acMigration = new AutomationCompositionMigration();
52         acMigration.setPrecheck(true);
53         assertDoesNotThrow(() -> ach.handleAcMigrationPrecheck(acMigration));
54
55         var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
56         acMigration.setAutomationCompositionId(automationComposition.getInstanceId());
57         acMigration.setCompositionTargetId(UUID.randomUUID());
58         assertDoesNotThrow(() -> ach.handleAcMigrationPrecheck(acMigration));
59
60         var acPrepare = new AutomationCompositionPrepare();
61         assertDoesNotThrow(() -> ach.handleAcPrepare(acPrepare));
62
63         acPrepare.setAutomationCompositionId(automationComposition.getInstanceId());
64         assertDoesNotThrow(() -> ach.handleAcPrepare(acPrepare));
65     }
66
67     @Test
68     void handleAcMigrationPrecheckTest() {
69         var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
70         automationComposition.setCompositionId(UUID.randomUUID());
71         automationComposition.setInstanceId(UUID.randomUUID());
72         automationComposition.setCompositionTargetId(UUID.randomUUID());
73         var cacheProvider = new CacheProvider(CommonTestData.getParticipantParameters());
74         var definitions =
75                 CommonTestData.createAutomationCompositionElementDefinitionList(automationComposition);
76         cacheProvider.addElementDefinition(automationComposition.getCompositionId(), definitions);
77         cacheProvider.addElementDefinition(automationComposition.getCompositionTargetId(), definitions);
78         var participantDeploy =
79                 CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), automationComposition);
80         cacheProvider.initializeAutomationComposition(automationComposition.getCompositionId(),
81                 automationComposition.getInstanceId(), participantDeploy);
82         var migrationMsg = new AutomationCompositionMigration();
83         migrationMsg.setStage(0);
84         migrationMsg.setCompositionId(automationComposition.getCompositionId());
85         migrationMsg.setAutomationCompositionId(automationComposition.getInstanceId());
86         migrationMsg.setCompositionTargetId(automationComposition.getCompositionTargetId());
87         migrationMsg.setParticipantUpdatesList(List.of(participantDeploy));
88         migrationMsg.setPrecheck(true);
89         var listener = mock(ThreadHandler.class);
90         var ach = new AcSubStateHandler(cacheProvider, listener);
91         ach.handleAcMigrationPrecheck(migrationMsg);
92         verify(listener, times(automationComposition.getElements().size()))
93                 .migratePrecheck(any(), any(), any(), any(), any());
94     }
95
96     @Test
97     void handleAcMigrationPrecheckAddRemoveTest() {
98         var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
99         automationComposition.setCompositionId(UUID.randomUUID());
100         automationComposition.setInstanceId(UUID.randomUUID());
101         var cacheProvider = new CacheProvider(CommonTestData.getParticipantParameters());
102         var definitions =
103                 CommonTestData.createAutomationCompositionElementDefinitionList(automationComposition);
104         cacheProvider.addElementDefinition(automationComposition.getCompositionId(), definitions);
105         var participantDeploy =
106                 CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), automationComposition);
107         cacheProvider.initializeAutomationComposition(automationComposition.getCompositionId(),
108                 automationComposition.getInstanceId(), participantDeploy);
109
110         var acMigrate = new AutomationComposition(automationComposition);
111         acMigrate.setCompositionTargetId(UUID.randomUUID());
112
113         // replacing first element with new one
114         var element = acMigrate.getElements().values().iterator().next();
115         element.setDefinition(new ToscaConceptIdentifier("policy.clamp.new.element", "1.0.0"));
116         element.setId(UUID.randomUUID());
117
118         var migrateDefinitions =
119                 CommonTestData.createAutomationCompositionElementDefinitionList(acMigrate);
120         cacheProvider.addElementDefinition(acMigrate.getCompositionTargetId(), migrateDefinitions);
121
122         var migrationMsg = new AutomationCompositionMigration();
123         migrationMsg.setStage(0);
124         migrationMsg.setCompositionId(acMigrate.getCompositionId());
125         migrationMsg.setAutomationCompositionId(acMigrate.getInstanceId());
126         migrationMsg.setCompositionTargetId(acMigrate.getCompositionTargetId());
127         var participantMigrate = CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), acMigrate);
128         migrationMsg.setParticipantUpdatesList(List.of(participantMigrate));
129         var listener = mock(ThreadHandler.class);
130         var ach = new AcSubStateHandler(cacheProvider, listener);
131         ach.handleAcMigrationPrecheck(migrationMsg);
132         verify(listener, times(acMigrate.getElements().size() + 1))
133                 .migratePrecheck(any(), any(), any(), any(), any());
134     }
135
136     @Test
137     void handlePrepareTest() {
138         var listener = mock(ThreadHandler.class);
139         var cacheProvider = mock(CacheProvider.class);
140         var ach = new AcSubStateHandler(cacheProvider, listener);
141
142         var acPrepareMsg = new AutomationCompositionPrepare();
143         acPrepareMsg.setPreDeploy(true);
144         assertDoesNotThrow(() -> ach.handleAcPrepare(acPrepareMsg));
145
146         acPrepareMsg.setParticipantId(CommonTestData.getParticipantId());
147         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
148         var participantDeploy = new ParticipantDeploy();
149         participantDeploy.setParticipantId(CommonTestData.getParticipantId());
150         acPrepareMsg.getParticipantList().add(participantDeploy);
151
152         var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
153         acPrepareMsg.setAutomationCompositionId(automationComposition.getInstanceId());
154         when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
155                 .thenReturn(automationComposition);
156         Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
157         for (var element : automationComposition.getElements().values()) {
158             var acElementDeploy = new AcElementDeploy();
159             acElementDeploy.setProperties(Map.of());
160             acElementDeploy.setId(element.getId());
161             participantDeploy.getAcElementList().add(acElementDeploy);
162             map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
163         }
164         when(cacheProvider.getAcElementsDefinitions())
165             .thenReturn(Map.of(automationComposition.getCompositionId(), map));
166
167         ach.handleAcPrepare(acPrepareMsg);
168         verify(listener, times(automationComposition.getElements().size())).prepare(any(), any(), any());
169     }
170
171     @Test
172     void handleReviewTest() {
173         var cacheProvider = mock(CacheProvider.class);
174         when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
175
176         var acPrepareMsg = new AutomationCompositionPrepare();
177         acPrepareMsg.setPreDeploy(false);
178         acPrepareMsg.setParticipantId(CommonTestData.getParticipantId());
179
180         var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
181         acPrepareMsg.setAutomationCompositionId(automationComposition.getInstanceId());
182         when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
183             .thenReturn(automationComposition);
184         Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
185         for (var element : automationComposition.getElements().values()) {
186             var acElementDeploy = new AcElementDeploy();
187             acElementDeploy.setProperties(Map.of());
188             acElementDeploy.setId(element.getId());
189             map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
190         }
191         when(cacheProvider.getAcElementsDefinitions())
192             .thenReturn(Map.of(automationComposition.getCompositionId(), map));
193
194         var listener = mock(ThreadHandler.class);
195         var ach = new AcSubStateHandler(cacheProvider, listener);
196         ach.handleAcPrepare(acPrepareMsg);
197         verify(listener, times(automationComposition.getElements().size())).review(any(), any(), any());
198     }
199 }