2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.pdpx.main.comm;
23 import static org.junit.Assert.assertEquals;
24 import static org.mockito.ArgumentMatchers.any;
25 import static org.mockito.ArgumentMatchers.startsWith;
26 import static org.mockito.Mockito.doThrow;
27 import static org.mockito.Mockito.never;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.when;
31 import java.util.Arrays;
32 import java.util.HashMap;
33 import java.util.List;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.junit.runner.RunWith;
38 import org.mockito.Mock;
39 import org.mockito.junit.MockitoJUnitRunner;
40 import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClient;
41 import org.onap.policy.models.pdp.concepts.PdpStatus;
42 import org.onap.policy.models.pdp.concepts.PdpUpdate;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
44 import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
45 import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
46 import org.onap.policy.pdpx.main.XacmlState;
47 import org.onap.policy.pdpx.main.rest.XacmlPdpApplicationManager;
48 import org.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager;
52 * Initializes objects, including the publisher.
54 @RunWith(MockitoJUnitRunner.class)
55 public class XacmlPdpUpdatePublisherTest {
57 private static final int NEW_COUNT = 4;
60 private TopicSinkClient client;
63 private XacmlState state;
66 private PdpStatus status;
69 private XacmlPdpApplicationManager appmgr;
72 private ToscaPolicy deployed1;
75 private ToscaPolicy deployed2;
78 private ToscaPolicy deployed3;
81 private ToscaPolicy deployed4;
84 private ToscaPolicy added1;
87 private ToscaPolicy added2;
90 private ToscaPolicy failPolicy1;
93 private ToscaPolicy failPolicy2;
96 private PdpUpdate update;
99 private PdpUpdate failurePdpUpdate;
101 private XacmlPdpUpdatePublisher publisher;
105 * Initializes objects, including the publisher.
108 public void setUp() {
109 Map<ToscaPolicy, XacmlApplicationServiceProvider> deployedPolicies = new HashMap<>();
110 deployedPolicies.put(deployed1, null);
111 deployedPolicies.put(deployed2, null);
112 deployedPolicies.put(deployed3, null);
113 deployedPolicies.put(deployed4, null);
114 when(appmgr.getToscaPolicies()).thenReturn(deployedPolicies);
116 // update includes two overlaps
117 List<ToscaPolicy> updatePolicies = Arrays.asList(added1, deployed2, deployed3, added2);
118 when(update.getPolicies()).thenReturn(updatePolicies);
120 List<ToscaPolicy> failureUpdatePolicies = Arrays.asList(added1, deployed2, deployed3, failPolicy1, failPolicy2);
121 when(failurePdpUpdate.getPolicies()).thenReturn(failureUpdatePolicies);
123 when(appmgr.getPolicyCount()).thenReturn(NEW_COUNT);
125 when(state.updateInternalState(any(), any())).thenReturn(status);
127 when(client.send(any())).thenReturn(true);
129 publisher = new XacmlPdpUpdatePublisher(client, state, appmgr);
133 public void testHandlePdpUpdate() throws XacmlApplicationException {
134 XacmlPdpStatisticsManager statmgr = new XacmlPdpStatisticsManager();
135 XacmlPdpStatisticsManager.setCurrent(statmgr);
137 publisher.handlePdpUpdate(update);
140 verify(appmgr).removeUndeployedPolicy(deployed1);
141 verify(appmgr).removeUndeployedPolicy(deployed4);
144 verify(appmgr).loadDeployedPolicy(added1);
145 verify(appmgr).loadDeployedPolicy(added2);
148 verify(appmgr, never()).removeUndeployedPolicy(deployed2);
149 verify(appmgr, never()).removeUndeployedPolicy(deployed3);
150 verify(appmgr, never()).loadDeployedPolicy(deployed2);
151 verify(appmgr, never()).loadDeployedPolicy(deployed3);
153 assertEquals(NEW_COUNT, statmgr.getTotalPoliciesCount());
155 verify(client).send(status);
159 public void testHandlePdpUpdate_LoadPolicyFailed() throws XacmlApplicationException {
160 // Set loadPolicy to fail
161 doThrow(new XacmlApplicationException()).when(appmgr).loadDeployedPolicy(failPolicy1);
162 doThrow(new XacmlApplicationException()).when(appmgr).loadDeployedPolicy(failPolicy2);
164 publisher.handlePdpUpdate(failurePdpUpdate);
167 verify(appmgr).removeUndeployedPolicy(deployed1);
168 verify(appmgr).removeUndeployedPolicy(deployed4);
170 verify(failurePdpUpdate).setPolicies(any());
172 verify(state).updateInternalState(any(), startsWith("Failed to load policy"));
173 verify(client).send(status);
177 public void testHandlePdpUpdate_NullPolicies() throws XacmlApplicationException {
178 when(update.getPolicies()).thenReturn(null);
180 publisher.handlePdpUpdate(update);
183 verify(appmgr).removeUndeployedPolicy(deployed1);
184 verify(appmgr).removeUndeployedPolicy(deployed2);
185 verify(appmgr).removeUndeployedPolicy(deployed3);
186 verify(appmgr).removeUndeployedPolicy(deployed4);
189 verify(appmgr, never()).loadDeployedPolicy(any());
191 verify(client).send(status);
195 public void testHandlePdpUpdate_NullStats() {
196 XacmlPdpStatisticsManager.setCurrent(null);
198 // should work without throwing an exception
199 publisher.handlePdpUpdate(update);
201 verify(client).send(status);
205 public void testHandlePdpUpdate_SendFail() {
207 when(client.send(any())).thenReturn(false);
209 publisher.handlePdpUpdate(update);
211 verify(client).send(status);