2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Modifications Copyright (c) 2021 Nokia
10 * ================================================================================
11 * Modifications Copyright (c) 2020 Tech Mahindra
12 * ================================================================================
13 * Modifications Copyright (c) 2021 Orange
14 * ================================================================================
15 * Licensed under the Apache License, Version 2.0 (the "License");
16 * you may not use this file except in compliance with the License.
17 * You may obtain a copy of the License at
19 * http://www.apache.org/licenses/LICENSE-2.0
21 * Unless required by applicable law or agreed to in writing, software
22 * distributed under the License is distributed on an "AS IS" BASIS,
23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24 * See the License for the specific language governing permissions and
25 * limitations under the License.
26 * ============LICENSE_END=========================================================
29 package org.onap.so.bpmn.infrastructure.workflow.tasks;
31 import org.junit.Test;
32 import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
33 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
34 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
35 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
36 import java.util.ArrayList;
37 import java.util.Arrays;
38 import java.util.List;
39 import static org.junit.Assert.assertEquals;
40 import static org.junit.Assert.assertNotNull;
41 import static org.junit.Assert.fail;
43 public class ExecuteBuildingBlockBuilderTest {
45 final private ExecuteBuildingBlockBuilder executeBBBuilder = new ExecuteBuildingBlockBuilder();
48 public void verifyLackOfNullPointerExceptionForNullResource() {
49 ExecuteBuildingBlock result = null;
51 result = executeBBBuilder.buildExecuteBuildingBlock(new OrchestrationFlow(), null, null, null, null, null,
52 false, null, null, null, false, null, null, true, null);
53 } catch (NullPointerException e) {
54 fail("NullPointerException should not be thrown when 'resource' is null");
56 assertNotNull(result);
60 public void getConfigurationResourceKeysTest() {
61 String vnfcName = "vnfc";
62 String vfModuleCustomizationId = "1a2b3c4e5d";
63 String cvnfModuleCustomizationId = "2b1a3c";
64 String vnfCustomizationId = "zz12aa";
66 Resource resource = new Resource(WorkflowType.SERVICE, "123", true, null);
68 resource.setCvnfModuleCustomizationId(vfModuleCustomizationId);
69 resource.setCvnfModuleCustomizationId(cvnfModuleCustomizationId);
70 resource.setVnfCustomizationId(vnfCustomizationId);
72 ConfigurationResourceKeys confResourceKeys = executeBBBuilder.getConfigurationResourceKeys(resource, vnfcName);
74 assertNotNull(confResourceKeys);
75 assertEquals(vnfcName, confResourceKeys.getVnfcName());
76 assertEquals(cvnfModuleCustomizationId, confResourceKeys.getCvnfcCustomizationUUID());
77 assertEquals(vnfCustomizationId, confResourceKeys.getVnfResourceCustomizationUUID());
81 private Resource getResource(List<Resource> resources, ExecuteBuildingBlock block) {
83 resources.stream().filter(resource -> resource.getResourceId() == block.getBuildingBlock().getKey())
84 .findAny().orElse(null);
88 private void buildExecuteBuildingBlockListOrderOfVnf(int vnfCount, boolean addPnf, boolean priorities) {
89 WorkflowResourceIds wfIds = new WorkflowResourceIds();
90 wfIds.setServiceInstanceId("1");
91 List<Resource> resources = new ArrayList<>();
92 Resource r1 = new Resource(WorkflowType.SERVICE, "1", false, null);
94 for (int i = 0; i < vnfCount; i++) {
95 Resource r2 = new Resource(WorkflowType.VNF, Integer.toString(2 + i * 3), false, r1);
96 Resource r3 = new Resource(WorkflowType.VFMODULE, Integer.toString(3 + i * 3), false, r2);
97 Resource r4 = new Resource(WorkflowType.VFMODULE, Integer.toString(4 + i * 3), false, r2);
98 r4.setBaseVfModule(true);
103 r2.setProcessingPriority(vnfCount - i);
104 r3.setProcessingPriority(1);
105 r4.setProcessingPriority(2);
109 Resource r5 = new Resource(WorkflowType.PNF, Integer.toString(5 + (vnfCount - 1) * 3), false, r1);
113 OrchestrationFlow f1 = new OrchestrationFlow();
114 f1.setFlowName("AssignServiceInstanceBB");
115 OrchestrationFlow f2 = new OrchestrationFlow();
116 f2.setFlowName("AssignVnfBB");
117 OrchestrationFlow f3 = new OrchestrationFlow();
118 f3.setFlowName("AssignVfModuleBB");
119 OrchestrationFlow f4 = new OrchestrationFlow();
120 f4.setFlowName("ControllerExecutionBB");
121 f4.setBpmnAction("config-assign");
122 f4.setBpmnScope("vnf");
123 OrchestrationFlow f5 = new OrchestrationFlow();
124 f5.setFlowName("AssignPnfBB");
125 OrchestrationFlow f6 = new OrchestrationFlow();
126 f6.setFlowName("WaitForPnfReadyBB");
127 OrchestrationFlow f7 = new OrchestrationFlow();
128 f7.setFlowName("ControllerExecutionBB");
129 f7.setBpmnAction("config-assign");
130 f7.setBpmnScope("pnf");
131 OrchestrationFlow f8 = new OrchestrationFlow();
132 f8.setFlowName("ControllerExecutionBB");
133 f8.setBpmnAction("config-deploy");
134 f8.setBpmnScope("pnf");
135 OrchestrationFlow f9 = new OrchestrationFlow();
136 f9.setFlowName("ActivatePnfBB");
137 OrchestrationFlow f10 = new OrchestrationFlow();
138 f10.setFlowName("CreateVfModuleBB");
139 OrchestrationFlow f11 = new OrchestrationFlow();
140 f11.setFlowName("ActivateVfModuleBB");
141 OrchestrationFlow f12 = new OrchestrationFlow();
142 f12.setFlowName("ControllerExecutionBB");
143 f12.setBpmnAction("config-deploy");
144 f12.setBpmnScope("vnf");
145 OrchestrationFlow f13 = new OrchestrationFlow();
146 f13.setFlowName("ActivateVnfBB");
147 OrchestrationFlow f14 = new OrchestrationFlow();
148 f14.setFlowName("ActivateServiceInstanceBB");
150 List<OrchestrationFlow> flows = Arrays.asList(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14);
151 for (int i = 0; i < flows.size(); i++) {
152 OrchestrationFlow flow = flows.get(i);
154 flow.setSequenceNumber(i + 1);
155 flow.setFlowVersion(1.0);
156 flow.setAction("Service-Macro-Create");
159 List<ExecuteBuildingBlock> flowsToExecute = executeBBBuilder.buildExecuteBuildingBlockList(flows, resources,
160 "1", "1", "1", WorkflowActionConstants.CREATE_INSTANCE, "type", wfIds, null, false);
162 for (ExecuteBuildingBlock block : flowsToExecute) {
163 String name = block.getBuildingBlock().getBpmnFlowName();
164 if (name.equals("ControllerExecutionBB"))
165 name += " [" + block.getBuildingBlock().getBpmnScope() + ", " + block.getBuildingBlock().getBpmnAction()
167 System.out.println(name);
169 assertNotNull(flowsToExecute);
170 assertEquals((addPnf ? 7 : 2) + vnfCount * 4L + vnfCount * 2L * 3, flowsToExecute.size());
172 for (ExecuteBuildingBlock block : flowsToExecute)
173 assertNotNull(getResource(resources, block));
177 assertEquals("5", getResource(resources, flowsToExecute.get(1)).getResourceId());
179 assertEquals("3", getResource(resources, flowsToExecute.get(2)).getResourceId());
182 assertEquals("2", getResource(resources, flowsToExecute.get(1)).getResourceId());
184 assertEquals("4", getResource(resources, flowsToExecute.get(2)).getResourceId());
188 assertEquals(f3.getFlowName(), flowsToExecute.get(2).getBuildingBlock().getBpmnFlowName());
189 // ControllerExecutionBB
190 assertEquals(f4.getFlowName(), flowsToExecute.get(4).getBuildingBlock().getBpmnFlowName());
194 assertEquals(f2.getFlowName(), flowsToExecute.get(5).getBuildingBlock().getBpmnFlowName());
196 assertEquals(f2.getFlowName(), flowsToExecute.get(11).getBuildingBlock().getBpmnFlowName());
200 pnfOffset = (vnfCount - 1) * 4;
202 assertEquals(f5.getFlowName(), flowsToExecute.get(5 + pnfOffset).getBuildingBlock().getBpmnFlowName());
204 assertEquals(f6.getFlowName(), flowsToExecute.get(6 + pnfOffset).getBuildingBlock().getBpmnFlowName());
205 // ControllerExecutionBB
206 assertEquals(f7.getFlowName(), flowsToExecute.get(7 + pnfOffset).getBuildingBlock().getBpmnFlowName());
207 // ControllerExecutionBB
208 assertEquals(f8.getFlowName(), flowsToExecute.get(8 + pnfOffset).getBuildingBlock().getBpmnFlowName());
210 assertEquals(f9.getFlowName(), flowsToExecute.get(9 + pnfOffset).getBuildingBlock().getBpmnFlowName());
213 assertEquals(f10.getFlowName(), flowsToExecute.get(10 + pnfOffset).getBuildingBlock().getBpmnFlowName());
214 // ActivateVfModuleBB
215 assertEquals(f11.getFlowName(), flowsToExecute.get(11 + pnfOffset).getBuildingBlock().getBpmnFlowName());
216 // ControllerExecutionBB
217 assertEquals(f12.getFlowName(), flowsToExecute.get(14 + pnfOffset).getBuildingBlock().getBpmnFlowName());
219 assertEquals(f13.getFlowName(), flowsToExecute.get(15 + pnfOffset).getBuildingBlock().getBpmnFlowName());
223 public void buildExecuteBuildingBlockListSortByBaseVfModuleTest() {
224 buildExecuteBuildingBlockListOrderOfVnf(1, false, false);
228 public void buildExecuteBuildingBlockListSortByPriorityTest() {
229 buildExecuteBuildingBlockListOrderOfVnf(1, false, true);
233 public void buildExecuteBuildingBlockListGroupByResourceTypeAndSortByPriorityTest() {
234 buildExecuteBuildingBlockListOrderOfVnf(2, false, true);
238 public void buildExecuteBuildingBlockListGroupByResourceTypeTest() {
239 buildExecuteBuildingBlockListOrderOfVnf(2, false, false);
243 public void buildExecuteBuildingBlockListGroupByResourceTypeVnfAndPnfTest() {
244 buildExecuteBuildingBlockListOrderOfVnf(2, true, false);