2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019 Ericsson. 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
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=========================================================
20 package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.utils;
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertNotNull;
24 import static org.junit.Assert.assertTrue;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.eq;
27 import static org.mockito.Mockito.when;
28 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.ADDITIONAL_PARAMS_VALUE;
29 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.EXT_VIRTUAL_LINKS_VALUE;
30 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.EXT_VIRTUAL_LINK_ID;
31 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.getUserParamsMap;
32 import java.io.Serializable;
33 import java.util.Arrays;
34 import java.util.Collections;
35 import java.util.HashMap;
36 import java.util.List;
38 import java.util.Optional;
39 import java.util.UUID;
40 import org.junit.Test;
41 import org.mockito.Mock;
42 import org.mockito.Mockito;
43 import org.onap.etsi.sol003.adapter.lcm.v1.model.ExternalVirtualLink;
44 import org.onap.etsi.sol003.adapter.lcm.v1.model.ExternalVirtualLinkCpConfig;
45 import org.onap.etsi.sol003.adapter.lcm.v1.model.ExternalVirtualLinkExtCps;
46 import org.onap.so.bpmn.BaseTaskTest;
47 import org.onap.so.bpmn.common.BuildingBlockExecution;
48 import org.onap.so.bpmn.common.exceptions.RequiredExecutionVariableExeception;
49 import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.Constants;
50 import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.InputParameterRetrieverTask;
51 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
52 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
53 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
54 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
55 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestParameters;
56 import org.onap.so.client.exception.BBObjectNotFoundException;
57 import org.onap.so.client.sdnc.SDNCClient;
60 * @author waqas.ikram@est.tech
62 public class InputParameterRetrieverTaskTest extends BaseTaskTest {
64 private static final String INSTANCE_TYPE_VALUE_1 = "m1.small";
66 private static final String INSTANCE_TYPE_VALUE_2 = "m1.large";
68 private static final String INSTANCE_TYPE = "instance_type";
70 private static final String RANDOM_EXT_VIRTUAL_LINK_ID = UUID.randomUUID().toString();
72 private static final String CPU_INSTANCE_ID = EXT_VIRTUAL_LINK_ID;
74 private static final String FLAVOR_VALUE = "ubuntu";
76 private static final String FLAVOR = "flavor_type";
78 private final StubbedBuildingBlockExecution stubbedxecution = new StubbedBuildingBlockExecution();
81 private InputParametersProvider<GenericVnf> sdncInputParametersProvider;
83 private final InputParametersProvider<Map<String, Object>> userParamsinputParametersProvider =
84 new UserParamInputParametersProvider();
87 private SDNCClient mockedSdncClient;
90 public void testGetInputParameters_inputParameterStoredInExecutionContext() throws BBObjectNotFoundException {
91 final InputParameterRetrieverTask objUnderTest = new InputParameterRetrieverTask(sdncInputParametersProvider,
92 userParamsinputParametersProvider, extractPojosForBB);
95 final GeneralBuildingBlock buildingBlock =
96 getGeneralBuildingBlock(getUserParamsMap(ADDITIONAL_PARAMS_VALUE, null));
97 stubbedxecution.setGeneralBuildingBlock(buildingBlock);
99 final InputParameter inputParameter = new InputParameter(Collections.emptyMap(), Collections.emptyList());
100 when(sdncInputParametersProvider.getInputParameter(Mockito.any(GenericVnf.class))).thenReturn(inputParameter);
102 when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(new GenericVnf());
103 objUnderTest.getInputParameters(stubbedxecution);
105 final Object actual = stubbedxecution.getVariable(Constants.INPUT_PARAMETER);
106 assertNotNull(actual);
107 assertTrue(actual instanceof InputParameter);
108 final InputParameter actualInputParameter = (InputParameter) actual;
109 final Map<String, String> actualAdditionalParams = actualInputParameter.getAdditionalParams();
110 assertEquals(3, actualAdditionalParams.size());
112 final String actualInstanceType = actualAdditionalParams.get(INSTANCE_TYPE);
113 assertEquals(INSTANCE_TYPE_VALUE_1, actualInstanceType);
118 public void testGetInputParameters_ThrowExecption_NullInputParameterStoredInExecutionContext()
119 throws BBObjectNotFoundException {
120 final InputParameterRetrieverTask objUnderTest = new InputParameterRetrieverTask(sdncInputParametersProvider,
121 userParamsinputParametersProvider, extractPojosForBB);
123 when(sdncInputParametersProvider.getInputParameter(Mockito.any(GenericVnf.class)))
124 .thenThrow(RuntimeException.class);
125 when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(new GenericVnf());
126 objUnderTest.getInputParameters(stubbedxecution);
128 final Object actual = stubbedxecution.getVariable(Constants.INPUT_PARAMETER);
129 assertNotNull(actual);
130 assertTrue(actual instanceof NullInputParameter);
134 public void testGetInputParameters_SdncAndUserParamInputParameterStoredInExecutionContext()
135 throws BBObjectNotFoundException {
136 final InputParameterRetrieverTask objUnderTest = new InputParameterRetrieverTask(sdncInputParametersProvider,
137 userParamsinputParametersProvider, extractPojosForBB);
140 final GeneralBuildingBlock buildingBlock =
141 getGeneralBuildingBlock(getUserParamsMap(ADDITIONAL_PARAMS_VALUE, EXT_VIRTUAL_LINKS_VALUE));
142 stubbedxecution.setGeneralBuildingBlock(buildingBlock);
144 final InputParameter inputParameter = new InputParameter(getAdditionalParams(), getExternalVirtualLink());
145 when(sdncInputParametersProvider.getInputParameter(Mockito.any(GenericVnf.class))).thenReturn(inputParameter);
147 when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(new GenericVnf());
148 objUnderTest.getInputParameters(stubbedxecution);
150 final Object actual = stubbedxecution.getVariable(Constants.INPUT_PARAMETER);
151 assertNotNull(actual);
152 assertTrue(actual instanceof InputParameter);
153 final InputParameter actualInputParameter = (InputParameter) actual;
154 final Map<String, String> actualAdditionalParams = actualInputParameter.getAdditionalParams();
155 assertEquals(4, actualAdditionalParams.size());
157 final String actualInstanceType = actualAdditionalParams.get(INSTANCE_TYPE);
158 assertEquals(INSTANCE_TYPE_VALUE_1, actualInstanceType);
160 assertEquals(FLAVOR_VALUE, actualAdditionalParams.get(FLAVOR));
161 final List<ExternalVirtualLink> actualExtVirtualLinks = actualInputParameter.getExtVirtualLinks();
162 assertEquals(2, actualExtVirtualLinks.size());
164 final Optional<ExternalVirtualLink> externalVirtualLink0 = actualExtVirtualLinks.stream()
165 .filter(extVirtualLink -> EXT_VIRTUAL_LINK_ID.equals(extVirtualLink.getId())).findAny();
166 assertTrue(externalVirtualLink0.isPresent());
167 assertEquals(EXT_VIRTUAL_LINK_ID, externalVirtualLink0.get().getId());
169 final Optional<ExternalVirtualLink> externalVirtualLink1 = actualExtVirtualLinks.stream()
170 .filter(extVirtualLink -> RANDOM_EXT_VIRTUAL_LINK_ID.equals(extVirtualLink.getId())).findAny();
171 assertTrue(externalVirtualLink1.isPresent());
172 assertEquals(RANDOM_EXT_VIRTUAL_LINK_ID, externalVirtualLink1.get().getId());
177 private List<ExternalVirtualLink> getExternalVirtualLink() {
178 return Arrays.asList(
179 new ExternalVirtualLink().id(RANDOM_EXT_VIRTUAL_LINK_ID).addExtCpsItem(new ExternalVirtualLinkExtCps()
180 .addCpConfigItem(new ExternalVirtualLinkCpConfig().cpInstanceId(CPU_INSTANCE_ID))));
183 private Map<String, String> getAdditionalParams() {
184 final Map<String, String> additionalParams = new HashMap<>();
185 additionalParams.put(FLAVOR, FLAVOR_VALUE);
186 additionalParams.put(INSTANCE_TYPE, INSTANCE_TYPE_VALUE_2);
187 return additionalParams;
191 private GeneralBuildingBlock getGeneralBuildingBlock(final Map<String, Object> userParams) {
192 final GeneralBuildingBlock buildingBlock = new GeneralBuildingBlock();
193 final RequestContext requestContext = new RequestContext();
194 final RequestParameters requestParameters = new RequestParameters();
195 requestParameters.setUserParams(Arrays.asList(userParams));
196 requestContext.setRequestParameters(requestParameters);
197 buildingBlock.setRequestContext(requestContext);
198 return buildingBlock;
202 private class StubbedBuildingBlockExecution implements BuildingBlockExecution {
204 private final Map<String, Serializable> execution = new HashMap<>();
205 private GeneralBuildingBlock buildingBlock;
207 private void setGeneralBuildingBlock(final GeneralBuildingBlock buildingBlock) {
208 this.buildingBlock = buildingBlock;
212 public GeneralBuildingBlock getGeneralBuildingBlock() {
213 return buildingBlock;
216 @SuppressWarnings("unchecked")
218 public <T> T getVariable(final String key) {
219 return (T) execution.get(key);
223 public <T> T getRequiredVariable(final String key) throws RequiredExecutionVariableExeception {
228 public void setVariable(final String key, final Serializable value) {
229 execution.put(key, value);
233 public Map<ResourceKey, String> getLookupMap() {
234 return Collections.emptyMap();
238 public String getFlowToBeCalled() {
243 public int getCurrentSequence() {