2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2021 Bell Canada. All rights reserved.
7 * Modifications Copyright (C) 2021 Nordix Foundation.
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.policy.pap.main.rest;
25 import static org.assertj.core.api.Assertions.assertThat;
26 import static org.junit.Assert.assertFalse;
27 import static org.junit.Assert.assertTrue;
28 import static org.mockito.Mockito.when;
30 import java.util.ArrayList;
31 import java.util.Collection;
32 import java.util.Collections;
33 import java.util.Iterator;
34 import java.util.List;
35 import lombok.NonNull;
36 import org.junit.AfterClass;
37 import org.junit.Before;
38 import org.junit.Test;
39 import org.onap.policy.common.utils.services.Registry;
40 import org.onap.policy.models.base.PfModelException;
41 import org.onap.policy.models.pap.concepts.PolicyStatus;
42 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus;
43 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.PdpPolicyStatusBuilder;
44 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.State;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
48 public class TestPolicyStatusProvider extends ProviderSuper {
49 private static final String MY_GROUP = "MyGroup";
50 private static final String MY_PDP_TYPE = "MySubGroup";
51 private static final @NonNull String VERSION = "1.2.3";
52 private static final String PDP_A = "pdpA";
53 private static final String PDP_B = "pdpB";
54 private static final String PDP_C = "pdpC";
55 private static final ToscaConceptIdentifier POLICY_TYPE = new ToscaConceptIdentifier("MyPolicyType", VERSION);
56 private static final ToscaConceptIdentifier POLICY_A = new ToscaConceptIdentifier("MyPolicyA", VERSION);
57 private static final ToscaConceptIdentifier POLICY_B = new ToscaConceptIdentifier("MyPolicyB", VERSION);
58 private static final ToscaConceptIdentifier POLICY_C = new ToscaConceptIdentifier("MyPolicyC", VERSION);
60 private PolicyStatusProvider prov;
64 public static void tearDownAfterClass() {
65 Registry.newRegistry();
69 * Configures mocks and objects.
71 * @throws Exception if an error occurs
75 public void setUp() throws Exception {
79 prov = new PolicyStatusProvider();
84 public void testGetStatus_testAccumulate() throws PfModelException {
86 buildPolicyStatusToReturn1();
88 List<PolicyStatus> result = new ArrayList<>(prov.getStatus());
89 Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
91 assertThat(result).hasSize(3);
93 Iterator<PolicyStatus> iter = result.iterator();
95 PolicyStatus status = iter.next();
96 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
97 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
98 assertThat(status.getIncompleteCount()).isEqualTo(2);
99 assertThat(status.getFailureCount()).isZero();
100 assertThat(status.getSuccessCount()).isZero();
102 status = iter.next();
103 assertThat(status.getPolicy()).isEqualTo(POLICY_B);
104 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
105 assertThat(status.getIncompleteCount()).isZero();
106 assertThat(status.getFailureCount()).isZero();
107 assertThat(status.getSuccessCount()).isEqualTo(1);
109 status = iter.next();
110 assertThat(status.getPolicy()).isEqualTo(POLICY_C);
111 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
112 assertThat(status.getIncompleteCount()).isEqualTo(1);
113 assertThat(status.getFailureCount()).isZero();
114 assertThat(status.getSuccessCount()).isZero();
118 public void testGetStatusToscaConceptIdentifierOptVersion() throws PfModelException {
120 ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
122 List<PolicyStatus> result = new ArrayList<>(prov.getStatus(optIdent));
123 assertThat(result).hasSize(1);
125 Iterator<PolicyStatus> iter = result.iterator();
127 PolicyStatus status = iter.next();
128 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
129 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
130 assertThat(status.getIncompleteCount()).isEqualTo(2);
131 assertThat(status.getFailureCount()).isZero();
132 assertThat(status.getSuccessCount()).isZero();
136 public void testGetPolicyStatus() throws PfModelException {
138 buildPolicyStatusToReturn1();
140 List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus());
141 Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
143 assertThat(result).hasSize(5);
144 Iterator<PdpPolicyStatus> iter = result.iterator();
146 PdpPolicyStatus status = iter.next();
147 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
148 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
149 assertThat(status.getPdpId()).isEqualTo(PDP_A);
150 assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
151 assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
152 assertTrue(status.isDeploy());
153 assertThat(status.getState()).isEqualTo(State.WAITING);
155 status = iter.next();
156 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
157 assertThat(status.getPdpId()).isEqualTo(PDP_B);
158 assertTrue(status.isDeploy());
159 assertThat(status.getState()).isEqualTo(State.WAITING);
161 status = iter.next();
162 assertThat(status.getPolicy()).isEqualTo(POLICY_B);
163 assertThat(status.getPdpId()).isEqualTo(PDP_A);
164 assertFalse(status.isDeploy());
165 assertThat(status.getState()).isEqualTo(State.WAITING);
167 status = iter.next();
168 assertThat(status.getPolicy()).isEqualTo(POLICY_B);
169 assertThat(status.getPdpId()).isEqualTo(PDP_B);
170 assertTrue(status.isDeploy());
171 assertThat(status.getState()).isEqualTo(State.SUCCESS);
175 public void testGetPolicyStatusByGroupAndPolicyIdVersion() throws PfModelException {
177 ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
179 List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus(MY_GROUP, optIdent));
180 assertThat(result).hasSize(3);
182 Iterator<PdpPolicyStatus> iter = result.iterator();
184 PdpPolicyStatus status = iter.next();
185 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
186 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
187 assertThat(status.getPdpId()).isEqualTo(PDP_A);
188 assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
189 assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
190 assertTrue(status.isDeploy());
191 assertThat(status.getState()).isEqualTo(State.WAITING);
193 status = iter.next();
194 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
195 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
196 assertThat(status.getPdpId()).isEqualTo(PDP_B);
197 assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
198 assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
199 assertFalse(status.isDeploy());
200 assertThat(status.getState()).isEqualTo(State.FAILURE);
204 public void testGetPolicyStatusByRegexNoMatch() throws PfModelException {
205 buildPolicyStatusToReturn1();
206 final String pattern = "Hello";
208 final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
209 assertThat(actual).isEmpty();
213 public void testGetPolicyStatusOneMatch() throws PfModelException {
214 buildPolicyStatusToReturn1();
215 final String pattern = "My(We|Po)[li]{0,3}c.A";
217 final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
218 assertThat(actual).hasSize(1);
220 final String actualName = actual.iterator().next().getPolicy().getName();
221 assertThat(actualName).isEqualTo("MyPolicyA");
225 public void testGetPolicyStatusAllMatch() throws PfModelException {
226 buildPolicyStatusToReturn1();
227 final String pattern = "My(We|Po)[li]{0,3}c.{2}0*";
229 final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
231 assertThat(actual).hasSize(3);
234 private void buildPolicyStatusToReturn1() throws PfModelException {
236 PdpPolicyStatusBuilder builder = PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE)
237 .policyType(POLICY_TYPE).state(State.WAITING);
239 PdpPolicyStatus notDeployed = builder.deploy(false).policy(POLICY_B).pdpId(PDP_A).build();
241 // remaining policies are deployed
242 builder.deploy(true);
245 when(dao.getAllPolicyStatus()).thenReturn(List.of(
246 builder.policy(POLICY_A).pdpId(PDP_A).build(),
247 builder.policy(POLICY_A).pdpId(PDP_B).build(),
249 builder.policy(POLICY_C).pdpId(PDP_A).build(),
250 builder.policy(POLICY_B).pdpId(PDP_B).state(State.SUCCESS).build()
255 private ToscaConceptIdentifierOptVersion buildPolicyStatusToReturn2() throws PfModelException {
256 PdpPolicyStatusBuilder builder =
257 PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE).policy(POLICY_A).policyType(POLICY_TYPE);
259 PdpPolicyStatus notDeployed = builder.deploy(false).pdpId(PDP_B).state(State.FAILURE).build();
261 // remaining policies are deployed
262 builder.deploy(true).state(State.WAITING);
264 ToscaConceptIdentifierOptVersion optIdent = new ToscaConceptIdentifierOptVersion(POLICY_A);
267 when(dao.getAllPolicyStatus(optIdent)).thenReturn(List.of(
268 builder.policy(POLICY_A).pdpId(PDP_A).build(),
270 builder.policy(POLICY_A).pdpId(PDP_C).build()