2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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 * ================================================================================
22 package org.openecomp.sdc.be.components.impl.policy;
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;
42 import java.util.List;
43 import java.util.stream.Stream;
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;
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 {
56 private static final String CONTAINER_ID = "containerId";
58 private PolicyTargetsUpdateHandler testInstance;
60 private ToscaOperationFacade toscaOperationFacade;
62 private ArgumentCaptor<List<PolicyDefinition>> updatedPoliciesCaptor;
63 private PolicyDefinition policyWithGroupTarget1, policyWithGroupTarget2, policyWithGroupTarget3;
64 private Resource container;
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)
77 testInstance = new PolicyTargetsUpdateHandler(toscaOperationFacade, getComponentsUtils(), new PolicyTargetsUpdater());
82 public void onDeleteInstance_whenNoPolicies_returnActionOk() {
83 Component container = new Resource();
84 testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
85 verifyZeroInteractions(toscaOperationFacade);
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);
97 public void onDeleteInstance_whenNoPoliciesWithGivenGroupAsTarget_returnActionOk() {
98 testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
99 verifyZeroInteractions(toscaOperationFacade);
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");
113 public void onDeleteInstance_whenFailingToUpdatePolicies_throwException() {
114 when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
116 testInstance.removePoliciesTargets(container, "group2", PolicyTargetType.GROUPS);
117 } catch (ByActionStatusComponentException e) {
118 assertThat(e.getActionStatus()).isEqualTo(ActionStatus.GENERAL_ERROR);
122 private void verifyUpdatedPolicyTargets(PolicyDefinition updatedPolicy, String ... expectedCmptInstanceTargetIds) {
123 assertThat(updatedPolicy.resolveGroupTargets())
124 .containsExactlyInAnyOrder(expectedCmptInstanceTargetIds);
127 private void verifyUpdatedPolicies(List<PolicyDefinition> updatedPolicies, PolicyDefinition ... expectedUpdatedPolicies) {
128 assertThat(updatedPolicies)
129 .usingElementComparatorOnFields("targets")
130 .containsExactlyInAnyOrder(expectedUpdatedPolicies);
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();