re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / merge / policy / PoliciesMergeCommandTest.java
1 package org.openecomp.sdc.be.components.merge.policy;
2
3 import com.google.common.collect.ImmutableMap;
4 import org.junit.Before;
5 import org.junit.Test;
6 import org.junit.runner.RunWith;
7 import org.mockito.ArgumentCaptor;
8 import org.mockito.Captor;
9 import org.mockito.InjectMocks;
10 import org.mockito.Mock;
11 import org.mockito.junit.MockitoJUnitRunner;
12 import org.openecomp.sdc.be.components.utils.ComponentInstanceBuilder;
13 import org.openecomp.sdc.be.components.utils.GroupDefinitionBuilder;
14 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
15 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
16 import org.openecomp.sdc.be.dao.api.ActionStatus;
17 import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
18 import org.openecomp.sdc.be.impl.ComponentsUtils;
19 import org.openecomp.sdc.be.model.ComponentInstance;
20 import org.openecomp.sdc.be.model.GroupDefinition;
21 import org.openecomp.sdc.be.model.PolicyDefinition;
22 import org.openecomp.sdc.be.model.Resource;
23 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
24 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
25
26 import java.util.HashMap;
27 import java.util.List;
28 import java.util.Map;
29
30 import static java.util.Collections.emptyList;
31 import static java.util.Collections.singletonList;
32 import static org.assertj.core.api.Assertions.assertThat;
33 import static org.mockito.ArgumentMatchers.anyList;
34 import static org.mockito.ArgumentMatchers.eq;
35 import static org.mockito.Mockito.verifyZeroInteractions;
36 import static org.mockito.Mockito.when;
37
38 @RunWith(MockitoJUnitRunner.class)
39 public class PoliciesMergeCommandTest {
40
41     private static final String CONTAINER_ID = "containerId";
42     private static final String GROUP1 = "group1";
43     private static final String GROUP1_ORIG_ID = GROUP1 + "Id";
44     private static final String GROUP1_UPDATED_ID = GROUP1 +"NewId";
45     private static final String GROUP2_ORIG_ID = "group2Id";
46     private static final String INSTANCE1 = "instance1";
47     private static final String INSTANCE1_ORIG_ID = INSTANCE1 + "Id";
48     private static final String INSTANCE1_UPDATED_ID = INSTANCE1+ "NewId";
49     private static final String INSTANCE2_ORIG_ID = "instance2Id";
50     private static final Resource DONT_CARE = new Resource();
51     @InjectMocks
52     private PoliciesMergeCommand testInstance;
53     @Mock
54     private ToscaOperationFacade toscaOperationFacade;
55     @Mock
56     private ComponentsUtils componentsUtils;
57     @Captor
58     private ArgumentCaptor<List<PolicyDefinition>> policiesToMerge;
59
60     private PolicyDefinition noTargetsPolicy;
61     private ComponentInstance instance1;
62     private GroupDefinition group1;
63     private Resource prevResource, newResource;
64     private PolicyDefinition policy1;
65
66     @Before
67     public void setUp() throws Exception {
68         instance1 = new ComponentInstanceBuilder()
69                 .setName(INSTANCE1)
70                 .setId(INSTANCE1_UPDATED_ID)
71                 .build();
72         group1 = GroupDefinitionBuilder.create()
73                 .setName(GROUP1 + "newName")
74                 .setInvariantName(GROUP1)
75                 .setUniqueId(GROUP1_UPDATED_ID)
76                 .build();
77         newResource = new ResourceBuilder()
78                 .addGroup(group1)
79                 .addComponentInstance(instance1)
80                 .setUniqueId(CONTAINER_ID)
81                 .build();
82
83         ComponentInstance prevInstance1 = new ComponentInstanceBuilder()
84                 .setName(INSTANCE1)
85                 .setId(INSTANCE1_ORIG_ID)
86                 .build();
87
88         ComponentInstance prevInstance2 = new ComponentInstanceBuilder()
89                 .setName(INSTANCE2_ORIG_ID)
90                 .setId(INSTANCE2_ORIG_ID)
91                 .build();
92
93         GroupDefinition prevGroup1 = GroupDefinitionBuilder.create()
94                 .setName(GROUP1)
95                 .setInvariantName(GROUP1)
96                 .setUniqueId(GROUP1_ORIG_ID)
97                 .build();
98
99         GroupDefinition prevGroup2 = GroupDefinitionBuilder.create()
100                 .setName(GROUP2_ORIG_ID)
101                 .setInvariantName(GROUP2_ORIG_ID)
102                 .setUniqueId(GROUP2_ORIG_ID)
103                 .build();
104
105         policy1 = PolicyDefinitionBuilder.create()
106                 .addComponentInstanceTarget(prevInstance1.getUniqueId())
107                 .addComponentInstanceTarget(prevInstance2.getUniqueId())
108                 .addGroupTarget(prevGroup1.getUniqueId())
109                 .addGroupTarget(prevGroup2.getUniqueId())
110                 .setName("policy1")
111                 .setUniqueId("policy1")
112                 .build();
113
114         noTargetsPolicy = PolicyDefinitionBuilder.create()
115                 .setUniqueId("policy2")
116                 .setName("policy2")
117                 .build();
118
119
120         prevResource = new ResourceBuilder()
121                 .addGroup(prevGroup1)
122                 .addGroup(prevGroup2)
123                 .addComponentInstance(prevInstance1)
124                 .addComponentInstance(prevInstance2)
125                 .build();
126     }
127
128     @Test
129     public void whenPreviousComponentHasNoPolicies_returnOk() {
130         ActionStatus mergeResult = testInstance.mergeComponents(new Resource(), DONT_CARE);
131         assertThat(mergeResult).isEqualTo(ActionStatus.OK);
132         verifyZeroInteractions(toscaOperationFacade, componentsUtils);
133     }
134
135     @Test
136     public void associatePrevPoliciesToNewComponent() {
137         prevResource = new ResourceBuilder()
138                 .addPolicy(policy1)
139                 .addPolicy(noTargetsPolicy)
140                 .build();
141         when(toscaOperationFacade.associatePoliciesToComponent(eq(CONTAINER_ID), policiesToMerge.capture())).thenReturn(StorageOperationStatus.OK);
142         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.OK)).thenReturn(ActionStatus.OK);
143         ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
144         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
145         List<PolicyDefinition> mergedPolicies = policiesToMerge.getValue();
146         assertThat(mergedPolicies)
147                 .containsExactlyInAnyOrder(policy1, noTargetsPolicy);
148     }
149
150     @Test
151     public void whenFailingToAssociatePolicies_propagateTheError() {
152         prevResource = new ResourceBuilder()
153                 .addPolicy(policy1)
154                 .build();
155         when(toscaOperationFacade.associatePoliciesToComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
156         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.GENERAL_ERROR)).thenReturn(ActionStatus.GENERAL_ERROR);
157         ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
158         assertThat(actionStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
159     }
160
161     @Test
162     public void whenPreviousPolicyTargetsDoesNotExistInNewVersion_ignoreTargets() {
163         Map<PolicyTargetType, List<String>> expectedTargetsMap = createTargetsMap(singletonList(instance1.getUniqueId()), singletonList(group1.getUniqueId()));
164         mergePolicies_verifyPoliciesTargets(policy1, expectedTargetsMap);
165     }
166
167     @Test
168     public void whenPrevPolicyGroupTargetNotExistInNewVersion_returnEmptyListInTargetMap() {
169         PolicyDefinition policy = PolicyDefinitionBuilder.create()
170                 .setName("policy")
171                 .setUniqueId("policy")
172                 .addGroupTarget(GROUP2_ORIG_ID)
173                 .addComponentInstanceTarget(INSTANCE1_ORIG_ID)
174                 .build();
175         Map<PolicyTargetType, List<String>> expectedTargetsMap = createTargetsMap(singletonList(INSTANCE1_UPDATED_ID), emptyList());
176         mergePolicies_verifyPoliciesTargets(policy, expectedTargetsMap);
177     }
178
179     @Test
180     public void whenPrevCapabilityInstanceTargetNotExistInNewVersion_returnEmptyListInTargetMap() {
181         PolicyDefinition policy = PolicyDefinitionBuilder.create()
182                 .setName("policy")
183                 .setUniqueId("policy")
184                 .addGroupTarget(GROUP1_ORIG_ID)
185                 .addComponentInstanceTarget(INSTANCE2_ORIG_ID)
186                 .build();
187         Map<PolicyTargetType, List<String>> expectedTargetsMap = createTargetsMap(emptyList(), singletonList(GROUP1_UPDATED_ID));
188         mergePolicies_verifyPoliciesTargets(policy, expectedTargetsMap);
189     }
190
191     @Test
192     public void whenPrevCapabilityInstanceAndGroupTargetsNotExistInNewVersion_returnTargetMapWithEmptyListsOfIds() {
193         PolicyDefinition policy = PolicyDefinitionBuilder.create()
194                 .setName("policy")
195                 .setUniqueId("policy")
196                 .addGroupTarget(GROUP2_ORIG_ID)
197                 .addComponentInstanceTarget(INSTANCE2_ORIG_ID)
198                 .build();
199         Map<PolicyTargetType, List<String>> expectedTargetsMap = createTargetsMap(emptyList(), emptyList());
200         mergePolicies_verifyPoliciesTargets(policy, expectedTargetsMap);
201     }
202
203     @Test
204     public void whenPrevCapabilityHasNoTargets_returnNullTargetsMap() {
205         mergePolicies_verifyPoliciesTargets(noTargetsPolicy, null);
206     }
207
208     private void mergePolicies_verifyPoliciesTargets(PolicyDefinition prevPolicy, Map<PolicyTargetType, List<String>> expectedTargetsMap) {
209         prevResource.setPolicies(new HashMap<>());
210         prevResource.getPolicies().put(prevPolicy.getUniqueId(), prevPolicy);
211         when(toscaOperationFacade.associatePoliciesToComponent(eq(CONTAINER_ID), policiesToMerge.capture())).thenReturn(StorageOperationStatus.OK);
212         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.OK)).thenReturn(ActionStatus.OK);
213         ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
214         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
215         List<PolicyDefinition> mergedPolicies = policiesToMerge.getValue();
216         assertThat(mergedPolicies)
217                 .extracting("targets")
218                 .containsExactlyInAnyOrder(expectedTargetsMap);
219     }
220     
221     private Map<PolicyTargetType, List<String>> createTargetsMap(List<String> cmptInstanceTargets, List<String> groupTargets) {
222         return ImmutableMap.of(PolicyTargetType.COMPONENT_INSTANCES, cmptInstanceTargets, PolicyTargetType.GROUPS, groupTargets);
223     }
224
225 }