re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / policy / PolicyTargetsUpdateHandlerTest.java
1 package org.openecomp.sdc.be.components.impl.policy;
2
3 import org.junit.Before;
4 import org.junit.Test;
5 import org.junit.runner.RunWith;
6 import org.mockito.ArgumentCaptor;
7 import org.mockito.Captor;
8 import org.mockito.Mock;
9 import org.mockito.junit.MockitoJUnitRunner;
10 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
11 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
12 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
13 import org.openecomp.sdc.be.dao.api.ActionStatus;
14 import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
15 import org.openecomp.sdc.be.model.Component;
16 import org.openecomp.sdc.be.model.PolicyDefinition;
17 import org.openecomp.sdc.be.model.Resource;
18 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
19 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
20
21 import java.util.List;
22 import java.util.stream.Stream;
23
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.mockito.ArgumentMatchers.anyList;
26 import static org.mockito.ArgumentMatchers.eq;
27 import static org.mockito.Mockito.verifyZeroInteractions;
28 import static org.mockito.Mockito.when;
29 import static org.openecomp.sdc.be.components.impl.utils.TestGenerationUtils.getComponentsUtils;
30
31 @RunWith(MockitoJUnitRunner.class)
32 //note that this class only tests group targets, the tests for instance targets are under PolicyTargetsUpdateOperationTest
33 public class PolicyTargetsUpdateHandlerTest {
34
35     private static final String CONTAINER_ID = "containerId";
36
37     private PolicyTargetsUpdateHandler testInstance;
38     @Mock
39     private ToscaOperationFacade toscaOperationFacade;
40     @Captor
41     private ArgumentCaptor<List<PolicyDefinition>> updatedPoliciesCaptor;
42     private PolicyDefinition policyWithGroupTarget1, policyWithGroupTarget2, policyWithGroupTarget3;
43     private Resource container;
44
45     @Before
46     public void setUp() throws Exception {
47         policyWithGroupTarget1 = createPolicyWithGroupsAsTargets("policy1", "group1", "group2");
48         policyWithGroupTarget2 = createPolicyWithGroupsAsTargets("policy2", "group1", "group2", "group3");
49         policyWithGroupTarget3 = createPolicyWithGroupsAsTargets("policy3", "group1", "group3");
50         container = new ResourceBuilder()
51                 .addPolicy(policyWithGroupTarget1)
52                 .addPolicy(policyWithGroupTarget2)
53                 .addPolicy(policyWithGroupTarget3)
54                 .setUniqueId(CONTAINER_ID)
55                 .build();
56         testInstance = new PolicyTargetsUpdateHandler(toscaOperationFacade, getComponentsUtils(), new PolicyTargetsUpdater());
57     }
58
59
60     @Test
61     public void onDeleteInstance_whenNoPolicies_returnActionOk() {
62         Component container = new Resource();
63         testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
64         verifyZeroInteractions(toscaOperationFacade);
65     }
66
67     @Test
68     public void onDeleteInstance_whenNoPoliciesWithGroupsAsTargets_returnOk() {
69         PolicyDefinition policy = PolicyDefinitionBuilder.create().addComponentInstanceTarget("someInst").build();
70         Component container = new ResourceBuilder().addPolicy(policy).build();
71         testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
72         verifyZeroInteractions(toscaOperationFacade);
73     }
74
75     @Test
76     public void onDeleteInstance_whenNoPoliciesWithGivenGroupAsTarget_returnActionOk() {
77         testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
78         verifyZeroInteractions(toscaOperationFacade);
79     }
80
81     @Test
82     public void onDeleteInstance_removeDeletedTargetFromPolicies() {
83         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
84         testInstance.removePoliciesTargets(container, "group2", PolicyTargetType.GROUPS);
85         List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
86         verifyUpdatedPolicies(updatedPolicies, policyWithGroupTarget1, policyWithGroupTarget2);
87         verifyUpdatedPolicyTargets(policyWithGroupTarget1, "group1");
88         verifyUpdatedPolicyTargets(policyWithGroupTarget2, "group1", "group3");
89     }
90
91     @Test
92     public void onDeleteInstance_whenFailingToUpdatePolicies_throwException() {
93         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
94         try {
95             testInstance.removePoliciesTargets(container, "group2", PolicyTargetType.GROUPS);
96         } catch (ComponentException e) {
97             assertThat(e.getActionStatus()).isEqualTo(ActionStatus.GENERAL_ERROR);
98         }
99     }
100
101     private void verifyUpdatedPolicyTargets(PolicyDefinition updatedPolicy, String ... expectedCmptInstanceTargetIds) {
102         assertThat(updatedPolicy.resolveGroupTargets())
103                 .containsExactlyInAnyOrder(expectedCmptInstanceTargetIds);
104     }
105
106     private void verifyUpdatedPolicies(List<PolicyDefinition> updatedPolicies, PolicyDefinition ... expectedUpdatedPolicies) {
107         assertThat(updatedPolicies)
108                 .usingElementComparatorOnFields("targets")
109                 .containsExactlyInAnyOrder(expectedUpdatedPolicies);
110     }
111
112     private PolicyDefinition createPolicyWithGroupsAsTargets(String uniqueId, String ... groupId) {
113         PolicyDefinitionBuilder policyDefinitionBuilder = PolicyDefinitionBuilder.create();
114         Stream.of(groupId).forEach(policyDefinitionBuilder::addGroupTarget);
115         return policyDefinitionBuilder.setUniqueId(uniqueId).build();
116     }
117 }