1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
package org.openecomp.sdc.be.components.merge.instance;
import fj.data.Either;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.openecomp.sdc.be.auditing.impl.AuditingManager;
import org.openecomp.sdc.be.components.merge.input.DeclaredInputsResolver;
import org.openecomp.sdc.be.components.merge.input.InputsValuesMergingBusinessLogic;
import org.openecomp.sdc.be.components.utils.AnnotationBuilder;
import org.openecomp.sdc.be.components.utils.InputsBuilder;
import org.openecomp.sdc.be.components.utils.ResourceBuilder;
import org.openecomp.sdc.be.dao.api.ActionStatus;
import org.openecomp.sdc.be.datatypes.elements.Annotation;
import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.model.InputDefinition;
import org.openecomp.sdc.be.model.Resource;
import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.openecomp.sdc.be.components.utils.Conditions.hasPropertiesWithNames;
@RunWith(MockitoJUnitRunner.class)
public class ComponentInstanceInputsRedeclareHandlerTest {
private static final String RESOURCE_ID = "resourceID";
private ComponentInstanceInputsRedeclareHandler testInstance;
@Mock
private ToscaOperationFacade toscaOperationFacade;
@Mock
private DeclaredInputsResolver declaredInputsResolver;
@Mock
private InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic;
@Captor
private ArgumentCaptor<Map<String, List<PropertyDataDefinition>>> getInputPropertiesCaptor;
private Resource currContainer;
private List<InputDefinition> prevDeclaredInputs;
private Annotation annotation1, annotation2, annotation3;
@Before
public void setUp() throws Exception {
testInstance = new ComponentInstanceInputsRedeclareHandler(declaredInputsResolver, toscaOperationFacade, new ComponentsUtils(mock(AuditingManager.class)), inputsValuesMergingBusinessLogic);
currContainer = new ResourceBuilder()
.addInstanceProperty("inst1", "prop1")
.addInstanceProperty("inst1", "prop2")
.addInstanceInput("inst1", "prop1", Collections.singletonList(new GetInputValueDataDefinition()))
.addInstanceInput("inst1", "prop2", Collections.singletonList(new GetInputValueDataDefinition()))
.setUniqueId(RESOURCE_ID)
.build();
annotation1 = AnnotationBuilder.create()
.setName("annotation1")
.build();
annotation2 = AnnotationBuilder.create()
.setName("annotation2")
.build();
annotation3 = AnnotationBuilder.create()
.setName("annotation3")
.build();
InputDefinition declaredInput1 = InputsBuilder.create()
.setPropertyId("prop1")
.setName("input1")
.addAnnotation(annotation1)
.addAnnotation(annotation2)
.build();
InputDefinition declaredInput2 = InputsBuilder.create()
.setPropertyId("prop2")
.setName("input2")
.addAnnotation(annotation3)
.build();
prevDeclaredInputs = asList(declaredInput1, declaredInput2);
}
@Test
public void redeclareOnlyPropertiesForGivenInstance() {
Resource originInstanceType = new Resource();
when(declaredInputsResolver.getPreviouslyDeclaredInputsToMerge(anyList(), eq(currContainer), getInputPropertiesCaptor.capture())).thenReturn(prevDeclaredInputs);
when(toscaOperationFacade.updateInputsToComponent(prevDeclaredInputs, RESOURCE_ID)).thenReturn(Either.left(null));
ActionStatus actionStatus = testInstance.redeclareComponentInputsForInstance(currContainer, "inst1", originInstanceType, Collections.emptyList());
assertThat(actionStatus).isEqualTo(ActionStatus.OK);
verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver();
}
@Test
public void updateInputsWithAnnotationsFromOriginInstanceType() {
InputDefinition input1 = InputsBuilder.create()
.addAnnotation(annotation2)
.addAnnotation(annotation3)
.setName("prop1")
.build();
InputDefinition input2 = InputsBuilder.create()
.setName("prop2")
.build();
Resource originInstanceType = new ResourceBuilder()
.addInput(input1)
.addInput(input2)
.build();
when(declaredInputsResolver.getPreviouslyDeclaredInputsToMerge(anyList(), eq(currContainer), getInputPropertiesCaptor.capture())).thenReturn(prevDeclaredInputs);
when(toscaOperationFacade.updateInputsToComponent(prevDeclaredInputs, RESOURCE_ID)).thenReturn(Either.left(null));
ActionStatus actionStatus = testInstance.redeclareComponentInputsForInstance(currContainer, "inst1", originInstanceType, Collections.emptyList());
assertThat(actionStatus).isEqualTo(ActionStatus.OK);
assertThat(prevDeclaredInputs)
.extracting("annotations")
.containsExactlyInAnyOrder(asList(annotation1, annotation3, annotation2), asList(annotation3));
}
private void verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver() {
Map<String, List<PropertyDataDefinition>> allResourceProps = getInputPropertiesCaptor.getValue();
assertThat(allResourceProps)
.hasEntrySatisfying("inst1", hasPropertiesWithNames("prop1", "prop2"));
}
}
|