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.mock;
27 import static org.mockito.Mockito.times;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.when;
31 import java.util.HashMap;
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;
44 class AcLockHandlerTest {
47 void handleAcStateChangeNullTest() {
48 var cacheProvider = mock(CacheProvider.class);
49 var ach = new AcLockHandler(cacheProvider, mock(ThreadHandler.class));
51 var automationCompositionStateChange = new AutomationCompositionStateChange();
52 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
54 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
55 automationCompositionStateChange.setAutomationCompositionId(automationComposition.getInstanceId());
56 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
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());
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());
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());
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());
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());
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());