2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2023 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.runtime.supervision;
23 import static org.mockito.ArgumentMatchers.any;
24 import static org.mockito.ArgumentMatchers.anyBoolean;
25 import static org.mockito.ArgumentMatchers.anyInt;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
29 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
32 import java.util.Optional;
33 import java.util.UUID;
34 import org.junit.jupiter.api.Test;
35 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
36 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionDeployPublisher;
37 import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
38 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
39 import org.onap.policy.clamp.models.acm.concepts.AcElementDeployAck;
40 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
41 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
42 import org.onap.policy.clamp.models.acm.concepts.DeployState;
43 import org.onap.policy.clamp.models.acm.concepts.LockState;
44 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionDeployAck;
45 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
46 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
48 class SupervisionAcHandlerTest {
49 private static final String AC_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/acm/AutomationComposition.json";
50 private static final UUID IDENTIFIER = UUID.randomUUID();
53 void testHandleAutomationCompositionStateChangeAckMessage() {
54 var automationCompositionProvider = mock(AutomationCompositionProvider.class);
55 var automationComposition =
56 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
57 when(automationCompositionProvider.findAutomationComposition(IDENTIFIER))
58 .thenReturn(Optional.of(automationComposition));
60 var handler = new SupervisionAcHandler(automationCompositionProvider,
61 mock(AutomationCompositionDeployPublisher.class),
62 mock(AutomationCompositionStateChangePublisher.class));
64 var automationCompositionAckMessage =
65 new AutomationCompositionDeployAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
66 for (var elementEntry : automationComposition.getElements().entrySet()) {
67 var acElementDeployAck = new AcElementDeployAck(DeployState.DEPLOYED, LockState.UNLOCKED, "", "", true, "");
68 automationCompositionAckMessage.getAutomationCompositionResultMap().put(elementEntry.getKey(),
71 automationCompositionAckMessage.setAutomationCompositionId(IDENTIFIER);
73 handler.handleAutomationCompositionStateChangeAckMessage(automationCompositionAckMessage);
75 verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
79 void testHandleAutomationCompositionUpdateAckMessage() {
80 var automationCompositionProvider = mock(AutomationCompositionProvider.class);
81 var automationComposition =
82 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
83 when(automationCompositionProvider.findAutomationComposition(IDENTIFIER))
84 .thenReturn(Optional.of(automationComposition));
86 var automationCompositionAckMessage =
87 new AutomationCompositionDeployAck(ParticipantMessageType.AUTOMATION_COMPOSITION_DEPLOY_ACK);
88 for (var elementEntry : automationComposition.getElements().entrySet()) {
89 var acElementDeployAck = new AcElementDeployAck(DeployState.DEPLOYED, LockState.LOCKED, "", "", true, "");
90 automationCompositionAckMessage
91 .setAutomationCompositionResultMap(Map.of(elementEntry.getKey(), acElementDeployAck));
93 automationCompositionAckMessage.setParticipantId(CommonTestData.getParticipantId());
94 automationCompositionAckMessage.setAutomationCompositionId(IDENTIFIER);
96 var handler = new SupervisionAcHandler(automationCompositionProvider,
97 mock(AutomationCompositionDeployPublisher.class),
98 mock(AutomationCompositionStateChangePublisher.class));
100 handler.handleAutomationCompositionUpdateAckMessage(automationCompositionAckMessage);
102 verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
106 void testUndeploy() {
107 var automationCompositionProvider = mock(AutomationCompositionProvider.class);
108 var acStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
109 var handler = new SupervisionAcHandler(automationCompositionProvider,
110 mock(AutomationCompositionDeployPublisher.class),
111 acStateChangePublisher);
112 var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
113 var acDefinition = CommonTestData.createAcDefinition(serviceTemplate, AcTypeState.PRIMED);
114 var automationComposition =
115 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Undeploy");
116 handler.undeploy(automationComposition, acDefinition);
118 verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
119 verify(acStateChangePublisher).send(any(AutomationComposition.class), anyInt(), anyBoolean());
124 var automationCompositionProvider = mock(AutomationCompositionProvider.class);
125 var acStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
126 var handler = new SupervisionAcHandler(automationCompositionProvider,
127 mock(AutomationCompositionDeployPublisher.class),
128 acStateChangePublisher);
129 var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
130 var acDefinition = CommonTestData.createAcDefinition(serviceTemplate, AcTypeState.PRIMED);
131 var automationComposition =
132 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "UnLock");
133 handler.unlock(automationComposition, acDefinition);
135 verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
136 verify(acStateChangePublisher).send(any(AutomationComposition.class), anyInt(), anyBoolean());
141 var automationCompositionProvider = mock(AutomationCompositionProvider.class);
142 var acStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
143 var handler = new SupervisionAcHandler(automationCompositionProvider,
144 mock(AutomationCompositionDeployPublisher.class),
145 acStateChangePublisher);
146 var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
147 var acDefinition = CommonTestData.createAcDefinition(serviceTemplate, AcTypeState.PRIMED);
148 var automationComposition =
149 InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Lock");
150 handler.lock(automationComposition, acDefinition);
152 verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
153 verify(acStateChangePublisher).send(any(AutomationComposition.class), anyInt(), anyBoolean());