Updating etsi-sol003-lcm-api module
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / bpmn / infrastructure / adapter / vnfm / tasks / utils / InputParameterRetrieverTaskTest.java
1 /*-
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
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 package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.utils;
21
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;
37 import java.util.Map;
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;
58
59 /**
60  * @author waqas.ikram@est.tech
61  */
62 public class InputParameterRetrieverTaskTest extends BaseTaskTest {
63
64     private static final String INSTANCE_TYPE_VALUE_1 = "m1.small";
65
66     private static final String INSTANCE_TYPE_VALUE_2 = "m1.large";
67
68     private static final String INSTANCE_TYPE = "instance_type";
69
70     private static final String RANDOM_EXT_VIRTUAL_LINK_ID = UUID.randomUUID().toString();
71
72     private static final String CPU_INSTANCE_ID = EXT_VIRTUAL_LINK_ID;
73
74     private static final String FLAVOR_VALUE = "ubuntu";
75
76     private static final String FLAVOR = "flavor_type";
77
78     private final StubbedBuildingBlockExecution stubbedxecution = new StubbedBuildingBlockExecution();
79
80     @Mock
81     private InputParametersProvider<GenericVnf> sdncInputParametersProvider;
82
83     private final InputParametersProvider<Map<String, Object>> userParamsinputParametersProvider =
84             new UserParamInputParametersProvider();
85
86     @Mock
87     private SDNCClient mockedSdncClient;
88
89     @Test
90     public void testGetInputParameters_inputParameterStoredInExecutionContext() throws BBObjectNotFoundException {
91         final InputParameterRetrieverTask objUnderTest = new InputParameterRetrieverTask(sdncInputParametersProvider,
92                 userParamsinputParametersProvider, extractPojosForBB);
93
94
95         final GeneralBuildingBlock buildingBlock =
96                 getGeneralBuildingBlock(getUserParamsMap(ADDITIONAL_PARAMS_VALUE, null));
97         stubbedxecution.setGeneralBuildingBlock(buildingBlock);
98
99         final InputParameter inputParameter = new InputParameter(Collections.emptyMap(), Collections.emptyList());
100         when(sdncInputParametersProvider.getInputParameter(Mockito.any(GenericVnf.class))).thenReturn(inputParameter);
101
102         when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(new GenericVnf());
103         objUnderTest.getInputParameters(stubbedxecution);
104
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());
111
112         final String actualInstanceType = actualAdditionalParams.get(INSTANCE_TYPE);
113         assertEquals(INSTANCE_TYPE_VALUE_1, actualInstanceType);
114
115     }
116
117     @Test
118     public void testGetInputParameters_ThrowExecption_NullInputParameterStoredInExecutionContext()
119             throws BBObjectNotFoundException {
120         final InputParameterRetrieverTask objUnderTest = new InputParameterRetrieverTask(sdncInputParametersProvider,
121                 userParamsinputParametersProvider, extractPojosForBB);
122
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);
127
128         final Object actual = stubbedxecution.getVariable(Constants.INPUT_PARAMETER);
129         assertNotNull(actual);
130         assertTrue(actual instanceof NullInputParameter);
131     }
132
133     @Test
134     public void testGetInputParameters_SdncAndUserParamInputParameterStoredInExecutionContext()
135             throws BBObjectNotFoundException {
136         final InputParameterRetrieverTask objUnderTest = new InputParameterRetrieverTask(sdncInputParametersProvider,
137                 userParamsinputParametersProvider, extractPojosForBB);
138
139
140         final GeneralBuildingBlock buildingBlock =
141                 getGeneralBuildingBlock(getUserParamsMap(ADDITIONAL_PARAMS_VALUE, EXT_VIRTUAL_LINKS_VALUE));
142         stubbedxecution.setGeneralBuildingBlock(buildingBlock);
143
144         final InputParameter inputParameter = new InputParameter(getAdditionalParams(), getExternalVirtualLink());
145         when(sdncInputParametersProvider.getInputParameter(Mockito.any(GenericVnf.class))).thenReturn(inputParameter);
146
147         when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(new GenericVnf());
148         objUnderTest.getInputParameters(stubbedxecution);
149
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());
156
157         final String actualInstanceType = actualAdditionalParams.get(INSTANCE_TYPE);
158         assertEquals(INSTANCE_TYPE_VALUE_1, actualInstanceType);
159
160         assertEquals(FLAVOR_VALUE, actualAdditionalParams.get(FLAVOR));
161         final List<ExternalVirtualLink> actualExtVirtualLinks = actualInputParameter.getExtVirtualLinks();
162         assertEquals(2, actualExtVirtualLinks.size());
163
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());
168
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());
173
174
175     }
176
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))));
181     }
182
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;
188     }
189
190
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;
199
200     }
201
202     private class StubbedBuildingBlockExecution implements BuildingBlockExecution {
203
204         private final Map<String, Serializable> execution = new HashMap<>();
205         private GeneralBuildingBlock buildingBlock;
206
207         private void setGeneralBuildingBlock(final GeneralBuildingBlock buildingBlock) {
208             this.buildingBlock = buildingBlock;
209         }
210
211         @Override
212         public GeneralBuildingBlock getGeneralBuildingBlock() {
213             return buildingBlock;
214         }
215
216         @SuppressWarnings("unchecked")
217         @Override
218         public <T> T getVariable(final String key) {
219             return (T) execution.get(key);
220         }
221
222         @Override
223         public <T> T getRequiredVariable(final String key) throws RequiredExecutionVariableExeception {
224             return null;
225         }
226
227         @Override
228         public void setVariable(final String key, final Serializable value) {
229             execution.put(key, value);
230         }
231
232         @Override
233         public Map<ResourceKey, String> getLookupMap() {
234             return Collections.emptyMap();
235         }
236
237         @Override
238         public String getFlowToBeCalled() {
239             return null;
240         }
241
242         @Override
243         public int getCurrentSequence() {
244             return 0;
245         }
246
247     }
248 }