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.so.bpmn.BaseTaskTest;
 
  44 import org.onap.so.bpmn.common.BuildingBlockExecution;
 
  45 import org.onap.so.bpmn.common.exceptions.RequiredExecutionVariableExeception;
 
  46 import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.Constants;
 
  47 import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.InputParameterRetrieverTask;
 
  48 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 
  49 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 
  50 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 
  51 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 
  52 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestParameters;
 
  53 import org.onap.so.client.exception.BBObjectNotFoundException;
 
  54 import org.onap.so.client.sdnc.SDNCClient;
 
  55 import org.onap.vnfmadapter.v1.model.ExternalVirtualLink;
 
  56 import org.onap.vnfmadapter.v1.model.ExternalVirtualLinkCpConfig;
 
  57 import org.onap.vnfmadapter.v1.model.ExternalVirtualLinkExtCps;
 
  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() {