2723746ae44ba4c24c261213185716950ae39705
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / policy / PolicyTargetsUpdateHandlerTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  * Modifications copyright (c) 2019 Nokia
20  * ================================================================================
21  */
22 package org.openecomp.sdc.be.components.impl.policy;
23
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.mockito.ArgumentCaptor;
28 import org.mockito.Captor;
29 import org.mockito.Mock;
30 import org.mockito.junit.MockitoJUnitRunner;
31 import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
32 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
33 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
34 import org.openecomp.sdc.be.dao.api.ActionStatus;
35 import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
36 import org.openecomp.sdc.be.model.Component;
37 import org.openecomp.sdc.be.model.PolicyDefinition;
38 import org.openecomp.sdc.be.model.Resource;
39 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
40 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
41
42 import java.util.List;
43 import java.util.stream.Stream;
44
45 import static org.assertj.core.api.Assertions.assertThat;
46 import static org.mockito.ArgumentMatchers.anyList;
47 import static org.mockito.ArgumentMatchers.eq;
48 import static org.mockito.Mockito.verifyZeroInteractions;
49 import static org.mockito.Mockito.when;
50 import static org.openecomp.sdc.be.components.impl.utils.TestGenerationUtils.getComponentsUtils;
51
52 @RunWith(MockitoJUnitRunner.class)
53 //note that this class only tests group targets, the tests for instance targets are under PolicyTargetsUpdateOperationTest
54 public class PolicyTargetsUpdateHandlerTest {
55
56     private static final String CONTAINER_ID = "containerId";
57
58     private PolicyTargetsUpdateHandler testInstance;
59     @Mock
60     private ToscaOperationFacade toscaOperationFacade;
61     @Captor
62     private ArgumentCaptor<List<PolicyDefinition>> updatedPoliciesCaptor;
63     private PolicyDefinition policyWithGroupTarget1, policyWithGroupTarget2, policyWithGroupTarget3;
64     private Resource container;
65
66     @Before
67     public void setUp() throws Exception {
68         policyWithGroupTarget1 = createPolicyWithGroupsAsTargets("policy1", "group1", "group2");
69         policyWithGroupTarget2 = createPolicyWithGroupsAsTargets("policy2", "group1", "group2", "group3");
70         policyWithGroupTarget3 = createPolicyWithGroupsAsTargets("policy3", "group1", "group3");
71         container = new ResourceBuilder()
72                 .addPolicy(policyWithGroupTarget1)
73                 .addPolicy(policyWithGroupTarget2)
74                 .addPolicy(policyWithGroupTarget3)
75                 .setUniqueId(CONTAINER_ID)
76                 .build();
77         testInstance = new PolicyTargetsUpdateHandler(toscaOperationFacade, getComponentsUtils(), new PolicyTargetsUpdater());
78     }
79
80
81     @Test
82     public void onDeleteInstance_whenNoPolicies_returnActionOk() {
83         Component container = new Resource();
84         testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
85         verifyZeroInteractions(toscaOperationFacade);
86     }
87
88     @Test
89     public void onDeleteInstance_whenNoPoliciesWithGroupsAsTargets_returnOk() {
90         PolicyDefinition policy = PolicyDefinitionBuilder.create().addComponentInstanceTarget("someInst").build();
91         Component container = new ResourceBuilder().addPolicy(policy).build();
92         testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
93         verifyZeroInteractions(toscaOperationFacade);
94     }
95
96     @Test
97     public void onDeleteInstance_whenNoPoliciesWithGivenGroupAsTarget_returnActionOk() {
98         testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
99         verifyZeroInteractions(toscaOperationFacade);
100     }
101
102     @Test
103     public void onDeleteInstance_removeDeletedTargetFromPolicies() {
104         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
105         testInstance.removePoliciesTargets(container, "group2", PolicyTargetType.GROUPS);
106         List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
107         verifyUpdatedPolicies(updatedPolicies, policyWithGroupTarget1, policyWithGroupTarget2);
108         verifyUpdatedPolicyTargets(policyWithGroupTarget1, "group1");
109         verifyUpdatedPolicyTargets(policyWithGroupTarget2, "group1", "group3");
110     }
111
112     @Test
113     public void onDeleteInstance_whenFailingToUpdatePolicies_throwException() {
114         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
115         try {
116             testInstance.removePoliciesTargets(container, "group2", PolicyTargetType.GROUPS);
117         } catch (ByActionStatusComponentException e) {
118             assertThat(e.getActionStatus()).isEqualTo(ActionStatus.GENERAL_ERROR);
119         }
120     }
121
122     private void verifyUpdatedPolicyTargets(PolicyDefinition updatedPolicy, String ... expectedCmptInstanceTargetIds) {
123         assertThat(updatedPolicy.resolveGroupTargets())
124                 .containsExactlyInAnyOrder(expectedCmptInstanceTargetIds);
125     }
126
127     private void verifyUpdatedPolicies(List<PolicyDefinition> updatedPolicies, PolicyDefinition ... expectedUpdatedPolicies) {
128         assertThat(updatedPolicies)
129                 .usingElementComparatorOnFields("targets")
130                 .containsExactlyInAnyOrder(expectedUpdatedPolicies);
131     }
132
133     private PolicyDefinition createPolicyWithGroupsAsTargets(String uniqueId, String ... groupId) {
134         PolicyDefinitionBuilder policyDefinitionBuilder = PolicyDefinitionBuilder.create();
135         Stream.of(groupId).forEach(policyDefinitionBuilder::addGroupTarget);
136         return policyDefinitionBuilder.setUniqueId(uniqueId).build();
137     }
138 }