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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.clamp.acm.participant.intermediary.handler;
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.clearInvocations;
27 import static org.mockito.Mockito.mock;
28 import static org.mockito.Mockito.times;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.when;
32 import java.util.HashMap;
34 import java.util.UUID;
35 import org.junit.jupiter.api.Test;
36 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
37 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
38 import org.onap.policy.clamp.models.acm.concepts.DeployState;
39 import org.onap.policy.clamp.models.acm.concepts.LockState;
40 import org.onap.policy.clamp.models.acm.messages.kafka.participant.AutomationCompositionStateChange;
41 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
42 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.LockOrder;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
45 class AcLockHandlerTest {
48 void handleAcStateChangeNullTest() {
49 var cacheProvider = mock(CacheProvider.class);
50 var ach = new AcLockHandler(cacheProvider, mock(ThreadHandler.class));
52 var automationCompositionStateChange = new AutomationCompositionStateChange();
53 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
55 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
56 automationCompositionStateChange.setAutomationCompositionId(automationComposition.getInstanceId());
57 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
61 void handleAcStateChangeLockTest() {
62 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
63 automationComposition.setDeployState(DeployState.DEPLOYED);
64 automationComposition.setLockState(LockState.UNLOCKED);
65 var cacheProvider = mock(CacheProvider.class);
66 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
67 .thenReturn(automationComposition);
68 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
70 var listener = mock(ThreadHandler.class);
71 var ach = new AcLockHandler(cacheProvider, listener);
72 Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
73 for (var element : automationComposition.getElements().values()) {
74 map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
76 when(cacheProvider.getAcElementsDefinitions())
77 .thenReturn(Map.of(automationComposition.getCompositionId(), map));
78 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
79 automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.LOCK);
80 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
81 verify(listener, times(automationComposition.getElements().size())).lock(any(), any(), any());
82 for (var element : automationComposition.getElements().values()) {
83 assertEquals(LockState.LOCKING, element.getLockState());
86 clearInvocations(listener);
87 automationCompositionStateChange.setStartPhase(2);
88 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
89 verify(listener, times(0)).lock(any(), any(), any());
93 void handleAcStateChangeUnlockTest() {
94 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
95 automationComposition.setDeployState(DeployState.DEPLOYED);
96 automationComposition.setLockState(LockState.LOCKED);
97 var cacheProvider = mock(CacheProvider.class);
98 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
99 .thenReturn(automationComposition);
100 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
102 var listener = mock(ThreadHandler.class);
103 var ach = new AcLockHandler(cacheProvider, listener);
104 Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
105 for (var element : automationComposition.getElements().values()) {
106 map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
108 when(cacheProvider.getAcElementsDefinitions())
109 .thenReturn(Map.of(automationComposition.getCompositionId(), map));
110 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
111 automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.UNLOCK);
112 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
113 verify(listener, times(automationComposition.getElements().size())).unlock(any(), any(), any());
114 for (var element : automationComposition.getElements().values()) {
115 assertEquals(LockState.UNLOCKING, element.getLockState());
118 clearInvocations(listener);
119 automationCompositionStateChange.setStartPhase(2);
120 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
121 verify(listener, times(0)).unlock(any(), any(), any());