1 package org.openecomp.sdc.be.components.merge.input;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNull;
6 import java.util.ArrayList;
7 import java.util.Arrays;
8 import java.util.Collections;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
15 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
16 import org.openecomp.sdc.be.dao.utils.MapUtil;
17 import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
18 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
19 import org.openecomp.sdc.be.model.ComponentInstanceInput;
20 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
21 import org.openecomp.sdc.be.model.InputDefinition;
22 import org.openecomp.sdc.be.model.Resource;
24 public class InputsValuesMergingBusinessLogicTest {
26 public static final String INPUT_DEFUALT_TYPE = "string";
27 public static final String INPUT1_ID = "input1";
28 public static final String INPUT2_ID = "input2";
29 public static final String INPUT3_ID = "input3";
30 public static final String INPUT4_ID = "input4";
31 private InputsValuesMergingBusinessLogic testInstance;
34 public void setUp() throws Exception {
35 testInstance = new InputsValuesMergingBusinessLogic();
39 public void testMergeInputs_inputsOfDifferentType_dontCopyOldValue() throws Exception {
40 InputDefinition oldInput = createUserDefinedInputDefinition(INPUT1_ID, "oldVal1");
42 InputDefinition newInput = createInputDefinition(INPUT1_ID, null);
43 newInput.setType("int");
46 Map<String, InputDefinition> updatedInputs = Collections.singletonMap(newInput.getName(), newInput);
47 Map<String, InputDefinition> oldInputs = Collections.singletonMap(oldInput.getName(), oldInput);
48 testInstance.mergeComponentInputs(oldInputs, updatedInputs);
50 assertNull(updatedInputs.get(INPUT1_ID).getDefaultValue());
54 public void testMergeInputs_newInputsHaveNoValue_copyOldValues() throws Exception {
55 InputDefinition oldInputWithCsarDefaultValue = createInputDefinition(INPUT1_ID, "oldVal1");
56 InputDefinition oldInputWithUserDefinedValue = createUserDefinedInputDefinition(INPUT2_ID, "oldVal2");
57 InputDefinition oldInputNotExistOnNew = createUserDefinedInputDefinition(INPUT3_ID, null);
59 InputDefinition newInput1 = createInputDefinition(INPUT1_ID, "");
60 InputDefinition newInput2 = createUserDefinedInputDefinition(INPUT2_ID, null);
62 Map<String, InputDefinition> updatedInputs = mapInputsByName(Arrays.asList(newInput1, newInput2));
63 Map<String, InputDefinition> oldInputs = mapInputsByName(Arrays.asList(oldInputWithCsarDefaultValue, oldInputWithUserDefinedValue, oldInputNotExistOnNew));
64 testInstance.mergeComponentInputs(oldInputs, updatedInputs);
66 assertEquals(oldInputWithCsarDefaultValue.getDefaultValue(), updatedInputs.get(INPUT1_ID).getDefaultValue());
67 assertEquals(oldInputWithUserDefinedValue.getDefaultValue(), updatedInputs.get(INPUT2_ID).getDefaultValue());
68 assertNull(updatedInputs.get(INPUT3_ID));
72 public void testMergeInputs_newInputsHaveValue_dontOverrideNewValue() throws Exception {
73 InputDefinition oldInputWithCsarDefaultValue = createInputDefinition(INPUT1_ID, "oldVal1");
74 InputDefinition oldInputWithUserDefinedValue = createUserDefinedInputDefinition(INPUT2_ID, "oldVal2");
75 InputDefinition oldInputWithNoValue = createUserDefinedInputDefinition(INPUT3_ID, null);
77 InputDefinition newInput1 = createInputDefinition(INPUT1_ID, "newVal1");
78 InputDefinition newInput2 = createUserDefinedInputDefinition(INPUT2_ID, "newVal2");
79 InputDefinition newInput3 = createUserDefinedInputDefinition(INPUT3_ID, "newVal3");
80 InputDefinition newInput4 = createUserDefinedInputDefinition(INPUT4_ID, "newVal4");
82 Map<String, InputDefinition> updatedInputs = mapInputsByName(Arrays.asList(newInput1, newInput2, newInput3, newInput4));
83 Map<String, InputDefinition> oldInputs = mapInputsByName(Arrays.asList(oldInputWithCsarDefaultValue, oldInputWithUserDefinedValue, oldInputWithNoValue));
84 testInstance.mergeComponentInputs(oldInputs, updatedInputs);
86 assertEquals(updatedInputs.get(INPUT1_ID).getDefaultValue(), newInput1.getDefaultValue());
87 assertEquals(updatedInputs.get(INPUT2_ID).getDefaultValue(), newInput2.getDefaultValue());
88 assertEquals(updatedInputs.get(INPUT3_ID).getDefaultValue(), newInput3.getDefaultValue());
89 assertEquals(updatedInputs.get(INPUT4_ID).getDefaultValue(), newInput4.getDefaultValue());
93 public void getPrevoislyDeclaredInputsToMerge() throws Exception {
94 PropertyDataDefinition declaredInputProp1 = new PropertyDataDefinitionBuilder().addGetInputValue(INPUT1_ID).addGetInputValue(INPUT3_ID).setUniqueId("prevDeclaredPropId").build();
95 PropertyDataDefinition declaredInputProp2 = new PropertyDataDefinitionBuilder().addGetInputValue(INPUT4_ID).setUniqueId("prevDeclaredPropId2").build();
97 Resource prevResource = new ResourceBuilder().addInput(INPUT1_ID).addInput(INPUT2_ID).addInput(INPUT3_ID).addInput(INPUT4_ID).build();
99 Resource currentResource = new ResourceBuilder()
101 .addInstanceProperty("inst1", new ComponentInstanceProperty(declaredInputProp1))
102 .addInstanceInput("inst2", new ComponentInstanceInput(declaredInputProp2))
105 List<InputDefinition> previouslyDeclaredInputs = testInstance.getPreviouslyDeclaredInputsToMerge(prevResource, currentResource);
106 assertEquals(3, previouslyDeclaredInputs.size());
108 assertInput(previouslyDeclaredInputs.get(0), INPUT1_ID, declaredInputProp1.getUniqueId(), "inst1");
109 assertInput(previouslyDeclaredInputs.get(1), INPUT3_ID, declaredInputProp1.getUniqueId(), "inst1");
110 assertInput(previouslyDeclaredInputs.get(2), INPUT4_ID, declaredInputProp2.getUniqueId(), "inst2");
113 private void assertInput(InputDefinition inputDefinition, String expectedInputId, String expectedPropertyId, String expectedInstanceUniqueId) {
114 assertEquals(expectedInputId, inputDefinition.getUniqueId());
115 assertEquals(expectedPropertyId, inputDefinition.getPropertyId());
116 assertEquals(inputDefinition.getInstanceUniqueId(), expectedInstanceUniqueId);
119 private Map<String, InputDefinition> mapInputsByName(List<InputDefinition> inputs) {
120 return MapUtil.toMap(inputs, InputDefinition::getName);
123 private InputDefinition createInputDefinition(String name, String value) {
124 InputDefinition inputDef = new InputDefinition();
125 inputDef.setName(name);
126 inputDef.setDefaultValue(value);
127 inputDef.setType(INPUT_DEFUALT_TYPE);
131 private InputDefinition createUserDefinedInputDefinition(String name, String value) {
132 InputDefinition inputDef = createInputDefinition(name, value);
133 inputDef.setOwnerId("owner");
137 private void addInstanceProperty(Resource resource, ComponentInstanceProperty prop, String instanceId) {
138 addInstancePropDefinition(resource.getComponentInstancesProperties(), prop, instanceId);
141 private void addInstanceInput(Resource resource, ComponentInstanceInput prop, String instanceId) {
142 addInstancePropDefinition(resource.getComponentInstancesInputs(), prop, instanceId);
145 private <T extends PropertyDataDefinition> void addInstancePropDefinition(Map<String, List<T>> propsDefinitions, T propDef, String instanceId) {
146 propsDefinitions.computeIfAbsent(instanceId, id -> new ArrayList<>()).add(propDef);
149 private Resource createResourceWithInputs(String ... inputsIds) {
150 Resource resource = new Resource();
151 List<InputDefinition> inputs = new ArrayList<>();
152 for (String inputId : inputsIds) {
153 InputDefinition inputDefinition = new InputDefinition();
154 inputDefinition.setOwnerId("cs0008");
155 inputDefinition.setUniqueId(inputId);
156 inputs.add(inputDefinition);
158 resource.setInputs(inputs);
163 private ComponentInstanceProperty createGetInputComponentProperty(String ... declaredToInputId) {
164 ComponentInstanceProperty prevDeclaredProperty = new ComponentInstanceProperty();
165 for (String inputId : declaredToInputId) {
166 addGetInputValueOnProp(inputId, prevDeclaredProperty);
169 return prevDeclaredProperty;
172 private void addGetInputValueOnProp(String declaredToInputId, PropertyDataDefinition declaredProperty) {
173 GetInputValueDataDefinition getInputDef = new GetInputValueDataDefinition();
174 getInputDef.setInputId(declaredToInputId);
175 if (declaredProperty.getGetInputValues() == null) {
176 declaredProperty.setGetInputValues(new ArrayList<>());
178 declaredProperty.getGetInputValues().add(getInputDef);
181 private ComponentInstanceInput createGetInputComponentInstanceInput(String declaredToInputId) {
182 ComponentInstanceInput prevDeclaredProp = new ComponentInstanceInput();
183 addGetInputValueOnProp(declaredToInputId, prevDeclaredProp);
184 return prevDeclaredProp;