ebc9c8da36aca7006f1fdb7ce6453dd8ef263031
[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.junit.jupiter.api.Assertions.assertEquals;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.times;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.when;
30
31 import java.util.HashMap;
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.AutomationCompositionElementDefinition;
37 import org.onap.policy.clamp.models.acm.concepts.DeployState;
38 import org.onap.policy.clamp.models.acm.concepts.LockState;
39 import org.onap.policy.clamp.models.acm.messages.kafka.participant.AutomationCompositionStateChange;
40 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
41 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.LockOrder;
42 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
43
44 class AcLockHandlerTest {
45
46     @Test
47     void handleAcStateChangeNullTest() {
48         var cacheProvider = mock(CacheProvider.class);
49         var ach = new AcLockHandler(cacheProvider, mock(ThreadHandler.class));
50
51         var automationCompositionStateChange = new AutomationCompositionStateChange();
52         assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
53
54         var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
55         automationCompositionStateChange.setAutomationCompositionId(automationComposition.getInstanceId());
56         assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
57     }
58
59     @Test
60     void handleAcStateChangeLockTest() {
61         var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
62         automationComposition.setDeployState(DeployState.DEPLOYED);
63         automationComposition.setLockState(LockState.UNLOCKED);
64         var cacheProvider = mock(CacheProvider.class);
65         when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
66                 .thenReturn(automationComposition);
67         when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
68
69         var listener = mock(ThreadHandler.class);
70         var ach = new AcLockHandler(cacheProvider, listener);
71         Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
72         for (var element : automationComposition.getElements().values()) {
73             map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
74         }
75         when(cacheProvider.getAcElementsDefinitions())
76                 .thenReturn(Map.of(automationComposition.getCompositionId(), map));
77         var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
78                 automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.LOCK);
79         ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
80         verify(listener, times(automationComposition.getElements().size())).lock(any(), any(), any());
81         for (var element : automationComposition.getElements().values()) {
82             assertEquals(LockState.LOCKING, element.getLockState());
83         }
84     }
85
86     @Test
87     void handleAcStateChangeUnlockTest() {
88         var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
89         automationComposition.setDeployState(DeployState.DEPLOYED);
90         automationComposition.setLockState(LockState.LOCKED);
91         var cacheProvider = mock(CacheProvider.class);
92         when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
93                 .thenReturn(automationComposition);
94         when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
95
96         var listener = mock(ThreadHandler.class);
97         var ach = new AcLockHandler(cacheProvider, listener);
98         Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
99         for (var element : automationComposition.getElements().values()) {
100             map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
101         }
102         when(cacheProvider.getAcElementsDefinitions())
103                 .thenReturn(Map.of(automationComposition.getCompositionId(), map));
104         var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
105                 automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.UNLOCK);
106         ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
107         verify(listener, times(automationComposition.getElements().size())).unlock(any(), any(), any());
108         for (var element : automationComposition.getElements().values()) {
109             assertEquals(LockState.UNLOCKING, element.getLockState());
110         }
111     }
112 }