1 package org.openecomp.sdc.be.components.impl.policy;
3 import org.junit.Before;
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;
21 import java.util.List;
22 import java.util.stream.Stream;
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;
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 {
35 private static final String CONTAINER_ID = "containerId";
37 private PolicyTargetsUpdateHandler testInstance;
39 private ToscaOperationFacade toscaOperationFacade;
41 private ArgumentCaptor<List<PolicyDefinition>> updatedPoliciesCaptor;
42 private PolicyDefinition policyWithGroupTarget1, policyWithGroupTarget2, policyWithGroupTarget3;
43 private Resource container;
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)
56 testInstance = new PolicyTargetsUpdateHandler(toscaOperationFacade, getComponentsUtils(), new PolicyTargetsUpdater());
61 public void onDeleteInstance_whenNoPolicies_returnActionOk() {
62 Component container = new Resource();
63 testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
64 verifyZeroInteractions(toscaOperationFacade);
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);
76 public void onDeleteInstance_whenNoPoliciesWithGivenGroupAsTarget_returnActionOk() {
77 testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
78 verifyZeroInteractions(toscaOperationFacade);
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");
92 public void onDeleteInstance_whenFailingToUpdatePolicies_throwException() {
93 when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
95 testInstance.removePoliciesTargets(container, "group2", PolicyTargetType.GROUPS);
96 } catch (ComponentException e) {
97 assertThat(e.getActionStatus()).isEqualTo(ActionStatus.GENERAL_ERROR);
101 private void verifyUpdatedPolicyTargets(PolicyDefinition updatedPolicy, String ... expectedCmptInstanceTargetIds) {
102 assertThat(updatedPolicy.resolveGroupTargets())
103 .containsExactlyInAnyOrder(expectedCmptInstanceTargetIds);
106 private void verifyUpdatedPolicies(List<PolicyDefinition> updatedPolicies, PolicyDefinition ... expectedUpdatedPolicies) {
107 assertThat(updatedPolicies)
108 .usingElementComparatorOnFields("targets")
109 .containsExactlyInAnyOrder(expectedUpdatedPolicies);
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();