ca92ad1577db78bd163e22e1c14473437ed87d99
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved.
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.sim.main.handler;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
26 import static org.mockito.ArgumentMatchers.any;
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;
31
32 import java.util.HashMap;
33 import java.util.Map;
34 import java.util.UUID;
35 import org.junit.jupiter.api.Test;
36 import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionDto;
37 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
38 import org.onap.policy.clamp.acm.participant.sim.comm.CommonTestData;
39 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
40 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
42
43 class SimulatorServiceTest {
44
45     @Test
46     void testGetAutomationCompositions() {
47         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
48         var simulatorService = new SimulatorService(intermediaryApi);
49
50         var map = CommonTestData.getTestAutomationCompositionMap();
51         when(intermediaryApi.getAutomationCompositions()).thenReturn(map);
52         var result = simulatorService.getAutomationCompositions();
53         assertEquals(map.values().iterator().next(), result.getAutomationCompositionList().get(0));
54     }
55
56     @Test
57     void testGetAutomationComposition() {
58         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
59         var simulatorService = new SimulatorService(intermediaryApi);
60
61         var instance = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
62         when(intermediaryApi.getAutomationComposition(instance.getInstanceId())).thenReturn(instance);
63         var result = simulatorService.getAutomationComposition(instance.getInstanceId());
64         assertEquals(instance, result);
65     }
66
67     @Test
68     void testSetOutProperties() {
69         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
70         var simulatorService = new SimulatorService(intermediaryApi);
71
72         var instanceId = UUID.randomUUID();
73         var elementId = UUID.randomUUID();
74         var useState = "useState";
75         var operationalState = "operationalState";
76         Map<String, Object> map = Map.of("id", "1234");
77
78         simulatorService.setOutProperties(instanceId, elementId, useState, operationalState, map);
79         verify(intermediaryApi).sendAcElementInfo(instanceId, elementId, useState, operationalState, map);
80     }
81
82     @Test
83     void testGetDataList() {
84         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
85         var simulatorService = new SimulatorService(intermediaryApi);
86
87         var map = CommonTestData.getTestAutomationCompositionMap();
88         when(intermediaryApi.getAutomationCompositions()).thenReturn(map);
89         var result = simulatorService.getDataList();
90         var data = result.getList().get(0);
91         var automationcomposition = map.values().iterator().next();
92         assertEquals(automationcomposition.getInstanceId(), data.getAutomationCompositionId());
93         var element = automationcomposition.getElements().values().iterator().next();
94         assertEquals(element.getId(), data.getAutomationCompositionElementId());
95     }
96
97     @Test
98     void testGetCompositionDataList() {
99         var acElementDefinition = new AutomationCompositionElementDefinition();
100         var toscaConceptIdentifier = new ToscaConceptIdentifier("code", "1.0.0");
101         acElementDefinition.setAcElementDefinitionId(toscaConceptIdentifier);
102         acElementDefinition.setAutomationCompositionElementToscaNodeTemplate(new ToscaNodeTemplate());
103         Map<String, Object> outProperties = Map.of("code", "value");
104         Map<String, Object> inProperties = Map.of("key", "value");
105         acElementDefinition.getAutomationCompositionElementToscaNodeTemplate().setProperties(inProperties);
106         acElementDefinition.setOutProperties(outProperties);
107         var elementsDefinitions = Map.of(toscaConceptIdentifier, acElementDefinition);
108         var compositionId = UUID.randomUUID();
109         var map = Map.of(compositionId, elementsDefinitions);
110         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
111         when(intermediaryApi.getAcElementsDefinitions()).thenReturn(map);
112         var simulatorService = new SimulatorService(intermediaryApi);
113
114         var result = simulatorService.getCompositionDataList();
115         assertThat(result.getList()).hasSize(1);
116         assertEquals(result.getList().get(0).getCompositionId(), compositionId);
117         assertEquals(result.getList().get(0).getCompositionDefinitionElementId(), toscaConceptIdentifier);
118         assertEquals(result.getList().get(0).getOutProperties(), outProperties);
119         assertEquals(result.getList().get(0).getIntProperties(), inProperties);
120     }
121
122     @Test
123     void testSetCompositionData() {
124         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
125         var simulatorService = new SimulatorService(intermediaryApi);
126
127         var compositionId = UUID.randomUUID();
128         simulatorService.setCompositionOutProperties(compositionId, null, Map.of());
129         verify(intermediaryApi).sendAcDefinitionInfo(compositionId, null, Map.of());
130     }
131
132     @Test
133     void testInterrupted() {
134         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
135         var simulatorService = new SimulatorService(intermediaryApi) {
136             @Override
137             protected boolean isInterrupted(int timeMs, String msg, UUID elementId) {
138                 return true;
139             }
140         };
141
142         simulatorService.deploy(UUID.randomUUID(), UUID.randomUUID(), new HashMap<>());
143         simulatorService.undeploy(UUID.randomUUID(), UUID.randomUUID(), new HashMap<>());
144         simulatorService.lock(UUID.randomUUID(), UUID.randomUUID());
145         simulatorService.unlock(UUID.randomUUID(), UUID.randomUUID());
146         simulatorService.delete(UUID.randomUUID(), UUID.randomUUID());
147         simulatorService.update(UUID.randomUUID(), UUID.randomUUID());
148         simulatorService.prime(mock(CompositionDto.class));
149         simulatorService.deprime(mock(CompositionDto.class));
150         simulatorService.migrate(UUID.randomUUID(), UUID.randomUUID(), 0, new HashMap<>(), new HashMap<>());
151         simulatorService.review(UUID.randomUUID(), UUID.randomUUID());
152         simulatorService.prepare(UUID.randomUUID(), UUID.randomUUID(), 0, new HashMap<>(), new HashMap<>());
153         simulatorService.migratePrecheck(UUID.randomUUID(), UUID.randomUUID());
154         verify(intermediaryApi, times(0)).sendAcDefinitionInfo(any(), any(), any());
155     }
156
157     @Test
158     void testImmediateInterruption() throws InterruptedException {
159         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
160         var simulatorService = new SimulatorService(intermediaryApi);
161
162         Thread testThread = new Thread(() -> {
163             boolean result = simulatorService.isInterrupted(5000, "test", UUID.randomUUID());
164             assertTrue(result, "Thread was supposed to be interrupted");
165         });
166
167         testThread.start();
168         testThread.interrupt();
169         testThread.join();
170     }
171 }