1d68cf0adb537b562a3607a98dacba050bfd105e
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2020  Tech Mahindra
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.workflow.tasks.listeners;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.mockito.Mockito.when;
25 import java.util.ArrayList;
26 import java.util.List;
27 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.mockito.InjectMocks;
32 import org.mockito.Mock;
33 import org.mockito.junit.MockitoJUnitRunner;
34 import org.onap.so.bpmn.common.BBConstants;
35 import org.onap.so.bpmn.common.BuildingBlockExecution;
36 import org.onap.so.bpmn.common.DelegateExecutionImpl;
37 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
38 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
39 import org.onap.so.db.catalog.beans.PnfResourceCustomization;
40 import org.onap.so.db.catalog.beans.VfModuleCustomization;
41 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
42 import org.onap.so.db.catalog.client.CatalogDbClient;
43 import org.onap.so.serviceinstancebeans.ModelInfo;
44 import org.onap.so.serviceinstancebeans.RequestDetails;
45
46 @RunWith(MockitoJUnitRunner.Silent.class)
47 public class SkipCDSBuildingBlockListenerTest {
48
49     private static final String VNF_SCOPE = "VNF";
50     private static final String VF_SCOPE = "VFModule";
51     private static final String PNF_SCOPE = "pnf";
52     private static final String TEST_MODELUUID = "123456789";
53     private static final String VNF_TEST_ACTION = "VnfConfigAssign";
54     private static final String VFModule_TEST_ACTION = "VfModuleConfigAssign";
55     private static final String PNFModule_TEST_ACTION = "config-assign";
56     private static final String MODELCUSTOMIZATIONUUID = "123456789";
57     private static final String BBNAME = "ControllerExecutionBB";
58     private static final String COMPLETED = "completed";
59     private static final boolean ISFIRST = true;
60
61     private int actual;
62     private List<VnfResourceCustomization> vnfResourceCustomization;
63     private List<VfModuleCustomization> vfModuleCustomization;
64     private ExecuteBuildingBlock executeBuildingBlock = new ExecuteBuildingBlock();
65     private RequestDetails reqDetail = new RequestDetails();
66     private BuildingBlockExecution buildingBlockExecution = new DelegateExecutionImpl(new DelegateExecutionFake());
67     private VnfResourceCustomization vnfCust = new VnfResourceCustomization();
68     private VfModuleCustomization vfCust = new VfModuleCustomization();
69     private PnfResourceCustomization pnfResourceCustomization = new PnfResourceCustomization();
70     private BuildingBlock buildingBlock = new BuildingBlock();
71
72     @InjectMocks
73     private SkipCDSBuildingBlockListener skipCDSBuildingBlockListener;
74     @Mock
75     private CatalogDbClient catalogDbClient;
76
77     @Before
78     public void before() {
79         ModelInfo model = new ModelInfo();
80         model.setModelUuid(TEST_MODELUUID);
81         reqDetail.setModelInfo(model);
82         executeBuildingBlock.setRequestDetails(reqDetail);
83     }
84
85     @Test
86     public void testTrigger() {
87         BuildingBlockExecution execution = new DelegateExecutionImpl(new DelegateExecutionFake());
88         skipCDSBuildingBlockListener.shouldRunFor(BBNAME, ISFIRST, execution);
89         assertEquals("ControllerExecutionBB", BBNAME);
90     }
91
92     @Test
93     public void testProcessForVNFToSkipCDSBB() {
94         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
95         flowsToExecute.add(executeBuildingBlock);
96         flowsToExecute.add(new ExecuteBuildingBlock());
97         // given
98         setBuildingBlockAndCurrentSequence(VNF_SCOPE, VNF_TEST_ACTION, 0);
99         vnfResourceCustomization = getVnfResourceCustomizationList(true);
100
101         when(catalogDbClient.getVnfResourceCustomizationByModelUuid(
102                 executeBuildingBlock.getRequestDetails().getModelInfo().getModelUuid()))
103                         .thenReturn(vnfResourceCustomization);
104         when(catalogDbClient.findVnfResourceCustomizationInList(executeBuildingBlock.getBuildingBlock().getKey(),
105                 vnfResourceCustomization)).thenReturn(vnfCust);
106
107         // when
108         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
109
110         // then
111         actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
112         assertEquals(1, actual);
113
114     }
115
116     @Test
117     public void testProcessForVNFNotToSkipCDSBB() {
118         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
119         flowsToExecute.add(executeBuildingBlock);
120         flowsToExecute.add(new ExecuteBuildingBlock());
121         // given
122         setBuildingBlockAndCurrentSequence(VNF_SCOPE, VNF_TEST_ACTION, 0);
123         vnfResourceCustomization = getVnfResourceCustomizationList(false);
124
125         when(catalogDbClient.getVnfResourceCustomizationByModelUuid(
126                 executeBuildingBlock.getRequestDetails().getModelInfo().getModelUuid()))
127                         .thenReturn(vnfResourceCustomization);
128         when(catalogDbClient.findVnfResourceCustomizationInList(executeBuildingBlock.getBuildingBlock().getKey(),
129                 vnfResourceCustomization)).thenReturn(vnfCust);
130
131         // when
132         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
133
134         // then
135         actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
136         assertEquals(0, actual);
137
138     }
139
140
141     @Test
142     public void testProcessForVFToSkipCDSBB() {
143         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
144         flowsToExecute.add(executeBuildingBlock);
145         flowsToExecute.add(new ExecuteBuildingBlock());
146         // given
147         setBuildingBlockAndCurrentSequence(VF_SCOPE, VFModule_TEST_ACTION, 0);
148         vfModuleCustomization = getVfModuleCustomizationList(true);
149
150         when(catalogDbClient
151                 .getVfModuleCustomizationByModelCuztomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
152                         .thenReturn(vfCust);
153
154         // when
155         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
156
157         // then
158         actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
159         assertEquals(1, actual);
160
161     }
162
163     @Test
164     public void testProcessForVFNotToSkipCDSBB() {
165         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
166         flowsToExecute.add(executeBuildingBlock);
167         flowsToExecute.add(new ExecuteBuildingBlock());
168         // given
169         setBuildingBlockAndCurrentSequence(VF_SCOPE, VFModule_TEST_ACTION, 0);
170         vfModuleCustomization = getVfModuleCustomizationList(false);
171
172         when(catalogDbClient
173                 .getVfModuleCustomizationByModelCuztomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
174                         .thenReturn(vfCust);
175
176         // when
177         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
178
179         // then
180         actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
181         assertEquals(0, actual);
182
183     }
184
185     @Test
186     public void testProcessForPNFToSkipCDSBB() {
187         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
188         flowsToExecute.add(executeBuildingBlock);
189         flowsToExecute.add(new ExecuteBuildingBlock());
190         // given
191         setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, 0);
192         pnfResourceCustomization = getPnfResourceCustomization(true);
193
194         when(catalogDbClient
195                 .getPnfResourceCustomizationByModelCustomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
196                         .thenReturn(pnfResourceCustomization);
197
198         // when
199         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
200
201         // then
202         actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
203         assertEquals(1, actual);
204
205     }
206
207     @Test
208     public void testProcessForPNFToSkipCDSBBLastBBInList() {
209         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
210         flowsToExecute.add(executeBuildingBlock);
211         // given
212         setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, 0);
213         pnfResourceCustomization = getPnfResourceCustomization(true);
214
215         when(catalogDbClient
216                 .getPnfResourceCustomizationByModelCustomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
217                         .thenReturn(pnfResourceCustomization);
218
219         // when
220         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
221
222         // then
223         actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
224         boolean isCompleted = buildingBlockExecution.getVariable(COMPLETED);
225         assertEquals(true, isCompleted);
226         assertEquals(0, actual);
227     }
228
229     @Test
230     public void testProcessForPNFNotToSkipCDSBB() {
231         List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
232         flowsToExecute.add(executeBuildingBlock);
233         flowsToExecute.add(new ExecuteBuildingBlock());
234         // given
235         setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, 0);
236         pnfResourceCustomization = getPnfResourceCustomization(false);
237
238         when(catalogDbClient
239                 .getPnfResourceCustomizationByModelCustomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
240                         .thenReturn(pnfResourceCustomization);
241
242         // when
243         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
244
245         // then
246         actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
247         assertEquals(0, actual);
248
249     }
250
251     /**
252      * setting scope action in buildingBlock and BB current sequence in BuildingBlockExecution
253      *
254      * @param scope
255      * @param action
256      * @param squence
257      */
258     private void setBuildingBlockAndCurrentSequence(String scope, String action, int sequence) {
259         buildingBlock.setBpmnScope(scope);
260         buildingBlock.setBpmnAction(action);
261         buildingBlock.setBpmnFlowName("ControllerExecutionBB");
262         buildingBlock.setKey(MODELCUSTOMIZATIONUUID);
263         executeBuildingBlock.setBuildingBlock(buildingBlock);
264         buildingBlockExecution.setVariable(BBConstants.G_CURRENT_SEQUENCE, sequence);
265
266     }
267
268     private List<VnfResourceCustomization> getVnfResourceCustomizationList(boolean setSkippost) {
269         List<VnfResourceCustomization> vnfResourceCustomizations = new ArrayList<>();
270         vnfCust.setModelCustomizationUUID(MODELCUSTOMIZATIONUUID);
271         vnfCust.setSkipPostInstConf(setSkippost);
272         vnfResourceCustomizations.add(vnfCust);
273         return vnfResourceCustomizations;
274     }
275
276     private List<VfModuleCustomization> getVfModuleCustomizationList(boolean setSkippost) {
277         List<VfModuleCustomization> vfModuleCustomizations = new ArrayList<>();
278         vfCust.setModelCustomizationUUID(MODELCUSTOMIZATIONUUID);
279         vfCust.setSkipPostInstConf(setSkippost);
280         vfModuleCustomizations.add(vfCust);
281         return vfModuleCustomizations;
282     }
283
284     private PnfResourceCustomization getPnfResourceCustomization(boolean setSkippost) {
285         PnfResourceCustomization pnfResourceCustomization = new PnfResourceCustomization();
286         pnfResourceCustomization.setModelCustomizationUUID(MODELCUSTOMIZATIONUUID);
287         pnfResourceCustomization.setSkipPostInstConf(setSkippost);
288         return pnfResourceCustomization;
289     }
290
291 }